diff --git a/crates/fuzzy/src/fuzzy.rs b/crates/fuzzy/src/fuzzy.rs index 92084b9dc7..dbbef435f6 100644 --- a/crates/fuzzy/src/fuzzy.rs +++ b/crates/fuzzy/src/fuzzy.rs @@ -98,6 +98,16 @@ impl<'a> MatchCandidate for PathMatchCandidate<'a> { } } +impl StringMatchCandidate { + pub fn new(id: usize, string: String) -> Self { + Self { + id, + char_bag: CharBag::from(string.as_str()), + string, + } + } +} + impl<'a> MatchCandidate for &'a StringMatchCandidate { fn has_chars(&self, bag: CharBag) -> bool { self.char_bag.is_superset(bag) diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 05128776b6..014f48f462 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -7,7 +7,7 @@ pub use crate::{ use crate::{ diagnostic_set::{DiagnosticEntry, DiagnosticGroup}, outline::OutlineItem, - range_from_lsp, Outline, + range_from_lsp, Outline, ToLspPosition, }; use anyhow::{anyhow, Result}; use clock::ReplicaId; @@ -589,14 +589,8 @@ impl Buffer { .collect(); lsp::TextDocumentContentChangeEvent { range: Some(lsp::Range::new( - lsp::Position::new( - edit_start.row, - edit_start.column, - ), - lsp::Position::new( - edit_end.row, - edit_end.column, - ), + edit_start.to_lsp_position(), + edit_end.to_lsp_position(), )), range_length: None, text: new_text, diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 91d774f2a4..22accb422c 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -39,6 +39,10 @@ pub trait ToPointUtf16 { fn to_point_utf16(self) -> PointUtf16; } +pub trait ToLspPosition { + fn to_lsp_position(self) -> lsp::Position; +} + pub trait DiagnosticProcessor: 'static + Send + Sync { fn process_diagnostics(&self, diagnostics: &mut lsp::PublishDiagnosticsParams); } @@ -286,6 +290,12 @@ impl ToPointUtf16 for lsp::Position { } } +impl ToLspPosition for PointUtf16 { + fn to_lsp_position(self) -> lsp::Position { + lsp::Position::new(self.row, self.column) + } +} + pub fn range_from_lsp(range: lsp::Range) -> Range { let start = PointUtf16::new(range.start.line, range.start.character); let end = PointUtf16::new(range.end.line, range.end.character); diff --git a/crates/language/src/outline.rs b/crates/language/src/outline.rs index 07f0196c9f..0460d122b7 100644 --- a/crates/language/src/outline.rs +++ b/crates/language/src/outline.rs @@ -45,16 +45,8 @@ impl Outline { .map(|range| &item.text[range.start as usize..range.end as usize]) .collect::(); - path_candidates.push(StringMatchCandidate { - id, - char_bag: path_text.as_str().into(), - string: path_text.clone(), - }); - candidates.push(StringMatchCandidate { - id, - char_bag: candidate_text.as_str().into(), - string: candidate_text, - }); + path_candidates.push(StringMatchCandidate::new(id, path_text.clone())); + candidates.push(StringMatchCandidate::new(id, candidate_text)); } Self {