@@ -19,6 +19,94 @@ extension SourceLocation: Hashable {
19
19
}
20
20
}
21
21
22
+ // MARK: -
23
+
24
+ protocol SymbolDeclProtocol : SyntaxProtocol {
25
+ var declaration : Syntax { get }
26
+ }
27
+
28
+ extension AssociatedtypeDeclSyntax : SymbolDeclProtocol { }
29
+ extension ClassDeclSyntax : SymbolDeclProtocol { }
30
+ extension EnumDeclSyntax : SymbolDeclProtocol { }
31
+ extension EnumCaseDeclSyntax : SymbolDeclProtocol { }
32
+ extension FunctionDeclSyntax : SymbolDeclProtocol { }
33
+ extension InitializerDeclSyntax : SymbolDeclProtocol { }
34
+ extension OperatorDeclSyntax : SymbolDeclProtocol { }
35
+ extension PrecedenceGroupDeclSyntax : SymbolDeclProtocol { }
36
+ extension ProtocolDeclSyntax : SymbolDeclProtocol { }
37
+ extension StructDeclSyntax : SymbolDeclProtocol { }
38
+ extension SubscriptDeclSyntax : SymbolDeclProtocol { }
39
+ extension TypealiasDeclSyntax : SymbolDeclProtocol { }
40
+ extension VariableDeclSyntax : SymbolDeclProtocol { }
41
+
42
+ extension DeclGroupSyntax {
43
+ var declaration : Syntax {
44
+ Syntax ( self . withoutTrailingTrivia ( )
45
+ . withoutLeadingTrivia ( )
46
+ . withMembers ( SyntaxFactory . makeBlankMemberDeclBlock ( ) ) )
47
+ }
48
+ }
49
+
50
+ extension EnumDeclSyntax {
51
+ var declaration : Syntax {
52
+ Syntax ( self . withoutTrailingTrivia ( )
53
+ . withoutLeadingTrivia ( )
54
+ . withMembers ( SyntaxFactory . makeBlankMemberDeclBlock ( ) ) )
55
+ }
56
+ }
57
+
58
+ extension FunctionDeclSyntax {
59
+ var declaration : Syntax {
60
+ Syntax ( self . withoutTrailingTrivia ( )
61
+ . withoutLeadingTrivia ( )
62
+ . withBody ( SyntaxFactory . makeBlankCodeBlock ( ) ) )
63
+ }
64
+ }
65
+
66
+ extension InitializerDeclSyntax {
67
+ var declaration : Syntax {
68
+ Syntax ( self . withoutTrailingTrivia ( )
69
+ . withoutLeadingTrivia ( )
70
+ . withBody ( SyntaxFactory . makeBlankCodeBlock ( ) ) )
71
+ }
72
+ }
73
+
74
+ extension SubscriptDeclSyntax {
75
+ var declaration : Syntax {
76
+ Syntax ( self . withoutTrailingTrivia ( )
77
+ . withoutLeadingTrivia ( )
78
+ . withAccessor ( nil ) )
79
+ }
80
+ }
81
+
82
+ extension VariableDeclSyntax {
83
+ var declaration : Syntax {
84
+ let bindings = self . bindings. map { binding -> PatternBindingSyntax in
85
+ if let value = binding. initializer? . value,
86
+ value. is ( ClosureExprSyntax . self) || value. is ( FunctionCallExprSyntax . self)
87
+ {
88
+ return binding. withInitializer ( nil )
89
+ . withAccessor ( nil )
90
+ } else {
91
+ return binding. withAccessor ( nil )
92
+ }
93
+ }
94
+
95
+ return Syntax ( self . withoutTrailingTrivia ( )
96
+ . withoutLeadingTrivia ( )
97
+ . withBindings ( SyntaxFactory . makePatternBindingList ( bindings) ) )
98
+ }
99
+ }
100
+
101
+ extension SyntaxProtocol {
102
+ var declaration : Syntax {
103
+ Syntax ( self . withoutLeadingTrivia ( )
104
+ . withoutTrailingTrivia ( ) )
105
+ }
106
+ }
107
+
108
+ // MARK: -
109
+
22
110
extension SyntaxProtocol {
23
111
var documentation : String ? {
24
112
return leadingTrivia? . documentation
@@ -49,13 +137,13 @@ fileprivate extension TriviaPiece {
49
137
}
50
138
}
51
139
52
- fileprivate extension String {
140
+ extension String {
53
141
var unindented : String {
54
142
let lines = split ( separator: " \n " , omittingEmptySubsequences: false )
55
143
guard lines. count > 1 else { return trimmingCharacters ( in: . whitespaces) }
56
144
57
145
let indentation = lines. compactMap { $0. firstIndex ( where: { !$0. isWhitespace } ) ? . utf16Offset ( in: $0) }
58
- . min ( ) ?? 0
146
+ . min ( ) ?? 0
59
147
60
148
return lines. map {
61
149
guard $0. count > indentation else { return String ( $0) }
0 commit comments