2
2
// Licensed under the MIT License.
3
3
4
4
import vscode = require( "vscode" ) ;
5
- import { RequestType } from "vscode-languageclient" ;
5
+ import { RequestType } from "vscode-languageclient" ;
6
6
import { LanguageClientConsumer } from "../languageClientConsumer" ;
7
7
import { RenameProvider , WorkspaceEdit , TextDocument , CancellationToken , Position , Uri , Range } from "vscode" ;
8
8
// eslint-disable-next-line @typescript-eslint/no-empty-interface
@@ -89,9 +89,7 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
89
89
}
90
90
}
91
91
public async prepareRename ( document : vscode . TextDocument , position : vscode . Position , _token : vscode . CancellationToken ) : Promise < vscode . Range | {
92
- range : vscode .
93
- Range ; placeholder : string ;
94
- } | null | undefined > {
92
+ range : vscode . Range ; placeholder : string ; } | null > {
95
93
96
94
const req :IRenameSymbolRequestArguments = {
97
95
FileName : document . fileName ,
@@ -103,12 +101,25 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
103
101
const response = await this . languageClient ?. sendRequest ( PrepareRenameSymbolRequestType , req ) ;
104
102
105
103
if ( ! response ) {
106
- return undefined ;
104
+ return null ;
105
+ }
106
+ const wordRange = document . getWordRangeAtPosition ( position ) ;
107
+ if ( ! wordRange ) {
108
+ return Promise . reject ( "Not a valid location for renaming." ) ;
109
+
107
110
}
108
- return Promise . reject ( response . message ) ;
111
+ const wordText = document . getText ( wordRange ) ;
112
+ if ( response . message ) {
113
+ return Promise . reject ( response . message ) ;
109
114
115
+ }
116
+
117
+ return {
118
+ range : wordRange ,
119
+ placeholder : wordText . substring ( 1 )
120
+ } ;
110
121
} catch ( error ) {
111
- return undefined ;
122
+ return null ;
112
123
}
113
124
}
114
125
0 commit comments