summaryrefslogtreecommitdiff
path: root/cli/lsp/documents.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-10-16 20:21:57 +0100
committerGitHub <noreply@github.com>2023-10-16 20:21:57 +0100
commitebb7fe412e97e851a9373be71931f13930e7a02e (patch)
treed47d7d8bdfe11a1f679a90ff029b14fcf43d65f8 /cli/lsp/documents.rs
parentcb70c4d0c4c97999deef0c13eaf91db635957517 (diff)
fix(lsp): show diagnostics for untitled files (#20916)
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r--cli/lsp/documents.rs31
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;
}
}