Skip to content

Commit dc69e28

Browse files
atscottKeen Yee Liau
authored andcommitted
feat: add getReferencesAtPosition to capabilities
The Angular Language Service for Ivy will have a be able to provide references for a template location so we need to add `referencesProvider` to the capabilities.
1 parent 27ae848 commit dc69e28

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

integration/lsp/viewengine_spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ describe('initialization', () => {
124124
definitionProvider: true,
125125
typeDefinitionProvider: false,
126126
hoverProvider: true,
127+
referencesProvider: false,
127128
workspace: {
128129
workspaceFolders: {
129130
supported: true,

server/src/session.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export class Session {
103103
conn.onDidSaveTextDocument(p => this.onDidSaveTextDocument(p));
104104
conn.onDefinition(p => this.onDefinition(p));
105105
conn.onTypeDefinition(p => this.onTypeDefinition(p));
106+
conn.onReferences(p => this.onReferences(p));
106107
conn.onHover(p => this.onHover(p));
107108
conn.onCompletion(p => this.onCompletion(p));
108109
conn.onNotification(notification.NgccComplete, p => this.handleNgccNotification(p));
@@ -262,6 +263,7 @@ export class Session {
262263
},
263264
definitionProvider: true,
264265
typeDefinitionProvider: this.ivy,
266+
referencesProvider: this.ivy,
265267
hoverProvider: true,
266268
workspace: {
267269
workspaceFolders: {supported: true},
@@ -391,6 +393,25 @@ export class Session {
391393
return this.tsDefinitionsToLspLocationLinks(definitions);
392394
}
393395

396+
private onReferences(params: lsp.TextDocumentPositionParams): lsp.Location[]|undefined {
397+
const lsInfo = this.getLSAndScriptInfo(params.textDocument);
398+
if (lsInfo === undefined) {
399+
return;
400+
}
401+
const {languageService, scriptInfo} = lsInfo;
402+
const offset = lspPositionToTsPosition(scriptInfo, params.position);
403+
const references = languageService.getReferencesAtPosition(scriptInfo.fileName, offset);
404+
if (references === undefined) {
405+
return;
406+
}
407+
return references.map(ref => {
408+
const scriptInfo = this.projectService.getScriptInfo(ref.fileName);
409+
const range = scriptInfo ? tsTextSpanToLspRange(scriptInfo, ref.textSpan) : EMPTY_RANGE;
410+
const uri = filePathToUri(ref.fileName);
411+
return {uri, range};
412+
});
413+
}
414+
394415
private tsDefinitionsToLspLocationLinks(
395416
definitions: readonly ts.DefinitionInfo[],
396417
originSelectionRange?: lsp.Range): lsp.LocationLink[] {

0 commit comments

Comments
 (0)