/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
///
import { CompileDirectiveMetadata, CompileDirectiveSummary, CompilePipeSummary, CssSelector, NgAnalyzedModules, Node as HtmlAst, ParseError, Parser, StaticSymbol, TemplateAst } from '@angular/compiler';
import * as ts from 'typescript';
import { Span, Symbol, SymbolQuery, SymbolTable } from './symbols';
export { StaticSymbol } from '@angular/compiler';
export { BuiltinType, Definition, PipeInfo, Pipes, Signature, Span, Symbol, SymbolDeclaration, SymbolQuery, SymbolTable } from './symbols';
/**
* The information `LanguageService` needs from the `LanguageServiceHost` to describe the content of
* a template and the language context the template is in.
*
* A host interface; see `LanguageServiceHost`.
*
* @publicApi
*/
export interface TemplateSource {
/**
* The source of the template.
*/
readonly source: string;
/**
* The span of the template within the source file.
*/
readonly span: Span;
/**
* A static symbol for the template's component.
*/
readonly type: StaticSymbol;
/**
* The `SymbolTable` for the members of the component.
*/
readonly members: SymbolTable;
/**
* A `SymbolQuery` for the context of the template.
*/
readonly query: SymbolQuery;
/**
* Name of the file that contains the template. Could be `.html` or `.ts`.
*/
readonly fileName: string;
}
/**
* Error information found getting declaration information
*
* A host type; see `LanguageServiceHost`.
*
* @publicApi
*/
export interface DeclarationError {
/**
* The span of the error in the declaration's module.
*/
readonly span: Span;
/**
* The message to display describing the error or a chain
* of messages.
*/
readonly message: string | DiagnosticMessageChain;
}
/**
* Information about the component declarations.
*
* A file might contain a declaration without a template because the file contains only
* templateUrl references. However, the component declaration might contain errors that
* need to be reported such as the template string is missing or the component is not
* declared in a module. These error should be reported on the declaration, not the
* template.
*
* A host type; see `LanguageServiceHost`.
*
* @publicApi
*/
export interface Declaration {
/**
* The static symbol of the compponent being declared.
*/
readonly type: StaticSymbol;
/**
* The span of the declaration annotation reference (e.g. the 'Component' or 'Directive'
* reference).
*/
readonly declarationSpan: Span;
/**
* Reference to the compiler directive metadata for the declaration.
*/
readonly metadata: CompileDirectiveMetadata;
/**
* Error reported trying to get the metadata.
*/
readonly errors: DeclarationError[];
}
/**
* The host for a `LanguageService`. This provides all the `LanguageService` requires to respond
* to the `LanguageService` requests.
*
* This interface describes the requirements of the `LanguageService` on its host.
*
* The host interface is host language agnostic.
*
* Adding optional member to this interface or any interface that is described as a
* `LanguageServiceHost` interface is not considered a breaking change as defined by SemVer.
* Removing a method or changing a member from required to optional will also not be considered a
* breaking change.
*
* If a member is deprecated it will be changed to optional in a minor release before it is
* removed in a major release.
*
* Adding a required member or changing a method's parameters, is considered a breaking change and
* will only be done when breaking changes are allowed. When possible, a new optional member will
* be added and the old member will be deprecated. The new member will then be made required in
* and the old member will be removed only when breaking changes are allowed.
*
* While an interface is marked as experimental breaking-changes will be allowed between minor
* releases. After an interface is marked as stable breaking-changes will only be allowed between
* major releases. No breaking changes are allowed between patch releases.
*
* @publicApi
*/
export interface LanguageServiceHost {
/**
* Return the template source information for all templates in `fileName` or for `fileName` if
* it is a template file.
*/
getTemplates(fileName: string): TemplateSource[];
/**
* Returns the Angular declarations in the given file.
*/
getDeclarations(fileName: string): Declaration[];
/**
* Return a summary of all Angular modules in the project.
*/
getAnalyzedModules(): NgAnalyzedModules;
/**
* Return the AST for both HTML and template for the contextFile.
*/
getTemplateAst(template: TemplateSource): AstResult | undefined;
/**
* Return the template AST for the node that corresponds to the position.
*/
getTemplateAstAtPosition(fileName: string, position: number): AstResult | undefined;
}
/**
* The type of Angular directive. Used for QuickInfo in template.
*/
export declare enum DirectiveKind {
COMPONENT = "component",
DIRECTIVE = "directive",
EVENT = "event"
}
/**
* ScriptElementKind for completion.
*/
export declare enum CompletionKind {
ANGULAR_ELEMENT = "angular element",
ATTRIBUTE = "attribute",
COMPONENT = "component",
ELEMENT = "element",
ENTITY = "entity",
HTML_ATTRIBUTE = "html attribute",
HTML_ELEMENT = "html element",
KEY = "key",
METHOD = "method",
PIPE = "pipe",
PROPERTY = "property",
REFERENCE = "reference",
TYPE = "type",
VARIABLE = "variable"
}
export declare type CompletionEntry = Omit & {
kind: CompletionKind;
};
/**
* A template diagnostics message chain. This is similar to the TypeScript
* DiagnosticMessageChain. The messages are intended to be formatted as separate
* sentence fragments and indented.
*
* For compatibility previous implementation, the values are expected to override
* toString() to return a formatted message.
*
* @publicApi
*/
export interface DiagnosticMessageChain {
/**
* The text of the diagnostic message to display.
*/
message: string;
/**
* The next message in the chain.
*/
next?: DiagnosticMessageChain[];
}
/**
* An template diagnostic message to display.
*
* @publicApi
*/
export interface Diagnostic {
/**
* The kind of diagnostic message
*/
kind: ts.DiagnosticCategory;
/**
* The source span that should be highlighted.
*/
span: Span;
/**
* The text of the diagnostic message to display or a chain of messages.
*/
message: string | DiagnosticMessageChain;
}
/**
* An instance of an Angular language service created by `createLanguageService()`.
*
* The Angular language service implements a subset of methods defined in
* The Angular language service implements a subset of methods defined by
* the TypeScript language service.
*
* @publicApi
*/
export declare type LanguageService = Pick;
/** Information about an Angular template AST. */
export interface AstResult {
htmlAst: HtmlAst[];
templateAst: TemplateAst[];
directive: CompileDirectiveMetadata;
directives: CompileDirectiveSummary[];
pipes: CompilePipeSummary[];
parseErrors?: ParseError[];
expressionParser: Parser;
template: TemplateSource;
}
/** Information about a directive's selectors. */
export declare type SelectorInfo = {
selectors: CssSelector[];
map: Map;
};
export interface SymbolInfo {
symbol: Symbol;
span: ts.TextSpan;
staticSymbol?: StaticSymbol;
}
/** TODO: this should probably be merged with AstResult */
export interface DiagnosticTemplateInfo {
fileName?: string;
offset: number;
query: SymbolQuery;
members: SymbolTable;
htmlAst: HtmlAst[];
templateAst: TemplateAst[];
source: string;
}