162 lines
8.3 KiB
Plaintext
162 lines
8.3 KiB
Plaintext
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.createLanguageService = void 0;
|
||
|
const language_core_1 = require("@volar/language-core");
|
||
|
const documents_1 = require("./documents");
|
||
|
const autoInsert = require("./features/provideAutoInsertionEdit");
|
||
|
const callHierarchy = require("./features/provideCallHierarchyItems");
|
||
|
const codeActions = require("./features/provideCodeActions");
|
||
|
const codeLens = require("./features/provideCodeLenses");
|
||
|
const colorPresentations = require("./features/provideColorPresentations");
|
||
|
const completions = require("./features/provideCompletionItems");
|
||
|
const definition = require("./features/provideDefinition");
|
||
|
const diagnostics = require("./features/provideDiagnostics");
|
||
|
const documentColors = require("./features/provideDocumentColors");
|
||
|
const documentDrop = require("./features/provideDocumentDropEdits");
|
||
|
const format = require("./features/provideDocumentFormattingEdits");
|
||
|
const documentHighlight = require("./features/provideDocumentHighlights");
|
||
|
const documentLink = require("./features/provideDocumentLinks");
|
||
|
const semanticTokens = require("./features/provideDocumentSemanticTokens");
|
||
|
const documentSymbols = require("./features/provideDocumentSymbols");
|
||
|
const fileReferences = require("./features/provideFileReferences");
|
||
|
const fileRename = require("./features/provideFileRenameEdits");
|
||
|
const foldingRanges = require("./features/provideFoldingRanges");
|
||
|
const hover = require("./features/provideHover");
|
||
|
const inlayHints = require("./features/provideInlayHints");
|
||
|
const linkedEditing = require("./features/provideLinkedEditingRanges");
|
||
|
const references = require("./features/provideReferences");
|
||
|
const rename = require("./features/provideRenameEdits");
|
||
|
const renamePrepare = require("./features/provideRenameRange");
|
||
|
const selectionRanges = require("./features/provideSelectionRanges");
|
||
|
const signatureHelp = require("./features/provideSignatureHelp");
|
||
|
const workspaceSymbol = require("./features/provideWorkspaceSymbols");
|
||
|
const codeActionResolve = require("./features/resolveCodeAction");
|
||
|
const codeLensResolve = require("./features/resolveCodeLens");
|
||
|
const completionResolve = require("./features/resolveCompletionItem");
|
||
|
const documentLinkResolve = require("./features/resolveDocumentLink");
|
||
|
const inlayHintResolve = require("./features/resolveInlayHint");
|
||
|
function createLanguageService(languageContext, servicePlugins, env) {
|
||
|
const context = createServiceContext();
|
||
|
return {
|
||
|
getTriggerCharacters: () => servicePlugins.map(service => service.triggerCharacters ?? []).flat(),
|
||
|
getAutoFormatTriggerCharacters: () => servicePlugins.map(service => service.autoFormatTriggerCharacters ?? []).flat(),
|
||
|
getSignatureHelpTriggerCharacters: () => servicePlugins.map(service => service.signatureHelpTriggerCharacters ?? []).flat(),
|
||
|
getSignatureHelpRetriggerCharacters: () => servicePlugins.map(service => service.signatureHelpRetriggerCharacters ?? []).flat(),
|
||
|
format: format.register(context),
|
||
|
getFoldingRanges: foldingRanges.register(context),
|
||
|
getSelectionRanges: selectionRanges.register(context),
|
||
|
findLinkedEditingRanges: linkedEditing.register(context),
|
||
|
findDocumentSymbols: documentSymbols.register(context),
|
||
|
findDocumentColors: documentColors.register(context),
|
||
|
getColorPresentations: colorPresentations.register(context),
|
||
|
doValidation: diagnostics.register(context),
|
||
|
findReferences: references.register(context),
|
||
|
findFileReferences: fileReferences.register(context),
|
||
|
findDefinition: definition.register(context, 'provideDefinition', language_core_1.isDefinitionEnabled),
|
||
|
findTypeDefinition: definition.register(context, 'provideTypeDefinition', language_core_1.isTypeDefinitionEnabled),
|
||
|
findImplementations: definition.register(context, 'provideImplementation', language_core_1.isImplementationEnabled),
|
||
|
prepareRename: renamePrepare.register(context),
|
||
|
doRename: rename.register(context),
|
||
|
getEditsForFileRename: fileRename.register(context),
|
||
|
getSemanticTokens: semanticTokens.register(context),
|
||
|
doHover: hover.register(context),
|
||
|
doComplete: completions.register(context),
|
||
|
doCodeActions: codeActions.register(context),
|
||
|
doCodeActionResolve: codeActionResolve.register(context),
|
||
|
doCompletionResolve: completionResolve.register(context),
|
||
|
getSignatureHelp: signatureHelp.register(context),
|
||
|
doCodeLens: codeLens.register(context),
|
||
|
doCodeLensResolve: codeLensResolve.register(context),
|
||
|
findDocumentHighlights: documentHighlight.register(context),
|
||
|
findDocumentLinks: documentLink.register(context),
|
||
|
doDocumentLinkResolve: documentLinkResolve.register(context),
|
||
|
findWorkspaceSymbols: workspaceSymbol.register(context),
|
||
|
doAutoInsert: autoInsert.register(context),
|
||
|
doDocumentDrop: documentDrop.register(context),
|
||
|
getInlayHints: inlayHints.register(context),
|
||
|
doInlayHintResolve: inlayHintResolve.register(context),
|
||
|
callHierarchy: callHierarchy.register(context),
|
||
|
dispose: () => context.services.forEach(service => service[1].dispose?.()),
|
||
|
context,
|
||
|
};
|
||
|
function createServiceContext() {
|
||
|
const context = {
|
||
|
language: languageContext,
|
||
|
documents: (0, documents_1.createDocumentProvider)(languageContext.files),
|
||
|
env,
|
||
|
inject: (key, ...args) => {
|
||
|
for (const service of context.services) {
|
||
|
if (context.disabledServicePlugins.has(service[1])) {
|
||
|
continue;
|
||
|
}
|
||
|
const provide = service[1].provide?.[key];
|
||
|
if (provide) {
|
||
|
return provide(...args);
|
||
|
}
|
||
|
}
|
||
|
throw `No service provide ${key}`;
|
||
|
},
|
||
|
services: [],
|
||
|
commands: {
|
||
|
rename: {
|
||
|
create(uri, position) {
|
||
|
return {
|
||
|
title: '',
|
||
|
command: 'editor.action.rename',
|
||
|
arguments: [
|
||
|
uri,
|
||
|
position,
|
||
|
],
|
||
|
};
|
||
|
},
|
||
|
is(command) {
|
||
|
return command.command === 'editor.action.rename';
|
||
|
},
|
||
|
},
|
||
|
showReferences: {
|
||
|
create(uri, position, locations) {
|
||
|
return {
|
||
|
title: locations.length === 1 ? '1 reference' : `${locations.length} references`,
|
||
|
command: 'editor.action.showReferences',
|
||
|
arguments: [
|
||
|
uri,
|
||
|
position,
|
||
|
locations,
|
||
|
],
|
||
|
};
|
||
|
},
|
||
|
is(command) {
|
||
|
return command.command === 'editor.action.showReferences';
|
||
|
},
|
||
|
},
|
||
|
setSelection: {
|
||
|
create(position) {
|
||
|
return {
|
||
|
title: '',
|
||
|
command: 'setSelection',
|
||
|
arguments: [{
|
||
|
selection: {
|
||
|
selectionStartLineNumber: position.line + 1,
|
||
|
positionLineNumber: position.line + 1,
|
||
|
selectionStartColumn: position.character + 1,
|
||
|
positionColumn: position.character + 1,
|
||
|
},
|
||
|
}],
|
||
|
};
|
||
|
},
|
||
|
is(command) {
|
||
|
return command.command === 'setSelection';
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
disabledVirtualFileUris: new Set(),
|
||
|
disabledServicePlugins: new WeakSet(),
|
||
|
};
|
||
|
for (const servicePlugin of servicePlugins) {
|
||
|
context.services.push([servicePlugin, servicePlugin.create(context)]);
|
||
|
}
|
||
|
return context;
|
||
|
}
|
||
|
}
|
||
|
exports.createLanguageService = createLanguageService;
|
||
|
//# sourceMappingURL=languageService.js.map
|