diff --git a/packages/language-service/api.ts b/packages/language-service/api.ts index ebc7aa116cd..c05e68f9659 100644 --- a/packages/language-service/api.ts +++ b/packages/language-service/api.ts @@ -110,6 +110,9 @@ export interface NgLanguageService extends ts.LanguageService { ): Promise; hasCodeFixesForErrorCode(errorCode: number): boolean; + + getTokenTypeFromClassification(classification: number): number | undefined; + getTokenModifierFromClassification(classification: number): number; } export function isNgLanguageService( diff --git a/packages/language-service/src/language_service.ts b/packages/language-service/src/language_service.ts index 75eab42e3c0..4ed9e579ae5 100644 --- a/packages/language-service/src/language_service.ts +++ b/packages/language-service/src/language_service.ts @@ -49,7 +49,7 @@ import { } from './utils/ts_utils'; import {getTypeCheckInfoAtPosition, isTypeScriptFile, TypeCheckInfo} from './utils'; import {ActiveRefactoring, allRefactorings} from './refactorings/refactoring'; -import {getClassificationsForTemplate} from './semantic_tokens'; +import {getClassificationsForTemplate, TokenEncodingConsts} from './semantic_tokens'; import {isExternalResource} from '@angular/compiler-cli/src/ngtsc/metadata'; type LanguageServiceConfig = Omit; @@ -363,6 +363,17 @@ export class LanguageService { } } + getTokenTypeFromClassification(classification: number): number | undefined { + if (classification > TokenEncodingConsts.modifierMask) { + return (classification >> TokenEncodingConsts.typeOffset) - 1; + } + return undefined; + } + + getTokenModifierFromClassification(classification: number) { + return classification & TokenEncodingConsts.modifierMask; + } + getCompletionsAtPosition( fileName: string, position: number, diff --git a/packages/language-service/src/ts_plugin.ts b/packages/language-service/src/ts_plugin.ts index e6e7824c491..902f85f1358 100644 --- a/packages/language-service/src/ts_plugin.ts +++ b/packages/language-service/src/ts_plugin.ts @@ -149,6 +149,13 @@ export function create(info: ts.server.PluginCreateInfo): NgLanguageService { } } + function getTokenTypeFromClassification(classification: number): number | undefined { + return ngLS.getTokenTypeFromClassification(classification); + } + function getTokenModifierFromClassification(classification: number): number { + return ngLS.getTokenModifierFromClassification(classification); + } + function getCompletionsAtPosition( fileName: string, position: number, @@ -371,6 +378,8 @@ export function create(info: ts.server.PluginCreateInfo): NgLanguageService { findRenameLocations, getRenameInfo, getEncodedSemanticClassifications, + getTokenTypeFromClassification, + getTokenModifierFromClassification, getCompletionsAtPosition, getCompletionEntryDetails, getCompletionEntrySymbol,