Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Include end in nested module range. #14751

Merged
merged 2 commits into from
Feb 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -1273,12 +1273,17 @@ moduleDefn:
| Some vis -> raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate(vis.ToString()))
| None -> ()
[ SynModuleDecl.ModuleAbbrev(List.head path, eqn, (rhs parseState 3, eqn) ||> unionRangeWithListBy (fun id -> id.idRange) ) ]
| Choice2Of2 def ->
| Choice2Of2 (def, mEndOpt) ->
if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName())
let info = SynComponentInfo(attribs @ attribs2, None, [], path, xmlDoc, false, vis, rhs parseState 3)
let mEquals = rhs parseState 4
let trivia: SynModuleDeclNestedModuleTrivia = { ModuleKeyword = Some mModule; EqualsRange = Some mEquals }
[ SynModuleDecl.NestedModule(info, isRec, def, false, ((rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) |> unionRangeWithXmlDoc xmlDoc), trivia)] }
let m =
(rhs2 parseState 1 4, def)
||> unionRangeWithListBy (fun (d: SynModuleDecl) -> d.Range)
|> unionRangeWithXmlDoc xmlDoc
let m = match mEndOpt with | None -> m | Some mEnd -> unionRanges m mEnd
[ SynModuleDecl.NestedModule(info, isRec, def, false, m, trivia) ] }

/* unattached custom attributes */
| attributes recover
Expand Down Expand Up @@ -1339,17 +1344,18 @@ namedModuleDefnBlock:
match $2 with
| [ SynModuleDecl.Expr (LongOrSingleIdent(false, SynLongIdent(path, _, _), None, _), _) ] ->
Choice1Of2 path
| _ ->
Choice2Of2 $2
| _ ->
Choice2Of2 ($2, None)
}

| OBLOCKBEGIN moduleDefnsOrExpr recover
{ // The lex filter ensures we can only get a mismatch in OBLOCKBEGIN/OBLOCKEND tokens if there was some other kind of error, hence we don't need to report this error
// reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight())
Choice2Of2 $2 }
Choice2Of2 ($2, None) }

| OBLOCKBEGIN error oblockend
{ Choice2Of2 [] }
{ let mEnd = rhs parseState 3
Choice2Of2 ([], Some mEnd) }

| wrappedNamedModuleDefn
{ Choice2Of2 $1 }
Expand All @@ -1361,14 +1367,16 @@ namedModuleDefnBlock:
/* A module definition that includes a 'begin'...'end' (rarely used in F# with #light syntax) */
wrappedNamedModuleDefn:
| structOrBegin moduleDefnsOrExprPossiblyEmpty END
{ $2 }
{ let mEnd = rhs parseState 3
$2, Some mEnd }

| structOrBegin moduleDefnsOrExprPossiblyEmpty recover
{ reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBeginOrStruct())
$2 }
$2, None }

| structOrBegin error END
{ [] }
{ let mEnd = rhs parseState 3
[], Some mEnd }


tyconDefnAugmentation:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace X

module Y =
begin
let a = 0
end

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
ImplFile
(ParsedImplFileInput
("/root/NestedModule/NestedModuleWithBeginEndAndDecls.fs", false,
QualifiedNameOfFile NestedModuleWithBeginEndAndDecls, [], [],
[SynModuleOrNamespace
([X], false, DeclaredNamespace,
[NestedModule
(SynComponentInfo
([], None, [], [Y],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false,
None, (3,0--3,8)), false,
[Let
(false,
[SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(None, SynValInfo ([], SynArgInfo ([], false, None)),
None),
Named (SynIdent (a, None), false, None, (5,12--5,13)),
None, Const (Int32 0, (5,16--5,17)), (5,12--5,13),
Yes (5,8--5,17), { LeadingKeyword = Let (5,8--5,11)
InlineKeyword = None
EqualsRange = Some (5,14--5,15) })],
(5,8--5,17))], false, (3,0--6,7),
{ ModuleKeyword = Some (3,0--3,6)
EqualsRange = Some (3,9--3,10) })], PreXmlDocEmpty, [], None,
(1,0--6,7), { LeadingKeyword = Namespace (1,0--1,9) })], (true, false),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace X

module Y =
begin end

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
ImplFile
(ParsedImplFileInput
("/root/NestedModule/RangeOfBeginEnd.fs", false,
QualifiedNameOfFile RangeOfBeginEnd, [], [],
[SynModuleOrNamespace
([X], false, DeclaredNamespace,
[NestedModule
(SynComponentInfo
([], None, [], [Y],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), false,
None, (3,0--3,8)), false, [], false, (3,0--4,13),
{ ModuleKeyword = Some (3,0--3,6)
EqualsRange = Some (3,9--3,10) })], PreXmlDocEmpty, [], None,
(1,0--4,13), { LeadingKeyword = Namespace (1,0--1,9) })],
(true, false), { ConditionalDirectives = []
CodeComments = [] }, set []))