Skip to content

Commit da306f9

Browse files
committed
1 parent 458efc8 commit da306f9

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

client/src/client.ts

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import * as lsp from 'vscode-languageclient/node';
1313

1414
import {ProjectLoadingFinish, ProjectLoadingStart, SuggestStrictMode, SuggestStrictModeParams} from '../common/notifications';
1515
import {NgccProgress, NgccProgressToken, NgccProgressType} from '../common/progress';
16-
import {GetComponentsWithTemplateFile, GetTcbRequest, IsInAngularProject} from '../common/requests';
16+
import {GetComponentsWithTemplateFile, GetEditsForFileRenameParams, GetEditsForFileRenameRequest, GetTcbRequest, IsInAngularProject} from '../common/requests';
1717
import {resolve, Version} from '../common/resolver';
1818

1919
import {isInsideComponentDecorator, isInsideInlineTemplateRegion, isInsideStringLiteral} from './embedded_support';
@@ -147,6 +147,42 @@ export class AngularLanguageClient implements vscode.Disposable {
147147
}
148148
}
149149
};
150+
vscode.workspace.onWillRenameFiles((e: vscode.FileWillRenameEvent) => {
151+
if (!this.client) {
152+
return;
153+
}
154+
155+
const c2pConverter = this.client.code2ProtocolConverter;
156+
const requests: Array<Promise<lsp.WorkspaceEdit|null>> = [];
157+
for (let f of e.files) {
158+
requests.push(this.client.sendRequest(GetEditsForFileRenameRequest, {
159+
oldUri: c2pConverter.asUri(f.oldUri),
160+
newUri: c2pConverter.asUri(f.newUri),
161+
}));
162+
}
163+
const response = Promise.all(requests).then(allEdits => {
164+
const final: lsp.WorkspaceEdit = {};
165+
for (const edit of allEdits) {
166+
if (!edit) {
167+
continue;
168+
}
169+
final.changes = {...final.changes, ...edit.changes};
170+
if (edit.documentChanges && edit.documentChanges.length > 0) {
171+
if (!final.documentChanges) {
172+
final.documentChanges = [];
173+
}
174+
final.documentChanges.push(...edit.documentChanges);
175+
}
176+
final.changeAnnotations = {...final.changeAnnotations, ...edit.changeAnnotations};
177+
}
178+
if (!final.changeAnnotations && !final.changes && !final.documentChanges) {
179+
return undefined;
180+
}
181+
const p2cConverter = this.client!.protocol2CodeConverter;
182+
return p2cConverter.asWorkspaceEdit(final);
183+
})
184+
e.waitUntil(response);
185+
});
150186
}
151187

152188
private async isInAngularProject(doc: vscode.TextDocument): Promise<boolean> {

common/requests.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@ export const GetComponentsWithTemplateFile = new lsp.RequestType<
1515
export interface GetComponentsWithTemplateFileParams {
1616
textDocument: lsp.TextDocumentIdentifier;
1717
}
18+
export interface GetEditsForFileRenameParams {
19+
oldUri: lsp.URI;
20+
newUri: lsp.URI;
21+
}
22+
23+
export const GetEditsForFileRenameRequest =
24+
new lsp.RequestType<GetEditsForFileRenameParams, lsp.WorkspaceEdit|null, /* error */ void>(
25+
'angular/getEditsForFileRename');
1826

1927
export interface GetTcbParams {
2028
textDocument: lsp.TextDocumentIdentifier;
2129
position: lsp.Position;
2230
}
2331

32+
2433
export const GetTcbRequest =
2534
new lsp.RequestType<GetTcbParams, GetTcbResponse|null, /* error */ void>('angular/getTcb');
2635

server/src/session.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import * as lsp from 'vscode-languageserver/node';
1515
import {ServerOptions} from '../common/initialize';
1616
import {ProjectLanguageService, ProjectLoadingFinish, ProjectLoadingStart, SuggestStrictMode} from '../common/notifications';
1717
import {NgccProgressToken, NgccProgressType} from '../common/progress';
18-
import {GetComponentsWithTemplateFile, GetTcbParams, GetTcbRequest, GetTcbResponse, IsInAngularProject, IsInAngularProjectParams} from '../common/requests';
18+
import {GetComponentsWithTemplateFile, GetEditsForFileRenameParams, GetEditsForFileRenameRequest, GetTcbParams, GetTcbRequest, GetTcbResponse, IsInAngularProject, IsInAngularProjectParams} from '../common/requests';
1919

2020
import {readNgCompletionData, tsCompletionEntryToLspCompletionItem} from './completion';
2121
import {tsDiagnosticToLspDiagnostic} from './diagnostic';
@@ -170,11 +170,16 @@ export class Session {
170170
conn.onRequest(GetComponentsWithTemplateFile, p => this.onGetComponentsWithTemplateFile(p));
171171
conn.onRequest(GetTcbRequest, p => this.onGetTcb(p));
172172
conn.onRequest(IsInAngularProject, p => this.isInAngularProject(p));
173+
conn.onRequest(GetEditsForFileRenameRequest, p => this.getEditsForFileRename(p));
173174
conn.onCodeLens(p => this.onCodeLens(p));
174175
conn.onCodeLensResolve(p => this.onCodeLensResolve(p));
175176
conn.onSignatureHelp(p => this.onSignatureHelp(p));
176177
}
177178

179+
private getEditsForFileRename(p: GetEditsForFileRenameParams): lsp.WorkspaceEdit|null {
180+
return null;
181+
}
182+
178183
private isInAngularProject(params: IsInAngularProjectParams): boolean {
179184
const filePath = uriToFilePath(params.textDocument.uri);
180185
if (!filePath) {

0 commit comments

Comments
 (0)