diff --git a/src/monaco.d.ts b/src/monaco.d.ts index ea0b69fa..9c6da67f 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -146,7 +146,55 @@ declare module monaco.languages.typescript { [path: string]: IExtraLib; } + /** + * A linked list of formatted diagnostic messages to be used as part of a multiline message. + * It is built from the bottom up, leaving the head to be the "main" diagnostic. + */ + interface DiagnosticMessageChain { + messageText: string; + /** Diagnostic category: warning = 0, error = 1, suggestion = 2, message = 3 */ + category: 0 | 1 | 2 | 3; + code: number; + next?: DiagnosticMessageChain[]; + } + interface Diagnostic extends DiagnosticRelatedInformation { + /** May store more in future. For now, this will simply be `true` to indicate when a diagnostic is an unused-identifier diagnostic. */ + reportsUnnecessary?: {}; + source?: string; + relatedInformation?: DiagnosticRelatedInformation[]; + } + interface DiagnosticRelatedInformation { + /** Diagnostic category: warning = 0, error = 1, suggestion = 2, message = 3 */ + category: 0 | 1 | 2 | 3; + code: number; + /** TypeScriptWorker removes this to avoid serializing circular JSON structures. */ + file: undefined; + start: number | undefined; + length: number | undefined; + messageText: string | DiagnosticMessageChain; + } + + interface EmitOutput { + outputFiles: OutputFile[]; + emitSkipped: boolean; + } + interface OutputFile { + name: string; + writeByteOrderMark: boolean; + text: string; + } + export interface LanguageServiceDefaults { + /** + * Event fired when compiler options or diagnostics options are changed. + */ + readonly onDidChange: IEvent; + + /** + * Event fired when extra libraries registered with the language service change. + */ + readonly onDidExtraLibsChange: IEvent; + /** * Get the current extra libs registered with the language service. */ @@ -212,401 +260,161 @@ declare module monaco.languages.typescript { } export interface TypeScriptWorker { + /** + * Get the worker's current compiler settings. + */ getCompilationSettings(): CompilerOptions; + + /** + * Get the names of files and libraries currently registered with the worker. + */ getScriptFileNames(): string[]; + getScriptVersion(fileName: string): string; - getScriptKind(fileName: string): ts.ScriptKind; - getCurrentDirectory(): string; + + /** + * Get what kind of script the given filename is. + * @returns `typescript.ScriptKind`: any = 0, JS = 1, JSX = 2, TS = 3, TSX = 4, external = 5, JSON = 6, deferred = 7 + */ + getScriptKind(fileName: string): 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7; + + /** + * Always returns an empty string. + */ + getCurrentDirectory(): ''; + + /** + * Get the name of the default lib file based on `options.target`. + */ getDefaultLibFileName(options: CompilerOptions): string; + + /** + * Returns true if `fileName` matches the default file name for the current compiler options. + */ isDefaultLibFileName(fileName: string): boolean; - getSyntacticDiagnostics(fileName: string): Promise; - getSemanticDiagnostics(fileName: string): Promise; - getSuggestionDiagnostics(fileName: string): Promise; - getCompilerOptionsDiagnostics(fileName: string): Promise; - getCompletionsAtPosition(fileName: string, position: number): Promise; - getCompletionEntryDetails(fileName: string, position: number, entry: string): Promise; - getSignatureHelpItems(fileName: string, position: number): Promise; - getQuickInfoAtPosition(fileName: string, position: number): Promise; - getOccurrencesAtPosition(fileName: string, position: number): Promise | undefined>; - getDefinitionAtPosition(fileName: string, position: number): Promise | undefined>; - getReferencesAtPosition(fileName: string, position: number): Promise; - getNavigationBarItems(fileName: string): Promise; - getFormattingEditsForDocument(fileName: string, options: ts.FormatCodeOptions): Promise; - getFormattingEditsForRange(fileName: string, start: number, end: number, options: ts.FormatCodeOptions): Promise; - getFormattingEditsAfterKeystroke(fileName: string, postion: number, ch: string, options: ts.FormatCodeOptions): Promise; - findRenameLocations(fileName: string, positon: number, findInStrings: boolean, findInComments: boolean, providePrefixAndSuffixTextForRename: boolean): Promise; - getRenameInfo(fileName: string, positon: number, options: ts.RenameInfoOptions): Promise; - getEmitOutput(fileName: string): Promise; - getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[], formatOptions: ts.FormatCodeOptions): Promise>; - updateExtraLibs(extraLibs: IExtraLibs): void; - } - export var typescriptVersion: string; + /** + * Get diagnostic messages for any syntax issues in the given file. + */ + getSyntacticDiagnostics(fileName: string): Promise; - export var typescriptDefaults: LanguageServiceDefaults; - export var javascriptDefaults: LanguageServiceDefaults; + /** + * Get diagnostic messages for any semantic issues in the given file. + */ + getSemanticDiagnostics(fileName: string): Promise; - export var getTypeScriptWorker: () => Promise<(first: Uri, ...more: Uri[]) => Promise>; - export var getJavaScriptWorker: () => Promise<(first: Uri, ...more: Uri[]) => Promise>; -} + /** + * Get diagnostic messages for any suggestions related to the given file. + */ + getSuggestionDiagnostics(fileName: string): Promise; -/** - * Additional types copied from `typescript`. - */ -declare module monaco.languages.typescript.ts { - /** - * A linked list of formatted diagnostic messages to be used as part of a multiline message. - * It is built from the bottom up, leaving the head to be the "main" diagnostic. - */ - interface DiagnosticMessageChain { - messageText: string; - category: DiagnosticCategory; - code: number; - next?: DiagnosticMessageChain[]; - } - interface Diagnostic extends DiagnosticRelatedInformation { - /** May store more in future. For now, this will simply be `true` to indicate when a diagnostic is an unused-identifier diagnostic. */ - reportsUnnecessary?: {}; - source?: string; - relatedInformation?: DiagnosticRelatedInformation[]; - } - interface DiagnosticRelatedInformation { - category: DiagnosticCategory; - code: number; - /** TypeScriptWorker removes this to avoid serializing circular JSON structures. */ - file: undefined; - start: number | undefined; - length: number | undefined; - messageText: string | DiagnosticMessageChain; - } - interface DiagnosticWithLocation extends Diagnostic { - /** TypeScriptWorker removes this to avoid serializing circular JSON structures. */ - file: undefined; - start: number; - length: number; - } - // Must be a const enum because this module doesn't exist at runtime - const enum DiagnosticCategory { - Warning = 0, - Error = 1, - Suggestion = 2, - Message = 3 - } - // Must be a const enum because this module doesn't exist at runtime - const enum ScriptKind { - Unknown = 0, - JS = 1, - JSX = 2, - TS = 3, - TSX = 4, - External = 5, - JSON = 6, - /** - * Used on extensions that doesn't define the ScriptKind but the content defines it. - * Deferred extensions are going to be included in all project contexts. - */ - Deferred = 7 - } - interface TextSpan { - start: number; - length: number; - } + /** + * Get diagnostic messages related to the current compiler options. + * @param fileName Not used + */ + getCompilerOptionsDiagnostics(fileName: string): Promise; - interface EmitOutput { - outputFiles: OutputFile[]; - emitSkipped: boolean; - } - interface OutputFile { - name: string; - writeByteOrderMark: boolean; - text: string; - } + /** + * Get code completions for the given file and position. + * @returns `Promise` + */ + getCompletionsAtPosition(fileName: string, position: number): Promise; - /** - * 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`. - */ - interface NavigationBarItem { - text: string; - kind: ScriptElementKind; - kindModifiers: string; - spans: TextSpan[]; - childItems: NavigationBarItem[]; - indent: number; - bolded: boolean; - grayed: boolean; - } - interface TextChange { - span: TextSpan; - newText: string; - } - interface FileTextChanges { - fileName: string; - textChanges: readonly TextChange[]; - isNewFile?: boolean; - } - 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[]; /** - * 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. + * Get code completion details for the given file, position, and entry. + * @returns `Promise` */ - commands?: CodeActionCommand[]; - } - interface CodeFixAction extends CodeAction { - /** Short name to identify the fix, for use by telemetry. */ - fixName: string; + getCompletionEntryDetails(fileName: string, position: number, entry: string): Promise; + /** - * If present, one may call 'getCombinedCodeFix' with this fixId. - * This may be omitted to indicate that the code fix can't be applied in a group. + * Get signature help items for the item at the given file and position. + * @returns `Promise` */ - fixId?: {}; - fixAllDescription?: string; - } - type CodeActionCommand = InstallPackageAction; - interface InstallPackageAction { - } - interface DocumentSpan { - textSpan: TextSpan; - fileName: string; + getSignatureHelpItems(fileName: string, position: number): Promise; + /** - * If the span represents a location that was remapped (e.g. via a .d.ts.map file), - * then the original filename and span will be specified here + * Get quick info for the item at the given position in the file. + * @returns `Promise` */ - originalTextSpan?: TextSpan; - originalFileName?: string; + getQuickInfoAtPosition(fileName: string, position: number): Promise; + /** - * If DocumentSpan.textSpan is the span for name of the declaration, - * then this is the span for relevant declaration + * Get other ranges which are related to the item at the given position in the file (often used for highlighting). + * @returns `Promise | undefined>` */ - contextSpan?: TextSpan; - originalContextSpan?: TextSpan; - } - interface RenameLocation extends DocumentSpan { - readonly prefixText?: string; - readonly suffixText?: string; - } - interface ReferenceEntry extends DocumentSpan { - isWriteAccess: boolean; - isDefinition: boolean; - isInString?: true; - } - // Must be a const enum because this module doesn't exist at runtime - const enum IndentStyle { - None = 0, - Block = 1, - Smart = 2 - } - interface EditorOptions { - BaseIndentSize?: number; - IndentSize: number; - TabSize: number; - NewLineCharacter: string; - ConvertTabsToSpaces: boolean; - IndentStyle: IndentStyle; - } - interface FormatCodeOptions extends EditorOptions { - InsertSpaceAfterCommaDelimiter: boolean; - InsertSpaceAfterSemicolonInForStatements: boolean; - InsertSpaceBeforeAndAfterBinaryOperators: boolean; - InsertSpaceAfterConstructor?: boolean; - InsertSpaceAfterKeywordsInControlFlowStatements: boolean; - InsertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean; - InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean; - InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean; - InsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean; - InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean; - InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean; - InsertSpaceAfterTypeAssertion?: boolean; - InsertSpaceBeforeFunctionParenthesis?: boolean; - PlaceOpenBraceOnNewLineForFunctions: boolean; - PlaceOpenBraceOnNewLineForControlBlocks: boolean; - insertSpaceBeforeTypeAnnotation?: boolean; - } - interface DefinitionInfo extends DocumentSpan { - kind: ScriptElementKind; - name: string; - containerKind: ScriptElementKind; - containerName: string; - } - interface SymbolDisplayPart { - text: string; - kind: string; - } - interface JSDocTagInfo { - name: string; - text?: string; - } - interface QuickInfo { - kind: ScriptElementKind; - kindModifiers: string; - textSpan: TextSpan; - displayParts?: SymbolDisplayPart[]; - documentation?: SymbolDisplayPart[]; - tags?: JSDocTagInfo[]; - } - type RenameInfo = RenameInfoSuccess | RenameInfoFailure; - interface RenameInfoSuccess { - canRename: true; - /** - * File or directory to rename. - * If set, `getEditsForFileRename` should be called instead of `findRenameLocations`. - */ - fileToRename?: string; - displayName: string; - fullDisplayName: string; - kind: ScriptElementKind; - kindModifiers: string; - triggerSpan: TextSpan; - } - interface RenameInfoFailure { - canRename: false; - localizedErrorMessage: string; - } - interface RenameInfoOptions { - readonly allowRenameOfImportPath?: boolean; - } - 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?'. - */ - interface SignatureHelpItem { - isVariadic: boolean; - prefixDisplayParts: SymbolDisplayPart[]; - suffixDisplayParts: SymbolDisplayPart[]; - separatorDisplayParts: SymbolDisplayPart[]; - parameters: SignatureHelpParameter[]; - documentation: SymbolDisplayPart[]; - tags: JSDocTagInfo[]; - } - /** - * Represents a set of signature help items, and the preferred item that should be selected. - */ - interface SignatureHelpItems { - items: SignatureHelpItem[]; - applicableSpan: TextSpan; - selectedItemIndex: number; - argumentIndex: number; - argumentCount: number; - } - interface CompletionInfo { - /** Not true for all global completions. This will be true if the enclosing scope matches a few syntax kinds. See `isSnippetScope`. */ - isGlobalCompletion: boolean; - isMemberCompletion: boolean; + getOccurrencesAtPosition(fileName: string, position: number): Promise | undefined>; + /** - * true when the current location also allows for a new identifier + * Get the definition of the item at the given position in the file. + * @returns `Promise | undefined>` */ - isNewIdentifierLocation: boolean; - entries: CompletionEntry[]; - } - interface CompletionEntry { - name: string; - kind: ScriptElementKind; - kindModifiers?: string; - sortText: string; - insertText?: string; + getDefinitionAtPosition(fileName: string, position: number): Promise | undefined>; + /** - * An optional span that indicates the text to be replaced by this completion item. - * If present, this span should be used instead of the default one. - * It will be set if the required span differs from the one generated by the default replacement behavior. + * Get references to the item at the given position in the file. + * @returns `Promise` */ - replacementSpan?: TextSpan; - hasAction?: true; - source?: string; - isRecommended?: true; - } - interface CompletionEntryDetails { - name: string; - kind: ScriptElementKind; - kindModifiers: string; - displayParts: SymbolDisplayPart[]; - documentation?: SymbolDisplayPart[]; - tags?: JSDocTagInfo[]; - codeActions?: CodeAction[]; - source?: SymbolDisplayPart[]; - } - // Must be a const enum because this module doesn't exist at runtime - const enum ScriptElementKind { - unknown = "", - warning = "warning", - /** predefined type (void) or keyword (class) */ - keyword = "keyword", - /** top level script node */ - scriptElement = "script", - /** module foo {} */ - moduleElement = "module", - /** class X {} */ - classElement = "class", - /** var x = class X {} */ - localClassElement = "local class", - /** interface Y {} */ - interfaceElement = "interface", - /** type T = ... */ - typeElement = "type", - /** enum E */ - enumElement = "enum", - enumMemberElement = "enum member", - /** - * Inside module and script only - * const v = .. - */ - variableElement = "var", - /** Inside function */ - localVariableElement = "local var", - /** - * Inside module and script only - * function f() { } - */ - functionElement = "function", - /** Inside function */ - localFunctionElement = "local function", - /** class X { [public|private]* foo() {} } */ - memberFunctionElement = "method", - /** class X { [public|private]* [get|set] foo:number; } */ - memberGetAccessorElement = "getter", - memberSetAccessorElement = "setter", - /** - * class X { [public|private]* foo:number; } - * interface Y { foo:number; } - */ - memberVariableElement = "property", - /** class X { constructor() { } } */ - constructorImplementationElement = "constructor", - /** interface Y { ():number; } */ - callSignatureElement = "call", - /** interface Y { []:number; } */ - indexSignatureElement = "index", - /** interface Y { new():Y; } */ - constructSignatureElement = "construct", - /** function foo(*Y*: string) */ - parameterElement = "parameter", - typeParameterElement = "type parameter", - primitiveType = "primitive type", - label = "label", - alias = "alias", - constElement = "const", - letElement = "let", - directory = "directory", - externalModuleName = "external module name", - /** - * - */ - jsxAttribute = "JSX attribute", - /** String literal */ - string = "string" + getReferencesAtPosition(fileName: string, position: number): Promise; + + /** + * Get outline entries for the item at the given position in the file. + * @returns `Promise` + */ + getNavigationBarItems(fileName: string): Promise; + + /** + * Get changes which should be applied to format the given file. + * @param options `typescript.FormatCodeOptions` + * @returns `Promise` + */ + getFormattingEditsForDocument(fileName: string, options: any): Promise; + + /** + * Get changes which should be applied to format the given range in the file. + * @param options `typescript.FormatCodeOptions` + * @returns `Promise` + */ + getFormattingEditsForRange(fileName: string, start: number, end: number, options: any): Promise; + + /** + * Get formatting changes which should be applied after the given keystroke. + * @param options `typescript.FormatCodeOptions` + * @returns `Promise` + */ + getFormattingEditsAfterKeystroke(fileName: string, postion: number, ch: string, options: any): Promise; + + /** + * Get other occurrences which should be updated when renaming the item at the given file and position. + * @returns `Promise` + */ + findRenameLocations(fileName: string, positon: number, findInStrings: boolean, findInComments: boolean, providePrefixAndSuffixTextForRename: boolean): Promise; + + /** + * Get edits which should be applied to rename the item at the given file and position (or a failure reason). + * @param options `typescript.RenameInfoOptions` + * @returns `Promise` + */ + getRenameInfo(fileName: string, positon: number, options: any): Promise; + + /** + * Get transpiled output for the given file. + * @returns `typescript.EmitOutput` + */ + getEmitOutput(fileName: string): Promise; + + /** + * Get possible code fixes at the given position in the file. + * @param formatOptions `typescript.FormatCodeOptions` + * @returns `Promise>` + */ + getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[], formatOptions: any): Promise>; } -} \ No newline at end of file + + export var typescriptVersion: string; + + export var typescriptDefaults: LanguageServiceDefaults; + export var javascriptDefaults: LanguageServiceDefaults; + + export var getTypeScriptWorker: () => Promise<(first: Uri, ...more: Uri[]) => Promise>; + export var getJavaScriptWorker: () => Promise<(first: Uri, ...more: Uri[]) => Promise>; +}