2021-01-28 20:43:37 +00:00
|
|
|
/**
|
|
|
|
|
* @license
|
|
|
|
|
* Copyright Google LLC All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Use of this source code is governed by an MIT-style license that can be
|
2024-09-20 15:23:15 +00:00
|
|
|
* found in the LICENSE file at https://angular.dev/license
|
2021-01-28 20:43:37 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @module
|
|
|
|
|
* @description
|
|
|
|
|
* Entry point for all public APIs of the language service package.
|
|
|
|
|
*/
|
|
|
|
|
|
2026-01-29 18:19:46 +00:00
|
|
|
import type ts from 'typescript';
|
2021-01-28 20:43:37 +00:00
|
|
|
|
2021-03-02 23:46:11 +00:00
|
|
|
export interface PluginConfig {
|
2021-02-23 18:51:23 +00:00
|
|
|
/**
|
|
|
|
|
* If true, return only Angular results. Otherwise, return Angular + TypeScript
|
|
|
|
|
* results.
|
|
|
|
|
*/
|
|
|
|
|
angularOnly: boolean;
|
2021-03-02 23:46:11 +00:00
|
|
|
/**
|
|
|
|
|
* If true, enable `strictTemplates` in Angular compiler options regardless
|
|
|
|
|
* of its value in tsconfig.json.
|
|
|
|
|
*/
|
|
|
|
|
forceStrictTemplates?: true;
|
2023-11-08 17:33:53 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If false, disables parsing control flow blocks in the compiler. Should be used only when older
|
|
|
|
|
* versions of Angular that do not support blocks (pre-v17) used with the language service.
|
|
|
|
|
*/
|
|
|
|
|
enableBlockSyntax?: false;
|
2024-02-13 19:33:27 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Version of `@angular/core` that was detected in the user's workspace.
|
|
|
|
|
*/
|
|
|
|
|
angularCoreVersion?: string;
|
2024-06-05 07:07:40 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If false, disables parsing of `@let` declarations in the compiler.
|
|
|
|
|
*/
|
2024-06-26 16:30:56 +00:00
|
|
|
enableLetSyntax?: false;
|
2024-09-05 17:16:15 +00:00
|
|
|
|
2025-04-23 09:29:21 +00:00
|
|
|
/**
|
|
|
|
|
* Whether selectorless is enabled.
|
|
|
|
|
*/
|
|
|
|
|
enableSelectorless?: true;
|
|
|
|
|
|
2024-09-05 17:16:15 +00:00
|
|
|
/**
|
|
|
|
|
* A list of diagnostic codes that should be supressed in the language service.
|
|
|
|
|
*/
|
|
|
|
|
suppressAngularDiagnosticCodes?: number[];
|
2021-02-23 18:51:23 +00:00
|
|
|
}
|
|
|
|
|
|
2021-01-28 20:43:37 +00:00
|
|
|
export type GetTcbResponse = {
|
|
|
|
|
/**
|
|
|
|
|
* The filename of the SourceFile this typecheck block belongs to.
|
|
|
|
|
* The filename is entirely opaque and unstable, useful only for debugging
|
|
|
|
|
* purposes.
|
|
|
|
|
*/
|
|
|
|
|
fileName: string;
|
|
|
|
|
/** The content of the SourceFile this typecheck block belongs to. */
|
|
|
|
|
content: string;
|
|
|
|
|
/**
|
|
|
|
|
* Spans over node(s) in the typecheck block corresponding to the
|
|
|
|
|
* TS code generated for template node under the current cursor position.
|
|
|
|
|
*
|
|
|
|
|
* When the cursor position is over a source for which there is no generated
|
|
|
|
|
* code, `selections` is empty.
|
|
|
|
|
*/
|
|
|
|
|
selections: ts.TextSpan[];
|
2021-02-22 22:13:43 +00:00
|
|
|
};
|
2021-01-28 20:43:37 +00:00
|
|
|
|
2021-01-28 18:31:04 +00:00
|
|
|
export type GetComponentLocationsForTemplateResponse = ts.DocumentSpan[];
|
2021-08-20 00:42:53 +00:00
|
|
|
export type GetTemplateLocationForComponentResponse = ts.DocumentSpan | undefined;
|
2021-01-28 18:31:04 +00:00
|
|
|
|
2024-07-08 15:10:01 +00:00
|
|
|
/**
|
|
|
|
|
* Function that can be invoked to show progress when computing
|
|
|
|
|
* refactoring edits.
|
|
|
|
|
*
|
|
|
|
|
* Useful for refactorings which take a long time to compute edits for.
|
|
|
|
|
*/
|
|
|
|
|
export type ApplyRefactoringProgressFn = (percentage: number, updateMessage: string) => void;
|
|
|
|
|
|
2024-09-26 13:13:58 +00:00
|
|
|
/** Interface describing the result for computing edits of a refactoring. */
|
|
|
|
|
export interface ApplyRefactoringResult extends Omit<ts.RefactorEditInfo, 'notApplicableReason'> {
|
|
|
|
|
errorMessage?: string;
|
|
|
|
|
warningMessage?: string;
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-26 22:08:01 +00:00
|
|
|
/**
|
|
|
|
|
* Result for linked editing ranges containing the ranges and optional word pattern.
|
|
|
|
|
*/
|
|
|
|
|
export interface LinkedEditingRanges {
|
|
|
|
|
/** The ranges that should be edited together. */
|
|
|
|
|
ranges: ts.TextSpan[];
|
|
|
|
|
/** An optional word pattern to describe valid tag names. */
|
|
|
|
|
wordPattern?: string;
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-28 20:43:37 +00:00
|
|
|
/**
|
|
|
|
|
* `NgLanguageService` describes an instance of an Angular language service,
|
|
|
|
|
* whose API surface is a strict superset of TypeScript's language service.
|
|
|
|
|
*/
|
|
|
|
|
export interface NgLanguageService extends ts.LanguageService {
|
2026-02-19 21:36:06 +00:00
|
|
|
/**
|
|
|
|
|
* Triggers the Angular compiler's analysis pipeline without performing
|
|
|
|
|
* per-file type checking. This is a lighter alternative to calling
|
|
|
|
|
* `getSemanticDiagnostics()` when the goal is only to ensure that the
|
|
|
|
|
* Angular project has been analyzed (e.g. during project initialization).
|
|
|
|
|
*/
|
|
|
|
|
ensureProjectAnalyzed(): void;
|
|
|
|
|
|
2021-02-22 22:13:43 +00:00
|
|
|
getTcb(fileName: string, position: number): GetTcbResponse | undefined;
|
2026-01-26 22:08:01 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Gets linked editing ranges for synchronized editing of HTML tag pairs.
|
|
|
|
|
*
|
|
|
|
|
* When the cursor is on an element tag name, returns both the opening and closing
|
|
|
|
|
* tag name spans so they can be edited simultaneously. This overrides TypeScript's
|
|
|
|
|
* built-in method which only works for JSX/TSX.
|
|
|
|
|
*
|
|
|
|
|
* @param fileName The file to check
|
|
|
|
|
* @param position The cursor position in the file
|
|
|
|
|
* @returns LinkedEditingRanges if on a tag name, undefined otherwise
|
|
|
|
|
*/
|
|
|
|
|
getLinkedEditingRangeAtPosition(
|
|
|
|
|
fileName: string,
|
|
|
|
|
position: number,
|
|
|
|
|
): LinkedEditingRanges | undefined;
|
2021-01-28 18:31:04 +00:00
|
|
|
getComponentLocationsForTemplate(fileName: string): GetComponentLocationsForTemplateResponse;
|
2021-08-20 00:42:53 +00:00
|
|
|
getTemplateLocationForComponent(
|
|
|
|
|
fileName: string,
|
|
|
|
|
position: number,
|
|
|
|
|
): GetTemplateLocationForComponentResponse;
|
2023-09-26 17:31:27 +00:00
|
|
|
getTypescriptLanguageService(): ts.LanguageService;
|
2024-07-08 15:10:01 +00:00
|
|
|
|
|
|
|
|
applyRefactoring(
|
|
|
|
|
fileName: string,
|
|
|
|
|
positionOrRange: number | ts.TextRange,
|
|
|
|
|
refactorName: string,
|
|
|
|
|
reportProgress: ApplyRefactoringProgressFn,
|
2024-09-26 13:13:58 +00:00
|
|
|
): Promise<ApplyRefactoringResult | undefined>;
|
2024-07-16 12:17:57 +00:00
|
|
|
|
|
|
|
|
hasCodeFixesForErrorCode(errorCode: number): boolean;
|
2025-06-24 18:57:09 +00:00
|
|
|
|
|
|
|
|
getTokenTypeFromClassification(classification: number): number | undefined;
|
|
|
|
|
getTokenModifierFromClassification(classification: number): number;
|
2021-01-28 20:43:37 +00:00
|
|
|
}
|
2021-02-22 22:14:31 +00:00
|
|
|
|
|
|
|
|
export function isNgLanguageService(
|
|
|
|
|
ls: ts.LanguageService | NgLanguageService,
|
|
|
|
|
): ls is NgLanguageService {
|
|
|
|
|
return 'getTcb' in ls;
|
|
|
|
|
}
|