import { Location, TextDocumentIdentifier, Command, CodeActionParams, CodeAction, Position, CompletionItem, Hover } from 'vscode-languageserver/node'; import { TextDocument } from 'vscode-languageserver-textdocument'; import Server from '../server'; import ASTPath from './../glimmer-utils'; import { Project } from '../project'; interface BaseAPIParams { server: Server; textDocument: TextDocumentIdentifier; position: Position; } interface ExtendedAPIParams extends BaseAPIParams { focusPath: ASTPath; originalText?: string; type: 'script' | 'template'; } export interface ReferenceFunctionParams extends BaseAPIParams { results: Location[]; } export interface HoverFunctionParams extends ExtendedAPIParams { results: Hover[]; } export interface CompletionFunctionParams extends ExtendedAPIParams { results: CompletionItem[]; } export interface DefinitionFunctionParams extends ExtendedAPIParams { results: Location[]; } export interface CodeActionFunctionParams extends CodeActionParams { results: (Command | CodeAction)[]; document: TextDocument; } declare type ReferenceResolveFunction = (root: string, params: ReferenceFunctionParams) => Promise; declare type HoverResolveFunction = (root: string, params: HoverFunctionParams) => Promise; declare type CompletionResolveFunction = (root: string, params: CompletionFunctionParams) => Promise; declare type DefinitionResolveFunction = (root: string, params: DefinitionFunctionParams) => Promise; declare type CodeActionResolveFunction = (root: string, params: CodeActionFunctionParams) => Promise<(Command | CodeAction)[] | undefined | null>; declare type InitFunction = (server: Server, project: Project) => any; export interface AddonAPI { onReference?: ReferenceResolveFunction; onComplete?: CompletionResolveFunction; onCodeAction?: CodeActionResolveFunction; onDefinition?: DefinitionResolveFunction; onInit?: InitFunction; } export declare function queryELSAddonsAPIChain(callbacks: any[], root: string, params: any): Promise; export declare function isConstructor(obj: any): boolean; export declare function collectProjectProviders(root: string, addons: string[]): Promise; export declare type AddonMeta = { root: string; name: string; version: null | 1 | 2; }; export declare type DependencyMeta = { name: string; version: string; }; export declare function emptyProjectProviders(providers?: Partial): ProjectProviders; export interface ProjectProviders { hoverProviders: HoverResolveFunction[]; definitionProviders: DefinitionResolveFunction[]; referencesProviders: ReferenceResolveFunction[]; completionProviders: CompletionResolveFunction[]; codeActionProviders: CodeActionResolveFunction[]; initFunctions: InitFunction[]; info: string[]; addonsMeta: AddonMeta[]; } export interface ExtensionCapabilities { hoverProvider: undefined | true | false; definitionProvider: undefined | true | false; codeActionProvider: undefined | true | false; referencesProvider: true | undefined | { components: true | false; }; completionProvider: true | undefined; } export declare function extensionCapabilities(info: any): ExtensionCapabilities; export declare function languageServerHandler(info: any): string; export declare function isDebugModeEnabled(info: any): boolean; export {};