diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-10-16 20:21:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-16 20:21:57 +0100 |
commit | ebb7fe412e97e851a9373be71931f13930e7a02e (patch) | |
tree | d47d7d8bdfe11a1f679a90ff029b14fcf43d65f8 /cli/lsp/documents.rs | |
parent | cb70c4d0c4c97999deef0c13eaf91db635957517 (diff) |
fix(lsp): show diagnostics for untitled files (#20916)
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 748b5b11c..f017989b4 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -89,12 +89,13 @@ static TSX_HEADERS: Lazy<HashMap<String, String>> = Lazy::new(|| { .collect() }); -pub const DOCUMENT_SCHEMES: [&str; 6] = [ +pub const DOCUMENT_SCHEMES: [&str; 7] = [ "data", "blob", "file", "http", "https", + "untitled", "deno-notebook-cell", ]; @@ -259,22 +260,24 @@ impl AssetOrDocument { } } -/// Convert a `deno-notebook-cell:` specifier to a `file:` specifier. +/// Convert a e.g. `deno-notebook-cell:` specifier to a `file:` specifier. /// ```rust /// assert_eq!( -/// cell_to_file_specifier( +/// file_like_to_file_specifier( /// &Url::parse("deno-notebook-cell:/path/to/file.ipynb#abc").unwrap(), /// ), /// Some(Url::parse("file:///path/to/file.ipynb#abc").unwrap()), /// ); -pub fn cell_to_file_specifier(specifier: &Url) -> Option<Url> { - if specifier.scheme() == "deno-notebook-cell" { - if let Ok(specifier) = ModuleSpecifier::parse(&format!( +pub fn file_like_to_file_specifier(specifier: &Url) -> Option<Url> { + if matches!(specifier.scheme(), "untitled" | "deno-notebook-cell") { + if let Ok(mut s) = ModuleSpecifier::parse(&format!( "file://{}", &specifier.as_str() [url::quirks::internal_components(specifier).host_end as usize..], )) { - return Some(specifier); + s.query_pairs_mut() + .append_pair("scheme", specifier.scheme()); + return Some(s); } } None @@ -300,22 +303,28 @@ impl DocumentDependencies { deps: module.dependencies.clone(), maybe_types_dependency: module.maybe_types_dependency.clone(), }; - if module.specifier.scheme() == "deno-notebook-cell" { + if file_like_to_file_specifier(&module.specifier).is_some() { for (_, dep) in &mut deps.deps { if let Resolution::Ok(resolved) = &mut dep.maybe_code { - if let Some(specifier) = cell_to_file_specifier(&resolved.specifier) { + if let Some(specifier) = + file_like_to_file_specifier(&resolved.specifier) + { resolved.specifier = specifier; } } if let Resolution::Ok(resolved) = &mut dep.maybe_type { - if let Some(specifier) = cell_to_file_specifier(&resolved.specifier) { + if let Some(specifier) = + file_like_to_file_specifier(&resolved.specifier) + { resolved.specifier = specifier; } } } if let Some(dep) = &mut deps.maybe_types_dependency { if let Resolution::Ok(resolved) = &mut dep.dependency { - if let Some(specifier) = cell_to_file_specifier(&resolved.specifier) { + if let Some(specifier) = + file_like_to_file_specifier(&resolved.specifier) + { resolved.specifier = specifier; } } |