Skip to content

Commit 7dcd116

Browse files
committed
Simplify contextContainingNode
1 parent 72035e7 commit 7dcd116

File tree

4 files changed

+131
-138
lines changed

4 files changed

+131
-138
lines changed

Tool/Sources/FocusedCodeFinder/KnownLanguageFocusedCodeFinder.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public protocol KnownLanguageFocusedCodeFinderType: FocusedCodeFinderType {
5858
func contextContainingNode(
5959
_ node: Node,
6060
textProvider: @escaping TextProvider
61-
) -> (nodeInfo: NodeInfo?, more: Bool)
61+
) -> NodeInfo?
6262

6363
func createTextProviderAndRangeConverter(
6464
for document: Document,
@@ -92,7 +92,7 @@ public extension KnownLanguageFocusedCodeFinderType {
9292
var focusedNode: Node?
9393
while let node = contextInfo.nodes.first {
9494
contextInfo.nodes.removeFirst()
95-
let (nodeInfo, _) = contextContainingNode(node, textProvider: textProvider)
95+
let nodeInfo = contextContainingNode(node, textProvider: textProvider)
9696
if nodeInfo?.canBeUsedAsCodeRange ?? false {
9797
focusedNode = node
9898
break
@@ -186,7 +186,7 @@ extension KnownLanguageFocusedCodeFinderType {
186186

187187
while let node = nodes.first {
188188
nodes.removeFirst()
189-
let (context, more) = contextContainingNode(node, textProvider: textProvider)
189+
let context = contextContainingNode(node, textProvider: textProvider)
190190

191191
if let context {
192192
contextRange = rangeConverter(context.node)
@@ -196,10 +196,6 @@ extension KnownLanguageFocusedCodeFinderType {
196196
range: contextRange
197197
), at: 0)
198198
}
199-
200-
if !more {
201-
break
202-
}
203199
}
204200

205201
return (contextRange, signature)

Tool/Sources/FocusedCodeFinder/ObjectiveC/ObjectiveCCodeFinder.swift

Lines changed: 93 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)