ElyTable: figures split at field names; a format's own semicolons stay (R2.8)
This commit is contained in:
2 files changed
+33
-2
No files matched your search
@@ -58,8 +58,8 @@ pub fn label(status: &str, cx: &App) -> SharedString {
|
||||
if let Some((_, key)) = ERRORS.iter().find(|(known, _)| *known == status) {
|
||||
return Book::text(cx, key, &[]);
|
||||
}
|
||||
let parts: Vec<String> = status
|
||||
.split("; ")
|
||||
let parts: Vec<String> = fields(status)
|
||||
.into_iter()
|
||||
.map(|part| {
|
||||
let known = part.split_once(": ").and_then(|(name, value)| {
|
||||
let (_, key) = FIGURES.iter().find(|(known, _)| *known == name)?;
|
||||
@@ -74,6 +74,24 @@ pub fn label(status: &str, cx: &App) -> SharedString {
|
||||
parts.join(" ").into()
|
||||
}
|
||||
|
||||
/// The status split at each "Name: "; values keep semicolons.
|
||||
fn fields(status: &str) -> Vec<&str> {
|
||||
let starts = |rest: &str| {
|
||||
rest.split_once(": ")
|
||||
.is_some_and(|(name, _)| !name.is_empty() && name.chars().all(|c| c.is_ascii_alphabetic() || c == ' '))
|
||||
};
|
||||
let mut out = Vec::new();
|
||||
let mut from = 0;
|
||||
for (at, _) in status.match_indices("; ") {
|
||||
if starts(&status[at + 2..]) {
|
||||
out.push(&status[from..at]);
|
||||
from = at + 2;
|
||||
}
|
||||
}
|
||||
out.push(&status[from..]);
|
||||
out
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#[test]
|
||||
@@ -91,6 +109,8 @@ mod tests {
|
||||
assert_eq!(label.as_ref(), expect, "known names relabel, others stay");
|
||||
// The kernel's formatted values pass through untouched.
|
||||
ely_ui::i18n::install_as("en-US", app);
|
||||
let custom = super::label("Average: 8128.00 kg; net; Sum: 16256.00 kg; net", app);
|
||||
assert_eq!(custom.as_ref(), "Average 8128.00 kg; net Sum 16256.00 kg; net", "a format's own semicolons stay");
|
||||
for value in ["8128.00", "8128.33333333333", "0.0000000001", "1234567890.25", "$1,234.50"] {
|
||||
assert_eq!(super::label(&format!("Sum: {value}"), app).as_ref(), format!("Sum {value}"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
FAIL
|
||||
|
||||
../Ely-GPUI-Components/src/forms/syntax.rs:15 — 语言词表仍有跨语言混用,上一轮第二项的根因修复仍有遗漏。Python 的 `assert ready and True` 与 TOML 的 `return = 42` 已按预期着色;Rust 的合法代码 `let from = 42;` 却把普通变量 `from` 着为 keyword,Ruby 的 `def hello; puts true; end` 把 `def` 着为 variable(145 行 HASH 沿用 C_LIKE,且新表删掉了原表中的 def)。rustc 与 Ruby 均成功执行这些代码,定向探针记录实际 HighlightStyle,原生窗口两种布局均确认 Rust 的错误颜色。证据:/tmp/R2.12-r3-language.log、/tmp/R2.12-r3-parser.log、/tmp/R2.12-r3-native.log。修复方向:按实际语言选择关键字表,覆盖普通同名变量与 Ruby 定义关键字的颜色回归。
|
||||
|
||||
../Ely-GPUI-Components/src/forms/syntax.rs:164 — 新扩展名表遗漏了上一版已有的 Haskell 与 Erlang 注释映射,211 行将它们退回 C_LIKE,造成着色回归。复现:`main.hs` 的 `-- return 42`、`main.erl` 的 `% return 42` 原本整行是 comment,现在将 return 着为 keyword、42 着为 number。原生 DiffViewer 与相同文本的正确注释着色对照,行内/并排分别相差 839/1678、933/1866 个文本像素。证据:/tmp/R2.12-r3-language.log、/tmp/R2.12-r3-render.log。修复方向:迁移时保留原有语言的注释规则,并增加覆盖被迁移扩展名的实际颜色断言。
|
||||
|
||||
../Ely-GPUI-Components/src/forms/syntax.rs:102 — TOML 被设置为仅在空白后识别注释,198 行的 CMakeLists.txt 又被归入具有同一限制的 SHELL,合法的紧接代码注释被当作代码。上一轮 `# return 42` 的 CMake 文件名复现已通过,但 `CMakeLists.txt` 中的 `set(x 1)# return 42` 与 `config.toml` 中的 `answer = 42# return 99` 仍分别把注释里的 return、数字着为代码;cmake 成功执行,tomllib 成功解析出 answer=42。相同 CMake 行在 build.cmake 中着色正确;CMake 主文件与它在行内/并排相差 902/1804 个文本像素,TOML 注释与正确注释对照相差 922/1844 个文本像素。证据:/tmp/R2.12-r3-parser.log、/tmp/R2.12-r3-language.log、/tmp/R2.12-r3-render.log。修复方向:分别配置 TOML 与 CMake 的注释起始条件,并覆盖代码后紧接 # 的场景。
|
||||
|
||||
../Ely-GPUI-Components/src/forms/code.rs:82 — Shell 的注释边界只认可行首与空白,遗漏控制操作符结束词的情况。上一轮 `echo foo#bar 42` 的词中 # 已修复;有效 Shell 代码 `echo x;# return 42` 在 Bash 中只输出 x,DiffViewer 却将注释中的 return 着为 keyword、42 着为 number。两种原生布局均复现,与正确注释颜色对照的文本像素差为 910/1820。证据:/tmp/R2.12-r3-parser.log、/tmp/R2.12-r3-language.log、/tmp/R2.12-r3-render.log。修复方向:依 Shell 的词法边界识别注释起点,覆盖分号等操作符后的注释,同时保留词中 # 的回归。
|
||||
|
||||
../Ely-GPUI-Components/src/git/rows.rs:201 — 新回归只读取构造器保存的 syntax,上一轮第四项要求的实际渲染接线覆盖仍然缺失。复现:在隔离副本中将 viewer.rs:202 的 `let syntax = self.syntax;` 改成 `let syntax = crate::forms::syntax_of("forced.rs");`,执行 `cargo test --lib --features test-support --offline --locked`,1727 项测试仍全部通过;原生 DiffViewer 的 Markdown 在行内、并排重新出现代码颜色,文本区域分别改变 1073、1780 个像素,Python/TOML 注释也被错误着色。证据:/tmp/R2.12-r3-mutation-test.log、/tmp/R2.12-r3-mutation-native.log、/tmp/R2.12-r3-render.log。基线 ElyTree 检查、构建与 111 项测试、组件库 1727 项测试通过;探针副本与独立 target 已删除,原始组件库与本次审查范围源码散列一致(/tmp/R2.12-r3-cleanup.log)。修复方向:增加经过 DiffViewer 两种布局的文本颜色断言,让渲染接收错误语言类型的突变触发失败。
|
||||
Reference in new issue
Block a user