@@ -730,24 +730,27 @@ extension SourceKitLSPServer {
730
730
731
731
// If we have a USR + old name, perform an index lookup to find workspace-wide symbols to rename.
732
732
// First, group all occurrences of that USR by the files they occur in.
733
- var locationsByFile : [ URL : [ RenameLocation ] ] = [ : ]
733
+ var locationsByFile : [ DocumentURI : [ RenameLocation ] ] = [ : ]
734
734
735
735
actor LanguageServerTypesCache {
736
736
let index : UncheckedIndex
737
- var languageServerTypesCache : [ URL : LanguageServerType ? ] = [ : ]
737
+ var languageServerTypesCache : [ DocumentURI : LanguageServerType ? ] = [ : ]
738
738
739
739
init ( index: UncheckedIndex ) {
740
740
self . index = index
741
741
}
742
742
743
- func languageServerType( for url : URL ) -> LanguageServerType ? {
744
- if let cachedValue = languageServerTypesCache [ url ] {
743
+ func languageServerType( for uri : DocumentURI ) -> LanguageServerType ? {
744
+ if let cachedValue = languageServerTypesCache [ uri ] {
745
745
return cachedValue
746
746
}
747
- let serverType = LanguageServerType (
748
- symbolProvider: index. symbolProvider ( for: url. path)
749
- )
750
- languageServerTypesCache [ url] = serverType
747
+ let serverType : LanguageServerType ? =
748
+ if let fileURL = uri. fileURL {
749
+ LanguageServerType ( symbolProvider: index. symbolProvider ( for: fileURL. path) )
750
+ } else {
751
+ nil
752
+ }
753
+ languageServerTypesCache [ uri] = serverType
751
754
return serverType
752
755
}
753
756
}
@@ -757,17 +760,17 @@ extension SourceKitLSPServer {
757
760
let usrsToRename = overridingAndOverriddenUsrs ( of: usr, index: index)
758
761
let occurrencesToRename = usrsToRename. flatMap { index. occurrences ( ofUSR: $0, roles: renameRoles) }
759
762
for occurrence in occurrencesToRename {
760
- let url = URL ( fileURLWithPath : occurrence. location. path )
763
+ let uri = occurrence. location. documentUri
761
764
762
765
// Determine whether we should add the location produced by the index to those that will be renamed, or if it has
763
766
// already been handled by the set provided by the AST.
764
- if changes [ DocumentURI ( url ) ] != nil {
767
+ if changes [ uri ] != nil {
765
768
if occurrence. symbol. usr == usr {
766
769
// If the language server's rename function already produced AST-based locations for this symbol, no need to
767
770
// perform an indexed rename for it.
768
771
continue
769
772
}
770
- switch await languageServerTypesCache. languageServerType ( for: url ) {
773
+ switch await languageServerTypesCache. languageServerType ( for: uri ) {
771
774
case . swift:
772
775
// sourcekitd only produces AST-based results for the direct calls to this USR. This is because the Swift
773
776
// AST only has upwards references to superclasses and overridden methods, not the other way round. It is
@@ -788,17 +791,16 @@ extension SourceKitLSPServer {
788
791
utf8Column: occurrence. location. utf8Column,
789
792
usage: RenameLocation . Usage ( roles: occurrence. roles)
790
793
)
791
- locationsByFile [ url , default: [ ] ] . append ( renameLocation)
794
+ locationsByFile [ uri , default: [ ] ] . append ( renameLocation)
792
795
}
793
796
794
797
// Now, call `editsToRename(locations:in:oldName:newName:)` on the language service to convert these ranges into
795
798
// edits.
796
799
let urisAndEdits =
797
800
await locationsByFile
798
- . concurrentMap { ( url: URL , renameLocations: [ RenameLocation ] ) -> ( DocumentURI , [ TextEdit ] ) ? in
799
- let uri = DocumentURI ( url)
801
+ . concurrentMap { ( uri: DocumentURI , renameLocations: [ RenameLocation ] ) -> ( DocumentURI , [ TextEdit ] ) ? in
800
802
let language : Language
801
- switch await languageServerTypesCache. languageServerType ( for: url ) {
803
+ switch await languageServerTypesCache. languageServerType ( for: uri ) {
802
804
case . clangd:
803
805
// Technically, we still don't know the language of the source file but defaulting to C is sufficient to
804
806
// ensure we get the clang toolchain language server, which is all we care about.
0 commit comments