Skip to content

Commit 7d115d5

Browse files
authored
TypeDefn and NamespaceOrModule leading trivia (#14126)
* Refactor TypeKeyword to LeadingKeyword in SynTypeDefnTrivia. * Refactor SynModuleOrNamespaceTrivia to use LeadingKeyword type.
1 parent fbfc406 commit 7d115d5

File tree

11 files changed

+270
-91
lines changed

11 files changed

+270
-91
lines changed

src/Compiler/Checking/CheckDeclarations.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4565,7 +4565,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d
45654565
| SynModuleSigDecl.Exception (exnSig=SynExceptionSig(exnRepr=exnRepr; withKeyword=withKeyword; members=members)) ->
45664566
let ( SynExceptionDefnRepr(synAttrs, SynUnionCase(ident=SynIdent(id,_)), _, xmlDoc, vis, m)) = exnRepr
45674567
let compInfo = SynComponentInfo(synAttrs, None, [], [id], xmlDoc, false, vis, id.idRange)
4568-
let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m, { TypeKeyword = None; WithKeyword = withKeyword; EqualsRange = None })) ]
4568+
let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m, { LeadingKeyword = SynTypeDefnLeadingKeyword.Synthetic; WithKeyword = withKeyword; EqualsRange = None })) ]
45694569
decls, (false, false)
45704570

45714571
| SynModuleSigDecl.Val (vspec, _) ->

src/Compiler/Driver/ParseAndCheckInputs.fs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,7 @@ let PostParseModuleImpl (_i, defaultNamespace, isLastCompiland, fileName, impl)
148148

149149
let trivia: SynModuleOrNamespaceTrivia =
150150
{
151-
ModuleKeyword = None
152-
NamespaceKeyword = None
151+
LeadingKeyword = SynModuleOrNamespaceLeadingKeyword.None
153152
}
154153

155154
SynModuleOrNamespace(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m, trivia)
@@ -194,8 +193,7 @@ let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, fileName, intf)
194193

195194
let trivia: SynModuleOrNamespaceSigTrivia =
196195
{
197-
ModuleKeyword = None
198-
NamespaceKeyword = None
196+
LeadingKeyword = SynModuleOrNamespaceLeadingKeyword.None
199197
}
200198

201199
SynModuleOrNamespaceSig(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m, trivia)

src/Compiler/Interactive/fsi.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1847,7 +1847,7 @@ type internal FsiDynamicCompiler(
18471847
let m = match defs with [] -> rangeStdin0 | _ -> List.reduce unionRanges [for d in defs -> d.Range]
18481848
let prefix = mkFragmentPath m i
18491849
let prefixPath = pathOfLid prefix
1850-
let impl = SynModuleOrNamespace(prefix,false, SynModuleOrNamespaceKind.NamedModule,defs,PreXmlDoc.Empty,[],None,m, { ModuleKeyword = None; NamespaceKeyword = None })
1850+
let impl = SynModuleOrNamespace(prefix,false, SynModuleOrNamespaceKind.NamedModule,defs,PreXmlDoc.Empty,[],None,m, { LeadingKeyword = SynModuleOrNamespaceLeadingKeyword.None })
18511851
let isLastCompiland = true
18521852
let isExe = false
18531853
let input = ParsedInput.ImplFile (ParsedImplFileInput (fileName,true, ComputeQualifiedNameOfFileFromUniquePath (m,prefixPath),[],[],[impl],(isLastCompiland, isExe), { ConditionalDirectives = []; CodeComments = [] }))

src/Compiler/SyntaxTree/SyntaxTrivia.fs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,32 +125,39 @@ type SynPatOrTrivia = { BarRange: range }
125125
[<NoEquality; NoComparison>]
126126
type SynPatListConsTrivia = { ColonColonRange: range }
127127

128+
[<NoEquality; NoComparison; RequireQualifiedAccess>]
129+
type SynTypeDefnLeadingKeyword =
130+
| Type of range
131+
| And of range
132+
| StaticType of staticRange: range * typeRange: range
133+
| Synthetic
134+
128135
[<NoEquality; NoComparison>]
129136
type SynTypeDefnTrivia =
130137
{
131-
TypeKeyword: range option
138+
LeadingKeyword: SynTypeDefnLeadingKeyword
132139
EqualsRange: range option
133140
WithKeyword: range option
134141
}
135142

136143
static member Zero: SynTypeDefnTrivia =
137144
{
138-
TypeKeyword = None
145+
LeadingKeyword = SynTypeDefnLeadingKeyword.Synthetic
139146
EqualsRange = None
140147
WithKeyword = None
141148
}
142149

143150
[<NoEquality; NoComparison>]
144151
type SynTypeDefnSigTrivia =
145152
{
146-
TypeKeyword: range option
153+
LeadingKeyword: SynTypeDefnLeadingKeyword
147154
EqualsRange: range option
148155
WithKeyword: range option
149156
}
150157

151158
static member Zero: SynTypeDefnSigTrivia =
152159
{
153-
TypeKeyword = None
160+
LeadingKeyword = SynTypeDefnLeadingKeyword.Synthetic
154161
EqualsRange = None
155162
WithKeyword = None
156163
}
@@ -259,18 +266,22 @@ type SynModuleSigDeclNestedModuleTrivia =
259266
EqualsRange = None
260267
}
261268

269+
[<NoEquality; NoComparison; RequireQualifiedAccess>]
270+
type SynModuleOrNamespaceLeadingKeyword =
271+
| Module of moduleRange: range
272+
| Namespace of namespaceRange: range
273+
| None
274+
262275
[<NoEquality; NoComparison>]
263276
type SynModuleOrNamespaceTrivia =
264277
{
265-
ModuleKeyword: range option
266-
NamespaceKeyword: range option
278+
LeadingKeyword: SynModuleOrNamespaceLeadingKeyword
267279
}
268280

269281
[<NoEquality; NoComparison>]
270282
type SynModuleOrNamespaceSigTrivia =
271283
{
272-
ModuleKeyword: range option
273-
NamespaceKeyword: range option
284+
LeadingKeyword: SynModuleOrNamespaceLeadingKeyword
274285
}
275286

276287
[<NoEquality; NoComparison>]

src/Compiler/SyntaxTree/SyntaxTrivia.fsi

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -207,12 +207,21 @@ type SynPatListConsTrivia =
207207
ColonColonRange: range
208208
}
209209

210+
/// Represents the leading keyword in a SynTypeDefn or SynTypeDefnSig
211+
[<NoEquality; NoComparison; RequireQualifiedAccess>]
212+
type SynTypeDefnLeadingKeyword =
213+
| Type of range
214+
| And of range
215+
// Can happen in SynMemberDefn.NestedType or SynMemberSig.NestedType
216+
| StaticType of staticRange: range * typeRange: range
217+
| Synthetic
218+
210219
/// Represents additional information for SynTypeDefn
211220
[<NoEquality; NoComparison>]
212221
type SynTypeDefnTrivia =
213222
{
214-
/// The syntax range of the `type` keyword.
215-
TypeKeyword: range option
223+
/// The syntax range of the `type` or `and` keyword.
224+
LeadingKeyword: SynTypeDefnLeadingKeyword
216225

217226
/// The syntax range of the `=` token.
218227
EqualsRange: range option
@@ -227,8 +236,8 @@ type SynTypeDefnTrivia =
227236
[<NoEquality; NoComparison>]
228237
type SynTypeDefnSigTrivia =
229238
{
230-
/// The syntax range of the `type` keyword.
231-
TypeKeyword: range option
239+
/// The syntax range of the `type` or `and` keyword.
240+
LeadingKeyword: SynTypeDefnLeadingKeyword
232241

233242
/// The syntax range of the `=` token.
234243
EqualsRange: range option
@@ -321,26 +330,27 @@ type SynModuleSigDeclNestedModuleTrivia =
321330

322331
static member Zero: SynModuleSigDeclNestedModuleTrivia
323332

333+
/// Represents the leading keyword in a SynModuleOrNamespace or SynModuleOrNamespaceSig
334+
[<NoEquality; NoComparison; RequireQualifiedAccess>]
335+
type SynModuleOrNamespaceLeadingKeyword =
336+
| Module of moduleRange: range
337+
| Namespace of namespaceRange: range
338+
| None
339+
324340
/// Represents additional information for SynModuleOrNamespace
325341
[<NoEquality; NoComparison>]
326342
type SynModuleOrNamespaceTrivia =
327343
{
328-
/// The syntax range of the `module` keyword
329-
ModuleKeyword: range option
330-
331-
/// The syntax range of the `namespace` keyword
332-
NamespaceKeyword: range option
344+
/// The syntax range of the `module` or `namespace` keyword
345+
LeadingKeyword: SynModuleOrNamespaceLeadingKeyword
333346
}
334347

335348
/// Represents additional information for SynModuleOrNamespaceSig
336349
[<NoEquality; NoComparison>]
337350
type SynModuleOrNamespaceSigTrivia =
338351
{
339-
/// The syntax range of the `module` keyword
340-
ModuleKeyword: range option
341-
342-
/// The syntax range of the `namespace` keyword
343-
NamespaceKeyword: range option
352+
/// The syntax range of the `module` or `namespace` keyword
353+
LeadingKeyword: SynModuleOrNamespaceLeadingKeyword
344354
}
345355

346356
/// Represents additional information for SynValSig

0 commit comments

Comments
 (0)