This commit changes infix patterns to utilize `lrdrNameToTextAnn`. This
function allows the logic to avoid introspecting on the constructor
name.
Additionally this adds spaces to all infix operator pattern matches.
Previously infix symbols did not include spaces:
```
foo (x:xs) = _
```
Now they include a space
```
foo (x : xs) = _
```
Brittany was previously only support symbol based infix constructors. It
is common in some libraries (for example Esqueleto) to pattern match on
normal constructors as infix. Brittany was failing in this case by not
wrapping the constructor name in back ticks/spaces. Backticks and spaces
have been added in the case where the constructor contains any alpha
characters.
The following is wasteful of vertical space:
```
_ =
let
longIdentifierForShortValue = 1
in
longIdentifierForShortValue + longIdentifierForShortValue
```
We should format it on two lines if possible.
```
_ =
let longIdentifierForShortValue = 1
in longIdentifierForShortValue + longIdentifierForShortValue
```
This commit also allows for a mix of variations:
```
_ =
let
longIdentifierForShortValue = 1
in longIdentifierForShortValue + longIdentifierForShortValue
_ =
let longIdentifierForShortValue = 1
in
longIdentifierForShortValue + longIdentifierForShortValue
```
Left indent combined with no columnized alignment represents a context
free formatting style for brittany. These tests allow this format to be
tested until inline formatting tools are available to make these files
less redundant.
This fix does not work on ghc-8.0, because I do not understand
the 8.0 API in this instance. Could be resolved by looking
at annotations, but that really should not be necessary.
- one-line externals are not detected as multiline in backend
- layouting of EAsPat (when TypeApplications is disabled)
- layouting of HsTyLit (TypeApplications with literals)
Prevent single-line layout when it would not even be
a single line due to a comment.
This patch might be a bit over-eager in at least one
case (I think you'd get a two-line layout with a
multiway-if and a comment _after_ the where binding).