diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.300.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.300.md index c39b44e1d7a..2eeef97ffb1 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.300.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.300.md @@ -25,6 +25,7 @@ * Fixed [#18433](https://github.com/dotnet/fsharp/issues/18433), a rare case of an internal error in xml comment processing. ([PR #18436](https://github.com/dotnet/fsharp/pull/18436)) * Fix confusing type inference error in task expression ([Issue #13789](https://github.com/dotnet/fsharp/issues/13789), [PR #18450](https://github.com/dotnet/fsharp/pull/18450)) * Fix missing `null` highlighting in tooltips ([PR #18457](https://github.com/dotnet/fsharp/pull/18457)) +* Fix range of SynPat.Named doesn't include accessibility ([PR #18526](https://github.com/dotnet/fsharp/pull/18526)) * Allow `_` in `use!` bindings values (lift FS1228 restriction) ([PR #18487](https://github.com/dotnet/fsharp/pull/18487)) * Make `[]` combination work([PR #18444](https://github.com/dotnet/fsharp/pull/18444/)) * Fix code completion considers types from own namespace non-imported ([PR #18518](https://github.com/dotnet/fsharp/issues/18518)) diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index e6e3a657592..e5e0bca6a29 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -3776,7 +3776,11 @@ atomicPattern: mkSynPatMaybeVar lidwd vis (lhs parseState) else let synIdent = List.head lidwd.IdentsWithTrivia - SynPat.Named(synIdent, false, vis, synIdent.Range) } + let m = + match vis with + | Some vis -> unionRanges vis.Range synIdent.Range + | _ -> synIdent.Range + SynPat.Named(synIdent, false, vis, m) } | constant { SynPat.Const(fst $1, snd $1) } diff --git a/tests/service/data/SyntaxTree/SynType/Named 01.fs b/tests/service/data/SyntaxTree/SynType/Named 01.fs new file mode 100644 index 00000000000..b3d177741da --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 01.fs @@ -0,0 +1,3 @@ +module Module + +let value = 42 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 01.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 01.fs.bsl new file mode 100644 index 00000000000..0781e30ef03 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 01.fs.bsl @@ -0,0 +1,21 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 01.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Named (SynIdent (value, None), false, None, (3,4--3,9)), None, + Const (Int32 42, (3,12--3,14)), (3,4--3,9), Yes (3,0--3,14), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,10--3,11) })], (3,0--3,14))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,14), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 02.fs b/tests/service/data/SyntaxTree/SynType/Named 02.fs new file mode 100644 index 00000000000..d77886cd9dd --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 02.fs @@ -0,0 +1,3 @@ +module Module + +let private value = 42 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 02.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 02.fs.bsl new file mode 100644 index 00000000000..524fced7a9a --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 02.fs.bsl @@ -0,0 +1,23 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 02.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Named + (SynIdent (value, None), false, Some (Private (3,4--3,11)), + (3,4--3,17)), None, Const (Int32 42, (3,20--3,22)), + (3,4--3,17), Yes (3,0--3,22), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,18--3,19) })], (3,0--3,22))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,22), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 03.fs b/tests/service/data/SyntaxTree/SynType/Named 03.fs new file mode 100644 index 00000000000..191fca6323c --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 03.fs @@ -0,0 +1,3 @@ +module Module + +let (|A|) = 0 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 03.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 03.fs.bsl new file mode 100644 index 00000000000..6cddbf89cae --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 03.fs.bsl @@ -0,0 +1,24 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 03.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Named + (SynIdent + (|A|, Some (HasParenthesis ((3,4--3,5), (3,8--3,9)))), + false, None, (3,4--3,9)), None, + Const (Int32 0, (3,12--3,13)), (3,4--3,9), Yes (3,0--3,13), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,10--3,11) })], (3,0--3,13))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 04.fs b/tests/service/data/SyntaxTree/SynType/Named 04.fs new file mode 100644 index 00000000000..c1788fab9a0 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 04.fs @@ -0,0 +1,3 @@ +module Module + +let private (|A|) = 0 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 04.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 04.fs.bsl new file mode 100644 index 00000000000..c205d9d5518 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 04.fs.bsl @@ -0,0 +1,24 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 04.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Named + (SynIdent + (|A|, Some (HasParenthesis ((3,12--3,13), (3,16--3,17)))), + false, Some (Private (3,4--3,11)), (3,4--3,17)), None, + Const (Int32 0, (3,20--3,21)), (3,4--3,17), Yes (3,0--3,21), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,18--3,19) })], (3,0--3,21))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,21), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 05.fs b/tests/service/data/SyntaxTree/SynType/Named 05.fs new file mode 100644 index 00000000000..710b9d60ce9 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 05.fs @@ -0,0 +1,3 @@ +module Module + +let a, private b = 1, 2 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 05.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 05.fs.bsl new file mode 100644 index 00000000000..fafa4eb0a3f --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 05.fs.bsl @@ -0,0 +1,30 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 05.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Tuple + (false, + [Named (SynIdent (a, None), false, None, (3,4--3,5)); + Named + (SynIdent (b, None), false, Some (Private (3,7--3,14)), + (3,7--3,16))], [(3,5--3,6)], (3,4--3,16)), None, + Tuple + (false, + [Const (Int32 1, (3,19--3,20)); + Const (Int32 2, (3,22--3,23))], [(3,20--3,21)], + (3,19--3,23)), (3,4--3,16), Yes (3,0--3,23), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,17--3,18) })], (3,0--3,23))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 06.fs b/tests/service/data/SyntaxTree/SynType/Named 06.fs new file mode 100644 index 00000000000..31ee6a99e79 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 06.fs @@ -0,0 +1,3 @@ +module Module + +let private a, private b = 1, 2 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 06.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 06.fs.bsl new file mode 100644 index 00000000000..75f20e20fdd --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 06.fs.bsl @@ -0,0 +1,32 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 06.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Tuple + (false, + [Named + (SynIdent (a, None), false, Some (Private (3,4--3,11)), + (3,4--3,13)); + Named + (SynIdent (b, None), false, Some (Private (3,15--3,22)), + (3,15--3,24))], [(3,13--3,14)], (3,4--3,24)), None, + Tuple + (false, + [Const (Int32 1, (3,27--3,28)); + Const (Int32 2, (3,30--3,31))], [(3,28--3,29)], + (3,27--3,31)), (3,4--3,24), Yes (3,0--3,31), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,25--3,26) })], (3,0--3,31))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,31), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 07.fs b/tests/service/data/SyntaxTree/SynType/Named 07.fs new file mode 100644 index 00000000000..ed76155a8ef --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 07.fs @@ -0,0 +1,3 @@ +module Module + +let private a, b = 1, 2 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 07.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 07.fs.bsl new file mode 100644 index 00000000000..65e957b2058 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 07.fs.bsl @@ -0,0 +1,31 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 07.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Tuple + (false, + [Named + (SynIdent (a, None), false, Some (Private (3,4--3,11)), + (3,4--3,13)); + Named (SynIdent (b, None), false, None, (3,15--3,16))], + [(3,13--3,14)], (3,4--3,16)), None, + Tuple + (false, + [Const (Int32 1, (3,19--3,20)); + Const (Int32 2, (3,22--3,23))], [(3,20--3,21)], + (3,19--3,23)), (3,4--3,16), Yes (3,0--3,23), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,17--3,18) })], (3,0--3,23))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/SynType/Named 08.fs b/tests/service/data/SyntaxTree/SynType/Named 08.fs new file mode 100644 index 00000000000..57c471b0631 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 08.fs @@ -0,0 +1,3 @@ +module Module + +let private (1, 2) = 0 \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 08.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 08.fs.bsl new file mode 100644 index 00000000000..c6f0d6cbd6d --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 08.fs.bsl @@ -0,0 +1,28 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 08.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Let + (false, + [SynBinding + (None, Normal, false, false, [], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + SynValData + (None, SynValInfo ([], SynArgInfo ([], false, None)), None), + Named + (SynIdent + (op_MultiplyMultiplyMultiplyMultiply, + Some (HasParenthesis ((3,12--3,13), (3,17--3,18)))), + false, Some (Private (3,4--3,11)), (3,4--3,18)), None, + Const (Int32 0, (3,21--3,22)), (3,4--3,18), Yes (3,0--3,22), + { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,19--3,20) })], (3,0--3,22))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,22), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,13)-(3,14) parse error Unexpected integer literal in binding +(3,12)-(3,18) parse error Attempted to parse this as an operator name, but failed diff --git a/tests/service/data/SyntaxTree/SynType/Named 09.fs b/tests/service/data/SyntaxTree/SynType/Named 09.fs new file mode 100644 index 00000000000..1158b0991b0 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 09.fs @@ -0,0 +1,4 @@ +module Module + +match 1 with +| private x -> () \ No newline at end of file diff --git a/tests/service/data/SyntaxTree/SynType/Named 09.fs.bsl b/tests/service/data/SyntaxTree/SynType/Named 09.fs.bsl new file mode 100644 index 00000000000..a97b6dd3461 --- /dev/null +++ b/tests/service/data/SyntaxTree/SynType/Named 09.fs.bsl @@ -0,0 +1,20 @@ +ImplFile + (ParsedImplFileInput + ("/root/SynType/Named 09.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (Match + (Yes (3,0--3,12), Const (Int32 1, (3,6--3,7)), + [SynMatchClause + (Named + (SynIdent (x, None), false, Some (Private (4,2--4,9)), + (4,2--4,11)), None, Const (Unit, (4,15--4,17)), + (4,2--4,17), Yes, { ArrowRange = Some (4,12--4,14) + BarRange = Some (4,0--4,1) })], + (3,0--4,17), { MatchKeyword = (3,0--3,5) + WithKeyword = (3,8--3,12) }), (3,0--4,17))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,17), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set []))