Skip to content

Commit

Permalink
Assign number trivia to enum cases. Fixes #1006. (#1008)
Browse files Browse the repository at this point in the history
  • Loading branch information
nojaf committed Aug 19, 2020
1 parent 44eaf09 commit 29b901f
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 6 deletions.
14 changes: 14 additions & 0 deletions src/Fantomas.Tests/UnionTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -381,3 +381,17 @@ type MyEnum =
| ``test-one`` of int
| ``test-two`` of string
"""

[<Test>]
let ``hexadecimal numbers in enums, 1006`` () =
formatSourceString false """
type Foo =
| One = 0x00000001
| Two = 0x00000002
""" config
|> prepend newline
|> should equal """
type Foo =
| One = 0x00000001
| Two = 0x00000002
"""
9 changes: 8 additions & 1 deletion src/Fantomas/TokenParser.fs
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,13 @@ let private getRangeBetween name startToken endToken =
let endR = FSharp.Compiler.Range.mkPos endToken.LineNumber (if l=r then r+1 else r)
FSharp.Compiler.Range.mkRange name start endR

let private getRangeForSingleToken name token =
let l = token.TokenInfo.LeftColumn
let r = l + token.TokenInfo.FullMatchedLength
let start = FSharp.Compiler.Range.mkPos token.LineNumber l
let endR = FSharp.Compiler.Range.mkPos token.LineNumber r
FSharp.Compiler.Range.mkRange name start endR

let private hasOnlySpacesAndLineCommentsOnLine lineNumber tokens =
if List.isEmpty tokens then
false
Expand Down Expand Up @@ -423,7 +430,7 @@ let rec private getTriviaFromTokensThemSelves (allTokens: Token list) (tokens: T
getTriviaFromTokensThemSelves allTokens rest info

| head::rest when (isNumber head) ->
let range = getRangeBetween "number" head head
let range = getRangeForSingleToken "number" head
let info =
Trivia.Create (Number(head.Content)) range
|> List.prependItem foundTrivia
Expand Down
15 changes: 10 additions & 5 deletions src/Fantomas/Trivia.fs
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,17 @@ let private findNodeAfterLineAndColumn (nodes: TriviaNodeAssigner list) line col
(range.StartLine > line) || (range.StartLine = line && range.StartColumn > column)
)

let private findConstNodeOnLineAndColumn (nodes: TriviaNodeAssigner list) line column =
let private findConstNodeOnLineAndColumn (nodes: TriviaNodeAssigner list) (numberRange:range) =
nodes
|> List.tryFind (fun tn ->
match tn.Type, line = tn.Range.StartLine, column = tn.Range.StartColumn with
| MainNode("SynExpr.Const"), true, true -> true
| MainNode("SynPat.Const"), true, true -> true
match tn.Type with
| MainNode("SynExpr.Const")
| MainNode("SynPat.Const") ->
numberRange.StartLine = tn.Range.StartLine
&& numberRange.StartColumn = tn.Range.StartColumn
| MainNode("EnumCase") ->
tn.Range.EndLine = numberRange.EndLine
&& tn.Range.EndColumn = numberRange.EndColumn
| _ -> false
)

Expand Down Expand Up @@ -344,7 +349,7 @@ let private addTriviaToTriviaNode
|> updateTriviaNode (fun tn -> tn.ContentItself <- Some siNode) triviaNodes

| { Item = Number(_) as number; Range = range } ->
findConstNodeOnLineAndColumn triviaNodes range.StartLine range.StartColumn
findConstNodeOnLineAndColumn triviaNodes range
|> updateTriviaNode (fun tn -> tn.ContentItself <- Some number) triviaNodes

| { Item = CharContent(_) as chNode; Range = range } ->
Expand Down

0 comments on commit 29b901f

Please sign in to comment.