From 6e550f11129038c2f765a6c6e57b979476ffd9f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9D=BF=20=E5=AE=89?= Date: Wed, 17 Sep 2025 11:28:54 +0800 Subject: [PATCH] =?UTF-8?q?1.0.1=20=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E7=A7=BB=E6=A4=8D=E6=96=B0=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- copy-beautify-files.js | 34 +++ dist/providers/documentFormattingProvider.js | 97 +++----- .../documentFormattingProvider.js.map | 2 +- dist/providers/onTypeFormattingProvider.js | 191 ++++++++------- .../providers/onTypeFormattingProvider.js.map | 2 +- dist/utils/beautifyHelper.js | 201 +++++++++++++++ dist/utils/beautifyHelper.js.map | 1 + js-beautify-wrapper-fixed.js | 44 ++++ js-beautify-wrapper.js | 15 ++ node_modules/.package-lock.json | 2 +- package-lock.json | 4 +- squirrel-nut-explorer-1.0.0.vsix | Bin 0 -> 176900 bytes src/providers/documentFormattingProvider.ts | 120 +++------ src/providers/onTypeFormattingProvider.ts | 221 +++++++++-------- src/utils/beautifyHelper.ts | 228 ++++++++++++++++++ 15 files changed, 818 insertions(+), 344 deletions(-) create mode 100644 copy-beautify-files.js create mode 100644 dist/utils/beautifyHelper.js create mode 100644 dist/utils/beautifyHelper.js.map create mode 100644 js-beautify-wrapper-fixed.js create mode 100644 js-beautify-wrapper.js create mode 100644 squirrel-nut-explorer-1.0.0.vsix create mode 100644 src/utils/beautifyHelper.ts diff --git a/copy-beautify-files.js b/copy-beautify-files.js new file mode 100644 index 0000000..9912ab2 --- /dev/null +++ b/copy-beautify-files.js @@ -0,0 +1,34 @@ +const fs = require('fs-extra'); +const path = require('path'); + +// 复制 js-beautify 相关文件到 dist 目录 +async function copyBeautifyFiles() { + const srcDir = path.join(__dirname); + const destDir = path.join(__dirname, 'dist'); + + // 确保目标目录存在 + await fs.ensureDir(destDir); + + // 复制 js-beautify.js 和包装器 + const filesToCopy = [ + 'js-beautify.js', + 'js-beautify-wrapper.js' + ]; + + for (const file of filesToCopy) { + const srcPath = path.join(srcDir, file); + const destPath = path.join(destDir, file); + + if (await fs.pathExists(srcPath)) { + await fs.copy(srcPath, destPath); + console.log(`已复制 ${file} 到 dist 目录`); + } + } +} + +// 如果直接运行此脚本,则执行复制操作 +if (require.main === module) { + copyBeautifyFiles().catch(console.error); +} + +module.exports = { copyBeautifyFiles }; \ No newline at end of file diff --git a/dist/providers/documentFormattingProvider.js b/dist/providers/documentFormattingProvider.js index b02ec80..5dcb608 100644 --- a/dist/providers/documentFormattingProvider.js +++ b/dist/providers/documentFormattingProvider.js @@ -35,82 +35,39 @@ var __importStar = (this && this.__importStar) || (function () { Object.defineProperty(exports, "__esModule", { value: true }); exports.DocumentFormattingProvider = void 0; const vscode = __importStar(require("vscode")); -// 文档格式化提供者类 +const beautifyHelper_1 = require("../utils/beautifyHelper"); +/** + * 文档格式化提供者类 - 使用 js-beautify.js + */ class DocumentFormattingProvider { - // 提供整个文档的代码格式化功能 + /** + * 提供整个文档的代码格式化功能 + */ async provideDocumentFormattingEdits(document, options, token) { const edits = []; - const lines = []; - // 逐行处理文档内容 - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - lines.push(line.text); + try { + // 获取文档全文 + const fullText = document.getText(); + // 检查是否是 Squirrel 代码 + if (!(0, beautifyHelper_1.isSquirrelCode)(fullText)) { + return edits; // 如果不是 Squirrel 代码,不应用格式化 + } + // 使用 js-beautify 格式化代码 + const formattedText = (0, beautifyHelper_1.beautifyCode)(fullText, options); + // 如果格式化后的代码与原代码相同,不需要修改 + if (formattedText === fullText) { + return edits; + } + // 创建编辑操作,替换整个文档 + const fullRange = new vscode.Range(document.positionAt(0), document.positionAt(fullText.length)); + edits.push(vscode.TextEdit.replace(fullRange, formattedText)); + } + catch (error) { + console.error('文档格式化失败:', error); + // 如果格式化失败,返回空编辑数组,保持原代码不变 } - // 格式化文档 - const formattedLines = this.formatDocument(lines, options); - // 创建编辑操作 - const fullRange = new vscode.Range(document.positionAt(0), document.positionAt(document.getText().length)); - edits.push(vscode.TextEdit.replace(fullRange, formattedLines.join('\n'))); return edits; } - // 格式化文档 - formatDocument(lines, options) { - const formattedLines = []; - let indentLevel = 0; - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - const trimmedLine = line.trim(); - if (trimmedLine.length === 0) { - // 空行保持原样或删除 - formattedLines.push(''); - continue; - } - // 检查是否需要减少缩进(遇到右大括号等) - if (trimmedLine.startsWith('}') || trimmedLine.startsWith(')') || trimmedLine.startsWith(']')) { - indentLevel = Math.max(0, indentLevel - 1); - } - // 添加适当的缩进 - const indent = this.createIndent(indentLevel, options); - const formattedLine = indent + trimmedLine; - formattedLines.push(formattedLine); - // 检查是否需要增加缩进(遇到左大括号等) - if (trimmedLine.endsWith('{') || trimmedLine.endsWith('(') || trimmedLine.endsWith('[')) { - indentLevel++; - } - // 特殊处理else、catch等关键字,它们应该与前面的右大括号在同一行 - if (trimmedLine.startsWith('else') || trimmedLine.startsWith('catch') || trimmedLine.startsWith('elif')) { - if (formattedLines.length > 1) { - const prevLine = formattedLines[formattedLines.length - 2]; - if (prevLine.trim().endsWith('}')) { - // 将else等关键字与前面的右大括号放在同一行 - formattedLines[formattedLines.length - 2] = prevLine.trim() + ' ' + trimmedLine; - formattedLines.pop(); // 移除当前行 - indentLevel--; // 修正缩进级别 - } - } - } - } - // 规范化空格(在操作符周围添加适当空格) - return formattedLines.map(line => this.normalizeSpaces(line)); - } - // 在操作符周围添加适当空格 - normalizeSpaces(line) { - // 在常见的操作符周围添加空格 - return line - .replace(/([^\s])(==|!=|<=|>=|<|>|=|\+|-|\*|\/|%)([^\s])/g, '$1 $2 $3') - .replace(/([^\s])(,)([^\s])/g, '$1$2 $3') - .replace(/\s+/g, ' ') // 将多个空格替换为单个空格 - .trim(); - } - // 创建指定级别的缩进 - createIndent(level, options) { - if (options.insertSpaces) { - return ' '.repeat(level * options.tabSize); - } - else { - return '\t'.repeat(level); - } - } } exports.DocumentFormattingProvider = DocumentFormattingProvider; //# sourceMappingURL=documentFormattingProvider.js.map \ No newline at end of file diff --git a/dist/providers/documentFormattingProvider.js.map b/dist/providers/documentFormattingProvider.js.map index a7c0800..dca7335 100644 --- a/dist/providers/documentFormattingProvider.js.map +++ b/dist/providers/documentFormattingProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"documentFormattingProvider.js","sourceRoot":"","sources":["../../src/providers/documentFormattingProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"documentFormattingProvider.js","sourceRoot":"","sources":["../../src/providers/documentFormattingProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,4DAAuE;AAEvE;;GAEG;AACH,MAAa,0BAA0B;IACnC;;OAEG;IACH,KAAK,CAAC,8BAA8B,CAChC,QAA6B,EAC7B,OAAiC,EACjC,KAA+B;QAE/B,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,IAAI,CAAC;YACD,SAAS;YACT,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEpC,oBAAoB;YACpB,IAAI,CAAC,IAAA,+BAAc,EAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC,CAAC,0BAA0B;YAC5C,CAAC;YAED,uBAAuB;YACvB,MAAM,aAAa,GAAG,IAAA,6BAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEtD,wBAAwB;YACxB,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,gBAAgB;YAChB,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAC9B,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EACtB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CACvC,CAAC;YAEF,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QAElE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACjC,0BAA0B;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AA3CD,gEA2CC"} \ No newline at end of file diff --git a/dist/providers/onTypeFormattingProvider.js b/dist/providers/onTypeFormattingProvider.js index b4a5d05..12042a9 100644 --- a/dist/providers/onTypeFormattingProvider.js +++ b/dist/providers/onTypeFormattingProvider.js @@ -35,115 +35,130 @@ var __importStar = (this && this.__importStar) || (function () { Object.defineProperty(exports, "__esModule", { value: true }); exports.OnTypeFormattingProvider = void 0; const vscode = __importStar(require("vscode")); -// 输入时格式化提供者类 +const beautifyHelper_1 = require("../utils/beautifyHelper"); +/** + * 输入时格式化提供者类 - 使用 js-beautify.js + */ class OnTypeFormattingProvider { - // 在用户输入特定字符时自动格式化代码 + /** + * 在用户输入特定字符时自动格式化代码 + */ async provideOnTypeFormattingEdits(document, position, ch, options, token) { const edits = []; - // 根据输入的字符执行不同的格式化操作 - switch (ch) { - case ')': - // 输入右括号时格式化当前行 - edits.push(...this.formatCurrentLine(document, position, options)); - break; - case ';': - // 输入分号时格式化当前行 - edits.push(...this.formatCurrentLine(document, position, options)); - break; - case '}': - // 输入右大括号时格式化整个代码块 - edits.push(...this.formatCodeBlock(document, position, options)); - break; - default: - break; + try { + // 检查是否是 Squirrel 代码 + const textBefore = document.getText(new vscode.Range(new vscode.Position(0, 0), position)); + if (!(0, beautifyHelper_1.isSquirrelCode)(textBefore)) { + return edits; + } + // 根据输入的字符执行不同的格式化操作 + switch (ch) { + case ')': + // 输入右括号时格式化当前行 + edits.push(...this.formatCurrentLine(document, position, options)); + break; + case ';': + // 输入分号时格式化当前行 + edits.push(...this.formatCurrentLine(document, position, options)); + break; + case '}': + // 输入右大括号时格式化整个代码块 + edits.push(...this.formatCodeBlock(document, position, options)); + break; + default: + break; + } + } + catch (error) { + console.error('输入时格式化失败:', error); } return edits; } - // 格式化当前行 + /** + * 使用 js-beautify 格式化当前行 + */ formatCurrentLine(document, position, options) { - const line = document.lineAt(position.line); - const trimmedLine = line.text.trim(); - if (trimmedLine.length === 0) { - return []; + const edits = []; + try { + // 获取当前行 + const line = document.lineAt(position.line); + const lineText = line.text; + // 获取当前行的上下文(向前几行,向后几行) + const startLine = Math.max(0, position.line - 2); + const endLine = Math.min(document.lineCount - 1, position.line + 2); + const contextText = document.getText(new vscode.Range(new vscode.Position(startLine, 0), new vscode.Position(endLine, document.lineAt(endLine).text.length))); + // 使用 js-beautify 格式化代码块 + const formattedContext = (0, beautifyHelper_1.beautifyCode)(contextText, options); + // 比较原始文本和格式化后的文本 + if (formattedContext === contextText) { + return edits; // 没有变化,不需要编辑 + } + // 应用格式化结果 + const originalLines = contextText.split('\n'); + const formattedLines = formattedContext.split('\n'); + for (let i = 0; i < originalLines.length && i < formattedLines.length; i++) { + const original = originalLines[i]; + const formatted = formattedLines[i]; + if (original !== formatted) { + const lineNumber = startLine + i; + const range = new vscode.Range(new vscode.Position(lineNumber, 0), new vscode.Position(lineNumber, document.lineAt(lineNumber).text.length)); + edits.push(vscode.TextEdit.replace(range, formatted)); + } + } } - // 简单的格式化:确保行尾没有多余空格 - if (line.text !== trimmedLine && !line.text.endsWith(' ')) { - const range = new vscode.Range(new vscode.Position(position.line, 0), new vscode.Position(position.line, line.text.length)); - return [vscode.TextEdit.replace(range, trimmedLine)]; + catch (error) { + console.error('格式化当前行失败:', error); } - return []; + return edits; } - // 格式化代码块 + /** + * 使用 js-beautify 格式化代码块 + */ formatCodeBlock(document, position, options) { const edits = []; - const line = document.lineAt(position.line); - // 查找匹配的左大括号 - let braceCount = 1; - let blockStartLine = -1; - for (let i = position.line - 1; i >= 0; i--) { - const currentLine = document.lineAt(i); - const lineText = currentLine.text; - for (let j = lineText.length - 1; j >= 0; j--) { - if (lineText[j] === '}') { - braceCount++; - } - else if (lineText[j] === '{') { - braceCount--; - if (braceCount === 0) { - blockStartLine = i; - break; + try { + // 查找匹配的左大括号 + let braceCount = 1; + let blockStartLine = -1; + for (let i = position.line - 1; i >= 0; i--) { + const currentLine = document.lineAt(i); + const lineText = currentLine.text; + for (let j = lineText.length - 1; j >= 0; j--) { + if (lineText[j] === '}') { + braceCount++; } + else if (lineText[j] === '{') { + braceCount--; + if (braceCount === 0) { + blockStartLine = i; + break; + } + } + } + if (blockStartLine !== -1) { + break; } } if (blockStartLine !== -1) { - break; + // 获取代码块的范围 + const endLine = position.line; + const blockText = document.getText(new vscode.Range(new vscode.Position(blockStartLine, 0), new vscode.Position(endLine + 1, 0) // 包含右大括号行 + )); + // 使用 js-beautify 格式化代码块 + const formattedBlock = (0, beautifyHelper_1.beautifyCode)(blockText, options); + if (formattedBlock === blockText) { + return edits; // 没有变化 + } + // 应用格式化结果 + const range = new vscode.Range(new vscode.Position(blockStartLine, 0), new vscode.Position(endLine + 1, 0)); + edits.push(vscode.TextEdit.replace(range, formattedBlock)); } } - if (blockStartLine !== -1) { - // 调整代码块的缩进 - const startLine = document.lineAt(blockStartLine); - const startIndent = this.getIndentLevel(startLine.text); - for (let i = blockStartLine + 1; i < position.line; i++) { - const currentLine = document.lineAt(i); - const currentIndent = this.getIndentLevel(currentLine.text); - if (currentIndent < startIndent + 1) { - const newIndent = this.createIndent(startIndent + 1, options); - const range = new vscode.Range(new vscode.Position(i, 0), new vscode.Position(i, currentIndent)); - edits.push(vscode.TextEdit.replace(range, newIndent)); - } - } - // 调整右大括号的缩进 - const endIndent = this.createIndent(startIndent, options); - const endRange = new vscode.Range(new vscode.Position(position.line, 0), new vscode.Position(position.line, this.getIndentLevel(line.text))); - edits.push(vscode.TextEdit.replace(endRange, endIndent)); + catch (error) { + console.error('格式化代码块失败:', error); } return edits; } - // 获取行的缩进级别 - getIndentLevel(line) { - let indent = 0; - for (let i = 0; i < line.length; i++) { - if (line[i] === ' ') { - indent++; - } - else if (line[i] === '\t') { - indent += 4; // 假设一个tab等于4个空格 - } - else { - break; - } - } - return indent; - } - // 创建指定级别的缩进 - createIndent(level, options) { - if (options.insertSpaces) { - return ' '.repeat(level); - } - else { - return '\t'.repeat(Math.floor(level / 4)); // 假设一个tab等于4个空格 - } - } } exports.OnTypeFormattingProvider = OnTypeFormattingProvider; //# sourceMappingURL=onTypeFormattingProvider.js.map \ No newline at end of file diff --git a/dist/providers/onTypeFormattingProvider.js.map b/dist/providers/onTypeFormattingProvider.js.map index 6d42135..47b9e33 100644 --- a/dist/providers/onTypeFormattingProvider.js.map +++ b/dist/providers/onTypeFormattingProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"onTypeFormattingProvider.js","sourceRoot":"","sources":["../../src/providers/onTypeFormattingProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"onTypeFormattingProvider.js","sourceRoot":"","sources":["../../src/providers/onTypeFormattingProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils/beautifyHelper.js b/dist/utils/beautifyHelper.js new file mode 100644 index 0000000..7e8537a --- /dev/null +++ b/dist/utils/beautifyHelper.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getSquirrelBeautifyOptions = getSquirrelBeautifyOptions; +exports.beautifyCode = beautifyCode; +exports.isSquirrelCode = isSquirrelCode; +// 由于 js-beautify.js 文件体积较大且复杂,我们将创建专门的存根函数 +// 将使用原生的 js-beautify 功能 +let _jsBeauifyInstance = null; +/** + * 动态创建 js_beautify 函数 + */ +function createJsBeautify() { + if (_jsBeauifyInstance) { + return _jsBeauifyInstance; + } + try { + // 加载原始的 js-beautify.js 文件 + const beautifyModule = loadJsBeautify(); + _jsBeauifyInstance = beautifyModule; + return _jsBeauifyInstance; + } + catch (error) { + console.error('加载 js-beautify 失败,使用后备实现:', error); + // 调用后备实现 + return createBasicJsBeautify(); + } +} +/** + * 加载 js-beautify 模块 + */ +function loadJsBeautify() { + // 根据环境动态加载 + try { + // 尝试 require 原始的 js-beautify.js 文件 + // 注意:TypeScript 会从 ./dist 目录运行,所以需要从正确的路径加载 + const beautifyPath = __dirname + '/../../js-beautify.js'; + const Module = require('module'); + const vm = require('vm'); + const fs = require('fs'); + // 读取文件内容 + const code = fs.readFileSync(beautifyPath, 'utf8'); + // 设置全局环境 + const sandbox = { + window: {}, + global: {}, + console: console, + String: String, + Array: Array, + Object: Object, + Math: Math + }; + // 在沙箱中执行代码 + const script = new vm.Script(code); + const context = vm.createContext(sandbox); + script.runInContext(context); + // 获取 js_beautify 函数 + return context.window.js_beautify || context.js_beautify || sandbox.window.js_beautify; + } + catch (loadError) { + console.error('无法加载原始 js-beautify, 错误:', loadError); + throw loadError; + } +} +/** + * 基础的 js-beautify 实现(后备方案) + */ +function createBasicJsBeautify() { + return function (code, options = {}) { + // 默认选项 + const defaultOptions = { + indent_size: 4, + indent_char: ' ', + preserve_newlines: true, + brace_style: 'collapse', + space_before_conditional: true, + space_after_anon_function: false, + wrap_line_length: 120, + end_with_newline: false + }; + // 合并选项 + const opts = { ...defaultOptions, ...options }; + // 简化的代码美化实现 + let formatted = code; + // 清理缩进 + formatted = formatted.replace(/[\r\n]+/g, '\n'); + const lines = formatted.split('\n'); + const result = []; + let indentLevel = 0; + const indentStr = opts.indent_char.repeat(opts.indent_size); + for (const line of lines) { + const trimmed = line.trim(); + // 跳过空行 + if (trimmed.length === 0) { + result.push(''); + continue; + } + // 处理大括号 + if (trimmed.startsWith('}') || trimmed.startsWith(')') || trimmed.startsWith(']')) { + indentLevel = Math.max(0, indentLevel - 1); + } + // 添加缩进 + const indentedLine = indentStr.repeat(indentLevel) + trimmed; + result.push(indentedLine); + // 增加缩进 + if (trimmed.endsWith('{') || trimmed.endsWith('(') || trimmed.endsWith('[')) { + indentLevel++; + } + // 特殊处理 else、catch 等关键字 + if (trimmed.startsWith('else') || trimmed.startsWith('catch') || trimmed.startsWith('elif')) { + // 检查前面一行是否以 } 结尾 + if (result.length > 1) { + const prevLine = result[result.length - 2]; + const prevTrimmed = prevLine.trim(); + if (prevTrimmed.endsWith('}')) { + // 移动到前一行的必要部分 + result[result.length - 2] = indentStr.repeat(indentLevel - 1) + + prevTrimmed + ' ' + trimmed; + result.pop(); // 移除当前行 + indentLevel--; // 修正缩进级别 + } + } + } + } + let finalResult = result.join('\n'); + // 处理空格 - 在操作符周围添加空格 + finalResult = finalResult + .replace(/([a-zA-Z0-9_$])([=!<>+\-*/%])([a-zA-Z0-9_$])/g, '$1 $2 $3') + .replace(/([a-zA-Z0-9_$])(,)([a-zA-Z0-9_$])/g, '$1$2 $3') + .replace(/\s+/g, ' ') // 将多个空格替换为单个空格 + .trim(); + return finalResult; + }; +} +// 初始化 js_beautify +const jsBeautify = { + js_beautify: createJsBeautify() +}; +/** + * Squirrel 语言的 js-beautify 选项配置 + */ +function getSquirrelBeautifyOptions(options) { + return { + indent_size: options.tabSize, + indent_char: options.insertSpaces ? ' ' : '\t', + preserve_newlines: true, + max_preserve_newlines: 2, + jslint_happy: false, + brace_style: "collapse", + space_before_conditional: true, + space_after_anon_function: false, + unescape_strings: false, + wrap_line_length: 120, + end_with_newline: false + }; +} +/** + * 使用 js-beautify 格式化代码 + */ +function beautifyCode(code, options) { + if (!jsBeautify || !jsBeautify.js_beautify) { + console.warn('js-beautify 不可用,返回原始代码'); + return code; + } + try { + const beautifyOptions = getSquirrelBeautifyOptions(options); + // 检查代码长度,处理大块代码 + const maxChunkSize = 50000; // 50KB 每块 + if (code.length > maxChunkSize) { + // 分割代码并分块处理 + const chunks = code.split('\n'); + const resultChunks = []; + for (const chunk of chunks) { + const formattedChunk = jsBeautify.js_beautify(chunk, beautifyOptions); + resultChunks.push(formattedChunk); + } + return resultChunks.join('\n'); + } + // 直接格式化小代码块 + return jsBeautify.js_beautify(code, beautifyOptions); + } + catch (error) { + console.error('js-beautify 格式化失败:', error); + // 如果格式化失败,返回原始代码 + return code; + } +} +/** + * 检测是否为 Squirrel 代码(用于确定是否应用格式化) + */ +function isSquirrelCode(code) { + // 简单的启发式检测 - Squirrel 特有关键字 + const squirrelKeywords = [ + 'function', 'local', 'if', 'else', 'while', 'for', 'foreach', + 'class', 'constructor', 'extends', 'instanceof', 'in', + 'try', 'catch', 'throw', 'clone', 'delegate', 'resume', 'yield', + 'typeof', 'member', 'rawcall', 'call', 'setdebughook' + ]; + // 提高检测准确性 - 需要至少匹配到1个关键字 + return squirrelKeywords.some(keyword => new RegExp(`\\b${keyword}\\b`).test(code)); +} +//# sourceMappingURL=beautifyHelper.js.map \ No newline at end of file diff --git a/dist/utils/beautifyHelper.js.map b/dist/utils/beautifyHelper.js.map new file mode 100644 index 0000000..83c0bc5 --- /dev/null +++ b/dist/utils/beautifyHelper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"beautifyHelper.js","sourceRoot":"","sources":["../../src/utils/beautifyHelper.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/js-beautify-wrapper-fixed.js b/js-beautify-wrapper-fixed.js new file mode 100644 index 0000000..3abaa68 --- /dev/null +++ b/js-beautify-wrapper-fixed.js @@ -0,0 +1,44 @@ +const fs = require('fs'); +const path = require('path'); + +// 因为 js-beautify.js 直接在全局作用域定义 js_beautify, +// 我们可以直接使用 require 来引入并获取函数 + +// 特别注意:js-beautify.js 假设需要 window 或 global 对象 +// Node.js 环境下,我们需要将 js_beautify 挂载到全局 + +let js_beautify; + +// 读取并执行 js-beautify.js +const beautifyPath = path.join(__dirname, 'js-beautify.js'); +const beautifyCode = fs.readFileSync(beautifyPath, 'utf-8'); + +// 创建一个安全的沙箱环境 +global.window = global; +global.module = undefined; +global.exports = undefined; + +// 执行代码 +try { + eval(beautifyCode); + js_beautify = global.js_beautify; +} catch (error) { + console.error('加载 js-beautify.js 失败:', error); + throw error; +} + +// 清理全局变量 +delete global.window; + +// 如果 js_beautify 没有挂载到 global,尝试从 globalThis 获取 +if (!js_beautify && globalThis.js_beautify) { + js_beautify = globalThis.js_beautify; +} + +if (!js_beautify) { + throw new Error('无法从 js-beautify.js 中找到 js_beautify 函数'); +} + +module.exports = { + js_beautify: js_beautify +}; \ No newline at end of file diff --git a/js-beautify-wrapper.js b/js-beautify-wrapper.js new file mode 100644 index 0000000..7ffc03c --- /dev/null +++ b/js-beautify-wrapper.js @@ -0,0 +1,15 @@ +// js-beautify.js 的 CommonJS 包装器 +const fs = require('fs'); +const path = require('path'); + +// 读取原始 js-beautify.js 文件内容 +const beautifyPath = path.join(__dirname, 'js-beautify.js'); +const beautifyContent = fs.readFileSync(beautifyPath, 'utf-8'); + +// 执行文件内容,确保 js_beautify 函数可用 +eval(beautifyContent); + +// 模块导出 js_beautify 函数 +module.exports = { + js_beautify: global.js_beautify || js_beautify +}; \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index db8c519..6cddfd5 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1,6 +1,6 @@ { "name": "squirrel-nut-explorer", - "version": "1.0.1", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package-lock.json b/package-lock.json index 4558a9d..8e461a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "squirrel-nut-explorer", - "version": "1.0.1", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "squirrel-nut-explorer", - "version": "1.0.1", + "version": "1.0.0", "devDependencies": { "@types/node": "^20.19.11", "@types/vscode": "^1.99.0", diff --git a/squirrel-nut-explorer-1.0.0.vsix b/squirrel-nut-explorer-1.0.0.vsix new file mode 100644 index 0000000000000000000000000000000000000000..e2846a1540195257b3b049f5290e06abb7d439c0 GIT binary patch literal 176900 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 SufKH7He{hR*^|$(L(Mw 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

31pVN+=m0LY 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 literal 0 HcmV?d00001 diff --git a/src/providers/documentFormattingProvider.ts b/src/providers/documentFormattingProvider.ts index bd7b9a2..ca13dc7 100644 --- a/src/providers/documentFormattingProvider.ts +++ b/src/providers/documentFormattingProvider.ts @@ -1,100 +1,50 @@ import * as vscode from 'vscode'; +import { beautifyCode, isSquirrelCode } from '../utils/beautifyHelper'; -// 文档格式化提供者类 +/** + * 文档格式化提供者类 - 使用 js-beautify.js + */ export class DocumentFormattingProvider implements vscode.DocumentFormattingEditProvider { - // 提供整个文档的代码格式化功能 + /** + * 提供整个文档的代码格式化功能 + */ async provideDocumentFormattingEdits( document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken ): Promise { const edits: vscode.TextEdit[] = []; - const lines: string[] = []; - // 逐行处理文档内容 - for (let i = 0; i < document.lineCount; i++) { - const line = document.lineAt(i); - lines.push(line.text); + try { + // 获取文档全文 + const fullText = document.getText(); + + // 检查是否是 Squirrel 代码 + if (!isSquirrelCode(fullText)) { + return edits; // 如果不是 Squirrel 代码,不应用格式化 + } + + // 使用 js-beautify 格式化代码 + const formattedText = beautifyCode(fullText, options); + + // 如果格式化后的代码与原代码相同,不需要修改 + if (formattedText === fullText) { + return edits; + } + + // 创建编辑操作,替换整个文档 + const fullRange = new vscode.Range( + document.positionAt(0), + document.positionAt(fullText.length) + ); + + edits.push(vscode.TextEdit.replace(fullRange, formattedText)); + + } catch (error) { + console.error('文档格式化失败:', error); + // 如果格式化失败,返回空编辑数组,保持原代码不变 } - // 格式化文档 - const formattedLines = this.formatDocument(lines, options); - - // 创建编辑操作 - const fullRange = new vscode.Range( - document.positionAt(0), - document.positionAt(document.getText().length) - ); - - edits.push(vscode.TextEdit.replace(fullRange, formattedLines.join('\n'))); - return edits; } - - // 格式化文档 - private formatDocument(lines: string[], options: vscode.FormattingOptions): string[] { - const formattedLines: string[] = []; - let indentLevel = 0; - - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - const trimmedLine = line.trim(); - - if (trimmedLine.length === 0) { - // 空行保持原样或删除 - formattedLines.push(''); - continue; - } - - // 检查是否需要减少缩进(遇到右大括号等) - if (trimmedLine.startsWith('}') || trimmedLine.startsWith(')') || trimmedLine.startsWith(']')) { - indentLevel = Math.max(0, indentLevel - 1); - } - - // 添加适当的缩进 - const indent = this.createIndent(indentLevel, options); - const formattedLine = indent + trimmedLine; - formattedLines.push(formattedLine); - - // 检查是否需要增加缩进(遇到左大括号等) - if (trimmedLine.endsWith('{') || trimmedLine.endsWith('(') || trimmedLine.endsWith('[')) { - indentLevel++; - } - - // 特殊处理else、catch等关键字,它们应该与前面的右大括号在同一行 - if (trimmedLine.startsWith('else') || trimmedLine.startsWith('catch') || trimmedLine.startsWith('elif')) { - if (formattedLines.length > 1) { - const prevLine = formattedLines[formattedLines.length - 2]; - if (prevLine.trim().endsWith('}')) { - // 将else等关键字与前面的右大括号放在同一行 - formattedLines[formattedLines.length - 2] = prevLine.trim() + ' ' + trimmedLine; - formattedLines.pop(); // 移除当前行 - indentLevel--; // 修正缩进级别 - } - } - } - } - - // 规范化空格(在操作符周围添加适当空格) - return formattedLines.map(line => this.normalizeSpaces(line)); - } - - // 在操作符周围添加适当空格 - private normalizeSpaces(line: string): string { - // 在常见的操作符周围添加空格 - return line - .replace(/([^\s])(==|!=|<=|>=|<|>|=|\+|-|\*|\/|%)([^\s])/g, '$1 $2 $3') - .replace(/([^\s])(,)([^\s])/g, '$1$2 $3') - .replace(/\s+/g, ' ') // 将多个空格替换为单个空格 - .trim(); - } - - // 创建指定级别的缩进 - private createIndent(level: number, options: vscode.FormattingOptions): string { - if (options.insertSpaces) { - return ' '.repeat(level * options.tabSize); - } else { - return '\t'.repeat(level); - } - } } \ No newline at end of file diff --git a/src/providers/onTypeFormattingProvider.ts b/src/providers/onTypeFormattingProvider.ts index ae61296..d95a4e7 100644 --- a/src/providers/onTypeFormattingProvider.ts +++ b/src/providers/onTypeFormattingProvider.ts @@ -1,8 +1,13 @@ import * as vscode from 'vscode'; +import { beautifyCode, isSquirrelCode } from '../utils/beautifyHelper'; -// 输入时格式化提供者类 +/** + * 输入时格式化提供者类 - 使用 js-beautify.js + */ export class OnTypeFormattingProvider implements vscode.OnTypeFormattingEditProvider { - // 在用户输入特定字符时自动格式化代码 + /** + * 在用户输入特定字符时自动格式化代码 + */ async provideOnTypeFormattingEdits( document: vscode.TextDocument, position: vscode.Position, @@ -12,138 +17,162 @@ export class OnTypeFormattingProvider implements vscode.OnTypeFormattingEditProv ): Promise { const edits: vscode.TextEdit[] = []; - // 根据输入的字符执行不同的格式化操作 - switch (ch) { - case ')': - // 输入右括号时格式化当前行 - edits.push(...this.formatCurrentLine(document, position, options)); - break; - case ';': - // 输入分号时格式化当前行 - edits.push(...this.formatCurrentLine(document, position, options)); - break; - case '}': - // 输入右大括号时格式化整个代码块 - edits.push(...this.formatCodeBlock(document, position, options)); - break; - default: - break; + try { + // 检查是否是 Squirrel 代码 + const textBefore = document.getText(new vscode.Range(new vscode.Position(0, 0), position)); + if (!isSquirrelCode(textBefore)) { + return edits; + } + + // 根据输入的字符执行不同的格式化操作 + switch (ch) { + case ')': + // 输入右括号时格式化当前行 + edits.push(...this.formatCurrentLine(document, position, options)); + break; + case ';': + // 输入分号时格式化当前行 + edits.push(...this.formatCurrentLine(document, position, options)); + break; + case '}': + // 输入右大括号时格式化整个代码块 + edits.push(...this.formatCodeBlock(document, position, options)); + break; + default: + break; + } + + } catch (error) { + console.error('输入时格式化失败:', error); } return edits; } - // 格式化当前行 + /** + * 使用 js-beautify 格式化当前行 + */ private formatCurrentLine( document: vscode.TextDocument, position: vscode.Position, options: vscode.FormattingOptions ): vscode.TextEdit[] { - const line = document.lineAt(position.line); - const trimmedLine = line.text.trim(); + const edits: vscode.TextEdit[] = []; - if (trimmedLine.length === 0) { - return []; - } + try { + // 获取当前行 + const line = document.lineAt(position.line); + const lineText = line.text; - // 简单的格式化:确保行尾没有多余空格 - if (line.text !== trimmedLine && !line.text.endsWith(' ')) { - const range = new vscode.Range( - new vscode.Position(position.line, 0), - new vscode.Position(position.line, line.text.length) + // 获取当前行的上下文(向前几行,向后几行) + const startLine = Math.max(0, position.line - 2); + const endLine = Math.min(document.lineCount - 1, position.line + 2); + + const contextText = document.getText( + new vscode.Range( + new vscode.Position(startLine, 0), + new vscode.Position(endLine, document.lineAt(endLine).text.length) + ) ); - return [vscode.TextEdit.replace(range, trimmedLine)]; + + // 使用 js-beautify 格式化代码块 + const formattedContext = beautifyCode(contextText, options); + + // 比较原始文本和格式化后的文本 + if (formattedContext === contextText) { + return edits; // 没有变化,不需要编辑 + } + + // 应用格式化结果 + const originalLines = contextText.split('\n'); + const formattedLines = formattedContext.split('\n'); + + for (let i = 0; i < originalLines.length && i < formattedLines.length; i++) { + const original = originalLines[i]; + const formatted = formattedLines[i]; + + if (original !== formatted) { + const lineNumber = startLine + i; + const range = new vscode.Range( + new vscode.Position(lineNumber, 0), + new vscode.Position(lineNumber, document.lineAt(lineNumber).text.length) + ); + edits.push(vscode.TextEdit.replace(range, formatted)); + } + } + + } catch (error) { + console.error('格式化当前行失败:', error); } - return []; + return edits; } - // 格式化代码块 + /** + * 使用 js-beautify 格式化代码块 + */ private formatCodeBlock( document: vscode.TextDocument, position: vscode.Position, options: vscode.FormattingOptions ): vscode.TextEdit[] { const edits: vscode.TextEdit[] = []; - const line = document.lineAt(position.line); - // 查找匹配的左大括号 - let braceCount = 1; - let blockStartLine = -1; + try { + // 查找匹配的左大括号 + let braceCount = 1; + let blockStartLine = -1; - for (let i = position.line - 1; i >= 0; i--) { - const currentLine = document.lineAt(i); - const lineText = currentLine.text; + for (let i = position.line - 1; i >= 0; i--) { + const currentLine = document.lineAt(i); + const lineText = currentLine.text; - for (let j = lineText.length - 1; j >= 0; j--) { - if (lineText[j] === '}') { - braceCount++; - } else if (lineText[j] === '{') { - braceCount--; - if (braceCount === 0) { - blockStartLine = i; - break; + for (let j = lineText.length - 1; j >= 0; j--) { + if (lineText[j] === '}') { + braceCount++; + } else if (lineText[j] === '{') { + braceCount--; + if (braceCount === 0) { + blockStartLine = i; + break; + } } } + + if (blockStartLine !== -1) { + break; + } } if (blockStartLine !== -1) { - break; - } - } + // 获取代码块的范围 + const endLine = position.line; + const blockText = document.getText( + new vscode.Range( + new vscode.Position(blockStartLine, 0), + new vscode.Position(endLine + 1, 0) // 包含右大括号行 + ) + ); - if (blockStartLine !== -1) { - // 调整代码块的缩进 - const startLine = document.lineAt(blockStartLine); - const startIndent = this.getIndentLevel(startLine.text); + // 使用 js-beautify 格式化代码块 + const formattedBlock = beautifyCode(blockText, options); - for (let i = blockStartLine + 1; i < position.line; i++) { - const currentLine = document.lineAt(i); - const currentIndent = this.getIndentLevel(currentLine.text); - - if (currentIndent < startIndent + 1) { - const newIndent = this.createIndent(startIndent + 1, options); - const range = new vscode.Range( - new vscode.Position(i, 0), - new vscode.Position(i, currentIndent) - ); - edits.push(vscode.TextEdit.replace(range, newIndent)); + if (formattedBlock === blockText) { + return edits; // 没有变化 } + + // 应用格式化结果 + const range = new vscode.Range( + new vscode.Position(blockStartLine, 0), + new vscode.Position(endLine + 1, 0) + ); + edits.push(vscode.TextEdit.replace(range, formattedBlock)); } - // 调整右大括号的缩进 - const endIndent = this.createIndent(startIndent, options); - const endRange = new vscode.Range( - new vscode.Position(position.line, 0), - new vscode.Position(position.line, this.getIndentLevel(line.text)) - ); - edits.push(vscode.TextEdit.replace(endRange, endIndent)); + } catch (error) { + console.error('格式化代码块失败:', error); } return edits; } - - // 获取行的缩进级别 - private getIndentLevel(line: string): number { - let indent = 0; - for (let i = 0; i < line.length; i++) { - if (line[i] === ' ') { - indent++; - } else if (line[i] === '\t') { - indent += 4; // 假设一个tab等于4个空格 - } else { - break; - } - } - return indent; - } - - // 创建指定级别的缩进 - private createIndent(level: number, options: vscode.FormattingOptions): string { - if (options.insertSpaces) { - return ' '.repeat(level); - } else { - return '\t'.repeat(Math.floor(level / 4)); // 假设一个tab等于4个空格 - } - } } \ No newline at end of file diff --git a/src/utils/beautifyHelper.ts b/src/utils/beautifyHelper.ts new file mode 100644 index 0000000..f4df853 --- /dev/null +++ b/src/utils/beautifyHelper.ts @@ -0,0 +1,228 @@ +import * as vscode from 'vscode'; + +// 由于 js-beautify.js 文件体积较大且复杂,我们将创建专门的存根函数 +// 将使用原生的 js-beautify 功能 + +let _jsBeauifyInstance: any = null; + +/** + * 动态创建 js_beautify 函数 + */ +function createJsBeautify(): any { + if (_jsBeauifyInstance) { + return _jsBeauifyInstance; + } + + try { + // 加载原始的 js-beautify.js 文件 + const beautifyModule = loadJsBeautify(); + _jsBeauifyInstance = beautifyModule; + return _jsBeauifyInstance; + } catch (error) { + console.error('加载 js-beautify 失败,使用后备实现:', error); + // 调用后备实现 + return createBasicJsBeautify(); + } +} + +/** + * 加载 js-beautify 模块 + */ +function loadJsBeautify(): any { + // 根据环境动态加载 + try { + // 尝试 require 原始的 js-beautify.js 文件 + // 注意:TypeScript 会从 ./dist 目录运行,所以需要从正确的路径加载 + const beautifyPath = __dirname + '/../../js-beautify.js'; + const Module = require('module'); + const vm = require('vm'); + const fs = require('fs'); + + // 读取文件内容 + const code = fs.readFileSync(beautifyPath, 'utf8'); + + // 设置全局环境 + const sandbox: any = { + window: {}, + global: {}, + console: console, + String: String, + Array: Array, + Object: Object, + Math: Math + }; + + // 在沙箱中执行代码 + const script = new vm.Script(code); + const context = vm.createContext(sandbox); + script.runInContext(context); + + // 获取 js_beautify 函数 + return context.window.js_beautify || context.js_beautify || sandbox.window.js_beautify; + } catch (loadError) { + console.error('无法加载原始 js-beautify, 错误:', loadError); + throw loadError; + } +} + +/** + * 基础的 js-beautify 实现(后备方案) + */ +function createBasicJsBeautify(): any { + return function(code: string, options: any = {}): string { + // 默认选项 + const defaultOptions = { + indent_size: 4, + indent_char: ' ', + preserve_newlines: true, + brace_style: 'collapse', + space_before_conditional: true, + space_after_anon_function: false, + wrap_line_length: 120, + end_with_newline: false + }; + + // 合并选项 + const opts = { ...defaultOptions, ...options }; + + // 简化的代码美化实现 + let formatted = code; + + // 清理缩进 + formatted = formatted.replace(/[\r\n]+/g, '\n'); + + const lines = formatted.split('\n'); + const result: string[] = []; + let indentLevel = 0; + const indentStr = opts.indent_char.repeat(opts.indent_size); + + for (const line of lines) { + const trimmed = line.trim(); + + // 跳过空行 + if (trimmed.length === 0) { + result.push(''); + continue; + } + + // 处理大括号 + if (trimmed.startsWith('}') || trimmed.startsWith(')') || trimmed.startsWith(']')) { + indentLevel = Math.max(0, indentLevel - 1); + } + + // 添加缩进 + const indentedLine = indentStr.repeat(indentLevel) + trimmed; + result.push(indentedLine); + + // 增加缩进 + if (trimmed.endsWith('{') || trimmed.endsWith('(') || trimmed.endsWith('[')) { + indentLevel++; + } + + // 特殊处理 else、catch 等关键字 + if (trimmed.startsWith('else') || trimmed.startsWith('catch') || trimmed.startsWith('elif')) { + // 检查前面一行是否以 } 结尾 + if (result.length > 1) { + const prevLine = result[result.length - 2]; + const prevTrimmed = prevLine.trim(); + if (prevTrimmed.endsWith('}')) { + // 移动到前一行的必要部分 + result[result.length - 2] = indentStr.repeat(indentLevel - 1) + + prevTrimmed + ' ' + trimmed; + result.pop(); // 移除当前行 + indentLevel--; // 修正缩进级别 + } + } + } + } + + let finalResult = result.join('\n'); + + // 处理空格 - 在操作符周围添加空格 + finalResult = finalResult + .replace(/([a-zA-Z0-9_$])([=!<>+\-*/%])([a-zA-Z0-9_$])/g, '$1 $2 $3') + .replace(/([a-zA-Z0-9_$])(,)([a-zA-Z0-9_$])/g, '$1$2 $3') + .replace(/\s+/g, ' ') // 将多个空格替换为单个空格 + .trim(); + + return finalResult; + }; +} + +// 初始化 js_beautify +const jsBeautify = { + js_beautify: createJsBeautify() +}; + +/** + * Squirrel 语言的 js-beautify 选项配置 + */ +export function getSquirrelBeautifyOptions(options: vscode.FormattingOptions): any { + return { + indent_size: options.tabSize, + indent_char: options.insertSpaces ? ' ' : '\t', + preserve_newlines: true, + max_preserve_newlines: 2, + jslint_happy: false, + brace_style: "collapse", + space_before_conditional: true, + space_after_anon_function: false, + unescape_strings: false, + wrap_line_length: 120, + end_with_newline: false + }; +} + +/** + * 使用 js-beautify 格式化代码 + */ +export function beautifyCode(code: string, options: vscode.FormattingOptions): string { + if (!jsBeautify || !jsBeautify.js_beautify) { + console.warn('js-beautify 不可用,返回原始代码'); + return code; + } + + try { + const beautifyOptions = getSquirrelBeautifyOptions(options); + + // 检查代码长度,处理大块代码 + const maxChunkSize = 50000; // 50KB 每块 + if (code.length > maxChunkSize) { + // 分割代码并分块处理 + const chunks = code.split('\n'); + const resultChunks: string[] = []; + + for (const chunk of chunks) { + const formattedChunk = jsBeautify.js_beautify(chunk, beautifyOptions); + resultChunks.push(formattedChunk); + } + + return resultChunks.join('\n'); + } + + // 直接格式化小代码块 + return jsBeautify.js_beautify(code, beautifyOptions); + } catch (error) { + console.error('js-beautify 格式化失败:', error); + // 如果格式化失败,返回原始代码 + return code; + } +} + +/** + * 检测是否为 Squirrel 代码(用于确定是否应用格式化) + */ +export function isSquirrelCode(code: string): boolean { + // 简单的启发式检测 - Squirrel 特有关键字 + const squirrelKeywords = [ + 'function', 'local', 'if', 'else', 'while', 'for', 'foreach', + 'class', 'constructor', 'extends', 'instanceof', 'in', + 'try', 'catch', 'throw', 'clone', 'delegate', 'resume', 'yield', + 'typeof', 'member', 'rawcall', 'call', 'setdebughook' + ]; + + // 提高检测准确性 - 需要至少匹配到1个关键字 + return squirrelKeywords.some(keyword => + new RegExp(`\\b${keyword}\\b`).test(code) + ); +} \ No newline at end of file