2016-09-02 20:34:23 +02:00
|
|
|
namespace ts {
|
|
|
|
export interface Node {
|
|
|
|
getSourceFile(): SourceFile;
|
|
|
|
getChildCount(sourceFile?: SourceFile): number;
|
|
|
|
getChildAt(index: number, sourceFile?: SourceFile): Node;
|
|
|
|
getChildren(sourceFile?: SourceFile): Node[];
|
2017-03-15 19:44:36 +01:00
|
|
|
/* @internal */
|
2017-11-07 03:38:03 +01:00
|
|
|
// tslint:disable-next-line unified-signatures
|
2017-03-15 19:44:36 +01:00
|
|
|
getChildren(sourceFile?: SourceFileLike): Node[];
|
2016-09-02 20:34:23 +02:00
|
|
|
getStart(sourceFile?: SourceFile, includeJsDocComment?: boolean): number;
|
2017-03-15 19:44:36 +01:00
|
|
|
/* @internal */
|
2017-11-07 03:38:03 +01:00
|
|
|
// tslint:disable-next-line unified-signatures
|
2017-03-15 19:44:36 +01:00
|
|
|
getStart(sourceFile?: SourceFileLike, includeJsDocComment?: boolean): number;
|
2016-09-02 20:34:23 +02:00
|
|
|
getFullStart(): number;
|
|
|
|
getEnd(): number;
|
|
|
|
getWidth(sourceFile?: SourceFile): number;
|
|
|
|
getFullWidth(): number;
|
|
|
|
getLeadingTriviaWidth(sourceFile?: SourceFile): number;
|
|
|
|
getFullText(sourceFile?: SourceFile): string;
|
|
|
|
getText(sourceFile?: SourceFile): string;
|
|
|
|
getFirstToken(sourceFile?: SourceFile): Node;
|
|
|
|
getLastToken(sourceFile?: SourceFile): Node;
|
2017-03-10 19:42:26 +01:00
|
|
|
// See ts.forEachChild for documentation.
|
2017-05-23 18:54:02 +02:00
|
|
|
forEachChild<T>(cbNode: (node: Node) => T | undefined, cbNodeArray?: (nodes: NodeArray<Node>) => T | undefined): T | undefined;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2017-07-25 22:16:34 +02:00
|
|
|
export interface Identifier {
|
|
|
|
readonly text: string;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface Symbol {
|
2017-07-25 23:22:26 +02:00
|
|
|
readonly name: string;
|
2016-09-02 20:34:23 +02:00
|
|
|
getFlags(): SymbolFlags;
|
2017-07-25 23:22:26 +02:00
|
|
|
getEscapedName(): __String;
|
|
|
|
getName(): string;
|
2017-05-23 18:54:02 +02:00
|
|
|
getDeclarations(): Declaration[] | undefined;
|
2017-11-06 22:18:21 +01:00
|
|
|
getDocumentationComment(typeChecker: TypeChecker | undefined): SymbolDisplayPart[];
|
2016-12-13 00:29:29 +01:00
|
|
|
getJsDocTags(): JSDocTagInfo[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface Type {
|
|
|
|
getFlags(): TypeFlags;
|
2017-05-23 18:54:02 +02:00
|
|
|
getSymbol(): Symbol | undefined;
|
2016-09-02 20:34:23 +02:00
|
|
|
getProperties(): Symbol[];
|
2017-05-23 18:54:02 +02:00
|
|
|
getProperty(propertyName: string): Symbol | undefined;
|
2016-09-02 20:34:23 +02:00
|
|
|
getApparentProperties(): Symbol[];
|
|
|
|
getCallSignatures(): Signature[];
|
|
|
|
getConstructSignatures(): Signature[];
|
2017-05-23 18:54:02 +02:00
|
|
|
getStringIndexType(): Type | undefined;
|
|
|
|
getNumberIndexType(): Type | undefined;
|
|
|
|
getBaseTypes(): BaseType[] | undefined;
|
2016-09-02 20:34:23 +02:00
|
|
|
getNonNullableType(): Type;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Signature {
|
|
|
|
getDeclaration(): SignatureDeclaration;
|
2017-05-23 18:54:02 +02:00
|
|
|
getTypeParameters(): TypeParameter[] | undefined;
|
2016-09-02 20:34:23 +02:00
|
|
|
getParameters(): Symbol[];
|
|
|
|
getReturnType(): Type;
|
2017-11-06 22:18:21 +01:00
|
|
|
getDocumentationComment(typeChecker: TypeChecker | undefined): SymbolDisplayPart[];
|
2016-12-13 00:29:29 +01:00
|
|
|
getJsDocTags(): JSDocTagInfo[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface SourceFile {
|
|
|
|
/* @internal */ version: string;
|
|
|
|
/* @internal */ scriptSnapshot: IScriptSnapshot;
|
2017-07-06 23:45:50 +02:00
|
|
|
/* @internal */ nameTable: UnderscoreEscapedMap<number>;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2016-10-28 00:50:21 +02:00
|
|
|
/* @internal */ getNamedDeclarations(): Map<Declaration[]>;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getLineAndCharacterOfPosition(pos: number): LineAndCharacter;
|
2016-11-17 01:01:16 +01:00
|
|
|
getLineEndOfPosition(pos: number): number;
|
2017-08-24 18:55:01 +02:00
|
|
|
getLineStarts(): ReadonlyArray<number>;
|
2016-09-02 20:34:23 +02:00
|
|
|
getPositionOfLineAndCharacter(line: number, character: number): number;
|
|
|
|
update(newText: string, textChangeRange: TextChangeRange): SourceFile;
|
|
|
|
}
|
|
|
|
|
2017-03-15 19:44:36 +01:00
|
|
|
export interface SourceFileLike {
|
|
|
|
getLineAndCharacterOfPosition(pos: number): LineAndCharacter;
|
|
|
|
}
|
|
|
|
|
2017-05-18 20:08:07 +02:00
|
|
|
export interface SourceMapSource {
|
|
|
|
getLineAndCharacterOfPosition(pos: number): LineAndCharacter;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
/**
|
|
|
|
* Represents an immutable snapshot of a script at a specified time.Once acquired, the
|
|
|
|
* snapshot is observably immutable. i.e. the same calls with the same parameters will return
|
|
|
|
* the same values.
|
|
|
|
*/
|
2017-11-03 01:20:18 +01:00
|
|
|
// tslint:disable-next-line interface-name
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface IScriptSnapshot {
|
|
|
|
/** Gets a portion of the script snapshot specified by [start, end). */
|
|
|
|
getText(start: number, end: number): string;
|
|
|
|
|
|
|
|
/** Gets the length of this script snapshot. */
|
|
|
|
getLength(): number;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the TextChangeRange that describe how the text changed between this text and
|
|
|
|
* an older version. This information is used by the incremental parser to determine
|
|
|
|
* what sections of the script need to be re-parsed. 'undefined' can be returned if the
|
|
|
|
* change range cannot be determined. However, in that case, incremental parsing will
|
|
|
|
* not happen and the entire document will be re - parsed.
|
|
|
|
*/
|
|
|
|
getChangeRange(oldSnapshot: IScriptSnapshot): TextChangeRange | undefined;
|
|
|
|
|
|
|
|
/** Releases all resources held by this script snapshot */
|
|
|
|
dispose?(): void;
|
|
|
|
}
|
|
|
|
|
|
|
|
export namespace ScriptSnapshot {
|
|
|
|
class StringScriptSnapshot implements IScriptSnapshot {
|
|
|
|
|
|
|
|
constructor(private text: string) {
|
|
|
|
}
|
|
|
|
|
|
|
|
public getText(start: number, end: number): string {
|
2016-12-09 01:17:42 +01:00
|
|
|
return start === 0 && end === this.text.length
|
|
|
|
? this.text
|
|
|
|
: this.text.substring(start, end);
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public getLength(): number {
|
|
|
|
return this.text.length;
|
|
|
|
}
|
|
|
|
|
2016-10-19 17:27:49 +02:00
|
|
|
public getChangeRange(): TextChangeRange {
|
2016-09-02 20:34:23 +02:00
|
|
|
// Text-based snapshots do not support incremental parsing. Return undefined
|
|
|
|
// to signal that to the caller.
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function fromString(text: string): IScriptSnapshot {
|
|
|
|
return new StringScriptSnapshot(text);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export interface PreProcessedFileInfo {
|
|
|
|
referencedFiles: FileReference[];
|
|
|
|
typeReferenceDirectives: FileReference[];
|
|
|
|
importedFiles: FileReference[];
|
|
|
|
ambientExternalModules: string[];
|
|
|
|
isLibFile: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface HostCancellationToken {
|
|
|
|
isCancellationRequested(): boolean;
|
|
|
|
}
|
|
|
|
|
2017-10-18 00:04:09 +02:00
|
|
|
export interface InstallPackageOptions {
|
|
|
|
fileName: Path;
|
|
|
|
packageName: string;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
//
|
|
|
|
// Public interface of the host of a language service instance.
|
|
|
|
//
|
2017-10-18 00:04:09 +02:00
|
|
|
export interface LanguageServiceHost extends GetEffectiveTypeRootsHost {
|
2016-09-02 20:34:23 +02:00
|
|
|
getCompilationSettings(): CompilerOptions;
|
|
|
|
getNewLine?(): string;
|
|
|
|
getProjectVersion?(): string;
|
|
|
|
getScriptFileNames(): string[];
|
|
|
|
getScriptKind?(fileName: string): ScriptKind;
|
|
|
|
getScriptVersion(fileName: string): string;
|
|
|
|
getScriptSnapshot(fileName: string): IScriptSnapshot | undefined;
|
|
|
|
getLocalizedDiagnosticMessages?(): any;
|
|
|
|
getCancellationToken?(): HostCancellationToken;
|
|
|
|
getCurrentDirectory(): string;
|
|
|
|
getDefaultLibFileName(options: CompilerOptions): string;
|
|
|
|
log?(s: string): void;
|
|
|
|
trace?(s: string): void;
|
|
|
|
error?(s: string): void;
|
|
|
|
useCaseSensitiveFileNames?(): boolean;
|
|
|
|
|
2016-09-06 20:04:39 +02:00
|
|
|
/*
|
|
|
|
* LS host can optionally implement these methods to support completions for module specifiers.
|
|
|
|
* Without these methods, only completions for ambient modules will be provided.
|
|
|
|
*/
|
2017-07-12 02:39:33 +02:00
|
|
|
readDirectory?(path: string, extensions?: ReadonlyArray<string>, exclude?: ReadonlyArray<string>, include?: ReadonlyArray<string>, depth?: number): string[];
|
2017-07-14 23:26:13 +02:00
|
|
|
readFile?(path: string, encoding?: string): string | undefined;
|
2016-09-06 20:04:39 +02:00
|
|
|
fileExists?(path: string): boolean;
|
|
|
|
|
2016-09-27 23:02:10 +02:00
|
|
|
/*
|
|
|
|
* LS host can optionally implement these methods to support automatic updating when new type libraries are installed
|
|
|
|
*/
|
|
|
|
getTypeRootsVersion?(): number;
|
2016-09-28 00:04:34 +02:00
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
/*
|
|
|
|
* LS host can optionally implement this method if it wants to be completely in charge of module name resolution.
|
|
|
|
* if implementation is omitted then language service will use built-in module resolution logic and get answers to
|
|
|
|
* host specific questions using 'getScriptSnapshot'.
|
|
|
|
*/
|
2017-09-12 21:09:06 +02:00
|
|
|
resolveModuleNames?(moduleNames: string[], containingFile: string, reusedNames?: string[]): ResolvedModule[];
|
2016-09-02 20:34:23 +02:00
|
|
|
resolveTypeReferenceDirectives?(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
|
2017-10-03 04:08:13 +02:00
|
|
|
/* @internal */ hasInvalidatedResolution?: HasInvalidatedResolution;
|
|
|
|
/* @internal */ hasChangedAutomaticTypeDirectiveNames?: boolean;
|
2016-09-06 20:04:39 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* getDirectories is also required for full import and type reference completions. Without it defined, certain
|
|
|
|
* completions will not be provided
|
|
|
|
*/
|
2016-09-02 20:34:23 +02:00
|
|
|
getDirectories?(directoryName: string): string[];
|
2017-02-07 23:36:15 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a set of custom transformers to use during emit.
|
|
|
|
*/
|
|
|
|
getCustomTransformers?(): CustomTransformers | undefined;
|
2017-10-18 00:04:09 +02:00
|
|
|
|
|
|
|
isKnownTypesPackageName?(name: string): boolean;
|
2017-10-19 01:04:42 +02:00
|
|
|
installPackage?(options: InstallPackageOptions): Promise<ApplyCodeActionCommandResult>;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Public services of a language service instance associated
|
|
|
|
// with a language service host instance
|
|
|
|
//
|
|
|
|
export interface LanguageService {
|
|
|
|
cleanupSemanticCache(): void;
|
|
|
|
|
|
|
|
getSyntacticDiagnostics(fileName: string): Diagnostic[];
|
|
|
|
getSemanticDiagnostics(fileName: string): Diagnostic[];
|
|
|
|
|
|
|
|
// TODO: Rename this to getProgramDiagnostics to better indicate that these are any
|
|
|
|
// diagnostics present for the program level, and not just 'options' diagnostics.
|
|
|
|
getCompilerOptionsDiagnostics(): Diagnostic[];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated Use getEncodedSyntacticClassifications instead.
|
|
|
|
*/
|
|
|
|
getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @deprecated Use getEncodedSemanticClassifications instead.
|
|
|
|
*/
|
|
|
|
getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
|
|
|
|
|
|
|
// Encoded as triples of [start, length, ClassificationType].
|
|
|
|
getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications;
|
|
|
|
getEncodedSemanticClassifications(fileName: string, span: TextSpan): Classifications;
|
|
|
|
|
2017-11-03 23:55:31 +01:00
|
|
|
getCompletionsAtPosition(fileName: string, position: number, options: GetCompletionsAtPositionOptions | undefined): CompletionInfo;
|
2017-10-26 17:22:17 +02:00
|
|
|
// "options" and "source" are optional only for backwards-compatibility
|
2017-10-30 23:10:34 +01:00
|
|
|
getCompletionEntryDetails(
|
|
|
|
fileName: string,
|
|
|
|
position: number,
|
|
|
|
name: string,
|
|
|
|
options: FormatCodeOptions | FormatCodeSettings | undefined,
|
|
|
|
source: string | undefined,
|
|
|
|
): CompletionEntryDetails;
|
|
|
|
getCompletionEntrySymbol(fileName: string, position: number, name: string, source: string | undefined): Symbol;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getQuickInfoAtPosition(fileName: string, position: number): QuickInfo;
|
|
|
|
|
|
|
|
getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TextSpan;
|
|
|
|
|
|
|
|
getBreakpointStatementAtPosition(fileName: string, position: number): TextSpan;
|
|
|
|
|
|
|
|
getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems;
|
|
|
|
|
|
|
|
getRenameInfo(fileName: string, position: number): RenameInfo;
|
|
|
|
findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[];
|
|
|
|
|
|
|
|
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
|
2017-10-17 02:50:35 +02:00
|
|
|
getDefinitionAndBoundSpan(fileName: string, position: number): DefinitionInfoAndBoundSpan;
|
2016-09-02 20:34:23 +02:00
|
|
|
getTypeDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
|
2016-09-06 23:11:38 +02:00
|
|
|
getImplementationAtPosition(fileName: string, position: number): ImplementationLocation[];
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
|
|
|
|
findReferences(fileName: string, position: number): ReferencedSymbol[];
|
|
|
|
getDocumentHighlights(fileName: string, position: number, filesToSearch: string[]): DocumentHighlights[];
|
|
|
|
|
|
|
|
/** @deprecated */
|
|
|
|
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
|
|
|
|
|
2016-09-27 19:22:41 +02:00
|
|
|
getNavigateToItems(searchValue: string, maxResultCount?: number, fileName?: string, excludeDtsFiles?: boolean): NavigateToItem[];
|
2016-09-02 20:34:23 +02:00
|
|
|
getNavigationBarItems(fileName: string): NavigationBarItem[];
|
2016-10-11 16:48:28 +02:00
|
|
|
getNavigationTree(fileName: string): NavigationTree;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getOutliningSpans(fileName: string): OutliningSpan[];
|
|
|
|
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];
|
|
|
|
getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[];
|
2016-09-27 19:22:41 +02:00
|
|
|
getIndentationAtPosition(fileName: string, position: number, options: EditorOptions | EditorSettings): number;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2016-09-27 19:22:41 +02:00
|
|
|
getFormattingEditsForRange(fileName: string, start: number, end: number, options: FormatCodeOptions | FormatCodeSettings): TextChange[];
|
|
|
|
getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions | FormatCodeSettings): TextChange[];
|
|
|
|
getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions | FormatCodeSettings): TextChange[];
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion;
|
|
|
|
|
|
|
|
isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean;
|
|
|
|
|
2017-06-10 03:02:42 +02:00
|
|
|
getSpanOfEnclosingComment(fileName: string, position: number, onlyMultiLine: boolean): TextSpan;
|
2017-06-09 02:08:07 +02:00
|
|
|
|
2017-03-15 19:44:36 +01:00
|
|
|
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[], formatOptions: FormatCodeSettings): CodeAction[];
|
2017-10-19 01:04:42 +02:00
|
|
|
applyCodeActionCommand(fileName: string, action: CodeActionCommand): Promise<ApplyCodeActionCommandResult>;
|
2017-05-19 19:18:42 +02:00
|
|
|
getApplicableRefactors(fileName: string, positionOrRaneg: number | TextRange): ApplicableRefactorInfo[];
|
2017-06-06 23:58:18 +02:00
|
|
|
getEditsForRefactor(fileName: string, formatOptions: FormatCodeSettings, positionOrRange: number | TextRange, refactorName: string, actionName: string): RefactorEditInfo | undefined;
|
2016-09-16 23:09:58 +02:00
|
|
|
|
2017-09-26 22:34:56 +02:00
|
|
|
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean): EmitOutput;
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
getProgram(): Program;
|
|
|
|
|
|
|
|
/* @internal */ getNonBoundSourceFile(fileName: string): SourceFile;
|
|
|
|
|
2016-09-19 20:51:01 +02:00
|
|
|
/**
|
|
|
|
* @internal
|
|
|
|
* @deprecated Use ts.createSourceFile instead.
|
|
|
|
*/
|
|
|
|
getSourceFile(fileName: string): SourceFile;
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
dispose(): void;
|
|
|
|
}
|
|
|
|
|
2017-11-03 23:55:31 +01:00
|
|
|
export interface GetCompletionsAtPositionOptions {
|
|
|
|
includeExternalModuleExports: boolean;
|
|
|
|
}
|
|
|
|
|
2017-10-18 00:04:09 +02:00
|
|
|
export interface ApplyCodeActionCommandResult {
|
|
|
|
successMessage: string;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface Classifications {
|
|
|
|
spans: number[];
|
|
|
|
endOfLineState: EndOfLineState;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ClassifiedSpan {
|
|
|
|
textSpan: TextSpan;
|
2017-05-22 19:40:59 +02:00
|
|
|
classificationType: ClassificationTypeNames;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2016-10-11 16:48:28 +02:00
|
|
|
/**
|
|
|
|
* Navigation bar interface designed for visual studio's dual-column layout.
|
|
|
|
* This does not form a proper tree.
|
|
|
|
* The navbar is returned as a list of top-level items, each of which has a list of child items.
|
|
|
|
* Child items always have an empty array for their `childItems`.
|
|
|
|
*/
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface NavigationBarItem {
|
|
|
|
text: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string;
|
|
|
|
spans: TextSpan[];
|
|
|
|
childItems: NavigationBarItem[];
|
|
|
|
indent: number;
|
|
|
|
bolded: boolean;
|
|
|
|
grayed: boolean;
|
|
|
|
}
|
|
|
|
|
2016-10-11 16:48:28 +02:00
|
|
|
/**
|
|
|
|
* Node in a tree of nested declarations in a file.
|
|
|
|
* The top node is always a script or module node.
|
|
|
|
*/
|
|
|
|
export interface NavigationTree {
|
|
|
|
/** Name of the declaration, or a short description, e.g. "<class>". */
|
|
|
|
text: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-10-11 16:48:28 +02:00
|
|
|
/** ScriptElementKindModifier separated by commas, e.g. "public,abstract" */
|
|
|
|
kindModifiers: string;
|
|
|
|
/**
|
|
|
|
* Spans of the nodes that generated this declaration.
|
|
|
|
* There will be more than one if this is the result of merging.
|
|
|
|
*/
|
|
|
|
spans: TextSpan[];
|
|
|
|
/** Present if non-empty */
|
|
|
|
childItems?: NavigationTree[];
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface TodoCommentDescriptor {
|
|
|
|
text: string;
|
|
|
|
priority: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface TodoComment {
|
|
|
|
descriptor: TodoCommentDescriptor;
|
|
|
|
message: string;
|
|
|
|
position: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class TextChange {
|
|
|
|
span: TextSpan;
|
|
|
|
newText: string;
|
|
|
|
}
|
|
|
|
|
2016-09-16 23:09:58 +02:00
|
|
|
export interface FileTextChanges {
|
|
|
|
fileName: string;
|
|
|
|
textChanges: TextChange[];
|
|
|
|
}
|
2016-10-06 22:59:54 +02:00
|
|
|
|
2016-09-16 23:09:58 +02:00
|
|
|
export interface CodeAction {
|
|
|
|
/** Description of the code action to display in the UI of the editor */
|
|
|
|
description: string;
|
|
|
|
/** Text changes to apply to each file as part of the code action */
|
|
|
|
changes: FileTextChanges[];
|
2017-10-18 00:04:09 +02:00
|
|
|
/**
|
|
|
|
* If the user accepts the code fix, the editor should send the action back in a `applyAction` request.
|
|
|
|
* This allows the language service to have side effects (e.g. installing dependencies) upon a code fix.
|
|
|
|
*/
|
|
|
|
commands?: CodeActionCommand[];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Publicly, this type is just `{}`. Internally it is a union of all the actions we use.
|
|
|
|
// See `commands?: {}[]` in protocol.ts
|
|
|
|
export type CodeActionCommand = InstallPackageAction;
|
|
|
|
|
|
|
|
export interface InstallPackageAction {
|
|
|
|
/* @internal */ type: "install package";
|
|
|
|
/* @internal */ packageName: string;
|
2016-09-16 23:09:58 +02:00
|
|
|
}
|
|
|
|
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* A set of one or more available refactoring actions, grouped under a parent refactoring.
|
|
|
|
*/
|
2017-05-19 19:18:42 +02:00
|
|
|
export interface ApplicableRefactorInfo {
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* The programmatic name of the refactoring
|
|
|
|
*/
|
2017-05-19 19:18:42 +02:00
|
|
|
name: string;
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* A description of this refactoring category to show to the user.
|
|
|
|
* If the refactoring gets inlined (see below), this text will not be visible.
|
|
|
|
*/
|
2017-05-19 19:18:42 +02:00
|
|
|
description: string;
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* Inlineable refactorings can have their actions hoisted out to the top level
|
|
|
|
* of a context menu. Non-inlineanable refactorings should always be shown inside
|
|
|
|
* their parent grouping.
|
|
|
|
*
|
|
|
|
* If not specified, this value is assumed to be 'true'
|
|
|
|
*/
|
|
|
|
inlineable?: boolean;
|
|
|
|
|
|
|
|
actions: RefactorActionInfo[];
|
2017-05-19 19:18:42 +02:00
|
|
|
}
|
|
|
|
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* Represents a single refactoring action - for example, the "Extract Method..." refactor might
|
|
|
|
* offer several actions, each corresponding to a surround class or closure to extract into.
|
|
|
|
*/
|
2017-09-07 18:14:59 +02:00
|
|
|
export interface RefactorActionInfo {
|
2017-06-06 23:58:18 +02:00
|
|
|
/**
|
|
|
|
* The programmatic name of the refactoring action
|
|
|
|
*/
|
|
|
|
name: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A description of this refactoring action to show to the user.
|
|
|
|
* If the parent refactoring is inlined away, this will be the only text shown,
|
|
|
|
* so this description should make sense by itself if the parent is inlineable=true
|
|
|
|
*/
|
|
|
|
description: string;
|
2017-09-07 18:14:59 +02:00
|
|
|
}
|
2017-06-06 23:58:18 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* A set of edits to make in response to a refactor action, plus an optional
|
|
|
|
* location where renaming should be invoked from
|
|
|
|
*/
|
2017-09-07 18:14:59 +02:00
|
|
|
export interface RefactorEditInfo {
|
2017-06-06 23:58:18 +02:00
|
|
|
edits: FileTextChanges[];
|
2017-09-13 18:02:10 +02:00
|
|
|
renameFilename: string | undefined;
|
|
|
|
renameLocation: number | undefined;
|
2017-10-18 00:04:09 +02:00
|
|
|
commands?: CodeActionCommand[];
|
2017-09-07 18:14:59 +02:00
|
|
|
}
|
2017-06-06 23:58:18 +02:00
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface TextInsertion {
|
|
|
|
newText: string;
|
|
|
|
/** The position in newText the caret should point to after the insertion. */
|
|
|
|
caretOffset: number;
|
|
|
|
}
|
|
|
|
|
2017-03-16 23:53:05 +01:00
|
|
|
export interface DocumentSpan {
|
2016-09-02 20:34:23 +02:00
|
|
|
textSpan: TextSpan;
|
|
|
|
fileName: string;
|
|
|
|
}
|
|
|
|
|
2017-03-16 23:53:05 +01:00
|
|
|
export interface RenameLocation extends DocumentSpan {
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ReferenceEntry extends DocumentSpan {
|
2016-09-02 20:34:23 +02:00
|
|
|
isWriteAccess: boolean;
|
|
|
|
isDefinition: boolean;
|
2017-03-16 19:01:48 +01:00
|
|
|
isInString?: true;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2017-03-16 23:53:05 +01:00
|
|
|
export interface ImplementationLocation extends DocumentSpan {
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2017-03-16 23:53:05 +01:00
|
|
|
displayParts: SymbolDisplayPart[];
|
2016-09-06 23:11:38 +02:00
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface DocumentHighlights {
|
|
|
|
fileName: string;
|
|
|
|
highlightSpans: HighlightSpan[];
|
|
|
|
}
|
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
export const enum HighlightSpanKind {
|
|
|
|
none = "none",
|
|
|
|
definition = "definition",
|
|
|
|
reference = "reference",
|
|
|
|
writtenReference = "writtenReference",
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface HighlightSpan {
|
|
|
|
fileName?: string;
|
2017-03-16 19:01:48 +01:00
|
|
|
isInString?: true;
|
2016-09-02 20:34:23 +02:00
|
|
|
textSpan: TextSpan;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: HighlightSpanKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface NavigateToItem {
|
|
|
|
name: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
matchKind: string; // TODO: keyof typeof PatternMatchKind; (https://github.com/Microsoft/TypeScript/issues/15102)
|
2016-09-02 20:34:23 +02:00
|
|
|
isCaseSensitive: boolean;
|
|
|
|
fileName: string;
|
|
|
|
textSpan: TextSpan;
|
|
|
|
containerName: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
containerKind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2016-09-27 19:22:41 +02:00
|
|
|
export enum IndentStyle {
|
|
|
|
None = 0,
|
|
|
|
Block = 1,
|
|
|
|
Smart = 2,
|
|
|
|
}
|
|
|
|
|
|
|
|
/* @deprecated - consider using EditorSettings instead */
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface EditorOptions {
|
|
|
|
BaseIndentSize?: number;
|
|
|
|
IndentSize: number;
|
|
|
|
TabSize: number;
|
|
|
|
NewLineCharacter: string;
|
|
|
|
ConvertTabsToSpaces: boolean;
|
|
|
|
IndentStyle: IndentStyle;
|
|
|
|
}
|
|
|
|
|
2016-09-27 19:22:41 +02:00
|
|
|
export interface EditorSettings {
|
|
|
|
baseIndentSize?: number;
|
2016-10-12 20:02:56 +02:00
|
|
|
indentSize?: number;
|
|
|
|
tabSize?: number;
|
|
|
|
newLineCharacter?: string;
|
|
|
|
convertTabsToSpaces?: boolean;
|
|
|
|
indentStyle?: IndentStyle;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2016-09-27 19:22:41 +02:00
|
|
|
/* @deprecated - consider using FormatCodeSettings instead */
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface FormatCodeOptions extends EditorOptions {
|
|
|
|
InsertSpaceAfterCommaDelimiter: boolean;
|
|
|
|
InsertSpaceAfterSemicolonInForStatements: boolean;
|
|
|
|
InsertSpaceBeforeAndAfterBinaryOperators: boolean;
|
2016-12-20 17:05:10 +01:00
|
|
|
InsertSpaceAfterConstructor?: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
InsertSpaceAfterKeywordsInControlFlowStatements: boolean;
|
|
|
|
InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean;
|
|
|
|
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean;
|
|
|
|
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean;
|
2016-09-07 01:15:13 +02:00
|
|
|
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean;
|
|
|
|
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
|
2016-09-14 05:51:20 +02:00
|
|
|
InsertSpaceAfterTypeAssertion?: boolean;
|
2016-12-20 06:05:30 +01:00
|
|
|
InsertSpaceBeforeFunctionParenthesis?: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
PlaceOpenBraceOnNewLineForFunctions: boolean;
|
|
|
|
PlaceOpenBraceOnNewLineForControlBlocks: boolean;
|
2016-09-27 19:22:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface FormatCodeSettings extends EditorSettings {
|
2016-10-12 20:02:56 +02:00
|
|
|
insertSpaceAfterCommaDelimiter?: boolean;
|
|
|
|
insertSpaceAfterSemicolonInForStatements?: boolean;
|
|
|
|
insertSpaceBeforeAndAfterBinaryOperators?: boolean;
|
2016-12-20 17:05:10 +01:00
|
|
|
insertSpaceAfterConstructor?: boolean;
|
2016-10-12 20:02:56 +02:00
|
|
|
insertSpaceAfterKeywordsInControlFlowStatements?: boolean;
|
|
|
|
insertSpaceAfterFunctionKeywordForAnonymousFunctions?: boolean;
|
|
|
|
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis?: boolean;
|
|
|
|
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets?: boolean;
|
2016-09-27 19:22:41 +02:00
|
|
|
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean;
|
2016-10-12 20:02:56 +02:00
|
|
|
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean;
|
|
|
|
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
|
2016-09-27 19:22:41 +02:00
|
|
|
insertSpaceAfterTypeAssertion?: boolean;
|
2016-12-20 06:05:30 +01:00
|
|
|
insertSpaceBeforeFunctionParenthesis?: boolean;
|
2016-10-12 20:02:56 +02:00
|
|
|
placeOpenBraceOnNewLineForFunctions?: boolean;
|
|
|
|
placeOpenBraceOnNewLineForControlBlocks?: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface DefinitionInfo {
|
|
|
|
fileName: string;
|
|
|
|
textSpan: TextSpan;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
name: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
containerKind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
containerName: string;
|
|
|
|
}
|
|
|
|
|
2017-10-17 02:50:35 +02:00
|
|
|
export interface DefinitionInfoAndBoundSpan {
|
|
|
|
definitions: ReadonlyArray<DefinitionInfo>;
|
|
|
|
textSpan: TextSpan;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface ReferencedSymbolDefinitionInfo extends DefinitionInfo {
|
|
|
|
displayParts: SymbolDisplayPart[];
|
|
|
|
}
|
|
|
|
|
2017-03-27 20:51:13 +02:00
|
|
|
export interface ReferencedSymbol {
|
2016-09-02 20:34:23 +02:00
|
|
|
definition: ReferencedSymbolDefinitionInfo;
|
2017-03-27 20:51:13 +02:00
|
|
|
references: ReferenceEntry[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export enum SymbolDisplayPartKind {
|
|
|
|
aliasName,
|
|
|
|
className,
|
|
|
|
enumName,
|
|
|
|
fieldName,
|
|
|
|
interfaceName,
|
|
|
|
keyword,
|
|
|
|
lineBreak,
|
|
|
|
numericLiteral,
|
|
|
|
stringLiteral,
|
|
|
|
localName,
|
|
|
|
methodName,
|
|
|
|
moduleName,
|
|
|
|
operator,
|
|
|
|
parameterName,
|
|
|
|
propertyName,
|
|
|
|
punctuation,
|
|
|
|
space,
|
|
|
|
text,
|
|
|
|
typeParameterName,
|
|
|
|
enumMemberName,
|
|
|
|
functionName,
|
|
|
|
regularExpressionLiteral,
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface SymbolDisplayPart {
|
|
|
|
text: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: string;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2016-12-13 00:29:29 +01:00
|
|
|
export interface JSDocTagInfo {
|
|
|
|
name: string;
|
|
|
|
text?: string;
|
|
|
|
}
|
|
|
|
|
2016-09-02 20:34:23 +02:00
|
|
|
export interface QuickInfo {
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string;
|
|
|
|
textSpan: TextSpan;
|
|
|
|
displayParts: SymbolDisplayPart[];
|
|
|
|
documentation: SymbolDisplayPart[];
|
2016-12-13 00:29:29 +01:00
|
|
|
tags: JSDocTagInfo[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface RenameInfo {
|
|
|
|
canRename: boolean;
|
|
|
|
localizedErrorMessage: string;
|
|
|
|
displayName: string;
|
|
|
|
fullDisplayName: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string;
|
|
|
|
triggerSpan: TextSpan;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface SignatureHelpParameter {
|
|
|
|
name: string;
|
|
|
|
documentation: SymbolDisplayPart[];
|
|
|
|
displayParts: SymbolDisplayPart[];
|
|
|
|
isOptional: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a single signature to show in signature help.
|
|
|
|
* The id is used for subsequent calls into the language service to ask questions about the
|
|
|
|
* signature help item in the context of any documents that have been updated. i.e. after
|
|
|
|
* an edit has happened, while signature help is still active, the host can ask important
|
|
|
|
* questions like 'what parameter is the user currently contained within?'.
|
|
|
|
*/
|
|
|
|
export interface SignatureHelpItem {
|
|
|
|
isVariadic: boolean;
|
|
|
|
prefixDisplayParts: SymbolDisplayPart[];
|
|
|
|
suffixDisplayParts: SymbolDisplayPart[];
|
|
|
|
separatorDisplayParts: SymbolDisplayPart[];
|
|
|
|
parameters: SignatureHelpParameter[];
|
|
|
|
documentation: SymbolDisplayPart[];
|
2016-12-13 00:29:29 +01:00
|
|
|
tags: JSDocTagInfo[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a set of signature help items, and the preferred item that should be selected.
|
|
|
|
*/
|
|
|
|
export interface SignatureHelpItems {
|
|
|
|
items: SignatureHelpItem[];
|
|
|
|
applicableSpan: TextSpan;
|
|
|
|
selectedItemIndex: number;
|
|
|
|
argumentIndex: number;
|
|
|
|
argumentCount: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CompletionInfo {
|
2016-10-04 01:29:06 +02:00
|
|
|
isGlobalCompletion: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
isMemberCompletion: boolean;
|
2016-09-24 02:37:11 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* true when the current location also allows for a new identifier
|
|
|
|
*/
|
|
|
|
isNewIdentifierLocation: boolean;
|
2016-09-02 20:34:23 +02:00
|
|
|
entries: CompletionEntry[];
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface CompletionEntry {
|
|
|
|
name: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string; // see ScriptElementKindModifier, comma separated
|
|
|
|
sortText: string;
|
2016-09-06 20:04:39 +02:00
|
|
|
/**
|
2017-04-03 18:32:39 +02:00
|
|
|
* An optional span that indicates the text to be replaced by this completion item. It will be
|
|
|
|
* set if the required span differs from the one generated by the default replacement behavior and should
|
|
|
|
* be used in that case
|
|
|
|
*/
|
2016-09-06 20:04:39 +02:00
|
|
|
replacementSpan?: TextSpan;
|
Add exported members of all project files in the global completion list (#19069)
* checker.ts: Remove null check on symbols
* tsserverProjectSystem.ts: add two tests
* client.ts, completions.ts, types.ts: Add codeActions member to CompletionEntryDetails
* protocol.ts, session.ts: Add codeActions member to CompletionEntryDetails protocol
* protocol.ts, session.ts, types.ts: add hasAction to CompletionEntry
* session.ts, services.ts, types.ts: Add formattingOptions parameter to getCompletionEntryDetails
* completions.ts: define SymbolOriginInfo type
* completions.ts, services.ts: Add allSourceFiles parameter to getCompletionsAtPosition
* completions.ts, services.ts: Plumb allSourceFiles into new function getSymbolsFromOtherSourceFileExports inside getCompletionData
* completions.ts: add symbolToOriginInfoMap parameter to getCompletionEntriesFromSymbols and to return value of getCompletionData
* utilities.ts: Add getOtherModuleSymbols, getUniqueSymbolIdAsString, getUniqueSymbolId
* completions.ts: Set CompletionEntry.hasAction when symbol is found in symbolToOriginInfoMap (meaning there's an import action)
* completions.ts: Populate list with possible exports (implement getSymbolsFromOtherSourceFileExports)
* completions.ts, services.ts: Plumb host and rulesProvider into getCompletionEntryDetails
* completions.ts: Add TODO comment
* importFixes.ts: Add types ImportDeclarationMap and ImportCodeFixContext
* Move getImportDeclarations into getCodeActionForImport, immediately after the implementation
* importFixes.ts: Move createChangeTracker into getCodeActionForImport, immediately after getImportDeclarations
* importFixes.ts: Add convertToImportCodeFixContext function and reference it from the getCodeActions lambda
* importFixes.ts: Add context: ImportCodeFixContext parameter to getCodeActionForImport, update call sites, destructure it, use compilerOptions in getModuleSpecifierForNewImport
* importFixes.ts: Remove moduleSymbol parameter from getImportDeclarations and use the ambient one
* importFixes.ts: Use cachedImportDeclarations from context in getCodeActionForImport
* importFixes.ts: Move createCodeAction out, immediately above convertToImportCodeFixContext
* Move the declaration for lastImportDeclaration out of the getCodeActions lambda into getCodeActionForImport
* importFixes.ts: Use symbolToken in getCodeActionForImport
* importFixes.ts: Remove useCaseSensitiveFileNames altogether from getCodeActions lambda
* importFixes.ts: Remove local getUniqueSymbolId function and add checker parameter to calls to it
* importFixes.ts: Move getCodeActionForImport out into an export, immediately below convertToImportCodeFixContext
* completions.ts: In getCompletionEntryDetails, if there's symbolOriginInfo, call getCodeActionForImport
* importFixes.ts: Create and use importFixContext within getCodeActions lambda
* importFixes.ts: Use local newLineCharacter instead of context.newLineCharacter in getCodeActionForImport
* importFixes.ts: Use local host instead of context.host in getCodeActionForImport
* importFixes.ts: Remove dummy getCanonicalFileName line
* Filter symbols after gathering exports instead of before
* Lint
* Test, fix bugs, refactor
* Suggestions from code review
* Update api baseline
* Fix bug if previousToken is not an Identifier
* Replace `startsWith` with `stringContainsCharactersInOrder`
2017-10-17 19:20:11 +02:00
|
|
|
hasAction?: true;
|
2017-10-26 17:22:17 +02:00
|
|
|
source?: string;
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface CompletionEntryDetails {
|
|
|
|
name: string;
|
2017-05-20 05:06:08 +02:00
|
|
|
kind: ScriptElementKind;
|
2016-09-02 20:34:23 +02:00
|
|
|
kindModifiers: string; // see ScriptElementKindModifier, comma separated
|
|
|
|
displayParts: SymbolDisplayPart[];
|
|
|
|
documentation: SymbolDisplayPart[];
|
2016-12-13 00:29:29 +01:00
|
|
|
tags: JSDocTagInfo[];
|
Add exported members of all project files in the global completion list (#19069)
* checker.ts: Remove null check on symbols
* tsserverProjectSystem.ts: add two tests
* client.ts, completions.ts, types.ts: Add codeActions member to CompletionEntryDetails
* protocol.ts, session.ts: Add codeActions member to CompletionEntryDetails protocol
* protocol.ts, session.ts, types.ts: add hasAction to CompletionEntry
* session.ts, services.ts, types.ts: Add formattingOptions parameter to getCompletionEntryDetails
* completions.ts: define SymbolOriginInfo type
* completions.ts, services.ts: Add allSourceFiles parameter to getCompletionsAtPosition
* completions.ts, services.ts: Plumb allSourceFiles into new function getSymbolsFromOtherSourceFileExports inside getCompletionData
* completions.ts: add symbolToOriginInfoMap parameter to getCompletionEntriesFromSymbols and to return value of getCompletionData
* utilities.ts: Add getOtherModuleSymbols, getUniqueSymbolIdAsString, getUniqueSymbolId
* completions.ts: Set CompletionEntry.hasAction when symbol is found in symbolToOriginInfoMap (meaning there's an import action)
* completions.ts: Populate list with possible exports (implement getSymbolsFromOtherSourceFileExports)
* completions.ts, services.ts: Plumb host and rulesProvider into getCompletionEntryDetails
* completions.ts: Add TODO comment
* importFixes.ts: Add types ImportDeclarationMap and ImportCodeFixContext
* Move getImportDeclarations into getCodeActionForImport, immediately after the implementation
* importFixes.ts: Move createChangeTracker into getCodeActionForImport, immediately after getImportDeclarations
* importFixes.ts: Add convertToImportCodeFixContext function and reference it from the getCodeActions lambda
* importFixes.ts: Add context: ImportCodeFixContext parameter to getCodeActionForImport, update call sites, destructure it, use compilerOptions in getModuleSpecifierForNewImport
* importFixes.ts: Remove moduleSymbol parameter from getImportDeclarations and use the ambient one
* importFixes.ts: Use cachedImportDeclarations from context in getCodeActionForImport
* importFixes.ts: Move createCodeAction out, immediately above convertToImportCodeFixContext
* Move the declaration for lastImportDeclaration out of the getCodeActions lambda into getCodeActionForImport
* importFixes.ts: Use symbolToken in getCodeActionForImport
* importFixes.ts: Remove useCaseSensitiveFileNames altogether from getCodeActions lambda
* importFixes.ts: Remove local getUniqueSymbolId function and add checker parameter to calls to it
* importFixes.ts: Move getCodeActionForImport out into an export, immediately below convertToImportCodeFixContext
* completions.ts: In getCompletionEntryDetails, if there's symbolOriginInfo, call getCodeActionForImport
* importFixes.ts: Create and use importFixContext within getCodeActions lambda
* importFixes.ts: Use local newLineCharacter instead of context.newLineCharacter in getCodeActionForImport
* importFixes.ts: Use local host instead of context.host in getCodeActionForImport
* importFixes.ts: Remove dummy getCanonicalFileName line
* Filter symbols after gathering exports instead of before
* Lint
* Test, fix bugs, refactor
* Suggestions from code review
* Update api baseline
* Fix bug if previousToken is not an Identifier
* Replace `startsWith` with `stringContainsCharactersInOrder`
2017-10-17 19:20:11 +02:00
|
|
|
codeActions?: CodeAction[];
|
2017-10-26 17:22:17 +02:00
|
|
|
source?: SymbolDisplayPart[];
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface OutliningSpan {
|
|
|
|
/** The span of the document to actually collapse. */
|
|
|
|
textSpan: TextSpan;
|
|
|
|
|
|
|
|
/** The span of the document to display when the user hovers over the collapsed span. */
|
|
|
|
hintSpan: TextSpan;
|
|
|
|
|
|
|
|
/** The text to display in the editor for the collapsed region. */
|
|
|
|
bannerText: string;
|
|
|
|
|
|
|
|
/**
|
2017-04-03 18:32:39 +02:00
|
|
|
* Whether or not this region should be automatically collapsed when
|
|
|
|
* the 'Collapse to Definitions' command is invoked.
|
|
|
|
*/
|
2016-09-02 20:34:23 +02:00
|
|
|
autoCollapse: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const enum OutputFileType {
|
|
|
|
JavaScript,
|
|
|
|
SourceMap,
|
|
|
|
Declaration
|
|
|
|
}
|
|
|
|
|
|
|
|
export const enum EndOfLineState {
|
|
|
|
None,
|
|
|
|
InMultiLineCommentTrivia,
|
|
|
|
InSingleQuoteStringLiteral,
|
|
|
|
InDoubleQuoteStringLiteral,
|
|
|
|
InTemplateHeadOrNoSubstitutionTemplate,
|
|
|
|
InTemplateMiddleOrTail,
|
|
|
|
InTemplateSubstitutionPosition,
|
|
|
|
}
|
|
|
|
|
|
|
|
export enum TokenClass {
|
|
|
|
Punctuation,
|
|
|
|
Keyword,
|
|
|
|
Operator,
|
|
|
|
Comment,
|
|
|
|
Whitespace,
|
|
|
|
Identifier,
|
|
|
|
NumberLiteral,
|
|
|
|
StringLiteral,
|
|
|
|
RegExpLiteral,
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ClassificationResult {
|
|
|
|
finalLexState: EndOfLineState;
|
|
|
|
entries: ClassificationInfo[];
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ClassificationInfo {
|
|
|
|
length: number;
|
|
|
|
classification: TokenClass;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface Classifier {
|
|
|
|
/**
|
|
|
|
* Gives lexical classifications of tokens on a line without any syntactic context.
|
|
|
|
* For instance, a token consisting of the text 'string' can be either an identifier
|
|
|
|
* named 'string' or the keyword 'string', however, because this classifier is not aware,
|
|
|
|
* it relies on certain heuristics to give acceptable results. For classifications where
|
|
|
|
* speed trumps accuracy, this function is preferable; however, for true accuracy, the
|
|
|
|
* syntactic classifier is ideal. In fact, in certain editing scenarios, combining the
|
|
|
|
* lexical, syntactic, and semantic classifiers may issue the best user experience.
|
|
|
|
*
|
|
|
|
* @param text The text of a line to classify.
|
|
|
|
* @param lexState The state of the lexical classifier at the end of the previous line.
|
|
|
|
* @param syntacticClassifierAbsent Whether the client is *not* using a syntactic classifier.
|
|
|
|
* If there is no syntactic classifier (syntacticClassifierAbsent=true),
|
|
|
|
* certain heuristics may be used in its place; however, if there is a
|
|
|
|
* syntactic classifier (syntacticClassifierAbsent=false), certain
|
|
|
|
* classifications which may be incorrectly categorized will be given
|
|
|
|
* back as Identifiers in order to allow the syntactic classifier to
|
|
|
|
* subsume the classification.
|
|
|
|
* @deprecated Use getLexicalClassifications instead.
|
|
|
|
*/
|
|
|
|
getClassificationsForLine(text: string, lexState: EndOfLineState, syntacticClassifierAbsent: boolean): ClassificationResult;
|
|
|
|
getEncodedLexicalClassifications(text: string, endOfLineState: EndOfLineState, syntacticClassifierAbsent: boolean): Classifications;
|
|
|
|
}
|
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
export const enum ScriptElementKind {
|
|
|
|
unknown = "",
|
|
|
|
warning = "warning",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** predefined type (void) or keyword (class) */
|
2017-05-20 05:06:08 +02:00
|
|
|
keyword = "keyword",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** top level script node */
|
2017-05-20 05:06:08 +02:00
|
|
|
scriptElement = "script",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** module foo {} */
|
2017-05-20 05:06:08 +02:00
|
|
|
moduleElement = "module",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** class X {} */
|
2017-05-20 05:06:08 +02:00
|
|
|
classElement = "class",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** var x = class X {} */
|
2017-05-20 05:06:08 +02:00
|
|
|
localClassElement = "local class",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** interface Y {} */
|
2017-05-20 05:06:08 +02:00
|
|
|
interfaceElement = "interface",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** type T = ... */
|
2017-05-20 05:06:08 +02:00
|
|
|
typeElement = "type",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** enum E */
|
2017-05-20 05:06:08 +02:00
|
|
|
enumElement = "enum",
|
|
|
|
enumMemberElement = "enum member",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Inside module and script only
|
|
|
|
* const v = ..
|
|
|
|
*/
|
2017-05-20 05:06:08 +02:00
|
|
|
variableElement = "var",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** Inside function */
|
2017-05-20 05:06:08 +02:00
|
|
|
localVariableElement = "local var",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Inside module and script only
|
|
|
|
* function f() { }
|
|
|
|
*/
|
2017-05-20 05:06:08 +02:00
|
|
|
functionElement = "function",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** Inside function */
|
2017-05-20 05:06:08 +02:00
|
|
|
localFunctionElement = "local function",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** class X { [public|private]* foo() {} } */
|
2017-05-20 05:06:08 +02:00
|
|
|
memberFunctionElement = "method",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** class X { [public|private]* [get|set] foo:number; } */
|
2017-05-20 05:06:08 +02:00
|
|
|
memberGetAccessorElement = "getter",
|
|
|
|
memberSetAccessorElement = "setter",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* class X { [public|private]* foo:number; }
|
|
|
|
* interface Y { foo:number; }
|
|
|
|
*/
|
2017-05-20 05:06:08 +02:00
|
|
|
memberVariableElement = "property",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** class X { constructor() { } } */
|
2017-05-20 05:06:08 +02:00
|
|
|
constructorImplementationElement = "constructor",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** interface Y { ():number; } */
|
2017-05-20 05:06:08 +02:00
|
|
|
callSignatureElement = "call",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** interface Y { []:number; } */
|
2017-05-20 05:06:08 +02:00
|
|
|
indexSignatureElement = "index",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** interface Y { new():Y; } */
|
2017-05-20 05:06:08 +02:00
|
|
|
constructSignatureElement = "construct",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
|
|
|
/** function foo(*Y*: string) */
|
2017-05-20 05:06:08 +02:00
|
|
|
parameterElement = "parameter",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
typeParameterElement = "type parameter",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
primitiveType = "primitive type",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
label = "label",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
alias = "alias",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
constElement = "const",
|
2016-09-02 20:34:23 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
letElement = "let",
|
2016-09-06 20:04:39 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
directory = "directory",
|
2016-09-06 20:04:39 +02:00
|
|
|
|
2017-05-20 05:06:08 +02:00
|
|
|
externalModuleName = "external module name",
|
2016-11-08 17:56:08 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* <JsxTagName attribute1 attribute2={0} />
|
2017-04-03 18:32:39 +02:00
|
|
|
*/
|
2017-05-20 05:06:08 +02:00
|
|
|
jsxAttribute = "JSX attribute",
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
2017-05-22 19:40:59 +02:00
|
|
|
export const enum ScriptElementKindModifier {
|
|
|
|
none = "",
|
|
|
|
publicMemberModifier = "public",
|
|
|
|
privateMemberModifier = "private",
|
|
|
|
protectedMemberModifier = "protected",
|
|
|
|
exportedModifier = "export",
|
|
|
|
ambientModifier = "declare",
|
|
|
|
staticModifier = "static",
|
|
|
|
abstractModifier = "abstract",
|
|
|
|
}
|
|
|
|
|
|
|
|
export const enum ClassificationTypeNames {
|
|
|
|
comment = "comment",
|
|
|
|
identifier = "identifier",
|
|
|
|
keyword = "keyword",
|
|
|
|
numericLiteral = "number",
|
|
|
|
operator = "operator",
|
|
|
|
stringLiteral = "string",
|
|
|
|
whiteSpace = "whitespace",
|
|
|
|
text = "text",
|
|
|
|
|
|
|
|
punctuation = "punctuation",
|
|
|
|
|
|
|
|
className = "class name",
|
|
|
|
enumName = "enum name",
|
|
|
|
interfaceName = "interface name",
|
|
|
|
moduleName = "module name",
|
|
|
|
typeParameterName = "type parameter name",
|
|
|
|
typeAliasName = "type alias name",
|
|
|
|
parameterName = "parameter name",
|
|
|
|
docCommentTagName = "doc comment tag name",
|
|
|
|
jsxOpenTagName = "jsx open tag name",
|
|
|
|
jsxCloseTagName = "jsx close tag name",
|
|
|
|
jsxSelfClosingTagName = "jsx self closing tag name",
|
|
|
|
jsxAttribute = "jsx attribute",
|
|
|
|
jsxText = "jsx text",
|
|
|
|
jsxAttributeStringLiteralValue = "jsx attribute string literal value",
|
2016-09-02 20:34:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export const enum ClassificationType {
|
|
|
|
comment = 1,
|
|
|
|
identifier = 2,
|
|
|
|
keyword = 3,
|
|
|
|
numericLiteral = 4,
|
|
|
|
operator = 5,
|
|
|
|
stringLiteral = 6,
|
|
|
|
regularExpressionLiteral = 7,
|
|
|
|
whiteSpace = 8,
|
|
|
|
text = 9,
|
|
|
|
punctuation = 10,
|
|
|
|
className = 11,
|
|
|
|
enumName = 12,
|
|
|
|
interfaceName = 13,
|
|
|
|
moduleName = 14,
|
|
|
|
typeParameterName = 15,
|
|
|
|
typeAliasName = 16,
|
|
|
|
parameterName = 17,
|
|
|
|
docCommentTagName = 18,
|
|
|
|
jsxOpenTagName = 19,
|
|
|
|
jsxCloseTagName = 20,
|
|
|
|
jsxSelfClosingTagName = 21,
|
|
|
|
jsxAttribute = 22,
|
|
|
|
jsxText = 23,
|
|
|
|
jsxAttributeStringLiteralValue = 24,
|
|
|
|
}
|
|
|
|
}
|