@@ -97,15 +97,15 @@ import SwiftSyntax
97
97
/// - for `memberBlock` - a, b, c, d, e, f
98
98
/// - for `codeBlock` - a
99
99
@_spi ( Experimental) public func lookup(
100
- for identifier: Identifier ? ,
101
- at origin : AbsolutePosition ,
100
+ identifier: Identifier ? ,
101
+ at lookUpPosition : AbsolutePosition ,
102
102
with config: LookupConfig
103
103
) -> [ LookupResult ] {
104
104
switch config. fileScopeHandling {
105
105
case . memberBlock:
106
106
let names = introducedNames ( using: . memberBlock)
107
107
. filter { lookupName in
108
- checkName ( identifier, refersTo: lookupName, at: origin )
108
+ checkName ( identifier, refersTo: lookupName, at: lookUpPosition )
109
109
}
110
110
111
111
return names. isEmpty ? [ ] : [ . fromFileScope( self , withNames: names) ]
@@ -119,22 +119,19 @@ import SwiftSyntax
119
119
120
120
if encounteredNonDeclaration {
121
121
sequentialItems. append ( codeBlockItem)
122
+ } else if item. is ( DeclSyntax . self) {
123
+ let foundNames = LookupName . getNames ( from: item)
124
+ members. append ( contentsOf: foundNames. filter { checkName ( identifier, refersTo: $0, at: lookUpPosition) } )
122
125
} else {
123
- if item. is ( DeclSyntax . self) {
124
- let foundNames = LookupName . getNames ( from: item)
125
-
126
- members. append ( contentsOf: foundNames. filter { checkName ( identifier, refersTo: $0, at: origin) } )
127
- } else {
128
- encounteredNonDeclaration = true
129
- sequentialItems. append ( codeBlockItem)
130
- }
126
+ encounteredNonDeclaration = true
127
+ sequentialItems. append ( codeBlockItem)
131
128
}
132
129
}
133
130
134
131
let sequentialNames = sequentialLookup (
135
132
in: sequentialItems,
136
- for : identifier,
137
- at: origin ,
133
+ identifier : identifier,
134
+ at: lookUpPosition ,
138
135
with: config,
139
136
createResultsForThisScopeWith: { . fromFileScope( self , withNames: $0) }
140
137
)
@@ -154,14 +151,14 @@ import SwiftSyntax
154
151
}
155
152
156
153
@_spi ( Experimental) public func lookup(
157
- for identifier: Identifier ? ,
158
- at origin : AbsolutePosition ,
154
+ identifier: Identifier ? ,
155
+ at lookUpPosition : AbsolutePosition ,
159
156
with config: LookupConfig
160
157
) -> [ LookupResult ] {
161
158
sequentialLookup (
162
159
in: statements,
163
- for : identifier,
164
- at: origin ,
160
+ identifier : identifier,
161
+ at: lookUpPosition ,
165
162
with: config,
166
163
createResultsForThisScopeWith: { . fromScope( self , withNames: $0) }
167
164
)
@@ -274,14 +271,14 @@ import SwiftSyntax
274
271
/// }
275
272
/// ```
276
273
@_spi ( Experimental) public func lookup(
277
- for identifier: Identifier ? ,
278
- at origin : AbsolutePosition ,
274
+ identifier: Identifier ? ,
275
+ at lookUpPosition : AbsolutePosition ,
279
276
with config: LookupConfig
280
277
) -> [ LookupResult ] {
281
- if let elseBody, elseBody. position <= origin , elseBody . endPosition >= origin {
282
- return lookupInParent ( for : identifier, at: origin , with: config)
278
+ if let elseBody, elseBody. range . contains ( lookUpPosition ) {
279
+ return lookupInParent ( identifier : identifier, at: lookUpPosition , with: config)
283
280
} else {
284
- return defaultLookupImplementation ( for : identifier, at: origin , with: config)
281
+ return defaultLookupImplementation ( identifier : identifier, at: lookUpPosition , with: config)
285
282
}
286
283
}
287
284
}
@@ -319,25 +316,24 @@ import SwiftSyntax
319
316
/// // a is visible here
320
317
/// ```
321
318
func lookupFromSequentialParent(
322
- for identifier: Identifier ? ,
323
- at origin : AbsolutePosition ,
319
+ identifier: Identifier ? ,
320
+ at lookUpPosition : AbsolutePosition ,
324
321
with config: LookupConfig
325
322
) -> [ LookupResult ] {
326
- guard body. position > origin || body. endPosition < origin
327
- else { return [ ] }
323
+ guard !body. range. contains ( lookUpPosition) else { return [ ] }
328
324
329
325
let names = namesIntroducedToSequentialParent. filter { introducedName in
330
- checkName ( identifier, refersTo: introducedName, at: origin )
326
+ checkName ( identifier, refersTo: introducedName, at: lookUpPosition )
331
327
}
332
328
333
329
return names. isEmpty ? [ ] : [ . fromScope( self , withNames: names) ]
334
330
}
335
331
}
336
332
337
- @_spi ( Experimental) extension ActorDeclSyntax : TypeScopeSyntax { }
338
- @_spi ( Experimental) extension ClassDeclSyntax : TypeScopeSyntax { }
339
- @_spi ( Experimental) extension StructDeclSyntax : TypeScopeSyntax { }
340
- @_spi ( Experimental) extension EnumDeclSyntax : TypeScopeSyntax { }
333
+ @_spi ( Experimental) extension ActorDeclSyntax : TypeScopeSyntax , WithGenericParametersOrAssociatedTypesScopeSyntax { }
334
+ @_spi ( Experimental) extension ClassDeclSyntax : TypeScopeSyntax , WithGenericParametersOrAssociatedTypesScopeSyntax { }
335
+ @_spi ( Experimental) extension StructDeclSyntax : TypeScopeSyntax , WithGenericParametersOrAssociatedTypesScopeSyntax { }
336
+ @_spi ( Experimental) extension EnumDeclSyntax : TypeScopeSyntax , WithGenericParametersOrAssociatedTypesScopeSyntax { }
341
337
@_spi ( Experimental) extension ExtensionDeclSyntax : TypeScopeSyntax { }
342
338
343
339
@_spi ( Experimental) extension AccessorDeclSyntax : ScopeSyntax {
@@ -360,7 +356,50 @@ import SwiftSyntax
360
356
361
357
@_spi ( Experimental) extension CatchClauseSyntax : ScopeSyntax {
362
358
/// Implicit `error` when there are no catch items.
363
- public var introducedNames : [ LookupName ] {
359
+ @ _spi ( Experimental ) public var introducedNames : [ LookupName ] {
364
360
return catchItems. isEmpty ? [ . implicit( . error( self ) ) ] : [ ]
365
361
}
366
362
}
363
+
364
+ @_spi ( Experimental) extension SwitchCaseSyntax : ScopeSyntax {
365
+ /// Names introduced within `case` items.
366
+ @_spi ( Experimental) public var introducedNames : [ LookupName ] {
367
+ label. as ( SwitchCaseLabelSyntax . self) ? . caseItems. flatMap { child in
368
+ LookupName . getNames ( from: child. pattern)
369
+ } ?? [ ]
370
+ }
371
+ }
372
+
373
+ @_spi ( Experimental) extension GenericParameterClauseSyntax : GenericParameterOrAssociatedTypeScopeSyntax {
374
+ /// Generic parameter names introduced by this clause.
375
+ @_spi ( Experimental) public var introducedNames : [ LookupName ] {
376
+ parameters. children ( viewMode: . sourceAccurate) . flatMap { child in
377
+ LookupName . getNames ( from: child, accessibleAfter: child. endPosition)
378
+ }
379
+ }
380
+ }
381
+
382
+ @_spi ( Experimental) extension PrimaryAssociatedTypeClauseSyntax : GenericParameterOrAssociatedTypeScopeSyntax {
383
+ /// Primary associated type names introduced by this clause.
384
+ @_spi ( Experimental) public var introducedNames : [ LookupName ] {
385
+ primaryAssociatedTypes. children ( viewMode: . sourceAccurate) . flatMap { child in
386
+ LookupName . getNames ( from: child, accessibleAfter: child. endPosition)
387
+ }
388
+ }
389
+ }
390
+
391
+ @_spi ( Experimental) extension ProtocolDeclSyntax : WithGenericParametersOrAssociatedTypesScopeSyntax {
392
+ /// Protocol declarations don't introduce names by themselves.
393
+ @_spi ( Experimental) public var introducedNames : [ LookupName ] {
394
+ [ ]
395
+ }
396
+ }
397
+
398
+ @_spi ( Experimental) extension FunctionDeclSyntax : WithGenericParametersOrAssociatedTypesScopeSyntax {
399
+ /// Function parameters introduced by this function's signature.
400
+ @_spi ( Experimental) public var introducedNames : [ LookupName ] {
401
+ signature. parameterClause. parameters. flatMap { parameter in
402
+ LookupName . getNames ( from: parameter)
403
+ }
404
+ }
405
+ }
0 commit comments