Files
squirrelVsis/dist/commands.js

140 lines
5.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerCommands = registerCommands;
const vscode = __importStar(require("vscode"));
// 查找已打开的文档
function findExistingDocument(filePath) {
const documents = vscode.workspace.textDocuments;
for (const doc of documents) {
if (doc.uri.scheme === 'squirrel' && doc.uri.path === `/${filePath}`) {
return doc;
}
}
return undefined;
}
// 打开文件的通用函数
async function openFile(model, provider, entry) {
if (!model.getIsConnected()) {
vscode.window.showErrorMessage('请先连接到 pvfUtility API');
return;
}
// 检查是否已经有相同的文件打开
const existingDocument = findExistingDocument(entry.key);
if (existingDocument) {
// 如果文件已打开,则聚焦到该标签页
await vscode.window.showTextDocument(existingDocument);
return;
}
// 如果文件未打开,则在新标签页中打开
try {
await vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: `正在加载文件 ${entry.name}...`,
cancellable: false
}, async (progress) => {
const content = await model.getFileContent(entry.key);
if (content !== undefined) {
// 创建虚拟文档使用时间戳确保URI唯一以支持多标签页
const timestamp = Date.now();
const uri = vscode.Uri.parse(`squirrel:/${entry.key}?instance=${timestamp}`);
const doc = await vscode.workspace.openTextDocument(uri);
await vscode.window.showTextDocument(doc, { preview: false });
provider.refresh();
}
else {
vscode.window.showErrorMessage(`加载文件 ${entry.name} 失败`);
}
});
}
catch (error) {
vscode.window.showErrorMessage(`打开文件失败: ${error}`);
}
}
function registerCommands(context, model, provider, functionExtractor, output) {
// 连接到 API
console.log('注册 squirrel.connectToApi 命令...');
const connectCommand = vscode.commands.registerCommand('squirrel.connectToApi', async () => {
try {
await vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: '正在连接到 pvfUtility API...',
cancellable: false
}, async (progress) => {
const success = await model.connect();
if (success) {
vscode.window.showInformationMessage('成功连接到 pvfUtility API');
provider.refresh();
// 连接成功后,自动提取所有文件中的函数信息
console.log('开始提取所有文件中的函数信息...');
await vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: '正在提取函数信息...',
cancellable: false
}, async (progress) => {
await functionExtractor.extractAllFunctions(model);
vscode.window.showInformationMessage('函数信息提取完成');
});
}
else {
vscode.window.showErrorMessage('连接到 pvfUtility API 失败');
}
});
}
catch (error) {
vscode.window.showErrorMessage(`连接失败: ${error}`);
}
});
// 打开文件(单击或双击文件时调用)
const openFileCommand = vscode.commands.registerCommand('squirrel.openFile', async (entry) => {
await openFile(model, provider, entry);
});
// 打开库函数文档文件夹
const openApiDocsCommand = vscode.commands.registerCommand('squirrel.openApiDocs', async () => {
// 获取扩展路径
const extensionPath = vscode.extensions.getExtension('local.squirrel-nut-explorer')?.extensionPath;
if (extensionPath) {
// 构建api-functions.json文件的URI
const apiDocsUri = vscode.Uri.file(extensionPath);
// 在资源管理器中打开文件夹
await vscode.env.openExternal(apiDocsUri);
}
else {
vscode.window.showErrorMessage('无法找到扩展路径');
}
});
context.subscriptions.push(connectCommand, openFileCommand, openApiDocsCommand);
}
//# sourceMappingURL=commands.js.map