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[] = []; 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); // 如果格式化失败,返回空编辑数组,保持原代码不变 } return edits; } }