forked from ember-tooling/ember-language-server
- Notifications
You must be signed in to change notification settings - Fork 16
Addon API
Alex Kanunnikov edited this page May 11, 2020 · 3 revisions
import { Definition, FileChangeType, Diagnostic, TextDocument, Location, TextDocumentIdentifier, Position, CompletionItem, CodeActionParams } from 'vscode-languageserver'; import Server from '../server'; import ASTPath from './../glimmer-utils'; type Executor = (server: Server, command: string, args: any[]) => any; type Linter = (document: TextDocument) => Diagnostic[]; type Watcher = (uri: string, change: FileChangeType) => any; type MatchResultType = | 'helper' | 'service' | 'route' | 'controller' | 'modifier' | 'template' | 'component' | 'model' | 'transform' | 'adapter' | 'serializer'; interface MatchResult { type: MatchResultType; name: string; } interface Project { root: string; // project entry path addCommandExecutor(key: string, fn: Executor): void; addLinter(fn: Linter): void; addWatcher(fn: Watcher): void; matchPathToType(filePath: string): null | MatchResult; } interface Registry { component: { [componentName: string]: string[] // files, related to component }, service: { [serviceName: string]: string[] // files, related to service }, routePath: { [routePath: string]: string[] // files, related to route (templates, controllers, routes) } } interface Command { command: string // els.executeInEmberCLI arguments: any[] // first argument - file path / project root, if command scoped to project } interface Server { getRegistry(projectRoot: string): Registry; onExecute(command: Command): any; getUsages(normalizedName: string): string[]; // return list of files, related to token } interface BaseAPIParams { server: Server; textDocument: TextDocumentIdentifier; position: Position; } interface ExtendedAPIParams { focusPath: ASTPath; type: 'script' | 'template'; } interface ReferenceFunctionParams extends BaseAPIParams { results: Location[]; } interface CompletionFunctionParams extends ExtendedAPIParams { results: CompletionItem[]; } interface DefinitionFunctionParams extends ExtendedAPIParams { results: Location[]; } interface CodeActionFunctionParams extends CodeActionParams { results: (Command | CodeAction)[]; server: Server; document: TextDocument } type ReferenceResolveFunction = (root: string, params: ReferenceFunctionParams) => Promise<Location[]>; type CompletionResolveFunction = (root: string, params: CompletionFunctionParams) => Promise<CompletionItem[]>; type DefinitionResolveFunction = (root: string, params: DefinitionFunctionParams) => Promise<Location[]>; type CodeActionResolveFunction = (root: string, params: CodeActionParams) => Promise<(Command | CodeAction)[] | undefined | null>; type InitCallback = (server: Server, project: Project) => void; export interface AddonAPI { onReference: undefined | ReferenceResolveFunction; onComplete: undefined | CompletionResolveFunction; onDefinition: undefined | DefinitionResolveFunction; onCodeAction: undefined | CodeActionResolveFunction; onInit: undefined | InitCallback; }