svelte-language-server
Version:
A language server for Svelte
166 lines (165 loc) • 6.91 kB
TypeScript
import { EncodedSourceMap } from '@jridgewell/trace-mapping';
import { TemplateNode } from 'svelte/types/compiler/interfaces';
import { IExportedNames } from 'svelte2tsx';
import ts from 'typescript';
import { Position, Range, TextDocumentContentChangeEvent } from 'vscode-languageserver';
import { Document, DocumentMapper, IdentityMapper, TagInformation, FilePosition } from '../../lib/documents';
import { SvelteNode, SvelteNodeWalker } from './svelte-ast-utils';
/**
* An error which occurred while trying to parse/preprocess the svelte file contents.
*/
export interface ParserError {
message: string;
range: Range;
code: number;
}
/**
* Initial version of snapshots.
*/
export declare const INITIAL_VERSION = 0;
/**
* A document snapshot suitable for the ts language service and the plugin.
* Can be a real ts/js file or a virtual ts/js file which is generated from a Svelte file.
*/
export interface DocumentSnapshot extends ts.IScriptSnapshot, DocumentMapper {
version: number;
filePath: string;
scriptKind: ts.ScriptKind;
scriptInfo: TagInformation | null;
positionAt(offset: number): Position;
offsetAt(position: Position): number;
/**
* Convenience function for getText(0, getLength())
*/
getFullText(): string;
isOpenedInClient(): boolean;
}
/**
* Options that apply to svelte files.
*/
export interface SvelteSnapshotOptions {
parse: typeof import('svelte/compiler').parse | undefined;
version: string | undefined;
transformOnTemplateError: boolean;
typingsNamespace: string;
}
export declare namespace DocumentSnapshot {
/**
* Returns a svelte snapshot from a svelte document.
* @param document the svelte document
* @param options options that apply to the svelte document
*/
function fromDocument(document: Document, options: SvelteSnapshotOptions): SvelteDocumentSnapshot;
/**
* Returns a svelte or ts/js snapshot from a file path, depending on the file contents.
* @param filePath path to the js/ts/svelte file
* @param createDocument function that is used to create a document in case it's a Svelte file
* @param options options that apply in case it's a svelte file
*/
function fromFilePath(filePath: string, createDocument: (filePath: string, text: string) => Document, options: SvelteSnapshotOptions, tsSystem: ts.System): SvelteDocumentSnapshot | JSOrTSDocumentSnapshot;
/**
* Returns a ts/js snapshot from a file path.
* @param filePath path to the js/ts file
* @param options options that apply in case it's a svelte file
*/
function fromNonSvelteFilePath(filePath: string, tsSystem: ts.System): JSOrTSDocumentSnapshot;
/**
* Returns a svelte snapshot from a file path.
* @param filePath path to the svelte file
* @param createDocument function that is used to create a document
* @param options options that apply in case it's a svelte file
*/
function fromSvelteFilePath(filePath: string, createDocument: (filePath: string, text: string) => Document, options: SvelteSnapshotOptions, tsSystem: ts.System): SvelteDocumentSnapshot;
}
/**
* A svelte document snapshot suitable for the TS language service and the plugin.
* It contains the generated code (Svelte->TS/JS) so the TS language service can understand it.
*/
export declare class SvelteDocumentSnapshot implements DocumentSnapshot {
readonly parent: Document;
readonly parserError: ParserError | null;
readonly scriptKind: ts.ScriptKind;
readonly svelteVersion: string | undefined;
private readonly text;
private readonly nrPrependedLines;
private readonly exportedNames;
private readonly tsxMap?;
private readonly htmlAst?;
private mapper?;
private lineOffsets?;
private url;
version: number;
isSvelte5Plus: boolean;
constructor(parent: Document, parserError: ParserError | null, scriptKind: ts.ScriptKind, svelteVersion: string | undefined, text: string, nrPrependedLines: number, exportedNames: IExportedNames, tsxMap?: EncodedSourceMap | undefined, htmlAst?: TemplateNode | undefined);
get filePath(): string;
get scriptInfo(): TagInformation | null;
get moduleScriptInfo(): TagInformation | null;
getOriginalText(range?: Range): string;
getText(start: number, end: number): string;
getLength(): number;
getFullText(): string;
getChangeRange(): undefined;
positionAt(offset: number): Position;
offsetAt(position: Position): number;
getLineContainingOffset(offset: number): string;
hasProp(name: string): boolean;
svelteNodeAt(positionOrOffset: number | Position): SvelteNode | null;
walkSvelteAst(walker: SvelteNodeWalker): void;
getOriginalPosition(pos: Position): Position;
getGeneratedPosition(pos: Position): Position;
isInGenerated(pos: Position): boolean;
getURL(): string;
isOpenedInClient(): boolean;
private getLineOffsets;
private getMapper;
private initMapper;
}
/**
* A js/ts document snapshot suitable for the ts language service and the plugin.
* Since no mapping has to be done here, it also implements the mapper interface.
* If it's a SvelteKit file (e.g. +page.ts), types will be auto-added if not explicitly typed.
*/
export declare class JSOrTSDocumentSnapshot extends IdentityMapper implements DocumentSnapshot {
version: number;
readonly filePath: string;
private text;
scriptKind: ts.ScriptKind;
scriptInfo: null;
originalText: string;
kitFile: boolean;
private lineOffsets?;
private internalLineOffsets?;
private addedCode;
private paramsPath;
private serverHooksPath;
private clientHooksPath;
private universalHooksPath;
private openedByClient;
isOpenedInClient(): boolean;
constructor(version: number, filePath: string, text: string);
getText(start: number, end: number): string;
getLength(): number;
getFullText(): string;
getChangeRange(): undefined;
positionAt(offset: number): Position;
offsetAt(position: Position): number;
getGeneratedPosition(originalPosition: Position): Position;
getOriginalPosition(generatedPosition: Position): Position;
update(changes: TextDocumentContentChangeEvent[]): void;
protected getLineOffsets(): number[];
private originalOffsetAt;
private originalPositionAt;
private getOriginalLineOffsets;
private adjustText;
private createSource;
}
export declare class DtsDocumentSnapshot extends JSOrTSDocumentSnapshot implements DocumentMapper {
private tsSys;
private traceMap;
private mapperInitialized;
constructor(version: number, filePath: string, text: string, tsSys: ts.System);
getOriginalFilePosition(generatedPosition: Position): FilePosition;
private initMapper;
private initMapperByRawSourceMap;
private logFailedToResolveSourceMap;
}