Files
squirrelVsis/src/providers/documentFormattingProvider.ts
2025-09-17 11:28:54 +08:00

50 lines
1.6 KiB
TypeScript

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<vscode.TextEdit[]> {
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;
}
}