From 36b4a7781d3257ed2df8941773ebb489190c9d82 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Thu, 25 Mar 2021 17:58:25 +0100 Subject: [PATCH 1/7] Add failing test --- tests/tests/Elm/Parser/TypingsTests.elm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/tests/Elm/Parser/TypingsTests.elm b/tests/tests/Elm/Parser/TypingsTests.elm index cc8095625..1cb597f07 100644 --- a/tests/tests/Elm/Parser/TypingsTests.elm +++ b/tests/tests/Elm/Parser/TypingsTests.elm @@ -55,6 +55,26 @@ all = ] } ) + , test "type alias without spacings around '='" <| + \() -> + parseFullStringWithNullState "type alias Foo={color: String }" Parser.typeDefinition + |> Maybe.andThen asTypeAlias + |> Maybe.map noRangeTypeAlias + |> Expect.equal + (Just <| + { documentation = Nothing + , name = Node emptyRange "Foo" + , generics = [] + , typeAnnotation = + Node emptyRange <| + Record + [ Node emptyRange <| + ( Node emptyRange <| "color" + , Node emptyRange <| Typed (Node emptyRange <| ( [], "String" )) [] + ) + ] + } + ) , test "type alias with GenericType " <| \() -> parseFullStringWithNullState "type alias Foo a = {some : a }" Parser.typeDefinition From ceab759d7d14de562233816e16d109628129e13a Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Thu, 25 Mar 2021 17:59:47 +0100 Subject: [PATCH 2/7] Only on one side --- tests/tests/Elm/Parser/TypingsTests.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/Elm/Parser/TypingsTests.elm b/tests/tests/Elm/Parser/TypingsTests.elm index 1cb597f07..755d84d9a 100644 --- a/tests/tests/Elm/Parser/TypingsTests.elm +++ b/tests/tests/Elm/Parser/TypingsTests.elm @@ -57,7 +57,7 @@ all = ) , test "type alias without spacings around '='" <| \() -> - parseFullStringWithNullState "type alias Foo={color: String }" Parser.typeDefinition + parseFullStringWithNullState "type alias Foo ={color: String }" Parser.typeDefinition |> Maybe.andThen asTypeAlias |> Maybe.map noRangeTypeAlias |> Expect.equal From f68ba3116f87ebbefb25192c7003f10d01dfd108 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Thu, 25 Mar 2021 18:08:26 +0100 Subject: [PATCH 3/7] Succeed in parsing type alias with no spaces after '=' --- src/Elm/Parser/Typings.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Elm/Parser/Typings.elm b/src/Elm/Parser/Typings.elm index 1fc20c0e4..05ef4edd4 100644 --- a/src/Elm/Parser/Typings.elm +++ b/src/Elm/Parser/Typings.elm @@ -31,7 +31,7 @@ typeDefinition = |> Combine.andMap (Node.parser typeName |> Combine.ignore Layout.layout) |> Combine.andMap genericList |> Combine.ignore (string "=") - |> Combine.ignore Layout.layout + |> Combine.ignore (maybe Layout.layout) |> Combine.andMap typeAnnotation |> Combine.map (\typeAlias -> From 6a1d9a38a6629470390cd5de4f33aabec9ddca10 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Thu, 25 Mar 2021 18:02:22 +0100 Subject: [PATCH 4/7] Test: Remove spacing on the left --- tests/tests/Elm/Parser/TypingsTests.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/Elm/Parser/TypingsTests.elm b/tests/tests/Elm/Parser/TypingsTests.elm index 755d84d9a..1cb597f07 100644 --- a/tests/tests/Elm/Parser/TypingsTests.elm +++ b/tests/tests/Elm/Parser/TypingsTests.elm @@ -57,7 +57,7 @@ all = ) , test "type alias without spacings around '='" <| \() -> - parseFullStringWithNullState "type alias Foo ={color: String }" Parser.typeDefinition + parseFullStringWithNullState "type alias Foo={color: String }" Parser.typeDefinition |> Maybe.andThen asTypeAlias |> Maybe.map noRangeTypeAlias |> Expect.equal From 2841c6cef9e91ca3a336c740bae1bd640c765dea Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Thu, 25 Mar 2021 18:09:16 +0100 Subject: [PATCH 5/7] Succeed in parsing type alias with no spaces before '=' --- src/Elm/Parser/Typings.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Elm/Parser/Typings.elm b/src/Elm/Parser/Typings.elm index 05ef4edd4..98e02b31f 100644 --- a/src/Elm/Parser/Typings.elm +++ b/src/Elm/Parser/Typings.elm @@ -28,7 +28,7 @@ typeDefinition = (Combine.choice [ succeed (TypeAlias Nothing) |> Combine.ignore (string "alias" |> Combine.continueWith Layout.layout) - |> Combine.andMap (Node.parser typeName |> Combine.ignore Layout.layout) + |> Combine.andMap (Node.parser typeName |> Combine.ignore (maybe Layout.layout)) |> Combine.andMap genericList |> Combine.ignore (string "=") |> Combine.ignore (maybe Layout.layout) From 71d228ac044c2f8a4a465787b745b944448fe055 Mon Sep 17 00:00:00 2001 From: Martin Stewart Date: Thu, 25 Mar 2021 20:08:18 +0100 Subject: [PATCH 6/7] Fix typo and add failing test --- src/Elm/Syntax/Expression.elm | 2 +- tests/tests/Elm/Parser/DeclarationsTests.elm | 40 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Elm/Syntax/Expression.elm b/src/Elm/Syntax/Expression.elm index 623e989e8..adb9b8235 100644 --- a/src/Elm/Syntax/Expression.elm +++ b/src/Elm/Syntax/Expression.elm @@ -150,7 +150,7 @@ type alias LetBlock = } -{-| Union type for all possible declations in a let block +{-| Union type for all possible declarations in a let block -} type LetDeclaration = LetFunction Function diff --git a/tests/tests/Elm/Parser/DeclarationsTests.elm b/tests/tests/Elm/Parser/DeclarationsTests.elm index 405424a02..9b584b41e 100644 --- a/tests/tests/Elm/Parser/DeclarationsTests.elm +++ b/tests/tests/Elm/Parser/DeclarationsTests.elm @@ -272,6 +272,46 @@ all = } } ) + , test "let destructuring with no spaces around '='" <| + \() -> + parseFullStringWithNullState "foo =\n let\n (b, c)=(1, 2)\n in\n b" Parser.function + |> Maybe.map Node.value + |> Maybe.map noRangeDeclaration + |> Expect.equal + (Just <| + FunctionDeclaration + { signature = Nothing + , documentation = Nothing + , declaration = + Node emptyRange <| + { name = Node emptyRange "foo" + , arguments = [] + , expression = + Node emptyRange <| + LetExpression + { declarations = + [ Node emptyRange <| + LetDestructuring + (Node emptyRange + (TuplePattern + [ Node emptyRange (VarPattern "b") + , Node emptyRange (VarPattern "c") + ] + ) + ) + (Node emptyRange + (TupledExpression + [ Node emptyRange (Integer 1) + , Node emptyRange (Integer 2) + ] + ) + ) + ] + , expression = Node emptyRange <| FunctionOrValue [] "b" + } + } + } + ) , test "declaration with record" <| \() -> parseFullStringWithNullState "main =\n beginnerProgram { model = 0, view = view, update = update }" Parser.function From aeed2c8d2ede3f9b1e5558798aabadffaf42f048 Mon Sep 17 00:00:00 2001 From: Martin Stewart Date: Thu, 25 Mar 2021 20:09:22 +0100 Subject: [PATCH 7/7] Fix failing test --- src/Elm/Parser/Declarations.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Elm/Parser/Declarations.elm b/src/Elm/Parser/Declarations.elm index bb010275c..eda7299e0 100644 --- a/src/Elm/Parser/Declarations.elm +++ b/src/Elm/Parser/Declarations.elm @@ -516,7 +516,7 @@ letDestructuringDeclarationWithPattern p = succeed (LetDestructuring p) |> Combine.ignore (maybe Layout.layout) |> Combine.ignore (string "=") - |> Combine.ignore Layout.layout + |> Combine.ignore (maybe Layout.layout) |> Combine.andMap expression )