2121// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2222// THE SOFTWARE.
2323
24- import Foundation
2524import SwiftSyntax
2625
2726
@@ -39,29 +38,39 @@ struct Comment {
3938 var isDoc : Bool { kind == . docLine || kind == . docBlock }
4039}
4140
42- public enum AccessLevel : Int {
43- case `open`
44- case `public`
45- case `internal`
46- case `fileprivate`
47- case `private`
48- }
49-
5041protocol DeclProtocol : SyntaxProtocol {
5142
52- // ` attributes`: `` AttributeListSyntax``
43+ // var attributes: AttributeListSyntax
5344 var modifiers : DeclModifierListSyntax { get }
54- // `classKeyword`: `'class'`
55- // var name: TokenSyntax { get }
56- // ` genericParameterClause`: `` GenericParameterClauseSyntax``?
57- // ` inheritanceClause`: `` InheritanceClauseSyntax``?
58- // `genericWhereClause`: ``GenericWhereClauseSyntax``?
59- // `memberBlock`: ``MemberBlockSyntax``
45+ var keyword : DeclKeyword { get }
46+ var name : TokenSyntax { get }
47+ var genericParameterClause : GenericParameterClauseSyntax ? { get }
48+ var inheritanceClause : InheritanceClauseSyntax ? { get }
49+ var funcSignature : FunctionSignatureSyntax ? { get }
50+ //var genericWhereClause: GenericWhereClauseSyntax? { get }
6051
6152 var id : String { get }
6253}
6354
6455extension DeclProtocol {
56+
57+ var genericParameterClause : GenericParameterClauseSyntax ? { nil }
58+ var inheritanceClause : InheritanceClauseSyntax ? { nil }
59+ var funcSignature : FunctionSignatureSyntax ? { nil }
60+
61+ var id : String {
62+
63+ let generic = genericParameterClause? . trimmedDescription ?? " "
64+ let base = " \( keyword. rawValue) \( name. trimmedDescription) \( generic) "
65+
66+ if let inheritance = inheritanceClause? . trimmedDescription {
67+ return " \( base) : \( inheritance) "
68+ }
69+ else if let funcSignature = funcSignature? . trimmedDescription {
70+ return " \( base) \( funcSignature) "
71+ }
72+ return base
73+ }
6574
6675 var comments : [ Comment ] {
6776 return leadingTrivia. compactMap {
@@ -80,131 +89,93 @@ extension DeclProtocol {
8089 }
8190 }
8291
83- var accessLevel : AccessLevel {
84- for modifier in modifiers {
85- let name = modifier. trimmed. description
86- switch name {
87- case " open " :
88- return . open
89- case " public " :
90- return . public
91- case " fileprivate " :
92- return . fileprivate
93- case " private " :
94- return . private
95- default :
96- return . internal
97- }
98- }
99- return . internal
100- }
92+ var accessLevel : AccessLevel { AccessLevel ( modifiers: modifiers) }
10193}
10294
10395// MARK: -
10496
10597extension TypeAliasDeclSyntax : DeclProtocol {
106- var id : String {
107- name. trimmed. description
108- }
98+ var keyword : DeclKeyword { . typealias }
10999}
110100
111101extension AssociatedTypeDeclSyntax : DeclProtocol {
112- var id : String {
113- name. trimmed. description
114- }
102+ var keyword : DeclKeyword { . associatedtype }
115103}
116104
117105extension ClassDeclSyntax : DeclProtocol {
118- var id : String {
119- let genericParameter = genericParameterClause? . trimmed. description ?? " "
120- return " \( name. trimmed) \( genericParameter) "
121- }
106+ var keyword : DeclKeyword { . class }
122107}
123108
124109extension ActorDeclSyntax : DeclProtocol {
125- var id : String {
126- let genericParameter = genericParameterClause? . trimmed. description ?? " "
127- return " \( name. trimmed) \( genericParameter) "
128- }
110+ var keyword : DeclKeyword { . actor }
129111}
130112
131113extension StructDeclSyntax : DeclProtocol {
132- var id : String {
133- let genericParameter = genericParameterClause? . trimmed. description ?? " "
134- return " \( name. trimmed) \( genericParameter) "
135- }
114+ var keyword : DeclKeyword { . struct }
136115}
137116
138117extension ProtocolDeclSyntax : DeclProtocol {
139- var id : String {
140- name. trimmed. description
141- }
118+ var keyword : DeclKeyword { . protocol }
142119}
143120
144121extension ExtensionDeclSyntax : DeclProtocol {
145- var id : String {
146- extendedType. trimmed. description
147- }
148-
149- var name : TokenSyntax {
150- TokenSyntax ( . identifier( extendedType. trimmedDescription) , presence: . present)
151- }
122+ var keyword : DeclKeyword { . extension }
123+ var name : TokenSyntax { TokenSyntax ( . identifier( extendedType. trimmedDescription) , presence: . present) }
152124}
153125
154126extension FunctionDeclSyntax : DeclProtocol {
155- var id : String {
156- let generic = genericParameterClause? . trimmed. description ?? " "
157- return " \( name. trimmed) \( generic) \( signature. trimmed) "
158- }
127+ var keyword : DeclKeyword { . func }
128+ var funcSignature : FunctionSignatureSyntax ? { signature }
159129}
160130
161131extension InitializerDeclSyntax : DeclProtocol {
162- var id : String {
163- let optionalMark = optionalMark? . trimmed. description ?? " "
164- let generic = genericParameterClause? . trimmed. description ?? " "
165- return " \( initKeyword. trimmed) \( optionalMark) \( generic) \( signature. trimmed) "
132+ var keyword : DeclKeyword { . `init` }
133+
134+ var name : TokenSyntax {
135+ let optionalMark = optionalMark? . trimmedDescription ?? " "
136+ return TokenSyntax ( . identifier( optionalMark) , presence: . present)
166137 }
167138}
168139
169140extension SubscriptDeclSyntax : DeclProtocol {
170- var id : String {
171- let generic = genericParameterClause? . trimmed. description ?? " "
172- return " \( subscriptKeyword. trimmed) \( generic) \( parameterClause. trimmed) \( returnClause. trimmed) "
141+ var keyword : DeclKeyword { . subscript }
142+
143+ var name : TokenSyntax {
144+ TokenSyntax ( . identifier( " \( parameterClause. trimmedDescription) \( returnClause. trimmedDescription) " ) , presence: . present)
173145 }
174146}
175147
176148extension VariableDeclSyntax : DeclProtocol {
177- var id : String {
178- bindings. map { $0. pattern. trimmed. description } . joined ( separator: " , " )
149+ var keyword : DeclKeyword { DeclKeyword ( token: bindingSpecifier) ! }
150+
151+ var name : TokenSyntax {
152+ let name = bindings. map { $0. pattern. trimmedDescription } . joined ( separator: " , " )
153+ return TokenSyntax ( . identifier( name) , presence: . present)
179154 }
180155}
181156
182157extension EnumDeclSyntax : DeclProtocol {
183- var id : String {
184- let generic = genericParameterClause? . trimmed. description ?? " "
185- return " \( name. trimmed. description) \( generic) "
186- }
158+ var keyword : DeclKeyword { . enum }
187159}
188160
189161extension EnumCaseDeclSyntax : DeclProtocol {
190- var id : String {
191- elements. map {
192- let name = $0. name. trimmed. description
193- let associatedValue = $0. parameterClause? . trimmed. description ?? " "
162+ var keyword : DeclKeyword { . case }
163+
164+ var name : TokenSyntax {
165+ let name = elements. map {
166+ let name = $0. name. trimmedDescription
167+ let associatedValue = $0. parameterClause? . trimmedDescription ?? " "
194168 return " \( name) \( associatedValue) "
195169 } . joined ( separator: " , " )
170+ return TokenSyntax ( . identifier( name) , presence: . present)
196171 }
197172}
198173
199174extension PrecedenceGroupDeclSyntax : DeclProtocol {
200- var id : String {
201- " \( precedencegroupKeyword. trimmed) \( name. trimmed) "
202- }
175+ var keyword : DeclKeyword { . precedencegroup }
203176}
204177
205178extension MacroDeclSyntax : DeclProtocol {
206- var id : String {
207- let generic = genericParameterClause? . trimmed. description ?? " "
208- return " \( name. trimmed) \( generic) \( signature. trimmed) "
209- }
179+ var keyword : DeclKeyword { . macro }
180+ var funcSignature : FunctionSignatureSyntax ? { signature }
210181}
0 commit comments