@microsoft/compose-language-service
Version:
Language service for Docker Compose documents
73 lines • 3.92 kB
JavaScript
;
/*--------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceStartupCodeLensProvider = void 0;
const vscode_languageserver_1 = require("vscode-languageserver");
const ProviderBase_1 = require("./ProviderBase");
const ActionContext_1 = require("../utils/ActionContext");
const yaml_1 = require("yaml");
const yamlRangeToLspRange_1 = require("../utils/yamlRangeToLspRange");
class ServiceStartupCodeLensProvider extends ProviderBase_1.ProviderBase {
on(params, token) {
const ctx = (0, ActionContext_1.getCurrentContext)();
ctx.telemetry.properties.isActivationEvent = 'true'; // This happens automatically so we'll treat it as isActivationEvent === true
const results = [];
if (!params.document.yamlDocument.value.has('services')) {
return undefined;
}
// First add the run-all from the main "services" node
const documentMap = params.document.yamlDocument.value.contents;
if ((0, yaml_1.isMap)(documentMap)) {
const servicesNode = documentMap.items.find(item => {
return (0, yaml_1.isScalar)(item.key) && item.key.value === 'services';
});
if ((0, yaml_1.isPair)(servicesNode)) {
const servicesKey = servicesNode.key;
if ((0, yaml_1.isScalar)(servicesKey) && servicesKey.range && (0, yaml_1.isMap)(servicesNode.value)) {
const lens = vscode_languageserver_1.CodeLens.create((0, yamlRangeToLspRange_1.yamlRangeToLspRange)(params.document.textDocument, servicesKey.range));
lens.command = {
title: '$(run-all) Run All Services',
command: 'vscode-containers.compose.up',
arguments: [
/* dockerComposeFileUri: */ params.document.uri
],
};
results.push(lens);
}
}
}
// Check for cancellation
if (token.isCancellationRequested) {
return undefined;
}
// Then add the run-single for each service
const serviceMap = params.document.yamlDocument.value.getIn(['services']);
if ((0, yaml_1.isMap)(serviceMap)) {
for (const service of serviceMap.items) {
// Within each loop we'll check for cancellation (though this is expected to be very fast)
if (token.isCancellationRequested) {
return undefined;
}
if ((0, yaml_1.isScalar)(service.key) && typeof service.key.value === 'string' && service.key.range) {
const lens = vscode_languageserver_1.CodeLens.create((0, yamlRangeToLspRange_1.yamlRangeToLspRange)(params.document.textDocument, service.key.range));
lens.command = {
title: '$(play) Run Service',
command: 'vscode-containers.compose.up.subset',
arguments: [
/* dockerComposeFileUri: */ params.document.uri,
/* selectedComposeFileUris: */ undefined,
/* preselectedServices: */ [service.key.value],
],
};
results.push(lens);
}
}
}
return results;
}
}
exports.ServiceStartupCodeLensProvider = ServiceStartupCodeLensProvider;
//# sourceMappingURL=ServiceStartupCodeLensProvider.js.map