Unnamed repository; edit this file 'description' to name the repository.
Move some stuff
Lukas Wirth 2024-08-10
parent 56f63df · commit 6869b30
-rw-r--r--crates/rust-analyzer/src/config.rs2
-rw-r--r--crates/rust-analyzer/src/diff.rs53
-rw-r--r--crates/rust-analyzer/src/handlers/dispatch.rs (renamed from crates/rust-analyzer/src/dispatch.rs)0
-rw-r--r--crates/rust-analyzer/src/handlers/request.rs45
-rw-r--r--crates/rust-analyzer/src/lib.rs6
-rw-r--r--crates/rust-analyzer/src/lsp.rs2
-rw-r--r--crates/rust-analyzer/src/lsp/capabilities.rs (renamed from crates/rust-analyzer/src/capabilities.rs)0
-rw-r--r--crates/rust-analyzer/src/main_loop.rs2
8 files changed, 50 insertions, 60 deletions
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index 486046c47c..02f5d75136 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -34,9 +34,9 @@ use triomphe::Arc;
use vfs::{AbsPath, AbsPathBuf, VfsPath};
use crate::{
- capabilities::ClientCapabilities,
diagnostics::DiagnosticsMapConfig,
flycheck::{CargoOptions, FlycheckConfig},
+ lsp::capabilities::ClientCapabilities,
lsp_ext::{WorkspaceSymbolSearchKind, WorkspaceSymbolSearchScope},
};
diff --git a/crates/rust-analyzer/src/diff.rs b/crates/rust-analyzer/src/diff.rs
deleted file mode 100644
index 3fcfb4a1b0..0000000000
--- a/crates/rust-analyzer/src/diff.rs
+++ /dev/null
@@ -1,53 +0,0 @@
-//! Generate minimal `TextEdit`s from different text versions
-use dissimilar::Chunk;
-use ide::{TextEdit, TextRange, TextSize};
-
-pub(crate) fn diff(left: &str, right: &str) -> TextEdit {
- let chunks = dissimilar::diff(left, right);
- textedit_from_chunks(chunks)
-}
-
-fn textedit_from_chunks(chunks: Vec<dissimilar::Chunk<'_>>) -> TextEdit {
- let mut builder = TextEdit::builder();
- let mut pos = TextSize::default();
-
- let mut chunks = chunks.into_iter().peekable();
- while let Some(chunk) = chunks.next() {
- if let (Chunk::Delete(deleted), Some(&Chunk::Insert(inserted))) = (chunk, chunks.peek()) {
- chunks.next().unwrap();
- let deleted_len = TextSize::of(deleted);
- builder.replace(TextRange::at(pos, deleted_len), inserted.into());
- pos += deleted_len;
- continue;
- }
-
- match chunk {
- Chunk::Equal(text) => {
- pos += TextSize::of(text);
- }
- Chunk::Delete(deleted) => {
- let deleted_len = TextSize::of(deleted);
- builder.delete(TextRange::at(pos, deleted_len));
- pos += deleted_len;
- }
- Chunk::Insert(inserted) => {
- builder.insert(pos, inserted.into());
- }
- }
- }
- builder.finish()
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn diff_applies() {
- let mut original = String::from("fn foo(a:u32){\n}");
- let result = "fn foo(a: u32) {}";
- let edit = diff(&original, result);
- edit.apply(&mut original);
- assert_eq!(original, result);
- }
-}
diff --git a/crates/rust-analyzer/src/dispatch.rs b/crates/rust-analyzer/src/handlers/dispatch.rs
index ebdc196a65..ebdc196a65 100644
--- a/crates/rust-analyzer/src/dispatch.rs
+++ b/crates/rust-analyzer/src/handlers/dispatch.rs
diff --git a/crates/rust-analyzer/src/handlers/request.rs b/crates/rust-analyzer/src/handlers/request.rs
index a77d31167a..34325ac7a9 100644
--- a/crates/rust-analyzer/src/handlers/request.rs
+++ b/crates/rust-analyzer/src/handlers/request.rs
@@ -36,7 +36,6 @@ use vfs::{AbsPath, AbsPathBuf, FileId, VfsPath};
use crate::{
config::{Config, RustfmtConfig, WorkspaceSymbolConfig},
- diff::diff,
global_state::{FetchWorkspaceRequest, GlobalState, GlobalStateSnapshot},
hack_recover_crate_name,
line_index::LineEndings,
@@ -2370,3 +2369,47 @@ fn resolve_resource_op(op: &ResourceOp) -> ResourceOperationKind {
ResourceOp::Delete(_) => ResourceOperationKind::Delete,
}
}
+
+pub(crate) fn diff(left: &str, right: &str) -> TextEdit {
+ use dissimilar::Chunk;
+
+ let chunks = dissimilar::diff(left, right);
+
+ let mut builder = TextEdit::builder();
+ let mut pos = TextSize::default();
+
+ let mut chunks = chunks.into_iter().peekable();
+ while let Some(chunk) = chunks.next() {
+ if let (Chunk::Delete(deleted), Some(&Chunk::Insert(inserted))) = (chunk, chunks.peek()) {
+ chunks.next().unwrap();
+ let deleted_len = TextSize::of(deleted);
+ builder.replace(TextRange::at(pos, deleted_len), inserted.into());
+ pos += deleted_len;
+ continue;
+ }
+
+ match chunk {
+ Chunk::Equal(text) => {
+ pos += TextSize::of(text);
+ }
+ Chunk::Delete(deleted) => {
+ let deleted_len = TextSize::of(deleted);
+ builder.delete(TextRange::at(pos, deleted_len));
+ pos += deleted_len;
+ }
+ Chunk::Insert(inserted) => {
+ builder.insert(pos, inserted.into());
+ }
+ }
+ }
+ builder.finish()
+}
+
+#[test]
+fn diff_smoke_test() {
+ let mut original = String::from("fn foo(a:u32){\n}");
+ let result = "fn foo(a: u32) {}";
+ let edit = diff(&original, result);
+ edit.apply(&mut original);
+ assert_eq!(original, result);
+}
diff --git a/crates/rust-analyzer/src/lib.rs b/crates/rust-analyzer/src/lib.rs
index 56eb420770..714991e811 100644
--- a/crates/rust-analyzer/src/lib.rs
+++ b/crates/rust-analyzer/src/lib.rs
@@ -11,12 +11,9 @@
pub mod cli;
-mod capabilities;
mod command;
mod diagnostics;
-mod diff;
mod discover;
-mod dispatch;
mod flycheck;
mod hack_recover_crate_name;
mod line_index;
@@ -30,6 +27,7 @@ mod test_runner;
mod version;
mod handlers {
+ pub(crate) mod dispatch;
pub(crate) mod notification;
pub(crate) mod request;
}
@@ -51,7 +49,7 @@ mod integrated_benchmarks;
use serde::de::DeserializeOwned;
pub use crate::{
- capabilities::server_capabilities, main_loop::main_loop, reload::ws_to_crate_graph,
+ lsp::capabilities::server_capabilities, main_loop::main_loop, reload::ws_to_crate_graph,
version::version,
};
diff --git a/crates/rust-analyzer/src/lsp.rs b/crates/rust-analyzer/src/lsp.rs
index 9e0d42faed..122ad20d65 100644
--- a/crates/rust-analyzer/src/lsp.rs
+++ b/crates/rust-analyzer/src/lsp.rs
@@ -3,6 +3,8 @@
use core::fmt;
pub mod ext;
+
+pub(crate) mod capabilities;
pub(crate) mod from_proto;
pub(crate) mod semantic_tokens;
pub(crate) mod to_proto;
diff --git a/crates/rust-analyzer/src/capabilities.rs b/crates/rust-analyzer/src/lsp/capabilities.rs
index 9610808c27..9610808c27 100644
--- a/crates/rust-analyzer/src/capabilities.rs
+++ b/crates/rust-analyzer/src/lsp/capabilities.rs
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index 85e7d81fce..8035b7867c 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -20,10 +20,10 @@ use crate::{
config::Config,
diagnostics::{fetch_native_diagnostics, DiagnosticsGeneration, NativeDiagnosticsFetchKind},
discover::{DiscoverArgument, DiscoverCommand, DiscoverProjectMessage},
- dispatch::{NotificationDispatcher, RequestDispatcher},
flycheck::{self, FlycheckMessage},
global_state::{file_id_to_url, url_to_file_id, FetchWorkspaceRequest, GlobalState},
hack_recover_crate_name,
+ handlers::dispatch::{NotificationDispatcher, RequestDispatcher},
lsp::{
from_proto, to_proto,
utils::{notification_is, Progress},