Files
squirrelVsis/dist/extension.js
睿 安 8742b1d7d4 修改保存逻辑:先发送文件到本地C++服务,成功后再保存到服务器
- 调整文件保存流程:首先向本地C++服务发送文件内容
- 只有在收到C++服务返回200状态码后才继续执行保存到服务器操作
- 如果C++服务响应失败,则跳过服务器保存,并提供相应提示

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-03 19:32:02 +08:00

179 lines
9.4 KiB
JavaScript
Raw 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.activate = activate;
exports.deactivate = deactivate;
const vscode = __importStar(require("vscode"));
const model_1 = require("./model");
const provider_1 = require("./provider");
const fileSystemProvider_1 = require("./fileSystemProvider");
const commands_1 = require("./commands");
const functionExtractor_1 = require("./functionExtractor");
const completionProvider_1 = require("./providers/completionProvider");
const hoverProvider_1 = require("./providers/hoverProvider");
const definitionProvider_1 = require("./providers/definitionProvider");
const signatureHelpProvider_1 = require("./providers/signatureHelpProvider");
const onTypeFormattingProvider_1 = require("./providers/onTypeFormattingProvider");
const documentFormattingProvider_1 = require("./providers/documentFormattingProvider");
const codeErrorProvider_1 = require("./providers/codeErrorProvider");
const apiParser_1 = require("./providers/apiParser");
const localClient_1 = require("./localClient");
function activate(context) {
console.log('Squirrel NUT Explorer 正在激活...');
// 初始化API解析器
const apiParser = apiParser_1.ApiParser.getInstance();
// 创建模型和提供者
const model = new model_1.FileModel();
const provider = new provider_1.FileProvider(model);
const functionExtractor = new functionExtractor_1.FunctionExtractor();
const output = vscode.window.createOutputChannel('Squirrel');
// 创建自动完成提供者
const completionProvider = new completionProvider_1.CompletionProvider(functionExtractor.getCacheManager());
const dotCompletionProvider = new completionProvider_1.DotCompletionProvider();
// 创建悬停信息提供者
const hoverProvider = new hoverProvider_1.HoverProvider(functionExtractor.getCacheManager());
// 创建定义跳转提供者
const definitionProvider = new definitionProvider_1.DefinitionProvider(functionExtractor.getCacheManager());
// 创建签名帮助提供者
const signatureHelpProvider = new signatureHelpProvider_1.SignatureHelpProvider(functionExtractor.getCacheManager());
// 创建输入时格式化提供者
const onTypeFormattingProvider = new onTypeFormattingProvider_1.OnTypeFormattingProvider();
// 创建文档格式化提供者
const documentFormattingProvider = new documentFormattingProvider_1.DocumentFormattingProvider();
// 创建代码错误检测提供者
const codeErrorProvider = new codeErrorProvider_1.CodeErrorProvider();
const diagnosticCollection = vscode.languages.createDiagnosticCollection('squirrel');
// 注册树形数据提供者
vscode.window.registerTreeDataProvider('squirrelExplorerView', provider);
// 注册自动完成提供者
context.subscriptions.push(vscode.languages.registerCompletionItemProvider('squirrel', completionProvider, ''), vscode.languages.registerCompletionItemProvider('squirrel', dotCompletionProvider, '.'));
// 注册悬停信息提供者
context.subscriptions.push(vscode.languages.registerHoverProvider('squirrel', hoverProvider));
// 注册定义跳转提供者
context.subscriptions.push(vscode.languages.registerDefinitionProvider('squirrel', definitionProvider));
// 注册签名帮助提供者
context.subscriptions.push(vscode.languages.registerSignatureHelpProvider('squirrel', signatureHelpProvider, '(', ','));
// 注册输入时格式化提供者
context.subscriptions.push(vscode.languages.registerOnTypeFormattingEditProvider('squirrel', onTypeFormattingProvider, ')', ';', '}'));
// 注册文档格式化提供者
context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider('squirrel', documentFormattingProvider));
// 注册代码错误检测提供者
context.subscriptions.push(vscode.languages.registerCodeActionsProvider('squirrel', codeErrorProvider), diagnosticCollection);
// 注册文档诊断监听器
context.subscriptions.push(vscode.workspace.onDidChangeTextDocument(event => {
if (event.document.languageId === 'squirrel') {
codeErrorProvider_1.CodeErrorProvider.provideDiagnostics(event.document, diagnosticCollection);
}
}), vscode.window.onDidChangeActiveTextEditor(editor => {
if (editor && editor.document.languageId === 'squirrel') {
codeErrorProvider_1.CodeErrorProvider.provideDiagnostics(editor.document, diagnosticCollection);
}
}), vscode.workspace.onDidOpenTextDocument(document => {
if (document.languageId === 'squirrel') {
codeErrorProvider_1.CodeErrorProvider.provideDiagnostics(document, diagnosticCollection);
}
}));
// 对所有已打开的squirrel文档进行初始诊断
vscode.workspace.textDocuments.forEach(document => {
if (document.languageId === 'squirrel') {
codeErrorProvider_1.CodeErrorProvider.provideDiagnostics(document, diagnosticCollection);
}
});
// 注册文件系统提供者
const fileSystemProvider = new fileSystemProvider_1.SquirrelFileSystemProvider(model);
vscode.workspace.registerFileSystemProvider('squirrel', fileSystemProvider, {
isCaseSensitive: true
});
// 将 fileSystemProvider 添加到 context 以便在 commands 中使用
global.fileSystemProvider = fileSystemProvider;
// 注册所有命令
console.log('正在注册命令...');
(0, commands_1.registerCommands)(context, model, provider, functionExtractor, output);
console.log('命令注册完成');
// 注册工作区配置变更监听
const configChangeListener = vscode.workspace.onDidChangeConfiguration((e) => {
if (e.affectsConfiguration('squirrel')) {
model.updateConfig();
output.appendLine('[Squirrel] 配置已更新');
}
});
// 注册文件保存事件
const saveListener = vscode.workspace.onDidSaveTextDocument(async (doc) => {
if (doc.uri.scheme === 'squirrel') {
const filePath = doc.uri.path.substring(1); // 去掉开头的 '/'
const fileContent = doc.getText();
// 先发送文件内容到本地C++服务
try {
const sendSuccess = await (0, localClient_1.sendFileToCppService)(filePath, fileContent);
if (sendSuccess) {
output.appendLine(`[Squirrel] 文件 ${filePath} 已发送到C++服务`);
// C++服务返回200后继续执行保存到服务器
const success = await model.saveFileContent(filePath, fileContent);
if (success) {
output.appendLine(`[Squirrel] 文件 ${filePath} 保存成功`);
provider.refresh();
// 更新函数缓存
await functionExtractor.updateFileCache(model, filePath);
}
else {
output.appendLine(`[Squirrel] 文件 ${filePath} 保存到服务器失败`);
}
}
else {
output.appendLine(`[Squirrel] 文件 ${filePath} 发送到C++服务失败,跳过保存到服务器`);
}
}
catch (error) {
output.appendLine(`[Squirrel] 发送文件到C++服务时发生错误: ${error}`);
output.appendLine(`[Squirrel] 跳过保存文件 ${filePath} 到服务器`);
}
}
});
// 注册文件关闭事件以清理缓存
const closeListener = vscode.workspace.onDidCloseTextDocument((doc) => {
if (doc.uri.scheme === 'squirrel') {
fileSystemProvider.clearFileCache(doc.uri);
}
});
context.subscriptions.push(configChangeListener, saveListener, closeListener);
output.appendLine('[Squirrel] 扩展激活完成');
output.show();
// 显示欢迎信息
vscode.window.showInformationMessage('Squirrel NUT Explorer 已激活,请点击"连接到 pvfUtility API"开始使用');
}
function deactivate() {
console.log('Squirrel NUT Explorer 正在停用...');
}
//# sourceMappingURL=extension.js.map