Display language server name in status bar
This commit is contained in:
@@ -83,8 +83,9 @@ impl Server {
|
||||
.add_request_handler(Server::register_worktree)
|
||||
.add_message_handler(Server::unregister_worktree)
|
||||
.add_request_handler(Server::update_worktree)
|
||||
.add_message_handler(Server::start_language_server)
|
||||
.add_message_handler(Server::update_language_server)
|
||||
.add_message_handler(Server::update_diagnostic_summary)
|
||||
.add_message_handler(Server::lsp_event)
|
||||
.add_request_handler(Server::forward_project_request::<proto::GetDefinition>)
|
||||
.add_request_handler(Server::forward_project_request::<proto::GetReferences>)
|
||||
.add_request_handler(Server::forward_project_request::<proto::SearchProject>)
|
||||
@@ -385,6 +386,7 @@ impl Server {
|
||||
worktrees,
|
||||
replica_id: joined.replica_id as u32,
|
||||
collaborators,
|
||||
language_servers: joined.project.language_servers.clone(),
|
||||
};
|
||||
let connection_ids = joined.project.connection_ids();
|
||||
let contact_user_ids = joined.project.authorized_user_ids();
|
||||
@@ -534,9 +536,29 @@ impl Server {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn lsp_event(
|
||||
async fn start_language_server(
|
||||
mut self: Arc<Server>,
|
||||
request: TypedEnvelope<proto::StartLanguageServer>,
|
||||
) -> tide::Result<()> {
|
||||
let receiver_ids = self.state_mut().start_language_server(
|
||||
request.payload.project_id,
|
||||
request.sender_id,
|
||||
request
|
||||
.payload
|
||||
.server
|
||||
.clone()
|
||||
.ok_or_else(|| anyhow!("invalid language server"))?,
|
||||
)?;
|
||||
broadcast(request.sender_id, receiver_ids, |connection_id| {
|
||||
self.peer
|
||||
.forward_send(request.sender_id, connection_id, request.payload.clone())
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn update_language_server(
|
||||
self: Arc<Server>,
|
||||
request: TypedEnvelope<proto::LspEvent>,
|
||||
request: TypedEnvelope<proto::UpdateLanguageServer>,
|
||||
) -> tide::Result<()> {
|
||||
let receiver_ids = self
|
||||
.state()
|
||||
|
||||
@@ -25,6 +25,7 @@ pub struct Project {
|
||||
pub host_user_id: UserId,
|
||||
pub share: Option<ProjectShare>,
|
||||
pub worktrees: HashMap<u64, Worktree>,
|
||||
pub language_servers: Vec<proto::LanguageServer>,
|
||||
}
|
||||
|
||||
pub struct Worktree {
|
||||
@@ -240,6 +241,7 @@ impl Store {
|
||||
host_user_id,
|
||||
share: None,
|
||||
worktrees: Default::default(),
|
||||
language_servers: Default::default(),
|
||||
},
|
||||
);
|
||||
self.next_project_id += 1;
|
||||
@@ -438,6 +440,24 @@ impl Store {
|
||||
Err(anyhow!("no such worktree"))?
|
||||
}
|
||||
|
||||
pub fn start_language_server(
|
||||
&mut self,
|
||||
project_id: u64,
|
||||
connection_id: ConnectionId,
|
||||
language_server: proto::LanguageServer,
|
||||
) -> tide::Result<Vec<ConnectionId>> {
|
||||
let project = self
|
||||
.projects
|
||||
.get_mut(&project_id)
|
||||
.ok_or_else(|| anyhow!("no such project"))?;
|
||||
if project.host_connection_id == connection_id {
|
||||
project.language_servers.push(language_server);
|
||||
return Ok(project.connection_ids());
|
||||
}
|
||||
|
||||
Err(anyhow!("no such project"))?
|
||||
}
|
||||
|
||||
pub fn join_project(
|
||||
&mut self,
|
||||
connection_id: ConnectionId,
|
||||
|
||||
Reference in New Issue
Block a user