Skip to content

缩进规范检测#1133

Merged
zhblue merged 3 commits intozhblue:masterfrom
Tiang-88:patch-60
Mar 10, 2026
Merged

缩进规范检测#1133
zhblue merged 3 commits intozhblue:masterfrom
Tiang-88:patch-60

Conversation

@Tiang-88
Copy link
Copy Markdown
Contributor

@Tiang-88 Tiang-88 commented Mar 9, 2026

No description provided.

@Tiang-88 Tiang-88 changed the title 缩减规范检测 缩进规范检测 Mar 9, 2026
Copy link
Copy Markdown
Owner

@zhblue zhblue left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我检查了这个 PR (#1133),这是一个代码缩进规范实时检查功能的实现。

📋 PR 概览

文件: trunk/web/template/syzoj/submitpage.php

变更: +90 行,0 删除

状态: Open

⚠️ 发现的问题

  1. 性能问题(严重)

editor.getSession().on('change', function() {
checkAndMarkIndentationInstant(); // 每次按键都触发!
});

每次编辑都会遍历整个文件的所有行,大文件会严重卡顿。需要加防抖(debounce)。

  1. 大括号匹配逻辑过于简单

没有处理字符串、注释中的 { }

比如 char *s = "hello { world}"; 会被误判

多行注释 /* ... */ 也没处理

  1. 缩进逻辑问题

if (trimmed.startsWith("if") || trimmed.startsWith("for") || ...)

else if 会被重复计算

单行 if (...) return; 不需要额外缩进,但代码会要求

不支持 K&R 风格的大括号

  1. 编码问题

注释显示为乱码,可能是 UTF-8 编码问题。

  1. 用户体验

实时标注会导致编辑器频繁闪烁

警告信息是中文,但变量名是英文,风格不统一

✅ 建议

添加 300-500ms 防抖,避免每次按键都扫描

用更可靠的方式解析代码(考虑 token

化)

提供开关选项,让用户选择是否启用

修复编码问题

总体评价:想法很好,但实现需要优化,直接合并可能会影响编辑器性能。

@zhblue
Copy link
Copy Markdown
Owner

zhblue commented Mar 10, 2026

好的,针对这个 PR 的防抖问题,给你一个具体的修改建议:

🔧 防抖修改方案

问题代码

editor.getSession().on('change', function() {
checkAndMarkIndentationInstant(); // 每次按键都执行!
});

修改建议

// 添加防抖函数
let debounceTimer = null;

function debounce(func, delay) {
return function(...args) {
if (debounceTimer) clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => func.apply(this, args), delay);
};
}

// 使用防抖(推荐 300-500ms)
editor.getSession().on('change', debounce(function() {
checkAndMarkIndentationInstant();
}, 400));

完整修改位置

在 editor.getSession().on('change', ...) 之前添加 debounce 函数,然后包裹回调。

为什么需要防抖

场景无防抖有防抖 (400ms)输入 if(){}触发 8 次检查触发 1 次粘贴 100 行代码触发 100+ 次触发 1 次大文件编辑 

Add debounce to indentation check for better performance.
@zhblue zhblue merged commit 9092719 into zhblue:master Mar 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants