summaryrefslogtreecommitdiff
path: root/.config/coc/extensions/node_modules/coc-go/lib
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@simplelittledream.com>2022-07-16 18:13:16 -0400
committerJacob McDonnell <jacob@simplelittledream.com>2022-07-16 18:13:16 -0400
commit8fad9a5ecddc88d57a531e4b0084544984f23d25 (patch)
tree84954bc8219942aa56bc899330ccd0007bbe0ef0 /.config/coc/extensions/node_modules/coc-go/lib
parent2887af7fcfb4d618dd13cf66ec2fbdbd84c7527c (diff)
Added profile and other missing configs
Diffstat (limited to '.config/coc/extensions/node_modules/coc-go/lib')
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/binaries.js16
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/commands.js125
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/editor.js13
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/extension.js121
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/checktag.js23
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/config.js57
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/fs.js15
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/fs.test.js29
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/impl.js43
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/lspcommands.js10
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/modify-tags.js113
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/playground.js22
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/request.js28
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/tests.js85
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/tests.test.js21
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/tools.js149
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/ui.js21
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/versions.js33
-rw-r--r--.config/coc/extensions/node_modules/coc-go/lib/utils/versions.test.js59
19 files changed, 983 insertions, 0 deletions
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/binaries.js b/.config/coc/extensions/node_modules/coc-go/lib/binaries.js
new file mode 100644
index 0000000..d67ffd5
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/binaries.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TOOLS = exports.IMPL = exports.GOPLAY = exports.GOTESTS = exports.GOMODIFYTAGS = exports.GOPLS = void 0;
+exports.GOPLS = 'golang.org/x/tools/gopls';
+exports.GOMODIFYTAGS = 'github.com/fatih/gomodifytags';
+exports.GOTESTS = "github.com/cweill/gotests/...";
+exports.GOPLAY = "github.com/haya14busa/goplay/cmd/goplay";
+exports.IMPL = "github.com/josharian/impl";
+exports.TOOLS = [
+ exports.GOPLS,
+ exports.GOMODIFYTAGS,
+ exports.GOTESTS,
+ exports.GOPLAY,
+ exports.IMPL,
+];
+//# sourceMappingURL=binaries.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/commands.js b/.config/coc/extensions/node_modules/coc-go/lib/commands.js
new file mode 100644
index 0000000..f77d866
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/commands.js
@@ -0,0 +1,125 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.installTools = exports.installImpl = exports.installGoplay = exports.installGotests = exports.installGomodifytags = exports.checkGopls = exports.installGopls = exports.version = void 0;
+const tslib_1 = require("tslib");
+const path_1 = tslib_1.__importDefault(require("path"));
+const fs_1 = tslib_1.__importDefault(require("fs"));
+const coc_nvim_1 = require("coc.nvim");
+const tools_1 = require("./utils/tools");
+const checktag_1 = tslib_1.__importDefault(require("./utils/checktag"));
+const ui_1 = require("./utils/ui");
+const config_1 = require("./utils/config");
+const binaries_1 = require("./binaries");
+const versions_1 = require("./utils/versions");
+async function version() {
+ const v1 = await pkgVersion();
+ const v2 = await goplsVersion() || 'unknown';
+ coc_nvim_1.window.showMessage(`Version: coc-go ${v1}; gopls ${v2}`, 'more');
+}
+exports.version = version;
+async function installGopls(client) {
+ await (0, tools_1.installGoBin)(binaries_1.GOPLS, true, goplsVersion);
+ if (client.needsStop()) {
+ await client.stop();
+ client.restart();
+ }
+}
+exports.installGopls = installGopls;
+const checkInterval = 24 * 60 * 60 * 1000;
+async function shouldCheckGopls() {
+ const now = new Date().getTime();
+ const last = await (0, config_1.getState)('gopls:last-check');
+ if (last - (now - checkInterval) < 0) {
+ await (0, config_1.setState)('gopls:last-check', new Date().getTime());
+ return true;
+ }
+ return false;
+}
+async function checkGopls(client, mode) {
+ try {
+ if (!(await shouldCheckGopls())) {
+ return;
+ }
+ let install = false;
+ await (0, ui_1.withProgress)('Checking for new gopls version', async () => {
+ const [current, latest] = await Promise.all([
+ goplsVersion(),
+ (0, checktag_1.default)("golang/tools", /^gopls\//),
+ ]);
+ if (!(0, versions_1.isValidVersion)(current) || !(0, versions_1.isValidVersion)(latest)) {
+ coc_nvim_1.window.showMessage('checking for a new gopls version failed', 'warning');
+ return;
+ }
+ switch ((0, versions_1.compareVersions)(latest, current)) {
+ case 0:
+ coc_nvim_1.window.showMessage(`[gopls] up-to-date: ${current}`, 'more');
+ break;
+ case 1:
+ switch (mode) {
+ case 'install':
+ install = true;
+ break;
+ case 'ask':
+ install = await coc_nvim_1.window.showPrompt(`[gopls] Install update? ${current} => ${latest}`);
+ break;
+ case 'inform':
+ coc_nvim_1.window.showMessage(`[gopls] update available: ${current} => ${latest}`);
+ break;
+ }
+ break;
+ case -1:
+ coc_nvim_1.window.showMessage(`[gopls] current: ${current} | latest: ${latest}`, 'more');
+ break;
+ }
+ });
+ if (install) {
+ await installGopls(client);
+ }
+ }
+ catch (e) {
+ coc_nvim_1.window.showMessage(e.toString(), 'error');
+ }
+}
+exports.checkGopls = checkGopls;
+async function pkgVersion() {
+ try {
+ const pkgPath = path_1.default.resolve(__dirname, '..', 'package.json');
+ const pkgContent = await fs_1.default.promises.readFile(pkgPath, 'utf8');
+ return JSON.parse(pkgContent).version;
+ }
+ catch (err) {
+ console.error(err);
+ }
+ return '';
+}
+async function goplsVersion() {
+ const [, versionOut] = await (0, tools_1.runGoTool)("gopls", ["version"]);
+ const m = versionOut.trim().match(/\s{4}golang\.org\/x\/tools\/gopls@(v?\d+\.\d+\.\d+) .*/);
+ if (m && (0, versions_1.isValidVersion)(m[1])) {
+ return m[1].replace(/^v/, '');
+ }
+ return '';
+}
+async function installGomodifytags() {
+ await (0, tools_1.installGoBin)(binaries_1.GOMODIFYTAGS, true);
+}
+exports.installGomodifytags = installGomodifytags;
+async function installGotests() {
+ await (0, tools_1.installGoBin)(binaries_1.GOTESTS, true);
+}
+exports.installGotests = installGotests;
+async function installGoplay() {
+ await (0, tools_1.installGoBin)(binaries_1.GOPLAY, true);
+}
+exports.installGoplay = installGoplay;
+async function installImpl() {
+ await (0, tools_1.installGoBin)(binaries_1.IMPL, true);
+}
+exports.installImpl = installImpl;
+async function installTools() {
+ for (const tool of binaries_1.TOOLS) {
+ await (0, tools_1.installGoBin)(tool, true);
+ }
+}
+exports.installTools = installTools;
+//# sourceMappingURL=commands.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/editor.js b/.config/coc/extensions/node_modules/coc-go/lib/editor.js
new file mode 100644
index 0000000..9985957
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/editor.js
@@ -0,0 +1,13 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.activeTextDocument = void 0;
+const coc_nvim_1 = require("coc.nvim");
+async function activeTextDocument() {
+ const doc = await coc_nvim_1.workspace.document;
+ if (doc.filetype != 'go') {
+ throw "Not a go document";
+ }
+ return doc.textDocument;
+}
+exports.activeTextDocument = activeTextDocument;
+//# sourceMappingURL=editor.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/extension.js b/.config/coc/extensions/node_modules/coc-go/lib/extension.js
new file mode 100644
index 0000000..4558e0c
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/extension.js
@@ -0,0 +1,121 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.activate = void 0;
+const tslib_1 = require("tslib");
+const coc_nvim_1 = require("coc.nvim");
+const child_process_1 = require("child_process");
+const os_1 = tslib_1.__importDefault(require("os"));
+const tools_1 = require("./utils/tools");
+const commands_1 = require("./commands");
+const modify_tags_1 = require("./utils/modify-tags");
+const config_1 = require("./utils/config");
+const editor_1 = require("./editor");
+const binaries_1 = require("./binaries");
+const tests_1 = require("./utils/tests");
+const playground_1 = require("./utils/playground");
+const impl_1 = require("./utils/impl");
+const lspcommands_1 = require("./utils/lspcommands");
+const restartConfigs = [
+ 'go.goplsArgs',
+ 'go.goplsOptions',
+ 'go.goplsPath',
+ 'go.goplsUseDaemon',
+];
+async function activate(context) {
+ (0, config_1.setStoragePath)(context.storagePath);
+ if ((0, config_1.getConfig)().enable === false) {
+ return;
+ }
+ registerGeneral(context);
+ registerGopls(context);
+ registerTest(context);
+ registerTags(context);
+ registerPlaygroud(context);
+ registerGoImpl(context);
+ registerTools(context);
+ registerLspCommands(context);
+}
+exports.activate = activate;
+async function registerGeneral(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.version", () => (0, commands_1.version)()));
+}
+async function registerGopls(context) {
+ const config = (0, config_1.getConfig)();
+ const command = await goplsPath(config.goplsPath);
+ if (!command) {
+ return;
+ }
+ const args = config.goplsArgs ? [...config.goplsArgs] : [];
+ if (config.goplsUseDaemon !== false && !args.find(arg => arg.startsWith('-remote'))) {
+ // Use daemon by default
+ args.push('-remote=auto');
+ }
+ // TMPDIR needs to be resetted, because its altered by coc.nvim, which breaks
+ // the automatic deamon launching of gopls.
+ // See: https://github.com/neoclide/coc.nvim/commit/bdd9a9e1401fe6fdd57a9bd078e3651ecf1e0202
+ const tmpdir = await coc_nvim_1.workspace.nvim.eval('$TMPDIR');
+ const server = () => {
+ return new Promise(resolve => {
+ resolve((0, child_process_1.spawn)(command, args, {
+ cwd: coc_nvim_1.workspace.cwd,
+ env: Object.assign(Object.assign(Object.assign({}, process.env), { TMPDIR: tmpdir }), config.goplsEnv),
+ }));
+ });
+ };
+ // https://github.com/neoclide/coc.nvim/blob/master/src/language-client/client.ts#L684
+ const clientOptions = {
+ documentSelector: ['go', 'gomod', 'gowork'],
+ initializationOptions: () => (0, config_1.getConfig)().goplsOptions,
+ disableWorkspaceFolders: config.disable.workspaceFolders,
+ disableDiagnostics: config.disable.diagnostics,
+ disableCompletion: config.disable.completion,
+ // TODO disableSnippetCompletion: config.disable.snippetCompletion,
+ };
+ const client = new coc_nvim_1.LanguageClient('go', 'gopls', server, clientOptions);
+ if (config.checkForUpdates !== 'disabled' && !config.goplsPath) {
+ await (0, commands_1.checkGopls)(client, config.checkForUpdates);
+ }
+ context.subscriptions.push(coc_nvim_1.services.registLanguageClient(client),
+ // restart gopls if options changed
+ coc_nvim_1.workspace.onDidChangeConfiguration(async (e) => {
+ if (restartConfigs.find(k => e.affectsConfiguration(k))) {
+ await client.stop();
+ client.restart();
+ }
+ }), coc_nvim_1.commands.registerCommand("go.install.gopls", () => (0, commands_1.installGopls)(client)));
+}
+async function goplsPath(goplsPath) {
+ if (goplsPath) {
+ if (goplsPath.startsWith('~')) {
+ goplsPath = os_1.default.homedir() + goplsPath.slice(1);
+ }
+ if (!await (0, tools_1.commandExists)(goplsPath)) {
+ coc_nvim_1.window.showMessage(`goplsPath is configured ("${goplsPath}"), but does not exist!`, 'error');
+ return null;
+ }
+ return goplsPath;
+ }
+ if (!await (0, tools_1.installGoBin)(binaries_1.GOPLS)) {
+ return;
+ }
+ return (0, tools_1.goBinPath)(binaries_1.GOPLS);
+}
+async function registerGoImpl(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.install.impl", () => (0, commands_1.installImpl)()), coc_nvim_1.commands.registerCommand("go.impl.cursor", async () => (0, impl_1.generateImplStubs)(await (0, editor_1.activeTextDocument)())));
+}
+async function registerTest(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.install.gotests", () => (0, commands_1.installGotests)()), coc_nvim_1.commands.registerCommand("go.test.generate.file", async () => (0, tests_1.generateTestsAll)(await (0, editor_1.activeTextDocument)())), coc_nvim_1.commands.registerCommand("go.test.generate.exported", async () => (0, tests_1.generateTestsExported)(await (0, editor_1.activeTextDocument)())), coc_nvim_1.commands.registerCommand("go.test.generate.function", async () => (0, tests_1.generateTestsFunction)(await (0, editor_1.activeTextDocument)())), coc_nvim_1.commands.registerCommand("go.test.toggle", async () => (0, tests_1.toogleTests)(await (0, editor_1.activeTextDocument)())));
+}
+async function registerTags(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.install.gomodifytags", () => (0, commands_1.installGomodifytags)()), coc_nvim_1.commands.registerCommand("go.tags.add", async (...tags) => (0, modify_tags_1.addTags)(await (0, editor_1.activeTextDocument)(), { tags })), coc_nvim_1.commands.registerCommand("go.tags.add.line", async (...tags) => (0, modify_tags_1.addTags)(await (0, editor_1.activeTextDocument)(), { tags, selection: "line" })), coc_nvim_1.commands.registerCommand("go.tags.add.prompt", async () => (0, modify_tags_1.addTags)(await (0, editor_1.activeTextDocument)(), { prompt: true })), coc_nvim_1.commands.registerCommand("go.tags.remove", async (...tags) => (0, modify_tags_1.removeTags)(await (0, editor_1.activeTextDocument)(), { tags })), coc_nvim_1.commands.registerCommand("go.tags.remove.line", async (...tags) => (0, modify_tags_1.removeTags)(await (0, editor_1.activeTextDocument)(), { tags, selection: "line" })), coc_nvim_1.commands.registerCommand("go.tags.remove.prompt", async () => (0, modify_tags_1.removeTags)(await (0, editor_1.activeTextDocument)(), { prompt: true })), coc_nvim_1.commands.registerCommand("go.tags.clear", async () => (0, modify_tags_1.clearTags)(await (0, editor_1.activeTextDocument)())), coc_nvim_1.commands.registerCommand("go.tags.clear.line", async () => (0, modify_tags_1.clearTags)(await (0, editor_1.activeTextDocument)(), { selection: "line" })));
+}
+async function registerPlaygroud(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.install.goplay", () => (0, commands_1.installGoplay)()), coc_nvim_1.commands.registerCommand("go.playground", async () => (0, playground_1.openPlayground)(await (0, editor_1.activeTextDocument)())));
+}
+async function registerTools(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.install.tools", () => (0, commands_1.installTools)()));
+}
+async function registerLspCommands(context) {
+ context.subscriptions.push(coc_nvim_1.commands.registerCommand("go.gopls.tidy", lspcommands_1.goplsTidy));
+}
+//# sourceMappingURL=extension.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/checktag.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/checktag.js
new file mode 100644
index 0000000..053604a
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/checktag.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const request_1 = require("./request");
+const releaseFilter = /^v\d+\.\d+\.\d+$/;
+async function checkLatestTag(repo, prefixFilter) {
+ const data = await (0, request_1.getJSON)(`https://api.github.com/repos/${repo}/tags`);
+ if (!Array.isArray(data)) {
+ return '';
+ }
+ let tags = data.map(t => t.name);
+ if (prefixFilter) {
+ tags = tags
+ .filter(t => t.match(prefixFilter))
+ .map(t => t.replace(prefixFilter, ''));
+ }
+ tags = tags
+ .filter(t => t.match(releaseFilter));
+ return tags.length > 0
+ ? tags[0].replace(/^v/, '')
+ : '';
+}
+exports.default = checkLatestTag;
+//# sourceMappingURL=checktag.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/config.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/config.js
new file mode 100644
index 0000000..d60955c
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/config.js
@@ -0,0 +1,57 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.setState = exports.getState = exports.configDir = exports.setStoragePath = exports.getConfig = void 0;
+const tslib_1 = require("tslib");
+const path_1 = tslib_1.__importDefault(require("path"));
+const os_1 = tslib_1.__importDefault(require("os"));
+const fs_1 = tslib_1.__importDefault(require("fs"));
+const coc_nvim_1 = require("coc.nvim");
+const fs_2 = require("./fs");
+const state = {};
+function getConfig() {
+ return coc_nvim_1.workspace.getConfiguration().get("go");
+}
+exports.getConfig = getConfig;
+function setStoragePath(dir) {
+ state.storagePath = dir;
+}
+exports.setStoragePath = setStoragePath;
+async function configDir(...names) {
+ const storage = state.storagePath || path_1.default.join(os_1.default.homedir(), ".config", "coc", "go");
+ const dir = path_1.default.join(storage, ...names);
+ return new Promise((resolve) => {
+ (0, fs_2.createDir)(dir);
+ resolve(dir);
+ });
+}
+exports.configDir = configDir;
+async function stateFile() {
+ return path_1.default.join(await configDir(), 'state.json');
+}
+async function getStateData() {
+ try {
+ const f = await stateFile();
+ const d = JSON.parse(await fs_1.default.promises.readFile(f, 'utf-8'));
+ return d || {};
+ }
+ catch (err) { /* mute */ }
+ return {};
+}
+async function setStateData(data) {
+ try {
+ await fs_1.default.promises.writeFile(await stateFile(), JSON.stringify(data, null, ' '));
+ }
+ catch (err) { /* mute */ }
+}
+async function getState(key) {
+ const d = await getStateData();
+ return d[key] || '';
+}
+exports.getState = getState;
+async function setState(key, value) {
+ const d = await getStateData();
+ d[key] = value;
+ await setStateData(d);
+}
+exports.setState = setState;
+//# sourceMappingURL=config.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.js
new file mode 100644
index 0000000..899b1fd
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.js
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createDir = void 0;
+const tslib_1 = require("tslib");
+const fs_1 = tslib_1.__importDefault(require("fs"));
+const path_1 = tslib_1.__importDefault(require("path"));
+function createDir(dirPath) {
+ if (fs_1.default.existsSync(dirPath)) {
+ return;
+ }
+ createDir(path_1.default.dirname(dirPath));
+ fs_1.default.mkdirSync(dirPath);
+}
+exports.createDir = createDir;
+//# sourceMappingURL=fs.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.test.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.test.js
new file mode 100644
index 0000000..28c3ec9
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/fs.test.js
@@ -0,0 +1,29 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+const tmp_1 = tslib_1.__importDefault(require("tmp"));
+const assert_1 = tslib_1.__importDefault(require("assert"));
+const path_1 = tslib_1.__importDefault(require("path"));
+const fs_1 = tslib_1.__importDefault(require("fs"));
+const fs_2 = require("./fs");
+describe('createDir()', () => {
+ let tmpDir;
+ const joinPath = (...parts) => path_1.default.join(tmpDir.name, ...parts);
+ beforeEach(() => tmpDir = tmp_1.default.dirSync({ unsafeCleanup: true }));
+ afterEach(() => tmpDir.removeCallback());
+ it('should create a directory', () => {
+ const dirPath = joinPath('test');
+ (0, fs_2.createDir)(dirPath);
+ assert_1.default.ok(fs_1.default.existsSync(dirPath));
+ });
+ it('should create nested directories', () => {
+ const dirPath = joinPath('test', 'foo', 'bar');
+ (0, fs_2.createDir)(dirPath);
+ assert_1.default.ok(fs_1.default.existsSync(dirPath));
+ });
+ it('should not fail if directory exists', () => {
+ (0, fs_2.createDir)(tmpDir.name);
+ assert_1.default.ok(fs_1.default.existsSync(tmpDir.name));
+ });
+});
+//# sourceMappingURL=fs.test.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/impl.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/impl.js
new file mode 100644
index 0000000..f616827
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/impl.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.generateImplStubs = void 0;
+const coc_nvim_1 = require("coc.nvim");
+const binaries_1 = require("../binaries");
+const tools_1 = require("./tools");
+const interfaceRegex = /^(\w+ \*?\w+ )?([\w./-]+)$/;
+async function generateImplStubs(document) {
+ try {
+ const implInput = await coc_nvim_1.window.requestInput("Enter receiver and interface [f *File io.Closer]");
+ if (implInput == null) {
+ coc_nvim_1.window.showMessage("No input detected! Aborting.", "warning");
+ return;
+ }
+ const matches = implInput.match(interfaceRegex);
+ if (!matches) {
+ throw Error(`Cannot parse input: ${implInput}`);
+ }
+ const edit = await runGoImpl(document, [matches[1], matches[2]]);
+ await coc_nvim_1.workspace.applyEdit({ changes: { [document.uri]: [edit] } });
+ }
+ catch (error) {
+ coc_nvim_1.window.showMessage(error, "error");
+ }
+}
+exports.generateImplStubs = generateImplStubs;
+async function runGoImpl(document, args) {
+ const stdout = await (0, tools_1.execTool)(binaries_1.IMPL, args);
+ const { line } = await coc_nvim_1.window.getCursorPosition();
+ const insertPos = { line: line + 1, character: 0 };
+ const lineText = await coc_nvim_1.workspace.getLine(document.uri, line);
+ const newText = lineText.trim() === ''
+ ? stdout
+ : `\n${stdout}`;
+ return {
+ range: {
+ start: insertPos,
+ end: insertPos
+ },
+ newText
+ };
+}
+//# sourceMappingURL=impl.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/lspcommands.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/lspcommands.js
new file mode 100644
index 0000000..8e5b4c6
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/lspcommands.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.goplsTidy = void 0;
+const coc_nvim_1 = require("coc.nvim");
+async function goplsTidy() {
+ const doc = await coc_nvim_1.workspace.document;
+ await coc_nvim_1.commands.executeCommand('gopls.tidy', { URIs: [doc.uri] });
+}
+exports.goplsTidy = goplsTidy;
+//# sourceMappingURL=lspcommands.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/modify-tags.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/modify-tags.js
new file mode 100644
index 0000000..ca80186
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/modify-tags.js
@@ -0,0 +1,113 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.clearTags = exports.removeTags = exports.addTags = void 0;
+const coc_nvim_1 = require("coc.nvim");
+const vscode_uri_1 = require("vscode-uri");
+const tools_1 = require("./tools");
+const binaries_1 = require("../binaries");
+////////////////////////////////////////////////////////////////////////////////
+async function addTags(document, params = {}) {
+ const config = coc_nvim_1.workspace.getConfiguration().get('go.tags', {});
+ let tags = (params.tags && params.tags.length > 0)
+ ? params.tags.join(',')
+ : (config.tags || 'json');
+ let options = (config.options || config.options === "")
+ ? config.options
+ : 'json=omitempty';
+ const transform = (config.transform || "snakecase");
+ const skipUnexported = config.skipUnexported;
+ let cursor;
+ if (params.prompt) {
+ cursor = await coc_nvim_1.window.getCursorPosition();
+ tags = await coc_nvim_1.window.requestInput('Enter comma separated tag names', tags);
+ if (!tags) {
+ return;
+ }
+ options = await coc_nvim_1.window.requestInput('Enter comma separated options', options);
+ }
+ const args = [
+ '-add-tags', tags.replace(/ +/g, ''),
+ '-override',
+ '-add-options', (options || ""),
+ '-transform', transform,
+ ...(await offsetArgs(document, (params.selection || "struct"), cursor))
+ ];
+ if (skipUnexported) {
+ args.push('--skip-unexported');
+ }
+ await runGomodifytags(document, args);
+}
+exports.addTags = addTags;
+async function removeTags(document, params = {}) {
+ const config = coc_nvim_1.workspace.getConfiguration().get('go.tags', {});
+ let tags = (params.tags && params.tags.length > 0)
+ ? params.tags.join(',')
+ : (config.tags || 'json');
+ let cursor;
+ if (params.prompt) {
+ cursor = await coc_nvim_1.window.getCursorPosition();
+ tags = await coc_nvim_1.window.requestInput('Enter comma separated tag names', tags);
+ if (!tags) {
+ return;
+ }
+ }
+ await runGomodifytags(document, [
+ '-remove-tags', (tags || "json"),
+ '-clear-options',
+ ...(await offsetArgs(document, (params.selection || "struct"), cursor))
+ ]);
+}
+exports.removeTags = removeTags;
+async function clearTags(document, params = {}) {
+ await runGomodifytags(document, [
+ '-clear-tags',
+ '-clear-options',
+ ...(await offsetArgs(document, (params.selection || "struct")))
+ ]);
+}
+exports.clearTags = clearTags;
+////////////////////////////////////////////////////////////////////////////////
+async function runGomodifytags(document, args) {
+ const fileName = vscode_uri_1.URI.parse(document.uri).fsPath;
+ args.push('-modified', '-file', fileName, '-format', 'json');
+ const input = fileArchive(fileName, document.getText());
+ const edit = await execGomodifytags(args, input);
+ await coc_nvim_1.workspace.applyEdit({ changes: { [document.uri]: [edit] } });
+}
+async function execGomodifytags(args, input) {
+ try {
+ const stdout = await (0, tools_1.execTool)(binaries_1.GOMODIFYTAGS, args, input);
+ const mods = JSON.parse(stdout);
+ return {
+ range: {
+ start: { line: mods.start - 1, character: 0 },
+ end: { line: mods.end, character: 0 }
+ },
+ newText: mods.lines.join("\n") + "\n"
+ };
+ }
+ catch (err) {
+ coc_nvim_1.window.showMessage(`Cannot modify tags: ${err}`, 'error');
+ throw err;
+ }
+}
+function fileArchive(fileName, fileContents) {
+ return fileName + '\n' + Buffer.byteLength(fileContents, 'utf8') + '\n' + fileContents;
+}
+// https://github.com/golang/vscode-go/blob/master/src/util.ts#L84
+function byteOffsetAt(document, position) {
+ const offset = document.offsetAt(position);
+ const text = document.getText();
+ return Buffer.byteLength(text.substr(0, offset)).toString();
+}
+async function offsetArgs(document, selection, cursor = null) {
+ cursor = cursor || await coc_nvim_1.window.getCursorPosition();
+ coc_nvim_1.window.showMessage(`selection = ${selection}`);
+ switch (selection) {
+ case "struct":
+ return ['-offset', byteOffsetAt(document, cursor)];
+ case "line":
+ return ['-line', String(cursor.line + 1)];
+ }
+}
+//# sourceMappingURL=modify-tags.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/playground.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/playground.js
new file mode 100644
index 0000000..9fef796
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/playground.js
@@ -0,0 +1,22 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.openPlayground = void 0;
+const coc_nvim_1 = require("coc.nvim");
+const tools_1 = require("./tools");
+const binaries_1 = require("../binaries");
+async function openPlayground(document) {
+ return runGoplay(document.getText());
+}
+exports.openPlayground = openPlayground;
+async function runGoplay(code) {
+ try {
+ const stdout = await (0, tools_1.execTool)(binaries_1.GOPLAY, ['-'], code);
+ coc_nvim_1.window.showMessage(stdout);
+ return true;
+ }
+ catch (err) {
+ coc_nvim_1.window.showMessage(`${err}`, "error");
+ return false;
+ }
+}
+//# sourceMappingURL=playground.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/request.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/request.js
new file mode 100644
index 0000000..ad7c968
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/request.js
@@ -0,0 +1,28 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getJSON = void 0;
+const tslib_1 = require("tslib");
+const https_1 = tslib_1.__importDefault(require("https"));
+const options = {
+ headers: {
+ 'User-Agent': `coc-go`,
+ }
+};
+function getJSON(url) {
+ return new Promise((resolve, reject) => {
+ https_1.default.get(url, options, (res) => {
+ let body = '';
+ res.on('data', (chunk) => (body += chunk));
+ res.on('end', () => {
+ try {
+ resolve(JSON.parse(body));
+ }
+ catch (err) {
+ reject(err);
+ }
+ });
+ }).on('error', reject);
+ });
+}
+exports.getJSON = getJSON;
+//# sourceMappingURL=request.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.js
new file mode 100644
index 0000000..4aa14b2
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.js
@@ -0,0 +1,85 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.extractFunctionName = exports.toogleTests = exports.generateTestsFunction = exports.generateTestsExported = exports.generateTestsAll = void 0;
+const coc_nvim_1 = require("coc.nvim");
+const vscode_uri_1 = require("vscode-uri");
+const tools_1 = require("./tools");
+const binaries_1 = require("../binaries");
+////////////////////////////////////////////////////////////////////////////////
+async function generateTestsAll(document) {
+ if (isTest(document)) {
+ coc_nvim_1.window.showMessage("Document is a test file", "error");
+ return;
+ }
+ await runGotests(document, ["-all"]) && await openTests(document);
+}
+exports.generateTestsAll = generateTestsAll;
+async function generateTestsExported(document) {
+ if (isTest(document)) {
+ coc_nvim_1.window.showMessage("Document is a test file", "error");
+ return;
+ }
+ await runGotests(document, ["-exported"]) && await openTests(document);
+}
+exports.generateTestsExported = generateTestsExported;
+async function generateTestsFunction(document) {
+ if (isTest(document)) {
+ coc_nvim_1.window.showMessage("Document is a test file", "error");
+ return;
+ }
+ const { line } = await coc_nvim_1.window.getCursorPosition();
+ const text = await document.getText({
+ start: { line, character: 0 },
+ end: { line, character: Infinity },
+ });
+ coc_nvim_1.window.showMessage(text);
+ const funcName = extractFunctionName(text);
+ if (!funcName) {
+ coc_nvim_1.window.showMessage("No function found", "error");
+ return;
+ }
+ await runGotests(document, ["-only", `^${funcName}$`]) && await openTests(document);
+}
+exports.generateTestsFunction = generateTestsFunction;
+async function toogleTests(document) {
+ const targetURI = isTest(document)
+ ? sourceURI(document)
+ : testURI(document);
+ return coc_nvim_1.workspace.openResource(targetURI);
+}
+exports.toogleTests = toogleTests;
+////////////////////////////////////////////////////////////////////////////////
+async function openTests(document) {
+ return coc_nvim_1.workspace.openResource(testURI(document));
+}
+function isTest(document) {
+ return document.uri.endsWith('_test.go');
+}
+function testURI(document) {
+ return document.uri.replace(/(_test)?\.go$/, '_test.go');
+}
+function sourceURI(document) {
+ return document.uri.replace(/(_test)?\.go$/, '.go');
+}
+async function runGotests(document, args) {
+ const config = coc_nvim_1.workspace.getConfiguration().get('go.tests', {});
+ args.push(...(config.generateFlags || []), '-w', vscode_uri_1.URI.parse(document.uri).fsPath);
+ try {
+ const stdout = await (0, tools_1.execTool)(binaries_1.GOTESTS, args);
+ coc_nvim_1.window.showMessage(stdout || "");
+ return true;
+ }
+ catch (err) {
+ coc_nvim_1.window.showMessage(`Error: ${err}`, "error");
+ return false;
+ }
+}
+////////////////////////////////////////////////////////////////////////////////
+function extractFunctionName(line) {
+ const m = /^func +(\([^)]+\) +)?([^\s(]+)/.exec(line);
+ if (m) {
+ return m[2];
+ }
+}
+exports.extractFunctionName = extractFunctionName;
+//# sourceMappingURL=tests.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.test.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.test.js
new file mode 100644
index 0000000..70d0801
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/tests.test.js
@@ -0,0 +1,21 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+const assert_1 = tslib_1.__importDefault(require("assert"));
+const tests_1 = require("./tests");
+describe('extractFunctionName()', () => {
+ const cases = [
+ ['', null],
+ ['\tfuncFoo()', null],
+ ['func Foo() {', 'Foo'],
+ ['func Foo() string {', 'Foo'],
+ ['func Foo(str string) string {', 'Foo'],
+ ['func (b *Bar) Foo(str string) string {', 'Foo'],
+ ];
+ cases.forEach(([line, name]) => {
+ it(`should extract ${JSON.stringify(name)} from "${line}"`, () => {
+ assert_1.default.equal(name, (0, tests_1.extractFunctionName)(line));
+ });
+ });
+});
+//# sourceMappingURL=tests.test.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/tools.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/tools.js
new file mode 100644
index 0000000..375db4a
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/tools.js
@@ -0,0 +1,149 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.execTool = exports.commandExists = exports.runBin = exports.runGoTool = exports.goBinPath = exports.installGoBin = void 0;
+const tslib_1 = require("tslib");
+const path_1 = tslib_1.__importDefault(require("path"));
+const fs_1 = tslib_1.__importDefault(require("fs"));
+const util_1 = tslib_1.__importDefault(require("util"));
+const child_process_1 = require("child_process");
+const coc_nvim_1 = require("coc.nvim");
+const which_1 = tslib_1.__importDefault(require("which"));
+const config_1 = require("./config");
+const versions_1 = require("./versions");
+const runExec = util_1.default.promisify(child_process_1.exec);
+const isWin = process.platform === 'win32';
+async function installGoBin(source, force = false, getVersion) {
+ const name = goBinName(source);
+ if (!force && await goBinExists(name)) {
+ return true;
+ }
+ const statusItem = coc_nvim_1.window.createStatusBarItem(90, { progress: true });
+ statusItem.text = `Installing '${name}'`;
+ statusItem.show();
+ const success = await goInstall(source) && await goBinExists(name);
+ if (success) {
+ const vname = getVersion ? `${name}@${await getVersion()}` : name;
+ coc_nvim_1.window.showMessage(`Installed '${vname}'`);
+ }
+ else {
+ coc_nvim_1.window.showMessage(`Failed to install '${name}'`, 'error');
+ }
+ statusItem.hide();
+ return success;
+}
+exports.installGoBin = installGoBin;
+async function goInstall(source) {
+ return await goVersionOrLater('1.17.0')
+ ? goRun(`install ${source}@latest`)
+ : goRun(`get ${source}@latest`);
+}
+async function goVersionOrLater(version) {
+ try {
+ return (0, versions_1.compareVersions)(version, await getGoVersion()) < 0;
+ }
+ catch (err) {
+ // mute
+ }
+ return false;
+}
+async function getGoVersion() {
+ try {
+ const [, out] = await runBin('go', ['version']);
+ return out.trim().match(/^go version go(\S+) .*$/)[1];
+ }
+ catch (err) {
+ // mute
+ }
+ return '';
+}
+async function goBinPath(source) {
+ const name = goBinName(source);
+ return path_1.default.join(await (0, config_1.configDir)('bin'), name + (isWin ? ".exe" : ""));
+}
+exports.goBinPath = goBinPath;
+async function runGoTool(name, args = []) {
+ return runBin(await goBinPath(name), args);
+}
+exports.runGoTool = runGoTool;
+async function runBin(bin, args = []) {
+ return new Promise((resolve) => {
+ const p = (0, child_process_1.spawn)(bin, args);
+ let out = "";
+ p.stdout.on('data', (data) => out += data);
+ p.on("close", code => resolve([code, out]));
+ });
+}
+exports.runBin = runBin;
+async function commandExists(command) {
+ if (path_1.default.isAbsolute(command)) {
+ return fileExists(command);
+ }
+ return new Promise((resolve) => { (0, which_1.default)(command, (err) => resolve(err == null)); });
+}
+exports.commandExists = commandExists;
+////////////////////////////////////////////////////////////////////////////////
+async function goBinExists(source) {
+ const name = goBinName(source);
+ const bin = await goBinPath(name);
+ return fileExists(bin);
+}
+async function fileExists(path) {
+ return new Promise((resolve) => fs_1.default.open(path, 'r', (err) => resolve(err === null)));
+}
+async function goRun(args) {
+ const gopath = await (0, config_1.configDir)('tools');
+ const gobin = await (0, config_1.configDir)('bin');
+ const env = {
+ GO111MODULE: 'on',
+ GOBIN: gobin,
+ GOPATH: gopath,
+ GOROOT: '',
+ GOTOOLDIR: '',
+ };
+ const cmd = isWin
+ ? `go ${args}`
+ : `env GOBIN="${gobin}" go ${args}`;
+ const opts = {
+ env: Object.assign({}, process.env, env),
+ cwd: gopath,
+ shell: isWin ? undefined : process.env.SHELL,
+ windowsHide: true,
+ };
+ try {
+ await runExec(cmd, opts);
+ }
+ catch (ex) {
+ coc_nvim_1.window.showMessage(ex, 'error');
+ return false;
+ }
+ return true;
+}
+async function execTool(source, args, input) {
+ const [bin, name] = await Promise.all([
+ goBinPath(source),
+ goBinName(source),
+ ]);
+ if (!await commandExists(bin)) {
+ await installGoBin(source);
+ }
+ return new Promise((resolve, reject) => {
+ const p = (0, child_process_1.execFile)(bin, args, { cwd: coc_nvim_1.workspace.cwd }, async (err, stdout, stderr) => {
+ if (err && err.code === "ENOENT") {
+ return reject(`Error: Command ${name} not found! Run "CocCommand go.install.${name}" to install it and try again.`);
+ }
+ if (err) {
+ return reject(stderr.toString());
+ }
+ return resolve(stdout.toString());
+ });
+ if (p.pid) {
+ p.stdin.end(input);
+ }
+ });
+}
+exports.execTool = execTool;
+////////////////////////////////////////////////////////////////////////////////
+function goBinName(source) {
+ return source.replace(/\/\.\.\.$/, '').split('/').pop();
+}
+//# sourceMappingURL=tools.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/ui.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/ui.js
new file mode 100644
index 0000000..772354e
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/ui.js
@@ -0,0 +1,21 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.withProgress = void 0;
+const coc_nvim_1 = require("coc.nvim");
+// eslint-disable-next-line no-unused-vars
+async function withProgress(text, fn) {
+ const status = coc_nvim_1.window.createStatusBarItem(90, { progress: true });
+ // Show status item at leaste one second
+ let offset = 1000;
+ const t = setTimeout(() => (offset = 0), offset);
+ const dispose = () => {
+ clearTimeout(t);
+ setTimeout(() => status.dispose(), offset);
+ };
+ status.text = text;
+ status.show();
+ await fn(status);
+ dispose();
+}
+exports.withProgress = withProgress;
+//# sourceMappingURL=ui.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.js
new file mode 100644
index 0000000..1bcd82a
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parseVersion = exports.compareVersions = exports.isValidVersion = void 0;
+const versionExp = /^v?(\d+)\.(\d+)(\.(\d+))?$/;
+function isValidVersion(version) {
+ return Boolean(version.trim().match(versionExp));
+}
+exports.isValidVersion = isValidVersion;
+function compareVersions(version1, version2) {
+ const v1 = parseVersion(version1);
+ const v2 = parseVersion(version2);
+ for (let i = 0; i < 3; i++) {
+ if (v1[i] !== v2[i]) {
+ return Math.max(-1, Math.min(1, v1[i] - v2[i]));
+ }
+ }
+ return 0;
+}
+exports.compareVersions = compareVersions;
+function parseVersion(v) {
+ let ver = [0, 0, 0];
+ const match = v.trim().match(versionExp);
+ if (match) {
+ const [, major, minor, , patch = '0'] = match;
+ ver = [parseInt(major), parseInt(minor), parseInt(patch)];
+ }
+ if (!isValidVersion(v)) {
+ throw new Error(`'${v}' is not a valid version`);
+ }
+ return ver;
+}
+exports.parseVersion = parseVersion;
+//# sourceMappingURL=versions.js.map \ No newline at end of file
diff --git a/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.test.js b/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.test.js
new file mode 100644
index 0000000..640786f
--- /dev/null
+++ b/.config/coc/extensions/node_modules/coc-go/lib/utils/versions.test.js
@@ -0,0 +1,59 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+const assert_1 = tslib_1.__importDefault(require("assert"));
+const versions_1 = require("./versions");
+const v0_0_0 = [0, 0, 0];
+const v1_0_0 = [1, 0, 0];
+const v1_2_0 = [1, 2, 0];
+const v1_2_3 = [1, 2, 3];
+describe('isValidVersion()', () => {
+ it('should recognise valid versions', () => {
+ assert_1.default.ok((0, versions_1.isValidVersion)('v1.0.0'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('1.0.0'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('0.1.0'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('0.0.1'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('0.0.0'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('v0.0.0'));
+ });
+ it('should recognise invalid versions', () => {
+ assert_1.default.ok(!(0, versions_1.isValidVersion)('v 1.0.0'));
+ assert_1.default.ok(!(0, versions_1.isValidVersion)('1'));
+ assert_1.default.ok((0, versions_1.isValidVersion)('1.1'));
+ });
+});
+describe("parseVersion()", () => {
+ it("should parse simple versions", () => {
+ assert_1.default.deepStrictEqual((0, versions_1.parseVersion)('v0.0.0'), v0_0_0);
+ assert_1.default.deepStrictEqual((0, versions_1.parseVersion)('v1.0.0'), v1_0_0);
+ assert_1.default.deepStrictEqual((0, versions_1.parseVersion)('v1.2.0'), v1_2_0);
+ assert_1.default.deepStrictEqual((0, versions_1.parseVersion)('v1.2'), v1_2_0);
+ assert_1.default.deepStrictEqual((0, versions_1.parseVersion)('v1.2.3'), v1_2_3);
+ });
+});
+describe('compareVersions()', () => {
+ it('should compare equal version', () => {
+ assert_1.default.throws(() => (0, versions_1.compareVersions)('', ''));
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.0', '1.0.0'), 0);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.2.0', '1.2.0'), 0);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.2.3', '1.2.3'), 0);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('v1.0.0', '1.0.0'), 0);
+ });
+ it('should compare greater version', () => {
+ assert_1.default.throws(() => (0, versions_1.compareVersions)('', ''));
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('2.0.0', '1.0.0'), 1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.1.0', '1.0.0'), 1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.4', '1.0.0'), 1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('v1.1.0', '1.0.0'), 1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.1.0', 'v1.0.0'), 1);
+ });
+ it('should compare smaller version', () => {
+ assert_1.default.throws(() => (0, versions_1.compareVersions)('', ''));
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.0', '2.0.0'), -1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.0', '1.1.0'), -1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.0', '1.0.4'), -1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('1.0.0', 'v1.1.0'), -1);
+ assert_1.default.strictEqual((0, versions_1.compareVersions)('v1.0.0', '1.1.0'), -1);
+ });
+});
+//# sourceMappingURL=versions.test.js.map \ No newline at end of file