From 00be0f6463121fbea29b5e64f1b2f162943060a0 Mon Sep 17 00:00:00 2001 From: nojaf Date: Sun, 4 Apr 2021 20:40:39 +0200 Subject: [PATCH] Add DOLLAR token to FsTokenType. Fixes #1598. --- src/Fantomas.Tests/OperatorTests.fs | 19 +++++++ src/Fantomas/TokenParser.fs | 81 +++++++++++++++-------------- src/Fantomas/TriviaTypes.fs | 81 +++++++++++++++-------------- 3 files changed, 101 insertions(+), 80 deletions(-) diff --git a/src/Fantomas.Tests/OperatorTests.fs b/src/Fantomas.Tests/OperatorTests.fs index 18b0700628..2b663ceb0d 100644 --- a/src/Fantomas.Tests/OperatorTests.fs +++ b/src/Fantomas.Tests/OperatorTests.fs @@ -1068,3 +1068,22 @@ let expected = | None -> 0 |> id """ + +[] +let ``dollar in custom operator, 1598`` () = + formatSourceString + false + """ +/// Destructure and apply a tuple to an arbitrary value. +/// E.g. `myFn $ (arg1, arg2)` in JS becomes `myFn(arg1, arg2)` +let ($) (callee: obj) (args: obj): 'a = jsNative +""" + config + |> prepend newline + |> should + equal + """ +/// Destructure and apply a tuple to an arbitrary value. +/// E.g. `myFn $ (arg1, arg2)` in JS becomes `myFn(arg1, arg2)` +let ($) (callee: obj) (args: obj) : 'a = jsNative +""" diff --git a/src/Fantomas/TokenParser.fs b/src/Fantomas/TokenParser.fs index cf9b9ffcce..8728b93061 100644 --- a/src/Fantomas/TokenParser.fs +++ b/src/Fantomas/TokenParser.fs @@ -1027,55 +1027,56 @@ let private tokenKinds = [ FSharpTokenCharKind.Operator ] let internal getFsToken tokenName = match tokenName with - | "LBRACE" -> LBRACE - | "RBRACE" -> RBRACE - | "LPAREN" -> LPAREN - | "RPAREN" -> RPAREN - | "LBRACK" -> LBRACK - | "RBRACK" -> RBRACK - | "LBRACK_BAR" -> LBRACK_BAR + | "AMP" -> AMP + | "AMP_AMP" -> AMP_AMP + | "AND_BANG" -> AND_BANG + | "BAR" -> BAR + | "BAR_BAR" -> BAR_BAR | "BAR_RBRACK" -> BAR_RBRACK - | "EQUALS" -> EQUALS - | "IF" -> IF - | "THEN" -> THEN - | "ELSE" -> ELSE + | "COLON_COLON" -> COLON_COLON + | "COLON_EQUALS" -> COLON_EQUALS + | "COLON_GREATER" -> COLON_GREATER + | "COLON_QMARK" -> COLON_QMARK + | "COLON_QMARK_GREATER" -> COLON_QMARK_GREATER + | "DELAYED" -> DELAYED + | "DO" -> DO + | "DOLLAR" -> DOLLAR + | "DOT_DOT" -> DOT_DOT + | "DOT_DOT_HAT" -> DOT_DOT_HAT | "ELIF" -> ELIF - | "BAR" -> BAR - | "RARROW" -> RARROW - | "TRY" -> TRY + | "ELSE" -> ELSE + | "EQUALS" -> EQUALS | "FINALLY" -> FINALLY - | "WITH" -> WITH - | "MEMBER" -> MEMBER - | "AND_BANG" -> AND_BANG - | "PERCENT_OP" -> PERCENT_OP - | "AMP" -> AMP + | "FUNCTION" -> FUNCTION + | "GREATER" -> GREATER + | "IF" -> IF + | "IN" -> IN + | "INFIX_AMP_OP" -> INFIX_AMP_OP | "INFIX_BAR_OP" -> INFIX_BAR_OP | "INFIX_COMPARE_OP" -> INFIX_COMPARE_OP - | "LESS" -> LESS - | "AMP_AMP" -> AMP_AMP - | "GREATER" -> GREATER | "INFIX_STAR_DIV_MOD_OP" -> INFIX_STAR_DIV_MOD_OP - | "DELAYED" -> DELAYED - | "PLUS_MINUS_OP" -> PLUS_MINUS_OP - | "QMARK" -> QMARK - | "MINUS" -> MINUS - | "COLON_QMARK" -> COLON_QMARK - | "DOT_DOT" -> DOT_DOT - | "INT32_DOT_DOT" -> INT32_DOT_DOT - | "COLON_EQUALS" -> COLON_EQUALS - | "PREFIX_OP" -> PREFIX_OP - | "INFIX_AMP_OP" -> INFIX_AMP_OP - | "COLON_QMARK_GREATER" -> COLON_QMARK_GREATER - | "COLON_COLON" -> COLON_COLON - | "COLON_GREATER" -> COLON_GREATER - | "DOT_DOT_HAT" -> DOT_DOT_HAT - | "BAR_BAR" -> BAR_BAR | "INFIX_STAR_STAR_OP" -> INFIX_STAR_STAR_OP - | "FUNCTION" -> FUNCTION + | "INT32_DOT_DOT" -> INT32_DOT_DOT + | "LBRACE" -> LBRACE + | "LBRACK" -> LBRACK + | "LBRACK_BAR" -> LBRACK_BAR + | "LESS" -> LESS + | "LPAREN" -> LPAREN | "LPAREN_STAR_RPAREN" -> LPAREN_STAR_RPAREN - | "IN" -> IN - | "DO" -> DO + | "MEMBER" -> MEMBER + | "MINUS" -> MINUS + | "PERCENT_OP" -> PERCENT_OP + | "PLUS_MINUS_OP" -> PLUS_MINUS_OP + | "PREFIX_OP" -> PREFIX_OP + | "QMARK" -> QMARK | "QMARK_QMARK" -> QMARK_QMARK + | "RARROW" -> RARROW + | "RBRACE" -> RBRACE + | "RBRACK" -> RBRACK + | "RPAREN" -> RPAREN + | "THEN" -> THEN + | "TRY" -> TRY + | "WITH" -> WITH | _ -> failwithf "was not expecting token %s" tokenName let getTriviaNodesFromTokens (mkRange: MkRange) (tokens: Token list) = diff --git a/src/Fantomas/TriviaTypes.fs b/src/Fantomas/TriviaTypes.fs index 638c8dce8f..b156ffa200 100644 --- a/src/Fantomas/TriviaTypes.fs +++ b/src/Fantomas/TriviaTypes.fs @@ -4,55 +4,56 @@ open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text type FsTokenType = - | LBRACE - | RBRACE - | LPAREN - | RPAREN - | LBRACK - | RBRACK - | LBRACK_BAR + | AMP + | AMP_AMP + | AND_BANG + | BAR + | BAR_BAR | BAR_RBRACK - | EQUALS - | IF - | THEN - | ELSE + | COLON_COLON + | COLON_EQUALS + | COLON_GREATER + | COLON_QMARK + | COLON_QMARK_GREATER + | DELAYED + | DO + | DOLLAR + | DOT_DOT + | DOT_DOT_HAT | ELIF - | BAR - | RARROW - | TRY + | ELSE + | EQUALS | FINALLY - | WITH - | MEMBER - | AND_BANG - | PERCENT_OP - | AMP + | FUNCTION + | GREATER + | IF + | IN + | INFIX_AMP_OP | INFIX_BAR_OP | INFIX_COMPARE_OP - | LESS - | AMP_AMP - | GREATER | INFIX_STAR_DIV_MOD_OP - | DELAYED - | PLUS_MINUS_OP - | QMARK - | MINUS - | COLON_QMARK - | DOT_DOT - | INT32_DOT_DOT - | COLON_EQUALS - | PREFIX_OP - | INFIX_AMP_OP - | COLON_QMARK_GREATER - | COLON_COLON - | COLON_GREATER - | DOT_DOT_HAT - | BAR_BAR | INFIX_STAR_STAR_OP - | FUNCTION + | INT32_DOT_DOT + | LBRACE + | LBRACK + | LBRACK_BAR + | LESS + | LPAREN | LPAREN_STAR_RPAREN - | IN - | DO + | MEMBER + | MINUS + | PERCENT_OP + | PLUS_MINUS_OP + | PREFIX_OP + | QMARK | QMARK_QMARK + | RARROW + | RBRACE + | RBRACK + | RPAREN + | THEN + | TRY + | WITH type Token = { TokenInfo: FSharpTokenInfo