Files
spring-tools/vscode-extensions/vscode-spring-boot/lib/rewrite.ts

88 lines
2.7 KiB
TypeScript

import { ActivatorOptions } from "@pivotal-tools/commons-vscode";
import { LanguageClient } from "vscode-languageclient/node";
import * as VSCode from 'vscode';
import * as path from "path";
interface RewriteCommandInfo {
id: string;
label: string;
description: string
}
interface RewriteCommandQuickPickItem extends VSCode.QuickPickItem {
id: string;
}
function getWorkspaceFolderName(file: VSCode.Uri): string {
if (file) {
const wf: VSCode.WorkspaceFolder = VSCode.workspace.getWorkspaceFolder(file);
if (wf) {
return wf.name;
}
}
return "";
}
function getRelativePathToWorkspaceFolder(file: VSCode.Uri): string {
if (file) {
const wf: VSCode.WorkspaceFolder = VSCode.workspace.getWorkspaceFolder(file);
if (wf) {
return path.relative(wf.uri.fsPath, file.fsPath);
}
}
return "";
}
async function getTargetPomXml(): Promise<VSCode.Uri> {
if (VSCode.window.activeTextEditor) {
const activeUri = VSCode.window.activeTextEditor.document.uri;
if ("pom.xml" === path.basename(activeUri.path).toLowerCase()) {
return activeUri;
}
}
const candidates: VSCode.Uri[] = await VSCode.workspace.findFiles("**/pom.xml");
if (candidates.length > 0) {
if (candidates.length === 1) {
return candidates[0];
} else {
return await VSCode.window.showQuickPick(
candidates.map((c: VSCode.Uri) => ({ value: c, label: getRelativePathToWorkspaceFolder(c), description: getWorkspaceFolderName(c) })),
{ placeHolder: "Select the target project." },
).then(res => res && res.value);
}
}
return undefined;
}
async function liveHoverConnectHandler(uri: VSCode.Uri) {
if (!uri) {
uri = await getTargetPomXml();
}
const cmds: RewriteCommandInfo[] = await VSCode.commands.executeCommand('sts/rewrite/list', uri.toString(true));
const choices: RewriteCommandQuickPickItem[] = cmds.map(d => {
return {
id: d.id,
label: d.label,
description: d.description,
};
});
if (choices) {
const picked = await VSCode.window.showQuickPick(choices);
if (picked) {
VSCode.commands.executeCommand(`sts/rewrite/recipe/${picked.id}`, uri.toString(true))
}
}
}
/** Called when extension is activated */
export function activate(
client: LanguageClient,
options: ActivatorOptions,
context: VSCode.ExtensionContext
) {
context.subscriptions.push(
VSCode.commands.registerCommand('vscode-spring-boot.rewrite.list', liveHoverConnectHandler)
);
}