diff options
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 90 |
1 files changed, 28 insertions, 62 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 955ca1c78..e8ea0e2cf 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -3,9 +3,6 @@ use super::analysis; use super::text::LineIndex; -use crate::import_map::ImportMap; -use crate::media_type::MediaType; - use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::error::Context; @@ -76,9 +73,10 @@ impl DocumentData { } pub fn content(&self) -> Result<Option<String>, AnyError> { - if let Some(bytes) = self.bytes.clone() { + if let Some(bytes) = &self.bytes { Ok(Some( - String::from_utf8(bytes).context("cannot decode bytes to string")?, + String::from_utf8(bytes.clone()) + .context("cannot decode bytes to string")?, )) } else { Ok(None) @@ -92,46 +90,12 @@ pub struct DocumentCache { } impl DocumentCache { - pub fn analyze_dependencies( - &mut self, - specifier: &ModuleSpecifier, - maybe_import_map: &Option<ImportMap>, - ) -> Result<(), AnyError> { - if !self.contains(specifier) { - return Err(custom_error( - "NotFound", - format!( - "The specifier (\"{}\") does not exist in the document cache.", - specifier - ), - )); - } - - let doc = self.docs.get_mut(specifier).unwrap(); - if let Some(source) = &doc.content()? { - if let Some((dependencies, _)) = analysis::analyze_dependencies( - specifier, - source, - &MediaType::from(specifier), - maybe_import_map, - ) { - doc.dependencies = Some(dependencies); - } else { - doc.dependencies = None; - } - } else { - doc.dependencies = None; - } - - Ok(()) - } - pub fn change( &mut self, specifier: &ModuleSpecifier, version: i32, content_changes: Vec<TextDocumentContentChangeEvent>, - ) -> Result<(), AnyError> { + ) -> Result<Option<String>, AnyError> { if !self.contains(specifier) { return Err(custom_error( "NotFound", @@ -145,7 +109,7 @@ impl DocumentCache { let doc = self.docs.get_mut(specifier).unwrap(); doc.apply_content_changes(content_changes)?; doc.version = Some(version); - Ok(()) + doc.content() } pub fn close(&mut self, specifier: &ModuleSpecifier) { @@ -187,12 +151,7 @@ impl DocumentCache { doc.line_index.clone() } - pub fn open( - &mut self, - specifier: ModuleSpecifier, - version: i32, - text: String, - ) { + pub fn open(&mut self, specifier: ModuleSpecifier, version: i32, text: &str) { self.docs.insert( specifier, DocumentData { @@ -218,6 +177,25 @@ impl DocumentCache { .collect() } + pub fn set_dependencies( + &mut self, + specifier: &ModuleSpecifier, + maybe_dependencies: Option<HashMap<String, analysis::Dependency>>, + ) -> Result<(), AnyError> { + if let Some(doc) = self.docs.get_mut(specifier) { + doc.dependencies = maybe_dependencies; + Ok(()) + } else { + Err(custom_error( + "NotFound", + format!( + "The specifier (\"{}\") does not exist in the document cache.", + specifier + ), + )) + } + } + pub fn version(&self, specifier: &ModuleSpecifier) -> Option<i32> { self.docs.get(specifier).and_then(|doc| doc.version) } @@ -234,11 +212,7 @@ mod tests { let specifier = ModuleSpecifier::resolve_url("file:///a/b.ts").unwrap(); let missing_specifier = ModuleSpecifier::resolve_url("file:///a/c.ts").unwrap(); - document_cache.open( - specifier.clone(), - 1, - "console.log(\"Hello Deno\");\n".to_owned(), - ); + document_cache.open(specifier.clone(), 1, "console.log(\"Hello Deno\");\n"); assert!(document_cache.contains(&specifier)); assert!(!document_cache.contains(&missing_specifier)); } @@ -247,11 +221,7 @@ mod tests { fn test_document_cache_change() { let mut document_cache = DocumentCache::default(); let specifier = ModuleSpecifier::resolve_url("file:///a/b.ts").unwrap(); - document_cache.open( - specifier.clone(), - 1, - "console.log(\"Hello deno\");\n".to_owned(), - ); + document_cache.open(specifier.clone(), 1, "console.log(\"Hello deno\");\n"); document_cache .change( &specifier, @@ -282,11 +252,7 @@ mod tests { fn test_document_cache_change_utf16() { let mut document_cache = DocumentCache::default(); let specifier = ModuleSpecifier::resolve_url("file:///a/b.ts").unwrap(); - document_cache.open( - specifier.clone(), - 1, - "console.log(\"Hello 🦕\");\n".to_owned(), - ); + document_cache.open(specifier.clone(), 1, "console.log(\"Hello 🦕\");\n"); document_cache .change( &specifier, |