22// Licensed under the MIT License.
33
44import vscode = require( "vscode" ) ;
5- import { RequestType } from "vscode-languageclient" ;
5+ import { RequestType } from "vscode-languageclient" ;
66import { LanguageClientConsumer } from "../languageClientConsumer" ;
77import { RenameProvider , WorkspaceEdit , TextDocument , CancellationToken , Position , Uri , Range } from "vscode" ;
88// eslint-disable-next-line @typescript-eslint/no-empty-interface
@@ -89,9 +89,7 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
8989 }
9090 }
9191 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 > {
9593
9694 const req :IRenameSymbolRequestArguments = {
9795 FileName : document . fileName ,
@@ -103,12 +101,25 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
103101 const response = await this . languageClient ?. sendRequest ( PrepareRenameSymbolRequestType , req ) ;
104102
105103 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+
107110 }
108- return Promise . reject ( response . message ) ;
111+ const wordText = document . getText ( wordRange ) ;
112+ if ( response . message ) {
113+ return Promise . reject ( response . message ) ;
109114
115+ }
116+
117+ return {
118+ range : wordRange ,
119+ placeholder : wordText . substring ( 1 )
120+ } ;
110121 } catch ( error ) {
111- return undefined ;
122+ return null ;
112123 }
113124 }
114125
0 commit comments