diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-02-03 14:10:51 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-03 14:10:51 -0500 |
commit | b16a958c4f01a1d27d14a6a1d8785c54449a5087 (patch) | |
tree | 6eced185977107cb50132f4a23de428f0f637f01 | |
parent | f8ecd236fb8750241961e587ec7b8c8c0f20f99e (diff) |
fix(lsp): prevent crash analyzing module (#17642)
Closes #17640
-rw-r--r-- | cli/lsp/documents.rs | 41 |
1 files changed, 7 insertions, 34 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 152834af6..c32efe89c 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -32,7 +32,6 @@ use deno_core::futures::future; use deno_core::parking_lot::Mutex; use deno_core::url; use deno_core::ModuleSpecifier; -use deno_graph::DefaultParsedSourceStore; use deno_graph::GraphImport; use deno_graph::Resolved; use deno_runtime::deno_node::NodeResolutionMode; @@ -1440,40 +1439,14 @@ fn analyze_module( maybe_headers: Option<&HashMap<String, String>>, maybe_resolver: Option<&dyn deno_graph::source::Resolver>, ) -> ModuleResult { - use deno_graph::ParsedSourceStore; - - struct UnreachableParser; - - impl deno_graph::ModuleParser for UnreachableParser { - fn parse_module( - &self, - _specifier: &deno_graph::ModuleSpecifier, - _source: Arc<str>, - _media_type: MediaType, - ) -> deno_core::anyhow::Result<ParsedSource, deno_ast::Diagnostic> { - // should have re-used the parsed source from the store - unreachable!() - } - } - match parsed_source_result { - Ok(parsed_source) => { - let store = DefaultParsedSourceStore::default(); - store.set_parsed_source(specifier.clone(), parsed_source.clone()); - let analyzer = deno_graph::CapturingModuleAnalyzer::new( - // should never parse because it will get the parsed source from the store - Some(Box::new(UnreachableParser)), - Some(Box::new(store)), - ); - deno_graph::parse_module( - specifier, - maybe_headers, - parsed_source.text_info().text(), - Some(deno_graph::ModuleKind::Esm), - maybe_resolver, - Some(&analyzer), - ) - } + Ok(parsed_source) => Ok(deno_graph::parse_module_from_ast( + specifier, + deno_graph::ModuleKind::Esm, + maybe_headers, + parsed_source, + maybe_resolver, + )), Err(err) => Err(deno_graph::ModuleGraphError::ParseErr( specifier.clone(), err.clone(), |