Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6dea0b5

Browse files
committed
Rename within workspace
1 parent 4fb3080 commit 6dea0b5

File tree

2 files changed

+67
-9
lines changed

2 files changed

+67
-9
lines changed

‎server/src/analyser.ts‎

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ export default class Analyzer {
304304
let continueSearching = false
305305
let boundary = position.line
306306

307-
const find = (base: Parser.SyntaxNode) => {
307+
const findUsingGlobalSemantics = (base: Parser.SyntaxNode) => {
308308
TreeSitterUtil.forEach(base, (n) => {
309309
if (
310310
(declaration && !continueSearching) ||
@@ -391,7 +391,7 @@ export default class Analyzer {
391391
return true
392392
})
393393
} else if (parent.type === 'subshell') {
394-
find(parent)
394+
findUsingGlobalSemantics(parent)
395395
}
396396

397397
if (declaration && !continueSearching) {
@@ -403,10 +403,19 @@ export default class Analyzer {
403403
}
404404

405405
if (!parent && (!declaration || continueSearching)) {
406-
const root = this.uriToAnalyzedDocument[uri]?.tree.rootNode
406+
const uris = this.getReachableUris({fromUri: uri})
407407

408-
if (root) {
409-
find(root)
408+
for (const u of uris) {
409+
const root = this.uriToAnalyzedDocument[u]?.tree.rootNode
410+
411+
if (root) {
412+
findUsingGlobalSemantics(root)
413+
}
414+
415+
if (declaration && !continueSearching) {
416+
uri = u
417+
break
418+
}
410419
}
411420
}
412421

@@ -855,6 +864,26 @@ export default class Analyzer {
855864
this.includeAllWorkspaceSymbols = includeAllWorkspaceSymbols
856865
}
857866

867+
// TODO: Handle cases where sourcing files gets sourced.
868+
public findAllSourcingUris(uri: string): string[] {
869+
if (this.includeAllWorkspaceSymbols) {
870+
return Object.keys(this.uriToAnalyzedDocument)
871+
}
872+
873+
const uris = []
874+
for (const [u, ad] of Object.entries(this.uriToAnalyzedDocument)) {
875+
if (ad?.sourcedUris) {
876+
for (const v of ad.sourcedUris.values()) {
877+
if (v === uri) {
878+
uris.push(u)
879+
break
880+
}
881+
}
882+
}
883+
}
884+
return uris
885+
}
886+
858887
// Private methods
859888

860889
/**

‎server/src/server.ts‎

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,7 @@ export default class BashServer {
765765
word: symbol.word,
766766
kind: symbol.kind,
767767
})
768+
768769
const ranges = !declaration
769770
? this.analyzer.findOccurrencesWithin({
770771
uri: params.textDocument.uri,
@@ -773,21 +774,20 @@ export default class BashServer {
773774
})
774775
: parent
775776
? this.analyzer.findOccurrencesWithin({
776-
uri: declaration.uri,
777+
uri: params.textDocument.uri,
777778
word: symbol.word,
778779
kind: symbol.kind,
779780
start: declaration.range.start,
780781
scope: parent.range,
781782
})
782783
: declaration.uri === params.textDocument.uri
783784
? this.analyzer.findOccurrencesWithin({
784-
uri: declaration.uri,
785+
uri: params.textDocument.uri,
785786
word: symbol.word,
786787
kind: symbol.kind,
787788
start: declaration.range.start,
788789
})
789790
: null
790-
791791
if (ranges) {
792792
return <LSP.WorkspaceEdit>{
793793
changes: {
@@ -799,7 +799,36 @@ export default class BashServer {
799799
}
800800
}
801801

802-
return null
802+
const edits: LSP.WorkspaceEdit = {}
803+
if (declaration) {
804+
edits.changes = {}
805+
806+
edits.changes[declaration.uri] = this.analyzer
807+
.findOccurrencesWithin({
808+
uri: declaration.uri,
809+
word: symbol.word,
810+
kind: symbol.kind,
811+
start: declaration.range.start,
812+
})
813+
.map((range) => ({
814+
range,
815+
newText: params.newName,
816+
}))
817+
818+
for (const uri of this.analyzer.findAllSourcingUris(declaration.uri)) {
819+
edits.changes[uri] = this.analyzer
820+
.findOccurrencesWithin({
821+
uri,
822+
word: symbol.word,
823+
kind: symbol.kind,
824+
})
825+
.map((range) => ({
826+
range,
827+
newText: params.newName,
828+
}))
829+
}
830+
}
831+
return edits
803832
}
804833
}
805834

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /