Skip to content

Commit ed8ea48

Browse files
committed
Don't add a space for prefixed new index syntax (#2545)
* Don't add a space for prefixed new index syntax. * Refactor to use genArrayOrListOpeningToken helper.
1 parent 351131e commit ed8ea48

File tree

3 files changed

+76
-59
lines changed

3 files changed

+76
-59
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
# Changelog
22

3-
## Unreleased
3+
## [5.1.0-alpha-003] - 2022-10-02
44

55
### Changed
66
* Function call with parenthesis around function name. [#2382](https://github.com/fsprojects/fantomas/issues/2382)
7+
* Spaces added inside new index syntax. [#2494](https://github.com/fsprojects/fantomas/issues/2494)
78

89
## [5.1.0-alpha-002] - 2022-09-29
910

src/Fantomas.Core.Tests/IndexSyntaxTests.fs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,20 @@ let meh = myList[0][1][2]
235235
"""
236236
let meh = myList[0][1][2]
237237
"""
238+
239+
[<Test>]
240+
let ``prefixed index syntax, 2494`` () =
241+
formatSourceString
242+
false
243+
"""
244+
b[c] <- d
245+
a.b[c] <- d
246+
"""
247+
config
248+
|> prepend newline
249+
|> should
250+
equal
251+
"""
252+
b[c] <- d
253+
a.b[c] <- d
254+
"""

src/Fantomas.Core/CodePrinter.fs

Lines changed: 57 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,23 +1005,13 @@ and genExpr astContext synExpr ctx =
10051005
| Tuple (es, _) -> genTuple astContext es
10061006
| StructTuple es -> !- "struct " +> sepOpenT +> genTuple astContext es +> sepCloseT
10071007
| ArrayOrList (sr, isArray, [], er, _) ->
1008-
ifElse
1009-
isArray
1010-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter sr sepOpenAFixed
1011-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter er sepCloseAFixed)
1012-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter sr sepOpenLFixed
1013-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter er sepCloseLFixed)
1008+
genArrayOrListOpeningToken isArray true sr
1009+
+> genArrayOrListClosingToken isArray true er
10141010
| ArrayOrList (openingTokenRange, isArray, xs, closingTokenRange, _) ->
10151011
let smallExpression =
1016-
ifElse
1017-
isArray
1018-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenA)
1019-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenL)
1012+
genArrayOrListOpeningToken isArray false openingTokenRange
10201013
+> col sepSemi xs (genExpr astContext)
1021-
+> ifElse
1022-
isArray
1023-
(genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseA)
1024-
(genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseL)
1014+
+> genArrayOrListClosingToken isArray false closingTokenRange
10251015

10261016
let multilineExpression =
10271017
ifAlignBrackets
@@ -1927,7 +1917,7 @@ and genExpr astContext synExpr ctx =
19271917
| OptVar (isOpt, sli, _) -> ifElse isOpt (!- "?") sepNone +> genSynLongIdent false sli
19281918
| LongIdentSet (sli, e, _) ->
19291919
genSynLongIdent false sli
1930-
+> !- " <- "
1920+
+> sepArrowRev
19311921
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e
19321922
| DotIndexedGet (App (e, [ ConstExpr (SynConst.Unit, _) as ux ]), indexArgs) ->
19331923
genExpr astContext e
@@ -1996,6 +1986,16 @@ and genExpr astContext synExpr ctx =
19961986
+> genExpr astContext indexArgs
19971987
+> !- "] <- "
19981988
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) valueExpr
1989+
1990+
// a.b[c] <- d
1991+
| NamedIndexedPropertySet (sli, ArrayOrList (sr, isArray, [ e1 ], er, range), e2) ->
1992+
genSynLongIdent false sli
1993+
+> genArrayOrListOpeningToken isArray true sr
1994+
+> genExpr astContext e1
1995+
+> genArrayOrListClosingToken isArray true er
1996+
+> sepArrowRev
1997+
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
1998+
19991999
| NamedIndexedPropertySet (sli, e1, e2) ->
20002000
let sep =
20012001
match e1 with
@@ -2006,14 +2006,15 @@ and genExpr astContext synExpr ctx =
20062006
genSynLongIdent false sli
20072007
+> sep
20082008
+> genExpr astContext e1
2009-
+> !- " <- "
2009+
+> sepArrowRev
20102010
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
2011+
20112012
| DotNamedIndexedPropertySet (e, sli, e1, e2) ->
20122013
genExpr astContext e
20132014
+> sepDot
20142015
+> genSynLongIdent false sli
20152016
+> genExpr astContext e1
2016-
+> !- " <- "
2017+
+> sepArrowRev
20172018
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
20182019

20192020
// typeof<System.Collections.IEnumerable>.FullName
@@ -2037,12 +2038,12 @@ and genExpr astContext synExpr ctx =
20372038
addParenIfAutoNln e1 (genExpr astContext)
20382039
+> sepDot
20392040
+> genSynLongIdent false sli
2040-
+> !- " <- "
2041+
+> sepArrowRev
20412042
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e2
20422043

20432044
| SynExpr.Set (e1, e2, _) ->
20442045
addParenIfAutoNln e1 (genExpr astContext)
2045-
+> !- " <- "
2046+
+> sepArrowRev
20462047
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e2
20472048

20482049
| ParsingError r ->
@@ -2237,6 +2238,24 @@ and genExpr astContext synExpr ctx =
22372238

22382239
expr ctx
22392240

2241+
and genArrayOrListOpeningToken isArray isFixed openingTokenRange =
2242+
if isArray then
2243+
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange (ifElse isFixed sepOpenAFixed sepOpenA)
2244+
else
2245+
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange (ifElse isFixed sepOpenLFixed sepOpenL)
2246+
2247+
and genArrayOrListClosingTokenAux closingTokenRange f =
2248+
genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange f
2249+
2250+
and genArrayOrListClosingToken isArray isFixed closingTokenRange =
2251+
let f =
2252+
if isArray then
2253+
(ifElse isFixed sepCloseAFixed sepCloseA)
2254+
else
2255+
(ifElse isFixed sepCloseLFixed sepCloseL)
2256+
2257+
genArrayOrListClosingTokenAux closingTokenRange f
2258+
22402259
and genOnelinerInfixExpr astContext e1 operatorSli e2 =
22412260
let genExpr astContext e =
22422261
match e with
@@ -2625,48 +2644,28 @@ and genMultiLineArrayOrList
26252644
(openingTokenRange: Range)
26262645
(closingTokenRange: Range)
26272646
(astContext: ASTContext)
2628-
ctx
26292647
=
2630-
if isArray then
2631-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenA
2632-
+> atCurrentColumnIndent (
2633-
sepNlnWhenWriteBeforeNewlineNotEmpty
2634-
+> col sepNln xs (genExpr astContext)
2635-
+> genTriviaFor
2636-
SynExpr_ArrayOrList_ClosingDelimiter
2637-
closingTokenRange
2638-
(ifElseCtx lastWriteEventIsNewline sepCloseAFixed sepCloseA)
2639-
))
2640-
ctx
2641-
else
2642-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenL
2643-
+> atCurrentColumnIndent (
2644-
sepNlnWhenWriteBeforeNewlineNotEmpty
2645-
+> col sepNln xs (genExpr astContext)
2646-
+> genTriviaFor
2647-
SynExpr_ArrayOrList_ClosingDelimiter
2648-
closingTokenRange
2649-
(ifElseCtx lastWriteEventIsNewline sepCloseLFixed sepCloseL)
2650-
))
2651-
ctx
2648+
genArrayOrListOpeningToken isArray false openingTokenRange
2649+
+> atCurrentColumnIndent (
2650+
sepNlnWhenWriteBeforeNewlineNotEmpty
2651+
+> col sepNln xs (genExpr astContext)
2652+
+> (genArrayOrListClosingTokenAux closingTokenRange (fun ctx ->
2653+
let isFixed = lastWriteEventIsNewline ctx
2654+
2655+
if isArray && isFixed then sepCloseAFixed ctx
2656+
elif isArray then sepCloseA ctx
2657+
elif isFixed then sepCloseLFixed ctx
2658+
else sepCloseL ctx))
2659+
)
26522660

26532661
and genMultiLineArrayOrListAlignBrackets (isArray: bool) xs openingTokenRange closingTokenRange astContext =
2654-
if isArray then
2655-
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenAFixed
2656-
+> indent
2657-
+> sepNlnUnlessLastEventIsNewline
2658-
+> col sepNln xs (genExpr astContext)
2659-
+> unindent
2660-
+> sepNlnUnlessLastEventIsNewline
2661-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseAFixed
2662-
else
2663-
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenLFixed
2664-
+> indent
2665-
+> sepNlnUnlessLastEventIsNewline
2666-
+> col sepNln xs (genExpr astContext)
2667-
+> unindent
2668-
+> sepNlnUnlessLastEventIsNewline
2669-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseLFixed
2662+
genArrayOrListOpeningToken isArray true openingTokenRange
2663+
+> indent
2664+
+> sepNlnUnlessLastEventIsNewline
2665+
+> col sepNln xs (genExpr astContext)
2666+
+> unindent
2667+
+> sepNlnUnlessLastEventIsNewline
2668+
+> genArrayOrListClosingToken isArray true closingTokenRange
26702669

26712670
and genApp astContext e es ctx =
26722671
let shortExpression =

0 commit comments

Comments
 (0)