diff options
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; } } |