From f8b56cb6db3c90348810263fd7a5d37dc5719e92 Mon Sep 17 00:00:00 2001 From: Florian Verdonck Date: Mon, 8 Aug 2022 20:48:30 +0200 Subject: [PATCH] Include star in topTupleType rule. (#13621) --- src/Compiler/pars.fsy | 3 +- tests/service/SyntaxTreeTests/BindingTests.fs | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 001dc57bc..9e8593077 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -5030,7 +5030,8 @@ topType: topTupleType: | topAppType STAR topTupleTypeElements { let t, argInfo = $1 - let path = SynTupleTypeSegment.Type t :: (List.map fst $3) + let mStar = rhs parseState 2 + let path = SynTupleTypeSegment.Type t :: SynTupleTypeSegment.Star mStar :: (List.map fst $3) let mdata = argInfo :: (List.choose snd $3) mkSynTypeTuple false path, mdata } diff --git a/tests/service/SyntaxTreeTests/BindingTests.fs b/tests/service/SyntaxTreeTests/BindingTests.fs index b8f8ed54b..c132b306e 100644 --- a/tests/service/SyntaxTreeTests/BindingTests.fs +++ b/tests/service/SyntaxTreeTests/BindingTests.fs @@ -366,3 +366,35 @@ let a = ]) ])) -> assertRange (3, 4) (3, 7) mLet | _ -> Assert.Fail "Could not get valid AST" + +[] +let ``Tuple return type of binding should contain stars`` () = + let parseResults = + getParseResults """ +let a : int * string = failwith "todo" +let b : int * string * bool = 1, "", false +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding(returnInfo = + Some (SynBindingReturnInfo(typeName = SynType.Tuple(path = [ + SynTupleTypeSegment.Type _ + SynTupleTypeSegment.Star _ + SynTupleTypeSegment.Type _ + ])))) + ]) + SynModuleDecl.Let(bindings = [ + SynBinding(returnInfo = + Some (SynBindingReturnInfo(typeName = SynType.Tuple(path = [ + SynTupleTypeSegment.Type _ + SynTupleTypeSegment.Star _ + SynTupleTypeSegment.Type _ + SynTupleTypeSegment.Star _ + SynTupleTypeSegment.Type _ + ])))) + ]) + ]) ])) -> + Assert.Pass () + | _ -> Assert.Fail $"Could not get valid AST, got {parseResults}" -- GitLab