@@ -68,7 +68,7 @@ public class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<
6868 public func contextContainingNode(
6969 _ node: Node ,
7070 textProvider: @escaping TextProvider
71- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
71+ ) -> NodeInfo ? {
7272 switch ObjectiveCNodeType ( rawValue: node. nodeType ?? " " ) {
7373 case . classInterface, . categoryInterface:
7474 return parseClassInterfaceNode ( node, textProvider: textProvider)
@@ -85,39 +85,35 @@ public class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<
8585 case . typeDefinition:
8686 return parseTypedefNode ( node, textProvider: textProvider)
8787 default :
88- return ( nil , false )
88+ return nil
8989 }
9090 }
9191
9292 func parseClassInterfaceNode(
9393 _ node: ASTNode ,
9494 textProvider: @escaping TextProvider
95- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
95+ ) -> NodeInfo ? {
9696 var name = " "
9797 var superClass = " "
9898 var category = " "
9999 var protocols = [ String] ( )
100- let children = node. children
101- for child in children {
102- if let nameNode = child. child ( byFieldName: " name " ) {
103- name = textProvider ( . node( nameNode) )
104- }
105- if let superClassNode = child. child ( byFieldName: " superclass " ) {
106- superClass = textProvider ( . node( superClassNode) )
107- }
108- if let categoryNode = child. child ( byFieldName: " category " ) {
109- category = textProvider ( . node( categoryNode) )
110- }
111- if let protocolsNode = child. child ( byFieldName: " protocols " ) {
112- for protocolNode in protocolsNode. children {
113- let protocolName = textProvider ( . node( protocolNode) )
114- if !protocolName. isEmpty {
115- protocols. append ( protocolName)
116- }
100+ if let nameNode = node. child ( byFieldName: " name " ) {
101+ name = textProvider ( . node( nameNode) )
102+ }
103+ if let superClassNode = node. child ( byFieldName: " superclass " ) {
104+ superClass = textProvider ( . node( superClassNode) )
105+ }
106+ if let categoryNode = node. child ( byFieldName: " category " ) {
107+ category = textProvider ( . node( categoryNode) )
108+ }
109+ if let protocolsNode = node. child ( byFieldName: " protocols " ) {
110+ for protocolNode in protocolsNode. children {
111+ let protocolName = textProvider ( . node( protocolNode) )
112+ if !protocolName. isEmpty {
113+ protocols. append ( protocolName)
117114 }
118115 }
119116 }
120-
121117 var signature = " @interface \( name) "
122118 if !category. isEmpty {
123119 signature += " ( \( category) ) "
@@ -129,47 +125,41 @@ public class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<
129125 signature += " : \( superClass) "
130126 }
131127
132- return (
133- . init(
134- node: node,
135- signature: signature,
136- name: name,
137- canBeUsedAsCodeRange: true
138- ) ,
139- false
128+ return . init(
129+ node: node,
130+ signature: signature,
131+ name: name,
132+ canBeUsedAsCodeRange: true
140133 )
141134 }
142135
143136 func parseClassImplementationNode(
144137 _ node: ASTNode ,
145138 textProvider: @escaping TextProvider
146- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
139+ ) -> NodeInfo ? {
147140 var name = " "
148141 var superClass = " "
149142 var category = " "
150143 var protocols = [ String] ( )
151- let children = node. children
152- for child in children {
153- if let nameNode = child. child ( byFieldName: " name " ) {
154- name = textProvider ( . node( nameNode) )
155- }
156- if let superClassNode = child. child ( byFieldName: " superclass " ) {
157- superClass = textProvider ( . node( superClassNode) )
158- }
159- if let categoryNode = child. child ( byFieldName: " category " ) {
160- category = textProvider ( . node( categoryNode) )
161- }
162- if let protocolsNode = child. child ( byFieldName: " protocols " ) {
163- for protocolNode in protocolsNode. children {
164- let protocolName = textProvider ( . node( protocolNode) )
165- if !protocolName. isEmpty {
166- protocols. append ( protocolName)
167- }
144+ if let nameNode = node. child ( byFieldName: " name " ) {
145+ name = textProvider ( . node( nameNode) )
146+ }
147+ if let superClassNode = node. child ( byFieldName: " superclass " ) {
148+ superClass = textProvider ( . node( superClassNode) )
149+ }
150+ if let categoryNode = node. child ( byFieldName: " category " ) {
151+ category = textProvider ( . node( categoryNode) )
152+ }
153+ if let protocolsNode = node. child ( byFieldName: " protocols " ) {
154+ for protocolNode in protocolsNode. children {
155+ let protocolName = textProvider ( . node( protocolNode) )
156+ if !protocolName. isEmpty {
157+ protocols. append ( protocolName)
168158 }
169159 }
170160 }
171161
172- var signature = " @implement \( name) "
162+ var signature = " @implementation \( name) "
173163 if !category. isEmpty {
174164 signature += " ( \( category) ) "
175165 }
@@ -179,34 +169,28 @@ public class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<
179169 if !superClass. isEmpty {
180170 signature += " : \( superClass) "
181171 }
182- return (
183- . init(
184- node: node,
185- signature: signature,
186- name: name,
187- canBeUsedAsCodeRange: true
188- ) ,
189- false
172+ return . init(
173+ node: node,
174+ signature: signature,
175+ name: name,
176+ canBeUsedAsCodeRange: true
190177 )
191178 }
192179
193180 func parseProtocolNode(
194181 _ node: ASTNode ,
195182 textProvider: @escaping TextProvider
196- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
183+ ) -> NodeInfo ? {
197184 var name = " "
198185 var protocols = [ String] ( )
199- let children = node. children
200- for child in children {
201- if let nameNode = child. child ( byFieldName: " name " ) {
202- name = textProvider ( . node( nameNode) )
203- }
204- if let protocolsNode = child. child ( byFieldName: " protocols " ) {
205- for protocolNode in protocolsNode. children {
206- let protocolName = textProvider ( . node( protocolNode) )
207- if !protocolName. isEmpty {
208- protocols. append ( protocolName)
209- }
186+ if let nameNode = node. child ( byFieldName: " name " ) {
187+ name = textProvider ( . node( nameNode) )
188+ }
189+ if let protocolsNode = node. child ( byFieldName: " protocols " ) {
190+ for protocolNode in protocolsNode. children {
191+ let protocolName = textProvider ( . node( protocolNode) )
192+ if !protocolName. isEmpty {
193+ protocols. append ( protocolName)
210194 }
211195 }
212196 }
@@ -215,44 +199,60 @@ public class ObjectiveCFocusedCodeFinder: KnownLanguageFocusedCodeFinder<
215199 if !protocols. isEmpty {
216200 signature += " < \( protocols. joined ( separator: " , " ) ) > "
217201 }
218- return (
219- . init(
220- node: node,
221- signature: signature,
222- name: name,
223- canBeUsedAsCodeRange: true
224- ) ,
225- false
202+ return . init(
203+ node: node,
204+ signature: signature,
205+ name: name,
206+ canBeUsedAsCodeRange: true
226207 )
227208 }
228209
229210 func parseMethodDefinitionNode(
230211 _ node: ASTNode ,
231212 textProvider: @escaping TextProvider
232- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
213+ ) -> NodeInfo ? {
233214 parseSignatureBeforeBody ( node, fieldNameForName: " selector " , textProvider: textProvider)
234215 }
235216
236- func parseFunctionDefinitionNode (
217+ func parseTypeSpecifierNode (
237218 _ node: ASTNode ,
238219 textProvider: @escaping TextProvider
239- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
220+ ) -> NodeInfo ? {
240221 parseSignatureBeforeBody ( node, textProvider: textProvider)
241222 }
242223
243- func parseTypeSpecifierNode (
224+ func parseTypedefNode (
244225 _ node: ASTNode ,
245226 textProvider: @escaping TextProvider
246- ) -> ( nodeInfo: NodeInfo ? , more: Bool ) {
247- parseSignatureBeforeBody ( node, textProvider: textProvider)
227+ ) -> NodeInfo ? {
228+ guard let typeNode = node. child ( byFieldName: " type " ) else { return nil }
229+ return parseSignatureBeforeBody ( typeNode, textProvider: textProvider)
248230 }
249231
250- func parseTypedefNode (
232+ func parseFunctionDefinitionNode (
251233 _ node: ASTNode ,
252234 textProvider: @escaping TextProvider
253- ) -> ( nodeInfo: NodeInfo ? , more: Bool ) {
254- guard let typeNode = node. child ( byFieldName: " type " ) else { return ( nil , false ) }
255- return parseSignatureBeforeBody ( typeNode, textProvider: textProvider)
235+ ) -> NodeInfo ? {
236+ let declaratorNode = node. child ( byFieldName: " declarator " )
237+ let name = declaratorNode? . contentOfChild (
238+ withFieldName: " declarator " ,
239+ textProvider: textProvider
240+ )
241+ let (
242+ _,
243+ signatureRange,
244+ signaturePointRange
245+ ) = node. extractInformationBeforeNode ( withFieldName: " body " )
246+ let signature = textProvider ( . range( range: signatureRange, pointRange: signaturePointRange) )
247+ . replacingOccurrences ( of: " \n " , with: " " )
248+ . trimmingCharacters ( in: . whitespacesAndNewlines)
249+ if signature. isEmpty { return nil }
250+ return . init(
251+ node: node,
252+ signature: signature,
253+ name: name ?? " N/A " ,
254+ canBeUsedAsCodeRange: false
255+ )
256256 }
257257}
258258
@@ -263,7 +263,7 @@ extension ObjectiveCFocusedCodeFinder {
263263 _ node: ASTNode ,
264264 fieldNameForName: String = " name " ,
265265 textProvider: @escaping TextProvider
266- ) -> ( nodeInfo : NodeInfo ? , more : Bool ) {
266+ ) -> NodeInfo ? {
267267 let name = node. contentOfChild ( withFieldName: fieldNameForName, textProvider: textProvider)
268268 let (
269269 _,
@@ -273,15 +273,12 @@ extension ObjectiveCFocusedCodeFinder {
273273 let signature = textProvider ( . range( range: signatureRange, pointRange: signaturePointRange) )
274274 . replacingOccurrences ( of: " \n " , with: " " )
275275 . trimmingCharacters ( in: . whitespacesAndNewlines)
276- if signature. isEmpty { return ( nil , false ) }
277- return (
278- . init(
279- node: node,
280- signature: signature,
281- name: name ?? " N/A " ,
282- canBeUsedAsCodeRange: false
283- ) ,
284- false
276+ if signature. isEmpty { return nil }
277+ return . init(
278+ node: node,
279+ signature: signature,
280+ name: name ?? " N/A " ,
281+ canBeUsedAsCodeRange: false
285282 )
286283 }
287284}
0 commit comments