mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
336 lines
13 KiB
TypeScript
336 lines
13 KiB
TypeScript
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
///<reference path='references.ts' />
|
|
///<reference path='diagnosticServices.ts' />
|
|
|
|
module TypeScript.Services {
|
|
|
|
//
|
|
// Public interface of the host of a language service instance.
|
|
//
|
|
export interface ILanguageServiceHost extends TypeScript.ILogger, TypeScript.IReferenceResolverHost {
|
|
getCompilationSettings(): ts.CompilerOptions;
|
|
|
|
getScriptFileNames(): string[];
|
|
getScriptVersion(fileName: string): number;
|
|
getScriptIsOpen(fileName: string): boolean;
|
|
getScriptByteOrderMark(fileName: string): TypeScript.ByteOrderMark;
|
|
getScriptSnapshot(fileName: string): TypeScript.IScriptSnapshot;
|
|
getDiagnosticsObject(): TypeScript.Services.ILanguageServicesDiagnostics;
|
|
getLocalizedDiagnosticMessages(): any;
|
|
getCancellationToken(): ICancellationToken;
|
|
}
|
|
|
|
//
|
|
// Public services of a language service instance associated
|
|
// with a language service host instance
|
|
//
|
|
export interface ILanguageService {
|
|
// Note: refresh is a no-op now. It is only around for back compat purposes.
|
|
refresh(): void;
|
|
|
|
cleanupSemanticCache(): void;
|
|
|
|
getSyntacticDiagnostics(fileName: string): ts.Diagnostic[];
|
|
getSemanticDiagnostics(fileName: string): ts.Diagnostic[];
|
|
getCompilerOptionsDiagnostics(): ts.Diagnostic[];
|
|
|
|
getCompletionsAtPosition(fileName: string, position: number, isMemberCompletion: boolean): CompletionInfo;
|
|
getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails;
|
|
|
|
getTypeAtPosition(fileName: string, position: number): TypeInfo;
|
|
|
|
getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): SpanInfo;
|
|
|
|
getBreakpointStatementAtPosition(fileName: string, position: number): SpanInfo;
|
|
|
|
getSignatureAtPosition(fileName: string, position: number): SignatureInfo;
|
|
|
|
getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
|
|
getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
|
|
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
|
|
getImplementorsAtPosition(fileName: string, position: number): ReferenceEntry[];
|
|
|
|
getNavigateToItems(searchValue: string): NavigateToItem[];
|
|
getScriptLexicalStructure(fileName: string): NavigateToItem[];
|
|
|
|
getOutliningRegions(fileName: string): TypeScript.TextSpan[];
|
|
getBraceMatchingAtPosition(fileName: string, position: number): TypeScript.TextSpan[];
|
|
getIndentationAtPosition(fileName: string, position: number, options: TypeScript.Services.EditorOptions): number;
|
|
|
|
getFormattingEditsForRange(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[];
|
|
getFormattingEditsForDocument(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[];
|
|
getFormattingEditsOnPaste(fileName: string, minChar: number, limChar: number, options: FormatCodeOptions): TextEdit[];
|
|
getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, options: FormatCodeOptions): TextEdit[];
|
|
|
|
getEmitOutput(fileName: string): TypeScript.EmitOutput;
|
|
|
|
//getSyntaxTree(fileName: string): TypeScript.SyntaxTree;
|
|
|
|
dispose(): void;
|
|
}
|
|
|
|
export function logInternalError(logger: TypeScript.ILogger, err: Error) {
|
|
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
|
|
}
|
|
|
|
export interface ReferenceEntry {
|
|
fileName: string;
|
|
minChar: number;
|
|
limChar: number;
|
|
isWriteAccess: boolean;
|
|
}
|
|
|
|
export interface NavigateToItem {
|
|
name: string;
|
|
kind: string; // see ScriptElementKind
|
|
kindModifiers: string; // see ScriptElementKindModifier, comma separated
|
|
matchKind: string;
|
|
fileName: string;
|
|
minChar: number;
|
|
limChar: number;
|
|
additionalSpans?: SpanInfo[];
|
|
containerName: string;
|
|
containerKind: string; // see ScriptElementKind
|
|
}
|
|
|
|
export class TextEdit {
|
|
constructor(public minChar: number, public limChar: number, public text: string) {
|
|
}
|
|
|
|
static createInsert(pos: number, text: string): TextEdit {
|
|
return new TextEdit(pos, pos, text);
|
|
}
|
|
static createDelete(minChar: number, limChar: number): TextEdit {
|
|
return new TextEdit(minChar, limChar, "");
|
|
}
|
|
static createReplace(minChar: number, limChar: number, text: string): TextEdit {
|
|
return new TextEdit(minChar, limChar, text);
|
|
}
|
|
}
|
|
|
|
export class EditorOptions {
|
|
public IndentSize: number = 4;
|
|
public TabSize: number = 4;
|
|
public NewLineCharacter: string = "\r\n";
|
|
public ConvertTabsToSpaces: boolean = true;
|
|
|
|
public static clone(objectToClone: EditorOptions): EditorOptions {
|
|
var editorOptions = new EditorOptions();
|
|
editorOptions.IndentSize = objectToClone.IndentSize;
|
|
editorOptions.TabSize = objectToClone.TabSize;
|
|
editorOptions.NewLineCharacter = objectToClone.NewLineCharacter;
|
|
editorOptions.ConvertTabsToSpaces = objectToClone.ConvertTabsToSpaces;
|
|
return editorOptions;
|
|
}
|
|
}
|
|
|
|
export class FormatCodeOptions extends EditorOptions {
|
|
public InsertSpaceAfterCommaDelimiter: boolean = true;
|
|
public InsertSpaceAfterSemicolonInForStatements: boolean = true;
|
|
public InsertSpaceBeforeAndAfterBinaryOperators: boolean = true;
|
|
public InsertSpaceAfterKeywordsInControlFlowStatements: boolean = true;
|
|
public InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean = false;
|
|
public InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean = false;
|
|
public PlaceOpenBraceOnNewLineForFunctions: boolean = false;
|
|
public PlaceOpenBraceOnNewLineForControlBlocks: boolean = false;
|
|
|
|
public static clone(objectToClone: FormatCodeOptions ): FormatCodeOptions {
|
|
var formatCodeOptions = <FormatCodeOptions>EditorOptions.clone(objectToClone);
|
|
formatCodeOptions.InsertSpaceAfterCommaDelimiter = objectToClone.InsertSpaceAfterCommaDelimiter;
|
|
formatCodeOptions.InsertSpaceAfterSemicolonInForStatements = objectToClone.InsertSpaceAfterSemicolonInForStatements;
|
|
formatCodeOptions.InsertSpaceBeforeAndAfterBinaryOperators = objectToClone.InsertSpaceBeforeAndAfterBinaryOperators;
|
|
formatCodeOptions.InsertSpaceAfterKeywordsInControlFlowStatements = objectToClone.InsertSpaceAfterKeywordsInControlFlowStatements;
|
|
formatCodeOptions.InsertSpaceAfterFunctionKeywordForAnonymousFunctions = objectToClone.InsertSpaceAfterFunctionKeywordForAnonymousFunctions;
|
|
formatCodeOptions.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis = objectToClone.InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis;
|
|
formatCodeOptions.PlaceOpenBraceOnNewLineForFunctions = objectToClone.PlaceOpenBraceOnNewLineForFunctions;
|
|
formatCodeOptions.PlaceOpenBraceOnNewLineForControlBlocks = objectToClone.PlaceOpenBraceOnNewLineForControlBlocks;
|
|
return formatCodeOptions;
|
|
}
|
|
}
|
|
|
|
export interface DefinitionInfo {
|
|
fileName: string;
|
|
minChar: number;
|
|
limChar: number;
|
|
kind: string;
|
|
name: string;
|
|
containerKind: string;
|
|
containerName: string;
|
|
}
|
|
|
|
export interface TypeInfo {
|
|
memberName: TypeScript.MemberName;
|
|
docComment: string;
|
|
fullSymbolName: string;
|
|
kind: string;
|
|
minChar: number;
|
|
limChar: number;
|
|
}
|
|
|
|
export interface SpanInfo {
|
|
minChar: number;
|
|
limChar: number;
|
|
// text?: string;
|
|
}
|
|
|
|
export interface SignatureInfo {
|
|
actual: ActualSignatureInfo;
|
|
formal: FormalSignatureItemInfo[]; // Formal signatures
|
|
activeFormal: number; // Index of the "best match" formal signature
|
|
}
|
|
|
|
export interface FormalSignatureItemInfo {
|
|
signatureInfo: string;
|
|
typeParameters: FormalTypeParameterInfo[];
|
|
parameters: FormalParameterInfo[]; // Array of parameters
|
|
docComment: string; // Help for the signature
|
|
}
|
|
|
|
export interface FormalTypeParameterInfo {
|
|
name: string; // Type parameter name
|
|
docComment: string; // Comments that contain help for the parameter
|
|
minChar: number; // minChar for parameter info in the formal signature info string
|
|
limChar: number; // lim char for parameter info in the formal signature info string
|
|
}
|
|
|
|
export interface FormalParameterInfo {
|
|
name: string; // Parameter name
|
|
isVariable: boolean; // true if parameter is var args
|
|
docComment: string; // Comments that contain help for the parameter
|
|
minChar: number; // minChar for parameter info in the formal signature info string
|
|
limChar: number; // lim char for parameter info in the formal signature info string
|
|
}
|
|
|
|
export interface ActualSignatureInfo {
|
|
parameterMinChar: number;
|
|
parameterLimChar: number;
|
|
currentParameterIsTypeParameter: boolean; // current parameter is a type argument or a normal argument
|
|
currentParameter: number; // Index of active parameter in "parameters" or "typeParamters" array
|
|
}
|
|
|
|
export interface CompletionInfo {
|
|
isMemberCompletion: boolean;
|
|
entries: CompletionEntry[];
|
|
}
|
|
|
|
export interface CompletionEntry {
|
|
name: string;
|
|
kind: string; // see ScriptElementKind
|
|
kindModifiers: string; // see ScriptElementKindModifier, comma separated
|
|
}
|
|
|
|
export interface CompletionEntryDetails {
|
|
name: string;
|
|
kind: string; // see ScriptElementKind
|
|
kindModifiers: string; // see ScriptElementKindModifier, comma separated
|
|
type: string;
|
|
fullSymbolName: string;
|
|
docComment: string;
|
|
}
|
|
|
|
|
|
// TODO: move these to enums
|
|
export class ScriptElementKind {
|
|
static unknown = "";
|
|
|
|
// predefined type (void) or keyword (class)
|
|
static keyword = "keyword";
|
|
|
|
// top level script node
|
|
static scriptElement = "script";
|
|
|
|
// module foo {}
|
|
static moduleElement = "module";
|
|
|
|
// class X {}
|
|
static classElement = "class";
|
|
|
|
// interface Y {}
|
|
static interfaceElement = "interface";
|
|
|
|
// enum E
|
|
static enumElement = "enum";
|
|
|
|
// Inside module and script only
|
|
// var v = ..
|
|
static variableElement = "var";
|
|
|
|
// Inside function
|
|
static localVariableElement = "local var";
|
|
|
|
// Inside module and script only
|
|
// function f() { }
|
|
static functionElement = "function";
|
|
|
|
// Inside function
|
|
static localFunctionElement = "local function";
|
|
|
|
// class X { [public|private]* foo() {} }
|
|
static memberFunctionElement = "method";
|
|
|
|
// class X { [public|private]* [get|set] foo:number; }
|
|
static memberGetAccessorElement = "getter";
|
|
static memberSetAccessorElement = "setter";
|
|
|
|
// class X { [public|private]* foo:number; }
|
|
// interface Y { foo:number; }
|
|
static memberVariableElement = "property";
|
|
|
|
// class X { constructor() { } }
|
|
static constructorImplementationElement = "constructor";
|
|
|
|
// interface Y { ():number; }
|
|
static callSignatureElement = "call";
|
|
|
|
// interface Y { []:number; }
|
|
static indexSignatureElement = "index";
|
|
|
|
// interface Y { new():Y; }
|
|
static constructSignatureElement = "construct";
|
|
|
|
// function foo(*Y*: string)
|
|
static parameterElement = "parameter";
|
|
|
|
static typeParameterElement = "type parameter";
|
|
|
|
static primitiveType = "primitive type";
|
|
}
|
|
|
|
export class ScriptElementKindModifier {
|
|
static none = "";
|
|
static publicMemberModifier = "public";
|
|
static privateMemberModifier = "private";
|
|
static exportedModifier = "export";
|
|
static ambientModifier = "declare";
|
|
static staticModifier = "static";
|
|
}
|
|
|
|
export class MatchKind {
|
|
static none: string = null;
|
|
static exact = "exact";
|
|
static subString = "substring";
|
|
static prefix = "prefix";
|
|
}
|
|
|
|
export class DiagnosticCategory {
|
|
static none = "";
|
|
static error = "error";
|
|
static warning = "warning";
|
|
static message = "message";
|
|
}
|
|
}
|