mirror of
https://github.com/kforney/pentest-distro-builder.git
synced 2024-10-06 12:38:52 -06:00
64 lines
No EOL
3.3 KiB
JavaScript
64 lines
No EOL
3.3 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const vscode_1 = require("vscode");
|
|
const helper = require("../helpers/suggestSupportHelper");
|
|
const dockerComposeKeyInfo_1 = require("./dockerComposeKeyInfo");
|
|
class DockerComposeCompletionItemProvider {
|
|
constructor() {
|
|
this.triggerCharacters = [];
|
|
this.excludeTokens = [];
|
|
}
|
|
// tslint:disable-next-line:promise-function-async // Grandfathered in
|
|
provideCompletionItems(document, position, token) {
|
|
let yamlSuggestSupport = new helper.SuggestSupportHelper();
|
|
// Determine the schema version of the current compose file,
|
|
// based on the existence of a top-level "version" property.
|
|
let versionMatch = document.getText().match(/^version:\s*(["'])(\d+(\.\d)?)\1/im);
|
|
let version = versionMatch ? versionMatch[2] : "1";
|
|
// Get the line where intellisense was invoked on (e.g. 'image: u').
|
|
let line = document.lineAt(position.line).text;
|
|
if (line.length === 0) {
|
|
// empty line
|
|
return Promise.resolve(this.suggestKeys('', version));
|
|
}
|
|
let range = document.getWordRangeAtPosition(position);
|
|
// Get the text where intellisense was invoked on (e.g. 'u').
|
|
let word = range && document.getText(range) || '';
|
|
let textBefore = line.substring(0, position.character);
|
|
if (/^\s*[\w_]*$/.test(textBefore)) {
|
|
// on the first token
|
|
return Promise.resolve(this.suggestKeys(word, version));
|
|
}
|
|
// Matches strings like: 'image: "ubuntu'
|
|
let imageTextWithQuoteMatchYaml = textBefore.match(/^\s*image\s*\:\s*"([^"]*)$/);
|
|
if (imageTextWithQuoteMatchYaml) {
|
|
let imageText = imageTextWithQuoteMatchYaml[1];
|
|
return yamlSuggestSupport.suggestImages(imageText);
|
|
}
|
|
// Matches strings like: 'image: ubuntu'
|
|
let imageTextWithoutQuoteMatch = textBefore.match(/^\s*image\s*\:\s*([\w\:\/]*)/);
|
|
if (imageTextWithoutQuoteMatch) {
|
|
let imageText = imageTextWithoutQuoteMatch[1];
|
|
return yamlSuggestSupport.suggestImages(imageText);
|
|
}
|
|
return Promise.resolve([]);
|
|
}
|
|
suggestKeys(word, version) {
|
|
// Attempt to grab the keys for the requested schema version,
|
|
// otherwise, fall back to showing a composition of all possible keys.
|
|
const keys = dockerComposeKeyInfo_1.default[`v${version}`] || dockerComposeKeyInfo_1.default.All;
|
|
return Object.keys(keys).map(ruleName => {
|
|
let completionItem = new vscode_1.CompletionItem(ruleName);
|
|
completionItem.kind = vscode_1.CompletionItemKind.Keyword;
|
|
completionItem.insertText = ruleName + ': ';
|
|
completionItem.documentation = keys[ruleName];
|
|
return completionItem;
|
|
});
|
|
}
|
|
}
|
|
exports.DockerComposeCompletionItemProvider = DockerComposeCompletionItemProvider;
|
|
//# sourceMappingURL=dockerComposeCompletionItemProvider.js.map
|