Skip to content

Commit 19c9116

Browse files
committed
Make DeclarationModifier and TypeAttribute normal TokenSpecSet instead of generating them
There’s no reason to generate these `TokenSpecSet` anymore.
1 parent 56bbb8c commit 19c9116

File tree

9 files changed

+171
-1255
lines changed

9 files changed

+171
-1255
lines changed

CodeGeneration/Sources/SyntaxSupport/AttributeKinds.swift

Lines changed: 0 additions & 849 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftsyntax/GenerateSwiftSyntax.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,9 @@ struct GenerateSwiftSyntax: ParsableCommand {
8787
GeneratedFileSpec(swiftideUtilsGeneratedDir + ["SyntaxClassification.swift"], syntaxClassificationFile),
8888

8989
// SwiftParser
90-
GeneratedFileSpec(swiftParserGeneratedDir + ["DeclarationModifier.swift"], declarationModifierFile),
9190
GeneratedFileSpec(swiftParserGeneratedDir + ["IsLexerClassified.swift"], isLexerClassifiedFile),
9291
GeneratedFileSpec(swiftParserGeneratedDir + ["Parser+Entry.swift"], parserEntryFile),
9392
GeneratedFileSpec(swiftParserGeneratedDir + ["TokenSpecStaticMembers.swift"], tokenSpecStaticMembersFile),
94-
GeneratedFileSpec(swiftParserGeneratedDir + ["TypeAttribute.swift"], typeAttributeFile),
9593

9694
// SwiftParserDiagnostics
9795
GeneratedFileSpec(swiftParserDiagnosticsGeneratedDir + ["ChildNameForDiagnostics.swift"], childNameForDiagnosticFile),

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftparser/DeclarationModifierFile.swift

Lines changed: 0 additions & 54 deletions
This file was deleted.

CodeGeneration/Sources/generate-swiftsyntax/templates/swiftparser/TypeAttributeFile.swift

Lines changed: 0 additions & 51 deletions
This file was deleted.

Sources/SwiftParser/Lookahead.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ extension Parser.Lookahead {
141141
}
142142

143143
// Determine which attribute it is.
144-
if let (attr, handle) = self.at(anyIn: Parser.TypeAttribute.self) {
144+
if let (attr, handle) = self.at(anyIn: TypeAttribute.self) {
145145
// Ok, it is a valid attribute, eat it, and then process it.
146146
self.eat(handle)
147147
if case .convention = attr {

Sources/SwiftParser/TokenSpecSet.swift

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,125 @@ enum DeclarationKeyword: TokenSpecSet {
328328
}
329329
}
330330

331+
enum DeclarationModifier: TokenSpecSet {
332+
case __consuming
333+
case __setter_access
334+
case _const
335+
case _local
336+
case async
337+
case borrowing
338+
case `class`
339+
case consuming
340+
case convenience
341+
case distributed
342+
case dynamic
343+
case `fileprivate`
344+
case final
345+
case indirect
346+
case infix
347+
case `internal`
348+
case isolated
349+
case lazy
350+
case mutating
351+
case nonisolated
352+
case nonmutating
353+
case open
354+
case optional
355+
case override
356+
case package
357+
case postfix
358+
case prefix
359+
case `private`
360+
case `public`
361+
case reasync
362+
case required
363+
case `rethrows`
364+
case `static`
365+
case unowned
366+
case weak
367+
368+
init?(lexeme: Lexer.Lexeme) {
369+
switch PrepareForKeywordMatch(lexeme) {
370+
case TokenSpec(.__consuming): self = .__consuming
371+
case TokenSpec(.__setter_access): self = .__setter_access
372+
case TokenSpec(._const): self = ._const
373+
case TokenSpec(._local): self = ._local
374+
case TokenSpec(.async): self = .async
375+
case TokenSpec(.borrowing): self = .borrowing
376+
case TokenSpec(.class): self = .class
377+
case TokenSpec(.consuming): self = .consuming
378+
case TokenSpec(.convenience): self = .convenience
379+
case TokenSpec(.distributed): self = .distributed
380+
case TokenSpec(.dynamic): self = .dynamic
381+
case TokenSpec(.fileprivate): self = .fileprivate
382+
case TokenSpec(.final): self = .final
383+
case TokenSpec(.indirect): self = .indirect
384+
case TokenSpec(.infix): self = .infix
385+
case TokenSpec(.internal): self = .internal
386+
case TokenSpec(.isolated): self = .isolated
387+
case TokenSpec(.lazy): self = .lazy
388+
case TokenSpec(.mutating): self = .mutating
389+
case TokenSpec(.nonisolated): self = .nonisolated
390+
case TokenSpec(.nonmutating): self = .nonmutating
391+
case TokenSpec(.open): self = .open
392+
case TokenSpec(.optional): self = .optional
393+
case TokenSpec(.override): self = .override
394+
case TokenSpec(.package): self = .package
395+
case TokenSpec(.postfix): self = .postfix
396+
case TokenSpec(.prefix): self = .prefix
397+
case TokenSpec(.private): self = .private
398+
case TokenSpec(.public): self = .public
399+
case TokenSpec(.reasync): self = .reasync
400+
case TokenSpec(.required): self = .required
401+
case TokenSpec(.rethrows): self = .rethrows
402+
case TokenSpec(.static): self = .static
403+
case TokenSpec(.unowned): self = .unowned
404+
case TokenSpec(.weak): self = .weak
405+
default: return nil
406+
}
407+
}
408+
409+
var spec: TokenSpec {
410+
switch self {
411+
case .__consuming: return .keyword(.__consuming)
412+
case .__setter_access: return .keyword(.__setter_access)
413+
case ._const: return TokenSpec(._const, recoveryPrecedence: .declKeyword)
414+
case ._local: return .keyword(._local)
415+
case .async: return TokenSpec(.async, recoveryPrecedence: .declKeyword)
416+
case .borrowing: return TokenSpec(.borrowing, recoveryPrecedence: .declKeyword)
417+
case .class: return .keyword(.class)
418+
case .consuming: return TokenSpec(.consuming, recoveryPrecedence: .declKeyword)
419+
case .convenience: return .keyword(.convenience)
420+
case .distributed: return .keyword(.distributed)
421+
case .dynamic: return .keyword(.dynamic)
422+
case .fileprivate: return .keyword(.fileprivate)
423+
case .final: return .keyword(.final)
424+
case .indirect: return .keyword(.indirect)
425+
case .infix: return .keyword(.infix)
426+
case .internal: return .keyword(.internal)
427+
case .isolated: return TokenSpec(.isolated, recoveryPrecedence: .declKeyword)
428+
case .lazy: return .keyword(.lazy)
429+
case .mutating: return .keyword(.mutating)
430+
case .nonisolated: return .keyword(.nonisolated)
431+
case .nonmutating: return .keyword(.nonmutating)
432+
case .open: return .keyword(.open)
433+
case .optional: return .keyword(.optional)
434+
case .override: return .keyword(.override)
435+
case .package: return .keyword(.package)
436+
case .postfix: return .keyword(.postfix)
437+
case .prefix: return .keyword(.prefix)
438+
case .private: return .keyword(.private)
439+
case .public: return .keyword(.public)
440+
case .reasync: return TokenSpec(.reasync, recoveryPrecedence: .declKeyword)
441+
case .required: return .keyword(.required)
442+
case .rethrows: return TokenSpec(.rethrows, recoveryPrecedence: .declKeyword)
443+
case .static: return .keyword(.static)
444+
case .unowned: return TokenSpec(.unowned, recoveryPrecedence: .declKeyword)
445+
case .weak: return TokenSpec(.weak, recoveryPrecedence: .declKeyword)
446+
}
447+
}
448+
}
449+
331450
/// Union of the following token kind subsets:
332451
/// - `DeclarationModifier`
333452
/// - `DeclarationKeyword`
@@ -463,6 +582,56 @@ enum SwitchCaseStart: TokenSpecSet {
463582
}
464583
}
465584

585+
enum TypeAttribute: TokenSpecSet {
586+
case _local
587+
case _noMetadata
588+
case _opaqueReturnTypeOf
589+
case async
590+
case autoclosure
591+
case convention
592+
case differentiable
593+
case escaping
594+
case noDerivative
595+
case noescape
596+
case Sendable
597+
case unchecked
598+
599+
init?(lexeme: Lexer.Lexeme) {
600+
switch PrepareForKeywordMatch(lexeme) {
601+
case TokenSpec(._local): self = ._local
602+
case TokenSpec(._noMetadata): self = ._noMetadata
603+
case TokenSpec(._opaqueReturnTypeOf): self = ._opaqueReturnTypeOf
604+
case TokenSpec(.async): self = .async
605+
case TokenSpec(.autoclosure): self = .autoclosure
606+
case TokenSpec(.convention): self = .convention
607+
case TokenSpec(.differentiable): self = .differentiable
608+
case TokenSpec(.escaping): self = .escaping
609+
case TokenSpec(.noDerivative): self = .noDerivative
610+
case TokenSpec(.noescape): self = .noescape
611+
case TokenSpec(.Sendable): self = .Sendable
612+
case TokenSpec(.unchecked): self = .unchecked
613+
default: return nil
614+
}
615+
}
616+
617+
var spec: TokenSpec {
618+
switch self {
619+
case ._local: return .keyword(._local)
620+
case ._noMetadata: return .keyword(._noMetadata)
621+
case ._opaqueReturnTypeOf: return .keyword(._opaqueReturnTypeOf)
622+
case .async: return .keyword(.async)
623+
case .autoclosure: return .keyword(.autoclosure)
624+
case .convention: return .keyword(.convention)
625+
case .differentiable: return .keyword(.differentiable)
626+
case .escaping: return .keyword(.escaping)
627+
case .noDerivative: return .keyword(.noDerivative)
628+
case .noescape: return .keyword(.noescape)
629+
case .Sendable: return .keyword(.Sendable)
630+
case .unchecked: return .keyword(.unchecked)
631+
}
632+
}
633+
}
634+
466635
@_spi(Diagnostics)
467636
public enum TypeSpecifier: TokenSpecSet {
468637
case `inout`

Sources/SwiftParser/Types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ extension Parser {
10111011
}
10121012

10131013
mutating func parseTypeAttribute() -> RawAttributeListSyntax.Element {
1014-
let typeAttr = Parser.TypeAttribute(lexeme: self.peek())
1014+
let typeAttr = TypeAttribute(lexeme: self.peek())
10151015

10161016
switch typeAttr {
10171017
case ._local, ._noMetadata, .async, .escaping, .noDerivative, .noescape, .Sendable, .unchecked, .autoclosure:

0 commit comments

Comments
 (0)