Skip to content

Commit 2a93e46

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 67f6c28 commit 2a93e46

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
@@ -1011,23 +1011,13 @@ and genExpr astContext synExpr ctx =
10111011
| Tuple (es, _) -> genTuple astContext es
10121012
| StructTuple es -> !- "struct " +> sepOpenT +> genTuple astContext es +> sepCloseT
10131013
| ArrayOrList (sr, isArray, [], er, _) ->
1014-
ifElse
1015-
isArray
1016-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter sr sepOpenAFixed
1017-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter er sepCloseAFixed)
1018-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter sr sepOpenLFixed
1019-
+> genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter er sepCloseLFixed)
1014+
genArrayOrListOpeningToken isArray true sr
1015+
+> genArrayOrListClosingToken isArray true er
10201016
| ArrayOrList (openingTokenRange, isArray, xs, closingTokenRange, _) ->
10211017
let smallExpression =
1022-
ifElse
1023-
isArray
1024-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenA)
1025-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenL)
1018+
genArrayOrListOpeningToken isArray false openingTokenRange
10261019
+> col sepSemi xs (genExpr astContext)
1027-
+> ifElse
1028-
isArray
1029-
(genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseA)
1030-
(genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange sepCloseL)
1020+
+> genArrayOrListClosingToken isArray false closingTokenRange
10311021

10321022
let multilineExpression =
10331023
ifAlignBrackets
@@ -1933,7 +1923,7 @@ and genExpr astContext synExpr ctx =
19331923
| OptVar (isOpt, sli, _) -> ifElse isOpt (!- "?") sepNone +> genSynLongIdent false sli
19341924
| LongIdentSet (sli, e, _) ->
19351925
genSynLongIdent false sli
1936-
+> !- " <- "
1926+
+> sepArrowRev
19371927
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e
19381928
| DotIndexedGet (App (e, [ ConstExpr (SynConst.Unit, _) as ux ]), indexArgs) ->
19391929
genExpr astContext e
@@ -2002,6 +1992,16 @@ and genExpr astContext synExpr ctx =
20021992
+> genExpr astContext indexArgs
20031993
+> !- "] <- "
20041994
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) valueExpr
1995+
1996+
// a.b[c] <- d
1997+
| NamedIndexedPropertySet (sli, ArrayOrList (sr, isArray, [ e1 ], er, range), e2) ->
1998+
genSynLongIdent false sli
1999+
+> genArrayOrListOpeningToken isArray true sr
2000+
+> genExpr astContext e1
2001+
+> genArrayOrListClosingToken isArray true er
2002+
+> sepArrowRev
2003+
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
2004+
20052005
| NamedIndexedPropertySet (sli, e1, e2) ->
20062006
let sep =
20072007
match e1 with
@@ -2012,14 +2012,15 @@ and genExpr astContext synExpr ctx =
20122012
genSynLongIdent false sli
20132013
+> sep
20142014
+> genExpr astContext e1
2015-
+> !- " <- "
2015+
+> sepArrowRev
20162016
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
2017+
20172018
| DotNamedIndexedPropertySet (e, sli, e1, e2) ->
20182019
genExpr astContext e
20192020
+> sepDot
20202021
+> genSynLongIdent false sli
20212022
+> genExpr astContext e1
2022-
+> !- " <- "
2023+
+> sepArrowRev
20232024
+> autoIndentAndNlnIfExpressionExceedsPageWidth (genExpr astContext e2)
20242025

20252026
// typeof<System.Collections.IEnumerable>.FullName
@@ -2043,12 +2044,12 @@ and genExpr astContext synExpr ctx =
20432044
addParenIfAutoNln e1 (genExpr astContext)
20442045
+> sepDot
20452046
+> genSynLongIdent false sli
2046-
+> !- " <- "
2047+
+> sepArrowRev
20472048
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e2
20482049

20492050
| SynExpr.Set (e1, e2, _) ->
20502051
addParenIfAutoNln e1 (genExpr astContext)
2051-
+> !- " <- "
2052+
+> sepArrowRev
20522053
+> autoIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup (genExpr astContext) e2
20532054

20542055
| ParsingError r ->
@@ -2245,6 +2246,24 @@ and genExpr astContext synExpr ctx =
22452246

22462247
expr ctx
22472248

2249+
and genArrayOrListOpeningToken isArray isFixed openingTokenRange =
2250+
if isArray then
2251+
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange (ifElse isFixed sepOpenAFixed sepOpenA)
2252+
else
2253+
genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange (ifElse isFixed sepOpenLFixed sepOpenL)
2254+
2255+
and genArrayOrListClosingTokenAux closingTokenRange f =
2256+
genTriviaFor SynExpr_ArrayOrList_ClosingDelimiter closingTokenRange f
2257+
2258+
and genArrayOrListClosingToken isArray isFixed closingTokenRange =
2259+
let f =
2260+
if isArray then
2261+
(ifElse isFixed sepCloseAFixed sepCloseA)
2262+
else
2263+
(ifElse isFixed sepCloseLFixed sepCloseL)
2264+
2265+
genArrayOrListClosingTokenAux closingTokenRange f
2266+
22482267
and genOnelinerInfixExpr astContext e1 operatorSli e2 =
22492268
let genExpr astContext e =
22502269
match e with
@@ -2627,48 +2646,28 @@ and genMultiLineArrayOrList
26272646
(openingTokenRange: Range)
26282647
(closingTokenRange: Range)
26292648
(astContext: ASTContext)
2630-
ctx
26312649
=
2632-
if isArray then
2633-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenA
2634-
+> atCurrentColumnIndent (
2635-
sepNlnWhenWriteBeforeNewlineNotEmpty
2636-
+> col sepNln xs (genExpr astContext)
2637-
+> genTriviaFor
2638-
SynExpr_ArrayOrList_ClosingDelimiter
2639-
closingTokenRange
2640-
(ifElseCtx lastWriteEventIsNewline sepCloseAFixed sepCloseA)
2641-
))
2642-
ctx
2643-
else
2644-
(genTriviaFor SynExpr_ArrayOrList_OpeningDelimiter openingTokenRange sepOpenL
2645-
+> atCurrentColumnIndent (
2646-
sepNlnWhenWriteBeforeNewlineNotEmpty
2647-
+> col sepNln xs (genExpr astContext)
2648-
+> genTriviaFor
2649-
SynExpr_ArrayOrList_ClosingDelimiter
2650-
closingTokenRange
2651-
(ifElseCtx lastWriteEventIsNewline sepCloseLFixed sepCloseL)
2652-
))
2653-
ctx
2650+
genArrayOrListOpeningToken isArray false openingTokenRange
2651+
+> atCurrentColumnIndent (
2652+
sepNlnWhenWriteBeforeNewlineNotEmpty
2653+
+> col sepNln xs (genExpr astContext)
2654+
+> (genArrayOrListClosingTokenAux closingTokenRange (fun ctx ->
2655+
let isFixed = lastWriteEventIsNewline ctx
2656+
2657+
if isArray && isFixed then sepCloseAFixed ctx
2658+
elif isArray then sepCloseA ctx
2659+
elif isFixed then sepCloseLFixed ctx
2660+
else sepCloseL ctx))
2661+
)
26542662

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

26732672
and genApp astContext e es ctx =
26742673
let shortExpression =

0 commit comments

Comments
 (0)