From e8be1967dbee8b13d4f17be6133197ac58529909 Mon Sep 17 00:00:00 2001 From: xfy Date: Tue, 16 Jun 2026 14:49:44 +0800 Subject: [PATCH] =?UTF-8?q?fix(highlight):=20=E8=AF=AD=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=94=B9=E7=94=A8=E7=BC=96=E8=AF=91=E6=9C=9F=E7=BB=9D?= =?UTF-8?q?=E5=AF=B9=E8=B7=AF=E5=BE=84=E5=B9=B6=E5=A2=9E=E5=8A=A0=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add_from_folder 之前用相对路径 syntaxes/,依赖运行时工作目录, 在 dx serve 启动的 server 子进程下可能解析失败导致自定义语法 (含 Swift)静默不加载。 改用 CARGO_MANIFEST_DIR 在编译期固化为绝对路径,消除工作目录 依赖;并在 LazyLock 初始化时输出加载路径、语法总数与 Swift 是否 命中,便于排查加载问题。 --- src/highlight.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/highlight.rs b/src/highlight.rs index 1bc2ca1..0be354a 100644 --- a/src/highlight.rs +++ b/src/highlight.rs @@ -14,10 +14,22 @@ pub mod server { /// 全局语法集合,懒加载时合并内置语法与 `syntaxes/` 目录下的自定义语法。 static SYNTAX_SET: LazyLock = LazyLock::new(|| { let mut builder = SyntaxSet::load_defaults_newlines().into_builder(); - if let Err(e) = builder.add_from_folder("syntaxes/", true) { - tracing::warn!("Failed to load custom syntaxes: {:?}", e); + // 使用 CARGO_MANIFEST_DIR 派生的绝对路径,避免运行时工作目录不确定导致加载失败 + let syntaxes_dir = concat!(env!("CARGO_MANIFEST_DIR"), "/syntaxes"); + tracing::info!("Loading custom syntaxes from: {}", syntaxes_dir); + match builder.add_from_folder(syntaxes_dir, true) { + Ok(()) => tracing::info!("Custom syntaxes loaded successfully"), + Err(e) => tracing::warn!("Failed to load custom syntaxes: {:?}", e), } - builder.build() + let built = builder.build(); + tracing::info!( + "SyntaxSet built: {} syntaxes, swift={:?}", + built.syntaxes().len(), + built + .find_syntax_by_extension("swift") + .map(|s| &s.name) + ); + built }); /// 根据语言标识查找对应的语法定义。