import * as path from "path"; import * as fs from "fs"; import { CompletionItem, TextDocumentPositionParams } from "vscode-languageserver/lib/main"; import Completer from "../interfaces/Completer"; export default class Completers { public completers: Completer[]; public init(): Promise { this.completers = []; const completersPath = path.join(__dirname, "completers"); return Promise.all( fs.readdirSync(completersPath) .filter((completer: string) => !completer.includes(".map")) .map((completer: string) => { import(path.join(completersPath, completer)).then( completerModule => { this.completers.push( new completerModule.default() ); } ); }) ) } public setPath(projectPath: string) { this.completers.forEach((completer: Completer) => { completer.setPath(projectPath); }); } public getItems( _textDocumentPosition: TextDocumentPositionParams ): CompletionItem[] { let completionItems: CompletionItem[] = []; this.completers.forEach((completer: Completer) => { completionItems = completionItems.concat(completer.getItems()); }); return completionItems; } }