Skip to content
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
21 changes: 16 additions & 5 deletions src/Compiler/pars.fsy
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ moduleSpfn:
SynModuleSigDecl.Exception(synExnDefn, mWhole) }

| openDecl
{ SynModuleSigDecl.Open($1, (rhs parseState 1)) }
{ SynModuleSigDecl.Open $1 }

valSpfn:
| opt_attributes opt_access VAL opt_attributes opt_inline opt_mutable opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints optLiteralValueSpfn
Expand Down Expand Up @@ -1320,15 +1320,26 @@ moduleDefn:

/* 'open' declarations */
| openDecl
{ [ SynModuleDecl.Open($1, (rhs parseState 1)) ] }
{ [ SynModuleDecl.Open $1 ] }

openDecl:
/* 'open' declarations */
| OPEN path
{ SynOpenDeclTarget.ModuleOrNamespace($2, (rhs parseState 2)) }
{ let mOpen = rhs parseState 1
let mPath = $2.Range
SynOpenDeclTarget.ModuleOrNamespace($2, mPath), unionRanges mOpen mPath }

| OPEN recover
{ let mOpen = rhs parseState 1
SynOpenDeclTarget.ModuleOrNamespace(SynLongIdent([], [], []), mOpen.EndRange), mOpen }

| OPEN typeKeyword appType
{ SynOpenDeclTarget.Type($3, (rhs parseState 3)) }
{ let mOpen = rhs parseState 1
let mPath = $3.Range
SynOpenDeclTarget.Type($3, mPath), unionRanges mOpen mPath }

| OPEN typeKeyword recover
{ let m = rhs2 parseState 1 2
SynOpenDeclTarget.ModuleOrNamespace(SynLongIdent([], [], []), m.EndRange), m }

/* The right-hand-side of a module abbreviation definition */
/* This occurs on the right of a module abbreviation (#light encloses the r.h.s. with OBLOCKBEGIN/OBLOCKEND) */
Expand Down
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 01.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

open
open Ns1
17 changes: 17 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 01.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 01.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace (SynLongIdent ([], [], []), (3,4--3,4)),
(3,0--3,4));
Open
(ModuleOrNamespace (SynLongIdent ([Ns1], [], [None]), (4,5--4,8)),
(4,0--4,8))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,5)-(4,0) parse error Incomplete structured construct at or before this point in open declaration. Expected identifier, 'global', 'type' or other token.
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 02.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

open type
open Ns1
17 changes: 17 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 02.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 02.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace (SynLongIdent ([], [], []), (3,9--3,9)),
(3,0--3,9));
Open
(ModuleOrNamespace (SynLongIdent ([Ns1], [], [None]), (4,5--4,8)),
(4,0--4,8))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,10)-(4,0) parse error Incomplete structured construct at or before this point in open declaration
5 changes: 5 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 03.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Module

open type

()
14 changes: 14 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 03.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 03.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace (SynLongIdent ([], [], []), (3,9--3,9)),
(3,0--3,9)); Expr (Const (Unit, (5,0--5,2)), (5,0--5,2))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--5,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,10)-(5,0) parse error Incomplete structured construct at or before this point in open declaration
5 changes: 5 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 04.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Module

open type

ignore
14 changes: 14 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 04.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 04.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace (SynLongIdent ([], [], []), (3,9--3,9)),
(3,0--3,9)); Expr (Ident ignore, (5,0--5,6))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--5,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,10)-(5,0) parse error Incomplete structured construct at or before this point in open declaration
5 changes: 5 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 05.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Module

open

type T = int
27 changes: 27 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 05.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 05.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace (SynLongIdent ([], [], []), (3,4--3,4)),
(3,0--3,4));
Types
([SynTypeDefn
(SynComponentInfo
([], None, [], [T],
PreXmlDoc ((5,0), FSharp.Compiler.Xml.XmlDocCollector),
false, None, (5,5--5,6)),
Simple
(TypeAbbrev
(Ok, LongIdent (SynLongIdent ([int], [], [None])),
(5,9--5,12)), (5,9--5,12)), [], None, (5,5--5,12),
{ LeadingKeyword = Type (5,0--5,4)
EqualsRange = Some (5,7--5,8)
WithKeyword = None })], (5,0--5,12))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--5,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,5)-(5,0) parse error Incomplete structured construct at or before this point in open declaration. Expected identifier, 'global', 'type' or other token.
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 06.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

open Ns1.
open Ns2
18 changes: 18 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 06.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 06.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace
(SynLongIdent ([Ns1], [(3,8--3,9)], [None]), (3,5--3,9)),
(3,0--3,9));
Open
(ModuleOrNamespace (SynLongIdent ([Ns2], [], [None]), (4,5--4,8)),
(4,0--4,8))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,10)-(4,0) parse error Incomplete structured construct at or before this point in open declaration
5 changes: 5 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 07.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module Module

open Ns1.

ignore
15 changes: 15 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 07.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 07.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace
(SynLongIdent ([Ns1], [(3,8--3,9)], [None]), (3,5--3,9)),
(3,0--3,9)); Expr (Ident ignore, (5,0--5,6))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--5,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))

(3,10)-(5,0) parse error Incomplete structured construct at or before this point in open declaration
4 changes: 4 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 08.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module Module

open Ns1.
Ns2
13 changes: 13 additions & 0 deletions tests/service/data/SyntaxTree/ModuleMember/Open 08.fs.bsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
ImplFile
(ParsedImplFileInput
("/root/ModuleMember/Open 08.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Open
(ModuleOrNamespace
(SynLongIdent ([Ns1; Ns2], [(3,8--3,9)], [None; None]),
(3,5--4,4)), (3,0--4,4))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,4), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))