@@ -6,6 +6,7 @@ import { RequestType } from "vscode-languageclient";
6
6
import { LanguageClientConsumer } from "../languageClientConsumer" ;
7
7
import { RenameProvider , WorkspaceEdit , TextDocument , CancellationToken , Position , Uri , Range , DocumentSelector } from "vscode" ;
8
8
import { LanguageClient } from "vscode-languageclient/node" ;
9
+ import { ILogger } from "../logging" ;
9
10
// eslint-disable-next-line @typescript-eslint/no-empty-interface
10
11
interface IRenameSymbolRequestArguments {
11
12
FileName ?:string
@@ -42,14 +43,15 @@ interface IPrepareRenameSymbolRequestResponse {
42
43
message : string
43
44
}
44
45
45
- export const RenameSymbolRequestType = new RequestType < IRenameSymbolRequestArguments , IRenameSymbolRequestResponse , void > ( "powerShell/renameSymbol" ) ;
46
- export const PrepareRenameSymbolRequestType = new RequestType < IPrepareRenameSymbolRequestArguments , IPrepareRenameSymbolRequestResponse , void > ( "powerShell/PrepareRenameSymbol" ) ;
46
+ const RenameSymbolRequestType = new RequestType < IRenameSymbolRequestArguments , IRenameSymbolRequestResponse , void > ( "powerShell/renameSymbol" ) ;
47
+ const PrepareRenameSymbolRequestType = new RequestType < IPrepareRenameSymbolRequestArguments , IPrepareRenameSymbolRequestResponse , void > ( "powerShell/PrepareRenameSymbol" ) ;
47
48
48
49
export class RenameSymbolFeature extends LanguageClientConsumer implements RenameProvider {
49
50
private languageRenameProvider :vscode . Disposable ;
50
51
51
- constructor ( documentSelector :DocumentSelector ) {
52
+ constructor ( documentSelector :DocumentSelector , private logger : ILogger ) {
52
53
super ( ) ;
54
+
53
55
this . languageRenameProvider = vscode . languages . registerRenameProvider ( documentSelector , this ) ;
54
56
}
55
57
// eslint-disable-next-line @typescript-eslint/no-empty-function
@@ -72,15 +74,16 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
72
74
}
73
75
74
76
const edit = new WorkspaceEdit ( ) ;
75
- response . changes . forEach ( change => {
76
- const uri = Uri . file ( change . fileName ) ;
77
+ for ( const file of response . changes ) {
78
+
79
+ const uri = Uri . file ( file . fileName ) ;
77
80
78
- change . changes . forEach ( change => {
81
+ for ( const change of file . changes ) {
79
82
edit . replace ( uri ,
80
83
new Range ( change . startLine , change . startColumn , change . endLine , change . endColumn ) ,
81
84
change . newText ) ;
82
- } ) ;
83
- } ) ;
85
+ }
86
+ }
84
87
return edit ;
85
88
} catch ( error ) {
86
89
return undefined ;
@@ -104,21 +107,22 @@ export class RenameSymbolFeature extends LanguageClientConsumer implements Renam
104
107
}
105
108
const wordRange = document . getWordRangeAtPosition ( position ) ;
106
109
if ( ! wordRange ) {
107
- return Promise . reject ( "Not a valid location for renaming." ) ;
110
+ throw new Error ( "Not a valid location for renaming." ) ;
108
111
109
112
}
110
113
const wordText = document . getText ( wordRange ) ;
111
114
if ( response . message ) {
112
- return Promise . reject ( response . message ) ;
113
-
115
+ throw new Error ( response . message ) ;
114
116
}
115
117
116
118
return {
117
119
range : wordRange ,
118
120
placeholder : wordText
119
121
} ;
120
122
} catch ( error ) {
121
- return null ;
123
+ const msg = `RenameSymbol unhandled error: ${ error } ` ;
124
+ this . logger . writeError ( msg ) ;
125
+ throw new Error ( msg ) ;
122
126
}
123
127
}
124
128
public dispose ( ) : void {
0 commit comments