git.iko.soy/rowtype-yoga/pose
on main help sign in
Allow newline after equals
commitc8c2ab01837e4a31202e7a91d889be6d12bf62e2 authorMark Eibes <mark.eibes@gmail.com> dateSun 4 Jul 2021, 23:57 (5 years ago) parent7392737
5 files changed+32−34
packages/core/src/Format.purs+22−33 packages/core/testfiles/golden/Guards.purs+2−1 packages/core/testfiles/golden/ParenthesizedFunctions.purs+3 packages/core/testfiles/original/DataWithParameters.purs+2 packages/core/testfiles/original/ParenthesizedFunctions.purs+3
packages/core/src/Format.purs+22−33
@@ -57,10 +57,8 @@ singleOrMultilineFromRange { start, end } = if start.line == end.line then Singl
5757
5858singleOrMultilineBetween ∷ ∀ a b. RangeOf a ⇒ RangeOf b ⇒ a → b → Lines
5959singleOrMultilineBetween a b = do
60− let
61− { start } = rangeOf a
62− let
63− { end } = rangeOf b
60+ let { start } = rangeOf a
61+ let { end } = rangeOf b
6462 singleOrMultilineFromRange { start, end }
6563
6664rangeOfInstanceHead ∷ CST.InstanceHead Void → Lines
@@ -78,7 +76,6 @@ rangeOfPatternGuard ∷ (CST.PatternGuard Void) → CST.SourceRange
7876rangeOfPatternGuard (CST.PatternGuard { binder, expr }) = do
7977 let
8078 { start } = maybe (rangeOf expr) (fst >>> rangeOf) binder
81−
8279 { end } = rangeOf expr
8380 { start, end }
8481
@@ -89,10 +86,8 @@ rangeOfSeparated ∷
8986 CST.SourceRange
9087rangeOfSeparated f separated = case separated of
9188 CST.Separated { head, tail } → do
92− let
93− headRange = f head
94− let
95− tailRange = maybe headRange f (Array.last tail <#> snd)
89+ let headRange = f head
90+ let tailRange = maybe headRange f (Array.last tail <#> snd)
9691 { start: headRange.start, end: tailRange.end }
9792
9893format ∷ Settings → CST.Module Void → String
@@ -121,7 +116,6 @@ formatExports settings@{ indentation } exports'' = case exports'' of
121116 Just exports' → do
122117 let
123118 indent = indentation
124−
125119 prefix = case lines of
126120 MultipleLines → newline <> indent
127121 SingleLine → space
@@ -178,8 +172,7 @@ formatImports ∷
178172formatImports settings imports' = case imports' of
179173 [] → blank
180174 _ → do
181− let
182− indent = blank
175+ let indent = blank
183176 foldMap
184177 ( \importDecl →
185178 newline
@@ -195,25 +188,21 @@ formatImportDeclaration ∷
195188 String
196189formatImportDeclaration settings@{ indentation } indent'' importDecl' = case importDecl' of
197190 CST.ImportDecl { keyword: import'', module: name'', names: imports'', qualified: rename } → do
198− let
199− span = singleOrMultiline importDecl'
200− let
201− indent' = indent'' <> indentation
191+ let span = singleOrMultiline importDecl'
192+ let indent' = indent'' <> indentation
202193 formatSourceToken settings indent'' blank import''
203194 <> formatName settings indent'' space name''
204195 <> foldMap
205196 ( \(hiding' /\ imports') → case hiding' of
206197 Just hiding → do
207198 let
199+ indent = indent' <> indentation
208200 hidingPrefix = case span of
209201 MultipleLines → newline <> indent'
210202 SingleLine → space
211−
212203 importPrefix = case span of
213204 MultipleLines → newline <> indent
214205 SingleLine → space
215−
216− indent = indent' <> indentation
217206 hidingPrefix
218207 <> formatSourceToken settings indent' blank hiding
219208 <> importPrefix
@@ -431,7 +420,6 @@ formatDeclaration settings@{ indentation } indent followedByBlankLines declarati
431420 CST.DeclError e → absurd e
432421 where
433422 indented = indent <> indentation
434−
435423 lines = singleOrMultiline declaration
436424
437425formatRole ∷
@@ -635,13 +623,10 @@ formatBinder settings@{ indentation } indent' binder = case binder of
635623 formatBinder (settings { indentation = indent' }) prefix binder1
636624 <> foldMap formatNamedBinder binders
637625 where
638−
639626 indentTrick = indent' <> indentation
640−
641627 indent /\ prefix = case lines of
642628 MultipleLines → indentTrick /\ (newline <> indentTrick)
643629 SingleLine → indent' /\ space
644−
645630 formatNamedBinder (name /\ binder) =
646631 formatQualifiedName settings indent' prefix name
647632 <> prefix
@@ -663,7 +648,6 @@ formatBinder settings@{ indentation } indent' binder = case binder of
663648 CST.BinderTyped binder' colons type'' → do
664649 let
665650 indentTrick = indent' <> indentation
666−
667651 indent /\ prefix = case lines of
668652 MultipleLines → indentTrick /\ (newline <> indentTrick)
669653 SingleLine → indent' /\ space
@@ -671,7 +655,7 @@ formatBinder settings@{ indentation } indent' binder = case binder of
671655 <> formatSourceToken settings indent' space colons
672656 <> prefix
673657 <> formatType settings indent lines type''
674− CST.BinderVar name' → formatName settings indent' blank name'
658+ CST.BinderVar name → formatName settings indent' blank name
675659 CST.BinderWildcard wildcard → formatSourceToken settings indent' blank wildcard
676660 CST.BinderInt negative int _ →
677661 foldMap (formatSourceToken settings indent' blank) negative
@@ -687,8 +671,7 @@ formatGuarded ∷
687671 String
688672formatGuarded settings@{ indentation } indent' = case _ of
689673 CST.Guarded guardedExprs → do
690− let
691− indent = indent' <> indentation
674+ let indent = indent' <> indentation
692675 foldMap
693676 ( \guardedExpr →
694677 (newline <> indent)
@@ -699,17 +682,20 @@ formatGuarded settings@{ indentation } indent' = case _ of
699682 formatSourceToken settings indent' space separator
700683 <> formatWhere settings indent' whereToken
701684
685+-- | This is also regular expressions that *can* have a where
702686formatWhere ∷
703687 Settings →
704688 Indent →
705689 CST.Where Void →
706690 String
707691formatWhere settings@{ indentation } indent' (CST.Where { expr: expr', bindings: letBindings'' }) = do
708− formatExprPrefix (singleOrMultiline expr') settings indent' expr'
692+ formatExprPrefix exprLines settings indent' expr'
709693 <> foldMap formatWhereAndBindings letBindings''
710694 where
695+ exprLines = case expr' of
696+ CST.ExprChar _ _ → singleOrMultiline expr' -- [FIXME] Chars are weird
697+ _ → if isPrecededByNewline expr' then MultipleLines else singleOrMultiline expr'
711698 indent = indent' <> indentation
712−
713699 formatWhereAndBindings (where'' /\ letBindings') = do
714700 (wherePrefix <> newline <> indent)
715701 <> formatSourceToken settings indent blank where''
@@ -718,7 +704,6 @@ formatWhere settings@{ indentation } indent' (CST.Where { expr: expr', bindings:
718704 <> (formatLetBindings settings indent) letBindings'
719705 where
720706 wherePrefix = if precedingEmptyLines where''.leadingComments > 1 then newline else blank
721−
722707 whereSuffix =
723708 if isPrecededByBlankLines (NE.head letBindings') then
724709 newline
@@ -859,9 +844,12 @@ formatExpr settings@{ indentation } indent'' expr'' = case expr'' of
859844 CST.ExprAdo adoBlock' → formatAdoBlock lines settings indent'' adoBlock'
860845 CST.ExprApp expr1 expressions → -- [CHECK] Verify
861846 formatExpr settings indent'' expr1
862− <> foldMap formatApp expressions
847+ <> foldMap formatApp
848+ (NE.zip (NE.cons expr1 expressions) expressions)
863849 where
864− formatApp curr = (formatExprPrefix (singleOrMultilineBetween expr1 curr) settings indent'' curr)
850+ formatApp (prev /\ curr) = formatExprPrefix appLines settings indent'' curr
851+ where
852+ appLines = singleOrMultilineBetween prev curr
865853 CST.ExprArray delimited' → do
866854 let
867855 indent' = case lines of
@@ -1691,7 +1679,8 @@ formatSeparated ∷
16911679 (a → String) →
16921680 CST.Separated a →
16931681 String
1694−formatSeparated settings lines indent prefix' formatValue (CST.Separated { head, tail }) = formatValue head <> foldMap go tail
1682+formatSeparated settings lines indent prefix' formatValue (CST.Separated { head, tail }) = do
1683+ formatValue head <> foldMap go tail
16951684 where
16961685 prefix = case lines of
16971686 MultipleLines → newline <> indent
packages/core/testfiles/golden/Guards.purs+2−1
@@ -10,7 +10,8 @@ altAppend as bs
1010 , Segment pre' b <- NEA.head bs
1111 , pre == pre' =
1212 let
13− bs' = NEA.cons' (Segment pre (a <|> b)) (NEA.tail bs)
13+ bs' =
14+ NEA.cons' (Segment pre (a <|> b)) (NEA.tail bs)
1415 in
1516 case NEA.fromArray (NEA.init as) of
1617 Just as' -> as' `altAppend` bs'
packages/core/testfiles/golden/ParenthesizedFunctions.purs+3
@@ -13,3 +13,6 @@ y f x = { expected, unexpected }
1313 expected = result.expected
1414 result = f x
1515 unexpected = result.unexpected
16+
17+z =
18+ 12
packages/core/testfiles/original/DataWithParameters.purs+2
@@ -7,4 +7,6 @@ data Bar a b c = Bar a -- This is a comment
77 | Baz Int
88 | Qux (Foo a) (Bar a b c)
99
10+
11+
1012data Gar a b = Gar a | Ply b
packages/core/testfiles/original/ParenthesizedFunctions.purs+3
@@ -13,3 +13,6 @@ y f x = { expected, unexpected }
1313 expected = result.expected
1414 result = f x
1515 unexpected = result.unexpected
16+
17+z =
18+ 12