UNPKG

dockerfile-language-service

Version:

A language service for Dockerfiles to enable the creation of feature-rich Dockerfile editors.

198 lines (197 loc) 10.6 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "vscode-languageserver-textdocument", "vscode-languageserver-types", "dockerfile-utils", "./main"], factory); } })(function (require, exports) { /* -------------------------------------------------------------------------------------------- * Copyright (c) Remy Suen. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.DockerCommands = void 0; var vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument"); var vscode_languageserver_types_1 = require("vscode-languageserver-types"); var dockerfile_utils_1 = require("dockerfile-utils"); var main_1 = require("./main"); var DockerCommands = /** @class */ (function () { function DockerCommands() { } DockerCommands.prototype.analyzeDiagnostics = function (diagnostics, textDocumentURI) { var commands = []; for (var i = 0; i < diagnostics.length; i++) { // Diagnostic's code is (number | string), convert it if necessary if (typeof diagnostics[i].code === "string") { diagnostics[i].code = parseInt(diagnostics[i].code); } switch (diagnostics[i].code) { case dockerfile_utils_1.ValidationCode.CASING_DIRECTIVE: commands.push({ title: "Convert directive to lowercase", command: main_1.CommandIds.LOWERCASE, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.CASING_INSTRUCTION: commands.push({ title: "Convert instruction to uppercase", command: main_1.CommandIds.UPPERCASE, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.ARGUMENT_EXTRA: commands.push({ title: "Remove extra argument", command: main_1.CommandIds.EXTRA_ARGUMENT, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.INVALID_ESCAPE_DIRECTIVE: commands.push({ title: "Convert to backslash", command: main_1.CommandIds.DIRECTIVE_TO_BACKSLASH, arguments: [textDocumentURI, diagnostics[i].range] }); commands.push({ title: "Convert to backtick", command: main_1.CommandIds.DIRECTIVE_TO_BACKTICK, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.INVALID_AS: commands.push({ title: "Convert to AS", command: main_1.CommandIds.CONVERT_TO_AS, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.UNKNOWN_HEALTHCHECK_FLAG: commands.push({ title: "Convert to --interval", command: main_1.CommandIds.FLAG_TO_HEALTHCHECK_INTERVAL, arguments: [textDocumentURI, diagnostics[i].range] }); commands.push({ title: "Convert to --retries", command: main_1.CommandIds.FLAG_TO_HEALTHCHECK_RETRIES, arguments: [textDocumentURI, diagnostics[i].range] }); commands.push({ title: "Convert to --start-period", command: main_1.CommandIds.FLAG_TO_HEALTHCHECK_START_PERIOD, arguments: [textDocumentURI, diagnostics[i].range] }); commands.push({ title: "Convert to --timeout", command: main_1.CommandIds.FLAG_TO_HEALTHCHECK_TIMEOUT, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.UNKNOWN_ADD_FLAG: commands.push({ title: "Convert to --chown", command: main_1.CommandIds.FLAG_TO_CHOWN, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.UNKNOWN_COPY_FLAG: commands.push({ title: "Convert to --chown", command: main_1.CommandIds.FLAG_TO_CHOWN, arguments: [textDocumentURI, diagnostics[i].range] }); commands.push({ title: "Convert to --from", command: main_1.CommandIds.FLAG_TO_COPY_FROM, arguments: [textDocumentURI, diagnostics[i].range] }); break; case dockerfile_utils_1.ValidationCode.EMPTY_CONTINUATION_LINE: if (diagnostics[i].range.start.line + 1 === diagnostics[i].range.end.line) { commands.push({ title: "Remove empty continuation line", command: main_1.CommandIds.REMOVE_EMPTY_CONTINUATION_LINE, arguments: [textDocumentURI, diagnostics[i].range] }); } else { commands.push({ title: "Remove empty continuation lines", command: main_1.CommandIds.REMOVE_EMPTY_CONTINUATION_LINE, arguments: [textDocumentURI, diagnostics[i].range] }); } break; } } return commands; }; DockerCommands.prototype.computeCommandEdits = function (content, command, args) { var document = vscode_languageserver_textdocument_1.TextDocument.create("", "", 0, content); var range = args[1]; switch (command) { case main_1.CommandIds.LOWERCASE: var directive = document.getText().substring(document.offsetAt(range.start), document.offsetAt(range.end)); return [ vscode_languageserver_types_1.TextEdit.replace(range, directive.toLowerCase()) ]; case main_1.CommandIds.UPPERCASE: var instruction = document.getText().substring(document.offsetAt(range.start), document.offsetAt(range.end)); return [ vscode_languageserver_types_1.TextEdit.replace(range, instruction.toUpperCase()) ]; case main_1.CommandIds.EXTRA_ARGUMENT: return [ vscode_languageserver_types_1.TextEdit.del(range) ]; case main_1.CommandIds.DIRECTIVE_TO_BACKSLASH: return [ vscode_languageserver_types_1.TextEdit.replace(range, '\\') ]; case main_1.CommandIds.DIRECTIVE_TO_BACKTICK: return [ vscode_languageserver_types_1.TextEdit.replace(range, '`') ]; case main_1.CommandIds.CONVERT_TO_AS: return [ vscode_languageserver_types_1.TextEdit.replace(range, "AS") ]; case main_1.CommandIds.FLAG_TO_CHOWN: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--chown") ]; case main_1.CommandIds.FLAG_TO_HEALTHCHECK_INTERVAL: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--interval") ]; case main_1.CommandIds.FLAG_TO_HEALTHCHECK_RETRIES: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--retries") ]; case main_1.CommandIds.FLAG_TO_HEALTHCHECK_START_PERIOD: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--start-period") ]; case main_1.CommandIds.FLAG_TO_HEALTHCHECK_TIMEOUT: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--timeout") ]; case main_1.CommandIds.FLAG_TO_COPY_FROM: return [ vscode_languageserver_types_1.TextEdit.replace(range, "--from") ]; case main_1.CommandIds.REMOVE_EMPTY_CONTINUATION_LINE: return [ vscode_languageserver_types_1.TextEdit.del(range) ]; } return null; }; return DockerCommands; }()); exports.DockerCommands = DockerCommands; });