diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 001dc57bc2d..9e859307710 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 b8f8ed54bfd..c132b306ecd 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}"