@@ -97,15 +97,15 @@ import SwiftSyntax
9797 /// - for `memberBlock` - a, b, c, d, e, f
9898 /// - for `codeBlock` - a
9999 @_spi ( Experimental) public func lookup(
100- for identifier: Identifier ? ,
101- at origin : AbsolutePosition ,
100+ identifier: Identifier ? ,
101+ at lookUpPosition : AbsolutePosition ,
102102 with config: LookupConfig
103103 ) -> [ LookupResult ] {
104104 switch config. fileScopeHandling {
105105 case . memberBlock:
106106 let names = introducedNames ( using: . memberBlock)
107107 . filter { lookupName in
108- checkName ( identifier, refersTo: lookupName, at: origin )
108+ checkName ( identifier, refersTo: lookupName, at: lookUpPosition )
109109 }
110110
111111 return names. isEmpty ? [ ] : [ . fromFileScope( self , withNames: names) ]
@@ -119,22 +119,19 @@ import SwiftSyntax
119119
120120 if encounteredNonDeclaration {
121121 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) } )
122125 } 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)
131128 }
132129 }
133130
134131 let sequentialNames = sequentialLookup (
135132 in: sequentialItems,
136- for : identifier,
137- at: origin ,
133+ identifier : identifier,
134+ at: lookUpPosition ,
138135 with: config,
139136 createResultsForThisScopeWith: { . fromFileScope( self , withNames: $0) }
140137 )
@@ -154,14 +151,14 @@ import SwiftSyntax
154151 }
155152
156153 @_spi ( Experimental) public func lookup(
157- for identifier: Identifier ? ,
158- at origin : AbsolutePosition ,
154+ identifier: Identifier ? ,
155+ at lookUpPosition : AbsolutePosition ,
159156 with config: LookupConfig
160157 ) -> [ LookupResult ] {
161158 sequentialLookup (
162159 in: statements,
163- for : identifier,
164- at: origin ,
160+ identifier : identifier,
161+ at: lookUpPosition ,
165162 with: config,
166163 createResultsForThisScopeWith: { . fromScope( self , withNames: $0) }
167164 )
@@ -274,14 +271,14 @@ import SwiftSyntax
274271 /// }
275272 /// ```
276273 @_spi ( Experimental) public func lookup(
277- for identifier: Identifier ? ,
278- at origin : AbsolutePosition ,
274+ identifier: Identifier ? ,
275+ at lookUpPosition : AbsolutePosition ,
279276 with config: LookupConfig
280277 ) -> [ 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)
283280 } else {
284- return defaultLookupImplementation ( for : identifier, at: origin , with: config)
281+ return defaultLookupImplementation ( identifier : identifier, at: lookUpPosition , with: config)
285282 }
286283 }
287284}
@@ -319,25 +316,24 @@ import SwiftSyntax
319316 /// // a is visible here
320317 /// ```
321318 func lookupFromSequentialParent(
322- for identifier: Identifier ? ,
323- at origin : AbsolutePosition ,
319+ identifier: Identifier ? ,
320+ at lookUpPosition : AbsolutePosition ,
324321 with config: LookupConfig
325322 ) -> [ LookupResult ] {
326- guard body. position > origin || body. endPosition < origin
327- else { return [ ] }
323+ guard !body. range. contains ( lookUpPosition) else { return [ ] }
328324
329325 let names = namesIntroducedToSequentialParent. filter { introducedName in
330- checkName ( identifier, refersTo: introducedName, at: origin )
326+ checkName ( identifier, refersTo: introducedName, at: lookUpPosition )
331327 }
332328
333329 return names. isEmpty ? [ ] : [ . fromScope( self , withNames: names) ]
334330 }
335331}
336332
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 { }
341337@_spi ( Experimental) extension ExtensionDeclSyntax : TypeScopeSyntax { }
342338
343339@_spi ( Experimental) extension AccessorDeclSyntax : ScopeSyntax {
@@ -360,7 +356,50 @@ import SwiftSyntax
360356
361357@_spi ( Experimental) extension CatchClauseSyntax : ScopeSyntax {
362358 /// Implicit `error` when there are no catch items.
363- public var introducedNames : [ LookupName ] {
359+ @ _spi ( Experimental ) public var introducedNames : [ LookupName ] {
364360 return catchItems. isEmpty ? [ . implicit( . error( self ) ) ] : [ ]
365361 }
366362}
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