summaryrefslogtreecommitdiff
path: root/cli/lsp/documents.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r--cli/lsp/documents.rs90
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,