Skip to content

Commit ae0e918

Browse files
bd-dxg冰冻大西瓜CodFrm
authored
feat: 添加 UserScript 元数据语义高亮和诊断功能 (#17)
* feat: 添加 UserScript 元数据语义高亮和诊断功能 - 实现语义高亮支持,高亮元数据块的键名和键值 - 添加元数据键名验证,检测拼写错误并提供智能建议 - 支持快速修复无效的元数据键名(如 @Nmae@name) - 添加语义高亮启用提示,引导用户获得更好的体验 - 新增 highlight 目录,统一管理高亮相关功能 * fix: 修复 Levenshtein 距离算法错误并移除重复的元数据键名 - 修正 Levenshtein 距离计算中删除操作的索引错误(matrix[i - 1][j] + 1) - 移除 VALID_META_KEYS 中重复的 grant 和 noframes 键名 * 添加元素和修复带-带匹配问题 --------- Co-authored-by: 冰冻大西瓜 <1003582810@qq.com> Co-authored-by: 王一之 <yz@ggnb.top>
1 parent e6ea8a3 commit ae0e918

5 files changed

Lines changed: 515 additions & 0 deletions

File tree

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030
"path": "./snippets/scriptcat.json"
3131
}
3232
],
33+
"semanticTokenScopes": [
34+
{
35+
"language": "javascript",
36+
"scopes": {
37+
"metadata": ["markup.bold"],
38+
"metaKey": ["entity.name.function", "keyword.control"],
39+
"metaValue": ["string"]
40+
}
41+
}
42+
],
3343
"commands": [
3444
{
3545
"command": "scriptcat.target",

src/extension.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as vscode from "vscode";
22
import { metaProvideHover } from "./provide";
33
import { Synchronizer } from "./sync";
4+
import { registerUserScriptHighlighter } from "./highlight/userScriptHighlighter";
5+
import { checkAndPromptSemanticHighlighting } from "./highlight/semanticHighlighting";
6+
import { registerUserScriptDiagnostics } from "./highlight/userScriptDiagnostics";
47
import { existsSync, fstat } from "fs";
58
import "fs";
69

@@ -45,6 +48,15 @@ export function activate(context: vscode.ExtensionContext) {
4548
}
4649
});
4750

51+
// 注册 UserScript 元数据高亮
52+
context.subscriptions.push(registerUserScriptHighlighter());
53+
54+
// 注册 UserScript 元数据诊断
55+
context.subscriptions.push(...registerUserScriptDiagnostics());
56+
57+
// 检查并提示用户启用语义高亮
58+
checkAndPromptSemanticHighlighting();
59+
4860
context.subscriptions.push(
4961
vscode.commands.registerCommand(signatureFileCommand, () => {
5062
const options: vscode.OpenDialogOptions = {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as vscode from "vscode";
2+
3+
const SEMANTIC_HIGHLIGHTING_CONFIG_KEY = "editor.semanticHighlighting.enabled";
4+
const PROMPT_CONFIG_KEY = "scriptcat.promptSemanticHighlighting";
5+
6+
/**
7+
* 检查语义高亮是否启用,如果未启用则提示用户
8+
*/
9+
export async function checkAndPromptSemanticHighlighting(): Promise<void> {
10+
const config = vscode.workspace.getConfiguration();
11+
const semanticHighlighting = config.get(SEMANTIC_HIGHLIGHTING_CONFIG_KEY);
12+
const shouldPrompt = config.get<boolean>(PROMPT_CONFIG_KEY, true);
13+
14+
// 如果用户在设置中禁用了提示,则直接返回
15+
if (!shouldPrompt) {
16+
return;
17+
}
18+
19+
// 如果已经启用,则直接返回
20+
if (semanticHighlighting === true) {
21+
return;
22+
}
23+
24+
// 提示用户启用语义高亮
25+
const action = await vscode.window.showInformationMessage(
26+
"ScriptCat 建议启用语义高亮以获得更好的 UserScript 元数据高亮体验",
27+
"立即启用",
28+
"不再提示"
29+
);
30+
31+
if (action === "立即启用") {
32+
await config.update(SEMANTIC_HIGHLIGHTING_CONFIG_KEY, true, true);
33+
vscode.window.showInformationMessage("语义高亮已启用!");
34+
} else if (action === "不再提示") {
35+
await config.update(PROMPT_CONFIG_KEY, false, true);
36+
vscode.window.showInformationMessage(
37+
"您可以随时在设置中搜索 Semantic Highlighting 为 true 来开启语义高亮功能。"
38+
);
39+
}
40+
}

0 commit comments

Comments
 (0)