diff --git a/Cargo.lock b/Cargo.lock index d177e20503ce381c32721a8226737b09921580d1..da1aff033b4e9635f614803a9ec70e2fc0d11343 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15253,6 +15253,7 @@ dependencies = [ "futures 0.3.31", "gpui", "indoc", + "log", "parking_lot", "paths", "schemars", diff --git a/crates/snippet_provider/Cargo.toml b/crates/snippet_provider/Cargo.toml index c1f04117d483998ad076e9f4ed2c8d9677695503..e59a566268bb7eca0a4d9cf1a13236401fa765eb 100644 --- a/crates/snippet_provider/Cargo.toml +++ b/crates/snippet_provider/Cargo.toml @@ -18,6 +18,7 @@ extension.workspace = true fs.workspace = true futures.workspace = true gpui.workspace = true +log.workspace = true parking_lot.workspace = true paths.workspace = true serde.workspace = true diff --git a/crates/snippet_provider/src/lib.rs b/crates/snippet_provider/src/lib.rs index 5eff6c917f9b8198db6149ad07dc2fdf905a9223..8254844ea802d06a442748ff2541525ec3f01953 100644 --- a/crates/snippet_provider/src/lib.rs +++ b/crates/snippet_provider/src/lib.rs @@ -15,7 +15,6 @@ use fs::Fs; use futures::stream::StreamExt; use gpui::{App, AppContext as _, AsyncApp, Context, Entity, Task, WeakEntity}; pub use registry::*; -use util::ResultExt; pub fn init(cx: &mut App) { SnippetRegistry::init_global(cx); @@ -32,7 +31,7 @@ fn file_stem_to_key(stem: &str) -> SnippetKind { } } -fn file_to_snippets(file_contents: VsSnippetsFile) -> Vec> { +fn file_to_snippets(file_contents: VsSnippetsFile, source: &Path) -> Vec> { let mut snippets = vec![]; for (name, snippet) in file_contents.snippets { let snippet_name = name.clone(); @@ -43,9 +42,10 @@ fn file_to_snippets(file_contents: VsSnippetsFile) -> Vec> { .description .map(|description| description.to_string()); let body = snippet.body.to_string(); - if snippet::Snippet::parse(&body).log_err().is_none() { + if let Err(e) = snippet::Snippet::parse(&body) { + log::error!("Invalid snippet name '{name}' in {source:?}: {e:#}"); continue; - }; + } snippets.push(Arc::new(Snippet { body, prefix: prefixes, @@ -105,7 +105,7 @@ async fn process_updates( else { return; }; - let snippets = file_to_snippets(as_json); + let snippets = file_to_snippets(as_json, entry_path.as_path()); *snippets_of_kind.entry(entry_path).or_default() = snippets; } else { snippets_of_kind.remove(&entry_path); diff --git a/crates/snippet_provider/src/registry.rs b/crates/snippet_provider/src/registry.rs index 65850d650e0a16875c0ccf62fbc36ab423f8018e..a33e45b66adaa10579fb1939badead3550888779 100644 --- a/crates/snippet_provider/src/registry.rs +++ b/crates/snippet_provider/src/registry.rs @@ -42,7 +42,7 @@ impl SnippetRegistry { let kind = file_path .file_stem() .and_then(|stem| stem.to_str().and_then(file_stem_to_key)); - let snippets = crate::file_to_snippets(snippets_in_file); + let snippets = crate::file_to_snippets(snippets_in_file, file_path); self.snippets.write().insert(kind, snippets); Ok(())