From c2fc0cf1118eca02630b08301c92ddff3cc79ef5 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 13 May 2026 10:31:48 +0200 Subject: [PATCH] Fix Windows path handling in diagnostic relativization Canonicalize `current_dir()` to match canonicalized file paths (avoids `\\?\` prefix mismatch on Windows), and normalize backslashes to forward slashes in relative diagnostic paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ruby/extractor/src/extractor.rs | 2 +- shared/tree-sitter-extractor/src/extractor/mod.rs | 4 +++- shared/tree-sitter-extractor/src/file_paths.rs | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ruby/extractor/src/extractor.rs b/ruby/extractor/src/extractor.rs index 817db97c0ef..d418c144bfc 100644 --- a/ruby/extractor/src/extractor.rs +++ b/ruby/extractor/src/extractor.rs @@ -94,7 +94,7 @@ pub fn run(options: Options) -> std::io::Result<()> { node_types::read_node_types_str("erb", tree_sitter_embedded_template::NODE_TYPES)?; let lines: std::io::Result> = std::io::BufReader::new(file_list).lines().collect(); let lines = lines?; - let source_root = std::env::current_dir().ok(); + let source_root = std::env::current_dir().ok().and_then(|d| d.canonicalize().ok()); lines .par_iter() .try_for_each(|line| { diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index a4f4eccf28c..3611a328daa 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -298,7 +298,9 @@ pub fn extract( yeast_runner: Option<&yeast::Runner<'_>>, ) { let path_str = file_paths::normalize_and_transform_path(path, transformer); - let source_root = std::env::current_dir().ok(); + let source_root = std::env::current_dir() + .ok() + .and_then(|d| d.canonicalize().ok()); let diagnostics_path = file_paths::relativize_for_diagnostic(path, source_root.as_deref()); let span = tracing::span!( tracing::Level::TRACE, diff --git a/shared/tree-sitter-extractor/src/file_paths.rs b/shared/tree-sitter-extractor/src/file_paths.rs index dc53fc7b925..71b9ca0469a 100644 --- a/shared/tree-sitter-extractor/src/file_paths.rs +++ b/shared/tree-sitter-extractor/src/file_paths.rs @@ -11,7 +11,7 @@ pub fn relativize_for_diagnostic(path: &Path, source_root: Option<&Path>) -> Str source_root .and_then(|root| path.strip_prefix(root).ok()) .and_then(|rel| rel.to_str()) - .map(|s| s.to_owned()) + .map(|s| s.replace('\\', "/")) .unwrap_or_else(|| path.display().to_string()) }