import * as vscode_languageserver_types from 'vscode-languageserver-types'; import { Range, Position, Definition, Diagnostic, FormattingOptions, CodeActionContext, CodeAction, CompletionList, CompletionItem, Hover, SignatureHelp, DocumentHighlight, SymbolInformation, DocumentLink, Location, TextEdit, ColorInformation, Color, ColorPresentation, FoldingRange, TextDocumentEdit, DocumentUri, MarkedString, MarkupContent as MarkupContent$1, CompletionItemKind } from 'vscode-languageserver-types'; import { TextDocument } from 'vscode-languageserver-textdocument'; import ts, { CancellationToken as CancellationToken$1 } from 'typescript'; import prettier from 'prettier'; import prettyHTML from '@starptech/prettyhtml'; import prettierEslint from 'prettier-eslint'; import * as prettierTslint from 'prettier-tslint'; import stylusSupremacy, { FormattingOptions as FormattingOptions$1 } from 'stylus-supremacy'; import * as prettierPluginPug from '@prettier/plugin-pug'; import * as vscode_languageserver from 'vscode-languageserver'; import { CancellationToken, CancellationTokenSource, Range as Range$1, Connection, FileRename, DocumentFormattingParams, TextEdit as TextEdit$1, CompletionParams, CompletionList as CompletionList$1, CompletionItem as CompletionItem$1, TextDocumentPositionParams, Hover as Hover$1, DocumentHighlight as DocumentHighlight$1, Definition as Definition$1, Location as Location$1, DocumentLinkParams, DocumentLink as DocumentLink$1, DocumentSymbolParams, SymbolInformation as SymbolInformation$1, DocumentColorParams, ColorInformation as ColorInformation$1, ColorPresentationParams, ColorPresentation as ColorPresentation$1, SignatureHelp as SignatureHelp$1, FoldingRangeParams, FoldingRange as FoldingRange$1, CodeActionParams, CodeAction as CodeAction$1, TextDocumentEdit as TextDocumentEdit$1, SemanticTokensParams, SemanticTokensRangeParams, SemanticTokens, Diagnostic as Diagnostic$1, InitializeParams, RenameFilesParams, ExecuteCommandParams, ServerCapabilities, MarkupContent, CodeActionKind, SemanticTokensLegend, CompletionItemKind as CompletionItemKind$1, SymbolKind } from 'vscode-languageserver'; import lex, { Loc } from 'pug-lexer'; import { AST } from 'vue-eslint-parser'; import * as vscode_css_languageservice from 'vscode-css-languageservice'; import { Position as Position$1, TextEdit as TextEdit$2, IPropertyData, IAtDirectiveData, IPseudoClassData, IPseudoElementData } from 'vscode-css-languageservice'; import * as emmet from 'vscode-emmet-helper'; import { ESLint } from 'eslint'; interface VLSFormatConfig { defaultFormatter: { [lang: string]: string; }; defaultFormatterOptions: { [lang: string]: any; }; scriptInitialIndent: boolean; styleInitialIndent: boolean; options: { tabSize: number; useTabs: boolean; }; } interface VLSConfig { vetur: { ignoreProjectWarning: boolean; useWorkspaceDependencies: boolean; completion: { autoImport: boolean; tagCasing: 'initial' | 'kebab'; scaffoldSnippetSources: { workspace: string; user: string; vetur: string; }; }; grammar: { customBlocks: { [lang: string]: string; }; }; validation: { template: boolean; templateProps: boolean; interpolation: boolean; style: boolean; script: boolean; }; format: { enable: boolean; options: { tabSize: number; useTabs: boolean; }; defaultFormatter: { [lang: string]: string; }; defaultFormatterOptions: { [lang: string]: {}; }; scriptInitialIndent: boolean; styleInitialIndent: boolean; }; languageFeatures: { codeActions: boolean; updateImportOnFileMove: boolean; semanticTokens: boolean; }; trace: { server: 'off' | 'messages' | 'verbose'; }; dev: { vlsPath: string; vlsPort: number; logLevel: 'INFO' | 'DEBUG'; }; experimental: { templateInterpolationService: boolean; }; }; } interface VLSFullConfig extends VLSConfig { emmet?: any; html?: any; css?: any; sass?: any; javascript?: any; typescript?: any; prettier?: any; stylusSupremacy?: any; languageStylus?: any; } declare function getDefaultVLSConfig(): VLSFullConfig; interface BasicComponentInfo { name: string; path: string; } type Glob = string; interface VeturProject { root: string; package?: string; tsconfig?: string; snippetFolder: string; globalComponents: C[]; } interface VeturFullConfig { settings: Record; projects: VeturProject[]; } type VeturConfig = Partial> & { projects?: Array & Partial)>; }; declare function getVeturFullConfig(rootPathForConfig: string, workspacePath: string, veturConfig: VeturConfig): Promise; declare const enum DEBUG_LEVEL { DEBUG = 0, INFO = 1 } declare const logger: { _level: DEBUG_LEVEL; setLevel(level: string): void; logDebug(msg: string): void; logInfo(msg: string): void; }; type RegionType$1 = 'template' | 'script' | 'style' | 'custom'; type RegionAttrKey = 'setup' | 'module' | 'scoped' | 'lang'; type RegionAttrs = Partial> & Partial>; interface EmbeddedRegion { languageId: LanguageId; start: number; end: number; type: RegionType$1; attrs: RegionAttrs; } declare function parseVueDocumentRegions(document: TextDocument): { regions: EmbeddedRegion[]; importedScripts: string[]; }; type LanguageId = 'vue' | 'vue-html' | 'pug' | 'css' | 'postcss' | 'scss' | 'sass' | 'less' | 'stylus' | 'javascript' | 'typescript' | 'tsx' | 'unknown'; interface LanguageRange extends Range { languageId: LanguageId; attrs: RegionAttrs; } interface VueDocumentRegions { /** * Get a document where all regions of `languageId` is preserved * Whereas other regions are replaced with whitespaces */ getSingleLanguageDocument(languageId: LanguageId): TextDocument; /** * Get a document where all regions of `type` RegionType is preserved * Whereas other regions are replaced with whitespaces */ getSingleTypeDocument(type: RegionType): TextDocument; /** * Get a list of ranges that has `RegionType` */ getLanguageRangesOfType(type: RegionType): LanguageRange[]; /** * Get all language ranges inside document */ getAllLanguageRanges(): LanguageRange[]; /** * Get language for determining */ getLanguageAtPosition(position: Position): LanguageId; getLanguageRangeAtPosition(position: Position): LanguageRange | null; getImportedScripts(): string[]; } type RegionType = 'template' | 'script' | 'style' | 'custom'; declare function getVueDocumentRegions(document: TextDocument): VueDocumentRegions; declare function getSingleLanguageDocument(document: TextDocument, regions: EmbeddedRegion[], languageId: LanguageId): TextDocument; declare function getSingleTypeDocument(document: TextDocument, regions: EmbeddedRegion[], type: RegionType): TextDocument; declare function getLanguageRangesOfType(document: TextDocument, regions: EmbeddedRegion[], type: RegionType): LanguageRange[]; interface DocumentContext { resolveReference(ref: string, base?: string): string; } declare enum CodeActionDataKind { CombinedCodeFix = 0, RefactorAction = 1, OrganizeImports = 2 } interface BaseCodeActionData { uri: string; languageId: LanguageId; kind: CodeActionDataKind; textRange: { pos: number; end: number; }; } interface RefactorActionData extends BaseCodeActionData { kind: CodeActionDataKind.RefactorAction; refactorName: string; actionName: string; description: string; notApplicableReason?: string; } interface CombinedFixActionData extends BaseCodeActionData { kind: CodeActionDataKind.CombinedCodeFix; fixId: {}; } interface OrganizeImportsActionData extends BaseCodeActionData { kind: CodeActionDataKind.OrganizeImports; } type CodeActionData = RefactorActionData | CombinedFixActionData | OrganizeImportsActionData; interface SemanticTokenClassification { classificationType: number; modifierSet: number; } interface SemanticTokenData extends SemanticTokenClassification { line: number; character: number; length: number; } interface SemanticTokenOffsetData extends SemanticTokenClassification { start: number; length: number; } interface LanguageModelCache { /** * - Feed updated document * - Use `parse` function to re-compute model * - Return re-computed model */ refreshAndGet(document: TextDocument): T; onDocumentRemoved(document: TextDocument): void; dispose(): void; } declare function getLanguageModelCache(maxEntries: number, cleanupIntervalTimeInSec: number, parse: (document: TextDocument) => T): LanguageModelCache; /** * State associated with a specific Vue file * The state is shared between different modes */ interface VueFileInfo { /** * The default export component info from script section */ componentInfo: ComponentInfo; } interface ComponentInfo { name?: string; definition?: Definition; insertInOptionAPIPos?: number; componentsDefine?: { start: number; end: number; insertPos: number; }; childComponents?: ChildComponent[]; emits?: EmitInfo[]; /** * Todo: Extract type info in cases like * props: { * foo: String * } */ props?: PropInfo[]; data?: DataInfo[]; computed?: ComputedInfo[]; methods?: MethodInfo[]; } interface ChildComponent { name: string; documentation?: string; definition?: { path: string; start: number; end: number; }; global: boolean; info?: VueFileInfo; } interface EmitInfo { name: string; /** * `true` if * emits: { * foo: (...) => {...} * } * * `false` if * - `emits: ['foo']` * - `@Emit()` * - `emits: { foo: null }` */ hasValidator: boolean; documentation?: string; typeString?: string; } interface PropInfo { name: string; /** * `true` if * props: { * foo: { ... } * } * * `false` if * - `props: ['foo']` * - `props: { foo: String }` * */ hasObjectValidator: boolean; required: boolean; isBoundToModel: boolean; documentation?: string; typeString?: string; } interface DataInfo { name: string; documentation?: string; } interface ComputedInfo { name: string; documentation?: string; } interface MethodInfo { name: string; documentation?: string; } declare class VueInfoService { private languageModes; private vueFileInfo; constructor(); init(languageModes: LanguageModes): void; updateInfo(doc: TextDocument, info: VueFileInfo): void; getInfo(doc: TextDocument): VueFileInfo | undefined; } declare function createNodeModulesPaths(rootPath: string): string[]; interface Dependency { dir: string; version: string; bundled: boolean; module: M; } interface RuntimeLibrary { typescript: typeof ts; prettier: typeof prettier; '@starptech/prettyhtml': typeof prettyHTML; 'prettier-eslint': typeof prettierEslint; 'prettier-tslint': typeof prettierTslint; 'stylus-supremacy': typeof stylusSupremacy; '@prettier/plugin-pug': typeof prettierPluginPug; } interface DependencyService { readonly useWorkspaceDependencies: boolean; readonly nodeModulesPaths: string[]; get(lib: L, filePath?: string): Dependency; getBundled(lib: L): Dependency; } declare const createDependencyService: (rootPathForConfig: string, workspacePath: string, useWorkspaceDependencies: boolean, nodeModulesPaths: string[], tsSDKPath?: string) => Promise; interface VCancellationToken extends CancellationToken { tsToken: CancellationToken$1; } declare class VCancellationTokenSource extends CancellationTokenSource { get token(): VCancellationToken; } declare function isVCancellationRequested(token?: VCancellationToken): Promise; declare enum VueVersion { VPre25 = 0, V25 = 1, V30 = 2 } declare function getVueVersionKey(version: VueVersion): string; declare function inferVueVersion(packagePath: string | undefined): VueVersion; interface EnvironmentService { configure(config: VLSFullConfig): void; getConfig(): VLSFullConfig; getRootPathForConfig(): string; getProjectRoot(): string; getTsConfigPath(): string | undefined; getPackagePath(): string | undefined; getVueVersion(): VueVersion; getSnippetFolder(): string; getGlobalComponentInfos(): BasicComponentInfo[]; } declare function createEnvironmentService(rootPathForConfig: string, projectPath: string, tsconfigPath: string | undefined, packagePath: string | undefined, snippetFolder: string, globalComponentInfos: BasicComponentInfo[], initialConfig: VLSConfig): EnvironmentService; interface RefTokensService { send(uri: string, tokens: Range$1[]): void; } declare function createRefTokensService(conn: Connection): { send(uri: string, tokens: Range$1[]): void; }; interface VLSServices { dependencyService: DependencyService; infoService: VueInfoService; refTokensService: RefTokensService; } interface LanguageMode { getId(): string; updateFileInfo?(doc: TextDocument): void; doValidation?(document: TextDocument, cancellationToken?: VCancellationToken): Promise; getCodeActions?(document: TextDocument, range: Range, formatParams: FormattingOptions, context: CodeActionContext): CodeAction[]; doCodeActionResolve?(document: TextDocument, action: CodeAction): CodeAction; doComplete?(document: TextDocument, position: Position): CompletionList; doResolve?(document: TextDocument, item: CompletionItem): CompletionItem; doHover?(document: TextDocument, position: Position): Hover; doSignatureHelp?(document: TextDocument, position: Position): SignatureHelp | null; findDocumentHighlight?(document: TextDocument, position: Position): DocumentHighlight[]; findDocumentSymbols?(document: TextDocument): SymbolInformation[]; findDocumentLinks?(document: TextDocument, documentContext: DocumentContext): DocumentLink[]; findDefinition?(document: TextDocument, position: Position): Definition; findReferences?(document: TextDocument, position: Position): Location[]; format?(document: TextDocument, range: Range, options: FormattingOptions): TextEdit[]; findDocumentColors?(document: TextDocument): ColorInformation[]; getColorPresentations?(document: TextDocument, color: Color, range: Range): ColorPresentation[]; getFoldingRanges?(document: TextDocument): FoldingRange[]; getRenameFileEdit?(renames: FileRename): TextDocumentEdit[]; getSemanticTokens?(document: TextDocument, range?: Range): SemanticTokenData[]; onDocumentChanged?(filePath: string): void; onDocumentRemoved(document: TextDocument): void; dispose(): void; } interface LanguageModeRange extends LanguageRange { mode: LanguageMode; } declare class LanguageModes { private modes; private documentRegions; private modelCaches; private serviceHost; constructor(); init(env: EnvironmentService, services: VLSServices, globalSnippetDir?: string): Promise; getModeAtPosition(document: TextDocument, position: Position): LanguageMode | undefined; getAllLanguageModeRangesInDocument(document: TextDocument): LanguageModeRange[]; getAllModes(): LanguageMode[]; getMode(languageId: LanguageId): LanguageMode | undefined; onDocumentRemoved(document: TextDocument): void; dispose(): void; } declare const NULL_HOVER: { contents: never[]; }; declare const NULL_SIGNATURE: null; declare const NULL_COMPLETION: CompletionList; declare const nullMode: LanguageMode; /** * Service responsible for managing documents being syned through LSP * Todo - Switch to incremental sync */ declare class DocumentService { private documents; constructor(conn: Connection); getDocument(uri: string): TextDocument | undefined; getAllDocuments(): TextDocument[]; get onDidChangeContent(): vscode_languageserver.Event>; get onDidClose(): vscode_languageserver.Event>; } interface ProjectService { env: EnvironmentService; languageModes: LanguageModes; onDocumentFormatting(params: DocumentFormattingParams): Promise; onCompletion(params: CompletionParams): Promise; onCompletionResolve(item: CompletionItem$1): Promise; onHover(params: TextDocumentPositionParams): Promise; onDocumentHighlight(params: TextDocumentPositionParams): Promise; onDefinition(params: TextDocumentPositionParams): Promise; onReferences(params: TextDocumentPositionParams): Promise; onDocumentLinks(params: DocumentLinkParams): Promise; onDocumentSymbol(params: DocumentSymbolParams): Promise; onDocumentColors(params: DocumentColorParams): Promise; onColorPresentations(params: ColorPresentationParams): Promise; onSignatureHelp(params: TextDocumentPositionParams): Promise; onFoldingRanges(params: FoldingRangeParams): Promise; onCodeAction(params: CodeActionParams): Promise; onCodeActionResolve(action: CodeAction$1): Promise; onWillRenameFile(fileRename: FileRename): Promise; onSemanticTokens(params: SemanticTokensParams | SemanticTokensRangeParams): Promise; doValidate(doc: TextDocument, cancellationToken?: VCancellationToken): Promise; dispose(): Promise; } declare function createProjectService(env: EnvironmentService, documentService: DocumentService, globalSnippetDir: string | undefined, dependencyService: DependencyService, refTokensService: RefTokensService): Promise; declare class VLS { private lspConnection; private workspaces; private nodeModulesMap; private documentService; private globalSnippetDir; private loadingProjects; private projects; private pendingValidationRequests; private cancellationTokenValidationRequests; private validationDelayMs; private documentFormatterRegistration; private workspaceConfig; constructor(lspConnection: Connection); init(params: InitializeParams): Promise<{ capabilities: {}; } | undefined>; listen(): void; private getVLSFullConfig; private addWorkspace; private setupWorkspaceListeners; private setupConfigListeners; private getAllProjectConfigs; private warnProjectIfNeed; getProjectRootPath(uri: DocumentUri): string | undefined; private getProjectConfig; private getProjectService; private setupLSPHandlers; private setupCustomLSPHandlers; private setupDynamicFormatters; private setupFileChangeListeners; /** * Custom Notifications */ openWebsite(url: string): void; /** * Language Features */ onDocumentFormatting(params: DocumentFormattingParams): Promise; onCompletion(params: CompletionParams): Promise; onCompletionResolve(item: CompletionItem): Promise; onHover(params: TextDocumentPositionParams): Promise; onDocumentHighlight(params: TextDocumentPositionParams): Promise; onDefinition(params: TextDocumentPositionParams): Promise; onReferences(params: TextDocumentPositionParams): Promise; onDocumentLinks(params: DocumentLinkParams): Promise; onDocumentSymbol(params: DocumentSymbolParams): Promise; onDocumentColors(params: DocumentColorParams): Promise; onColorPresentations(params: ColorPresentationParams): Promise; onSignatureHelp(params: TextDocumentPositionParams): Promise; onFoldingRanges(params: FoldingRangeParams): Promise; onCodeAction(params: CodeActionParams): Promise; onCodeActionResolve(action: CodeAction): Promise; onWillRenameFiles({ files }: RenameFilesParams): Promise<{ documentChanges: vscode_languageserver_types.TextDocumentEdit[]; } | null>; onSemanticToken(params: SemanticTokensParams | SemanticTokensRangeParams): Promise; private triggerValidation; cancelPastValidation(textDocument: TextDocument): void; cleanPendingValidation(textDocument: TextDocument): void; validateTextDocument(textDocument: TextDocument, cancellationToken?: VCancellationToken): Promise; doValidate(doc: TextDocument, cancellationToken?: VCancellationToken): Promise; executeCommand(arg: ExecuteCommandParams): Promise; removeDocument(doc: TextDocument): Promise; dispose(): void; get capabilities(): ServerCapabilities; } /** * Vetur mainly deals with paths / uris from two objects * * - `TextDocument` from `vscode-languageserver` * - `SourceFile` from `typescript` * * TypeScript Language Service uses `fileName`, which is a file path without scheme. * Convert them into standard URI by `Uri.file`. * * ## `TextDocument.uri` * * - macOS / Linux: file:///foo/bar.vue * - Windows: file:///c%3A/foo/bar.vue (%3A is `:`) * * ## `SourceFile.fileName` * * - macOS / Linux: /foo/bar.vue * - Windows: c:/foo/bar.vue * * ## vscode-uri * * - `Uri.parse`: Takes full URI starting with `file://` * - `Uri.file`: Takes file path * * ### `fsPath` vs `path` * * - macOS / Linux: * ``` * > Uri.parse('file:///foo/bar.vue').fsPath * '/foo/bar.vue' * > Uri.parse('file:///foo/bar.vue').path * '/foo/bar.vue' * ``` * - Windows * ``` * > Uri.parse('file:///c%3A/foo/bar.vue').fsPath * 'c:\\foo\\bar.vue' (\\ escapes to \) * > Uri.parse('file:///c%3A/foo/bar.vue').path * '/c:/foo/bar.vue' * ``` */ declare function getFileFsPath(documentUri: string): string; declare function getFilePath(documentUri: string): string; declare function normalizeFileNameToFsPath(fileName: string): string; declare function normalizeFileNameResolve(...paths: string[]): string; declare function getPathDepth(filePath: string, sep: string): number; declare function getFsPathToUri(fsPath: string): string; declare function normalizeAbsolutePath(fsPath: string, root: string): string; declare function sleep(ms: number): Promise; declare function getWordAtText(text: string, offset: number, wordDefinition: RegExp): { start: number; length: number; }; declare function removeQuotes(str: string): string; /** * wrap text in section tags like