Introduce a LanguageServerId wrapper type
Clarify the meaning of all the usizes in use in all of these struct fields an method signatures.
This commit is contained in:
parent
c5f86bc6af
commit
4dd917c123
16 changed files with 166 additions and 117 deletions
|
@ -12,7 +12,7 @@ use language::{
|
|||
range_from_lsp, range_to_lsp, Anchor, Bias, Buffer, CachedLspAdapter, CharKind, CodeAction,
|
||||
Completion, OffsetRangeExt, PointUtf16, ToOffset, ToPointUtf16, Unclipped,
|
||||
};
|
||||
use lsp::{DocumentHighlightKind, LanguageServer, ServerCapabilities};
|
||||
use lsp::{DocumentHighlightKind, LanguageServer, LanguageServerId, ServerCapabilities};
|
||||
use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag};
|
||||
use std::{cmp::Reverse, ops::Range, path::Path, sync::Arc};
|
||||
|
||||
|
@ -39,7 +39,7 @@ pub(crate) trait LspCommand: 'static + Sized {
|
|||
message: <Self::LspRequest as lsp::request::Request>::Result,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Self::Response>;
|
||||
|
||||
|
@ -143,7 +143,7 @@ impl LspCommand for PrepareRename {
|
|||
message: Option<lsp::PrepareRenameResponse>,
|
||||
_: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
_: usize,
|
||||
_: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Option<Range<Anchor>>> {
|
||||
buffer.read_with(&cx, |buffer, _| {
|
||||
|
@ -270,7 +270,7 @@ impl LspCommand for PerformRename {
|
|||
message: Option<lsp::WorkspaceEdit>,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
mut cx: AsyncAppContext,
|
||||
) -> Result<ProjectTransaction> {
|
||||
if let Some(edit) = message {
|
||||
|
@ -389,7 +389,7 @@ impl LspCommand for GetDefinition {
|
|||
message: Option<lsp::GotoDefinitionResponse>,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Vec<LocationLink>> {
|
||||
location_links_from_lsp(message, project, buffer, server_id, cx).await
|
||||
|
@ -482,7 +482,7 @@ impl LspCommand for GetTypeDefinition {
|
|||
message: Option<lsp::GotoTypeDefinitionResponse>,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Vec<LocationLink>> {
|
||||
location_links_from_lsp(message, project, buffer, server_id, cx).await
|
||||
|
@ -548,7 +548,7 @@ impl LspCommand for GetTypeDefinition {
|
|||
fn language_server_for_buffer(
|
||||
project: &ModelHandle<Project>,
|
||||
buffer: &ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
cx: &mut AsyncAppContext,
|
||||
) -> Result<(Arc<CachedLspAdapter>, Arc<LanguageServer>)> {
|
||||
project
|
||||
|
@ -626,7 +626,7 @@ async fn location_links_from_lsp(
|
|||
message: Option<lsp::GotoDefinitionResponse>,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<LocationLink>> {
|
||||
let message = match message {
|
||||
|
@ -770,7 +770,7 @@ impl LspCommand for GetReferences {
|
|||
locations: Option<Vec<lsp::Location>>,
|
||||
project: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
mut cx: AsyncAppContext,
|
||||
) -> Result<Vec<Location>> {
|
||||
let mut references = Vec::new();
|
||||
|
@ -932,7 +932,7 @@ impl LspCommand for GetDocumentHighlights {
|
|||
lsp_highlights: Option<Vec<lsp::DocumentHighlight>>,
|
||||
_: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
_: usize,
|
||||
_: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Vec<DocumentHighlight>> {
|
||||
buffer.read_with(&cx, |buffer, _| {
|
||||
|
@ -1078,7 +1078,7 @@ impl LspCommand for GetHover {
|
|||
message: Option<lsp::Hover>,
|
||||
_: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
_: usize,
|
||||
_: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Self::Response> {
|
||||
Ok(message.and_then(|hover| {
|
||||
|
@ -1300,7 +1300,7 @@ impl LspCommand for GetCompletions {
|
|||
completions: Option<lsp::CompletionResponse>,
|
||||
_: ModelHandle<Project>,
|
||||
buffer: ModelHandle<Buffer>,
|
||||
_: usize,
|
||||
_: LanguageServerId,
|
||||
cx: AsyncAppContext,
|
||||
) -> Result<Vec<Completion>> {
|
||||
let completions = if let Some(completions) = completions {
|
||||
|
@ -1520,7 +1520,7 @@ impl LspCommand for GetCodeActions {
|
|||
actions: Option<lsp::CodeActionResponse>,
|
||||
_: ModelHandle<Project>,
|
||||
_: ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
_: AsyncAppContext,
|
||||
) -> Result<Vec<CodeAction>> {
|
||||
Ok(actions
|
||||
|
|
|
@ -36,7 +36,7 @@ use language::{
|
|||
};
|
||||
use lsp::{
|
||||
DiagnosticSeverity, DiagnosticTag, DidChangeWatchedFilesRegistrationOptions,
|
||||
DocumentHighlightKind, LanguageServer, LanguageString, MarkedString,
|
||||
DocumentHighlightKind, LanguageServer, LanguageServerId, LanguageString, MarkedString,
|
||||
};
|
||||
use lsp_command::*;
|
||||
use lsp_glob_set::LspGlobSet;
|
||||
|
@ -95,10 +95,10 @@ pub struct Project {
|
|||
active_entry: Option<ProjectEntryId>,
|
||||
buffer_changes_tx: mpsc::UnboundedSender<BufferMessage>,
|
||||
languages: Arc<LanguageRegistry>,
|
||||
language_servers: HashMap<usize, LanguageServerState>,
|
||||
language_server_ids: HashMap<(WorktreeId, LanguageServerName), usize>,
|
||||
language_server_statuses: BTreeMap<usize, LanguageServerStatus>,
|
||||
last_workspace_edits_by_language_server: HashMap<usize, ProjectTransaction>,
|
||||
language_servers: HashMap<LanguageServerId, LanguageServerState>,
|
||||
language_server_ids: HashMap<(WorktreeId, LanguageServerName), LanguageServerId>,
|
||||
language_server_statuses: BTreeMap<LanguageServerId, LanguageServerStatus>,
|
||||
last_workspace_edits_by_language_server: HashMap<LanguageServerId, ProjectTransaction>,
|
||||
client: Arc<client::Client>,
|
||||
next_entry_id: Arc<AtomicUsize>,
|
||||
join_project_response_message_id: u32,
|
||||
|
@ -123,7 +123,7 @@ pub struct Project {
|
|||
/// A mapping from a buffer ID to None means that we've started waiting for an ID but haven't finished loading it.
|
||||
/// Used for re-issuing buffer requests when peers temporarily disconnect
|
||||
incomplete_remote_buffers: HashMap<u64, Option<ModelHandle<Buffer>>>,
|
||||
buffer_snapshots: HashMap<u64, HashMap<usize, Vec<LspBufferSnapshot>>>, // buffer_id -> server_id -> vec of snapshots
|
||||
buffer_snapshots: HashMap<u64, HashMap<LanguageServerId, Vec<LspBufferSnapshot>>>, // buffer_id -> server_id -> vec of snapshots
|
||||
buffers_being_formatted: HashSet<usize>,
|
||||
nonce: u128,
|
||||
_maintain_buffer_languages: Task<()>,
|
||||
|
@ -189,14 +189,14 @@ pub enum Event {
|
|||
WorktreeAdded,
|
||||
WorktreeRemoved(WorktreeId),
|
||||
DiskBasedDiagnosticsStarted {
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
},
|
||||
DiskBasedDiagnosticsFinished {
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
},
|
||||
DiagnosticsUpdated {
|
||||
path: ProjectPath,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
},
|
||||
RemoteIdChanged(Option<u64>),
|
||||
DisconnectedFromHost,
|
||||
|
@ -336,10 +336,14 @@ impl DiagnosticSummary {
|
|||
self.error_count == 0 && self.warning_count == 0
|
||||
}
|
||||
|
||||
pub fn to_proto(&self, language_server_id: usize, path: &Path) -> proto::DiagnosticSummary {
|
||||
pub fn to_proto(
|
||||
&self,
|
||||
language_server_id: LanguageServerId,
|
||||
path: &Path,
|
||||
) -> proto::DiagnosticSummary {
|
||||
proto::DiagnosticSummary {
|
||||
path: path.to_string_lossy().to_string(),
|
||||
language_server_id: language_server_id as u64,
|
||||
language_server_id: language_server_id.0 as u64,
|
||||
error_count: self.error_count as u32,
|
||||
warning_count: self.warning_count as u32,
|
||||
}
|
||||
|
@ -541,7 +545,7 @@ impl Project {
|
|||
.into_iter()
|
||||
.map(|server| {
|
||||
(
|
||||
server.id as usize,
|
||||
LanguageServerId(server.id as usize),
|
||||
LanguageServerStatus {
|
||||
name: server.name,
|
||||
pending_work: Default::default(),
|
||||
|
@ -1025,7 +1029,7 @@ impl Project {
|
|||
.send(proto::StartLanguageServer {
|
||||
project_id,
|
||||
server: Some(proto::LanguageServer {
|
||||
id: *server_id as u64,
|
||||
id: server_id.0 as u64,
|
||||
name: status.name.clone(),
|
||||
}),
|
||||
})
|
||||
|
@ -1152,7 +1156,7 @@ impl Project {
|
|||
.into_iter()
|
||||
.map(|server| {
|
||||
(
|
||||
server.id as usize,
|
||||
LanguageServerId(server.id as usize),
|
||||
LanguageServerStatus {
|
||||
name: server.name,
|
||||
pending_work: Default::default(),
|
||||
|
@ -1444,7 +1448,7 @@ impl Project {
|
|||
fn open_local_buffer_via_lsp(
|
||||
&mut self,
|
||||
abs_path: lsp::Url,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
language_server_name: LanguageServerName,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) -> Task<Result<ModelHandle<Buffer>>> {
|
||||
|
@ -2381,7 +2385,7 @@ impl Project {
|
|||
.send(proto::StartLanguageServer {
|
||||
project_id,
|
||||
server: Some(proto::LanguageServer {
|
||||
id: server_id as u64,
|
||||
id: server_id.0 as u64,
|
||||
name: language_server.name().to_string(),
|
||||
}),
|
||||
})
|
||||
|
@ -2603,7 +2607,7 @@ impl Project {
|
|||
fn on_lsp_progress(
|
||||
&mut self,
|
||||
progress: lsp::ProgressParams,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
disk_based_diagnostics_progress_token: Option<String>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
|
@ -2715,7 +2719,7 @@ impl Project {
|
|||
|
||||
fn on_lsp_work_start(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
token: String,
|
||||
progress: LanguageServerProgress,
|
||||
cx: &mut ModelContext<Self>,
|
||||
|
@ -2728,7 +2732,7 @@ impl Project {
|
|||
|
||||
fn on_lsp_work_progress(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
token: String,
|
||||
progress: LanguageServerProgress,
|
||||
cx: &mut ModelContext<Self>,
|
||||
|
@ -2755,7 +2759,7 @@ impl Project {
|
|||
|
||||
fn on_lsp_work_end(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
token: String,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
|
@ -2767,7 +2771,7 @@ impl Project {
|
|||
|
||||
fn on_lsp_did_change_watched_files(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
params: DidChangeWatchedFilesRegistrationOptions,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
|
@ -2785,7 +2789,7 @@ impl Project {
|
|||
async fn on_lsp_workspace_edit(
|
||||
this: WeakModelHandle<Self>,
|
||||
params: lsp::ApplyWorkspaceEditParams,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
adapter: Arc<CachedLspAdapter>,
|
||||
language_server: Arc<LanguageServer>,
|
||||
mut cx: AsyncAppContext,
|
||||
|
@ -2818,14 +2822,14 @@ impl Project {
|
|||
|
||||
fn broadcast_language_server_update(
|
||||
&self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
event: proto::update_language_server::Variant,
|
||||
) {
|
||||
if let Some(project_id) = self.remote_id() {
|
||||
self.client
|
||||
.send(proto::UpdateLanguageServer {
|
||||
project_id,
|
||||
language_server_id: language_server_id as u64,
|
||||
language_server_id: language_server_id.0 as u64,
|
||||
variant: Some(event),
|
||||
})
|
||||
.log_err();
|
||||
|
@ -2840,7 +2844,7 @@ impl Project {
|
|||
|
||||
pub fn update_diagnostics(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
mut params: lsp::PublishDiagnosticsParams,
|
||||
disk_based_sources: &[String],
|
||||
cx: &mut ModelContext<Self>,
|
||||
|
@ -2960,7 +2964,7 @@ impl Project {
|
|||
|
||||
pub fn update_diagnostic_entries(
|
||||
&mut self,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
abs_path: PathBuf,
|
||||
version: Option<i32>,
|
||||
diagnostics: Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
|
||||
|
@ -2997,7 +3001,7 @@ impl Project {
|
|||
fn update_buffer_diagnostics(
|
||||
&mut self,
|
||||
buffer: &ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
version: Option<i32>,
|
||||
mut diagnostics: Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
|
@ -4712,7 +4716,7 @@ impl Project {
|
|||
|
||||
pub fn language_servers_running_disk_based_diagnostics(
|
||||
&self,
|
||||
) -> impl Iterator<Item = usize> + '_ {
|
||||
) -> impl Iterator<Item = LanguageServerId> + '_ {
|
||||
self.language_server_statuses
|
||||
.iter()
|
||||
.filter_map(|(id, status)| {
|
||||
|
@ -4736,7 +4740,7 @@ impl Project {
|
|||
pub fn diagnostic_summaries<'a>(
|
||||
&'a self,
|
||||
cx: &'a AppContext,
|
||||
) -> impl Iterator<Item = (ProjectPath, usize, DiagnosticSummary)> + 'a {
|
||||
) -> impl Iterator<Item = (ProjectPath, LanguageServerId, DiagnosticSummary)> + 'a {
|
||||
self.visible_worktrees(cx).flat_map(move |worktree| {
|
||||
let worktree = worktree.read(cx);
|
||||
let worktree_id = worktree.id();
|
||||
|
@ -4750,7 +4754,7 @@ impl Project {
|
|||
|
||||
pub fn disk_based_diagnostics_started(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
cx.emit(Event::DiskBasedDiagnosticsStarted { language_server_id });
|
||||
|
@ -4758,7 +4762,7 @@ impl Project {
|
|||
|
||||
pub fn disk_based_diagnostics_finished(
|
||||
&mut self,
|
||||
language_server_id: usize,
|
||||
language_server_id: LanguageServerId,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) {
|
||||
cx.emit(Event::DiskBasedDiagnosticsFinished { language_server_id });
|
||||
|
@ -5065,7 +5069,7 @@ impl Project {
|
|||
.update_diagnostic_summary(project_path.path.clone(), &summary);
|
||||
});
|
||||
cx.emit(Event::DiagnosticsUpdated {
|
||||
language_server_id: summary.language_server_id as usize,
|
||||
language_server_id: LanguageServerId(summary.language_server_id as usize),
|
||||
path: project_path,
|
||||
});
|
||||
}
|
||||
|
@ -5086,7 +5090,7 @@ impl Project {
|
|||
.ok_or_else(|| anyhow!("invalid server"))?;
|
||||
this.update(&mut cx, |this, cx| {
|
||||
this.language_server_statuses.insert(
|
||||
server.id as usize,
|
||||
LanguageServerId(server.id as usize),
|
||||
LanguageServerStatus {
|
||||
name: server.name,
|
||||
pending_work: Default::default(),
|
||||
|
@ -5106,7 +5110,7 @@ impl Project {
|
|||
mut cx: AsyncAppContext,
|
||||
) -> Result<()> {
|
||||
this.update(&mut cx, |this, cx| {
|
||||
let language_server_id = envelope.payload.language_server_id as usize;
|
||||
let language_server_id = LanguageServerId(envelope.payload.language_server_id as usize);
|
||||
|
||||
match envelope
|
||||
.payload
|
||||
|
@ -6142,7 +6146,7 @@ impl Project {
|
|||
&mut self,
|
||||
buffer: &ModelHandle<Buffer>,
|
||||
lsp_edits: impl 'static + Send + IntoIterator<Item = lsp::TextEdit>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
version: Option<i32>,
|
||||
cx: &mut ModelContext<Self>,
|
||||
) -> Task<Result<Vec<(Range<Anchor>, String)>>> {
|
||||
|
@ -6245,7 +6249,7 @@ impl Project {
|
|||
fn buffer_snapshot_for_lsp_version(
|
||||
&mut self,
|
||||
buffer: &ModelHandle<Buffer>,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
version: Option<i32>,
|
||||
cx: &AppContext,
|
||||
) -> Result<TextBufferSnapshot> {
|
||||
|
@ -6314,14 +6318,18 @@ impl Project {
|
|||
fn language_server_for_buffer(
|
||||
&self,
|
||||
buffer: &Buffer,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
cx: &AppContext,
|
||||
) -> Option<(&Arc<CachedLspAdapter>, &Arc<LanguageServer>)> {
|
||||
self.language_servers_iter_for_buffer(buffer, cx)
|
||||
.find(|(_, s)| s.server_id() == server_id)
|
||||
}
|
||||
|
||||
fn language_server_ids_for_buffer(&self, buffer: &Buffer, cx: &AppContext) -> Vec<usize> {
|
||||
fn language_server_ids_for_buffer(
|
||||
&self,
|
||||
buffer: &Buffer,
|
||||
cx: &AppContext,
|
||||
) -> Vec<LanguageServerId> {
|
||||
if let Some((file, language)) = File::from_dyn(buffer.file()).zip(buffer.language()) {
|
||||
let worktree_id = file.worktree_id(cx);
|
||||
language
|
||||
|
|
|
@ -303,7 +303,7 @@ async fn test_managing_language_servers(
|
|||
|
||||
rust_buffer2.update(cx, |buffer, cx| {
|
||||
buffer.update_diagnostics(
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
DiagnosticSet::from_sorted_entries(
|
||||
vec![DiagnosticEntry {
|
||||
diagnostic: Default::default(),
|
||||
|
@ -582,7 +582,7 @@ async fn test_single_file_worktrees_diagnostics(cx: &mut gpui::TestAppContext) {
|
|||
project.update(cx, |project, cx| {
|
||||
project
|
||||
.update_diagnostics(
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
lsp::PublishDiagnosticsParams {
|
||||
uri: Url::from_file_path("/dir/a.rs").unwrap(),
|
||||
version: None,
|
||||
|
@ -599,7 +599,7 @@ async fn test_single_file_worktrees_diagnostics(cx: &mut gpui::TestAppContext) {
|
|||
.unwrap();
|
||||
project
|
||||
.update_diagnostics(
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
lsp::PublishDiagnosticsParams {
|
||||
uri: Url::from_file_path("/dir/b.rs").unwrap(),
|
||||
version: None,
|
||||
|
@ -675,7 +675,7 @@ async fn test_hidden_worktrees_diagnostics(cx: &mut gpui::TestAppContext) {
|
|||
project.update(cx, |project, cx| {
|
||||
project
|
||||
.update_diagnostics(
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
lsp::PublishDiagnosticsParams {
|
||||
uri: Url::from_file_path("/root/other.rs").unwrap(),
|
||||
version: None,
|
||||
|
@ -767,7 +767,7 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) {
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiskBasedDiagnosticsStarted {
|
||||
language_server_id: 0,
|
||||
language_server_id: LanguageServerId(0),
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -784,7 +784,7 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) {
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiagnosticsUpdated {
|
||||
language_server_id: 0,
|
||||
language_server_id: LanguageServerId(0),
|
||||
path: (worktree_id, Path::new("a.rs")).into()
|
||||
}
|
||||
);
|
||||
|
@ -793,7 +793,7 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) {
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiskBasedDiagnosticsFinished {
|
||||
language_server_id: 0
|
||||
language_server_id: LanguageServerId(0)
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -831,7 +831,7 @@ async fn test_disk_based_diagnostics_progress(cx: &mut gpui::TestAppContext) {
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiagnosticsUpdated {
|
||||
language_server_id: 0,
|
||||
language_server_id: LanguageServerId(0),
|
||||
path: (worktree_id, Path::new("a.rs")).into()
|
||||
}
|
||||
);
|
||||
|
@ -892,7 +892,7 @@ async fn test_restarting_server_with_diagnostics_running(cx: &mut gpui::TestAppC
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiskBasedDiagnosticsStarted {
|
||||
language_server_id: 1
|
||||
language_server_id: LanguageServerId(1)
|
||||
}
|
||||
);
|
||||
project.read_with(cx, |project, _| {
|
||||
|
@ -900,7 +900,7 @@ async fn test_restarting_server_with_diagnostics_running(cx: &mut gpui::TestAppC
|
|||
project
|
||||
.language_servers_running_disk_based_diagnostics()
|
||||
.collect::<Vec<_>>(),
|
||||
[1]
|
||||
[LanguageServerId(1)]
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -910,7 +910,7 @@ async fn test_restarting_server_with_diagnostics_running(cx: &mut gpui::TestAppC
|
|||
assert_eq!(
|
||||
events.next().await.unwrap(),
|
||||
Event::DiskBasedDiagnosticsFinished {
|
||||
language_server_id: 1
|
||||
language_server_id: LanguageServerId(1)
|
||||
}
|
||||
);
|
||||
project.read_with(cx, |project, _| {
|
||||
|
@ -918,7 +918,7 @@ async fn test_restarting_server_with_diagnostics_running(cx: &mut gpui::TestAppC
|
|||
project
|
||||
.language_servers_running_disk_based_diagnostics()
|
||||
.collect::<Vec<_>>(),
|
||||
[0; 0]
|
||||
[LanguageServerId(0); 0]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
@ -1403,7 +1403,7 @@ async fn test_empty_diagnostic_ranges(cx: &mut gpui::TestAppContext) {
|
|||
project
|
||||
.update_buffer_diagnostics(
|
||||
&buffer,
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
None,
|
||||
vec![
|
||||
DiagnosticEntry {
|
||||
|
@ -1464,7 +1464,7 @@ async fn test_diagnostics_from_multiple_language_servers(cx: &mut gpui::TestAppC
|
|||
project.update(cx, |project, cx| {
|
||||
project
|
||||
.update_diagnostic_entries(
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
Path::new("/dir/a.rs").to_owned(),
|
||||
None,
|
||||
vec![DiagnosticEntry {
|
||||
|
@ -1481,7 +1481,7 @@ async fn test_diagnostics_from_multiple_language_servers(cx: &mut gpui::TestAppC
|
|||
.unwrap();
|
||||
project
|
||||
.update_diagnostic_entries(
|
||||
1,
|
||||
LanguageServerId(1),
|
||||
Path::new("/dir/a.rs").to_owned(),
|
||||
None,
|
||||
vec![DiagnosticEntry {
|
||||
|
@ -1633,7 +1633,7 @@ async fn test_edits_from_lsp_with_past_version(cx: &mut gpui::TestAppContext) {
|
|||
new_text: "".into(),
|
||||
},
|
||||
],
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
Some(lsp_document_version),
|
||||
cx,
|
||||
)
|
||||
|
@ -1728,7 +1728,7 @@ async fn test_edits_from_lsp_with_edits_on_adjacent_lines(cx: &mut gpui::TestApp
|
|||
new_text: "".into(),
|
||||
},
|
||||
],
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
None,
|
||||
cx,
|
||||
)
|
||||
|
@ -1832,7 +1832,7 @@ async fn test_invalid_edits_from_lsp(cx: &mut gpui::TestAppContext) {
|
|||
.unindent(),
|
||||
},
|
||||
],
|
||||
0,
|
||||
LanguageServerId(0),
|
||||
None,
|
||||
cx,
|
||||
)
|
||||
|
@ -3011,7 +3011,9 @@ async fn test_grouped_diagnostics(cx: &mut gpui::TestAppContext) {
|
|||
};
|
||||
|
||||
project
|
||||
.update(cx, |p, cx| p.update_diagnostics(0, message, &[], cx))
|
||||
.update(cx, |p, cx| {
|
||||
p.update_diagnostics(LanguageServerId(0), message, &[], cx)
|
||||
})
|
||||
.unwrap();
|
||||
let buffer = buffer.read_with(cx, |buffer, _| buffer.snapshot());
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ use language::{
|
|||
},
|
||||
Buffer, DiagnosticEntry, File as _, PointUtf16, Rope, RopeFingerprint, Unclipped,
|
||||
};
|
||||
use lsp::LanguageServerId;
|
||||
use parking_lot::Mutex;
|
||||
use postage::{
|
||||
barrier,
|
||||
|
@ -67,8 +68,14 @@ pub struct LocalWorktree {
|
|||
is_scanning: (watch::Sender<bool>, watch::Receiver<bool>),
|
||||
_background_scanner_task: Task<()>,
|
||||
share: Option<ShareState>,
|
||||
diagnostics: HashMap<Arc<Path>, Vec<(usize, Vec<DiagnosticEntry<Unclipped<PointUtf16>>>)>>,
|
||||
diagnostic_summaries: HashMap<Arc<Path>, HashMap<usize, DiagnosticSummary>>,
|
||||
diagnostics: HashMap<
|
||||
Arc<Path>,
|
||||
Vec<(
|
||||
LanguageServerId,
|
||||
Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
|
||||
)>,
|
||||
>,
|
||||
diagnostic_summaries: HashMap<Arc<Path>, HashMap<LanguageServerId, DiagnosticSummary>>,
|
||||
client: Arc<Client>,
|
||||
fs: Arc<dyn Fs>,
|
||||
visible: bool,
|
||||
|
@ -82,7 +89,7 @@ pub struct RemoteWorktree {
|
|||
updates_tx: Option<UnboundedSender<proto::UpdateWorktree>>,
|
||||
snapshot_subscriptions: VecDeque<(usize, oneshot::Sender<()>)>,
|
||||
replica_id: ReplicaId,
|
||||
diagnostic_summaries: HashMap<Arc<Path>, HashMap<usize, DiagnosticSummary>>,
|
||||
diagnostic_summaries: HashMap<Arc<Path>, HashMap<LanguageServerId, DiagnosticSummary>>,
|
||||
visible: bool,
|
||||
disconnected: bool,
|
||||
}
|
||||
|
@ -463,7 +470,7 @@ impl Worktree {
|
|||
|
||||
pub fn diagnostic_summaries(
|
||||
&self,
|
||||
) -> impl Iterator<Item = (Arc<Path>, usize, DiagnosticSummary)> + '_ {
|
||||
) -> impl Iterator<Item = (Arc<Path>, LanguageServerId, DiagnosticSummary)> + '_ {
|
||||
match self {
|
||||
Worktree::Local(worktree) => &worktree.diagnostic_summaries,
|
||||
Worktree::Remote(worktree) => &worktree.diagnostic_summaries,
|
||||
|
@ -518,13 +525,16 @@ impl LocalWorktree {
|
|||
pub fn diagnostics_for_path(
|
||||
&self,
|
||||
path: &Path,
|
||||
) -> Vec<(usize, Vec<DiagnosticEntry<Unclipped<PointUtf16>>>)> {
|
||||
) -> Vec<(
|
||||
LanguageServerId,
|
||||
Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
|
||||
)> {
|
||||
self.diagnostics.get(path).cloned().unwrap_or_default()
|
||||
}
|
||||
|
||||
pub fn update_diagnostics(
|
||||
&mut self,
|
||||
server_id: usize,
|
||||
server_id: LanguageServerId,
|
||||
worktree_path: Arc<Path>,
|
||||
diagnostics: Vec<DiagnosticEntry<Unclipped<PointUtf16>>>,
|
||||
_: &mut ModelContext<Worktree>,
|
||||
|
@ -570,7 +580,7 @@ impl LocalWorktree {
|
|||
worktree_id: self.id().to_proto(),
|
||||
summary: Some(proto::DiagnosticSummary {
|
||||
path: worktree_path.to_string_lossy().to_string(),
|
||||
language_server_id: server_id as u64,
|
||||
language_server_id: server_id.0 as u64,
|
||||
error_count: new_summary.error_count as u32,
|
||||
warning_count: new_summary.warning_count as u32,
|
||||
}),
|
||||
|
@ -1135,7 +1145,7 @@ impl RemoteWorktree {
|
|||
path: Arc<Path>,
|
||||
summary: &proto::DiagnosticSummary,
|
||||
) {
|
||||
let server_id = summary.language_server_id as usize;
|
||||
let server_id = LanguageServerId(summary.language_server_id as usize);
|
||||
let summary = DiagnosticSummary {
|
||||
error_count: summary.error_count as usize,
|
||||
warning_count: summary.warning_count as usize,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue