Changes from review

This commit is contained in:
Zac Pullar-Strecker 2020-09-01 11:38:32 +12:00
parent 8c32bdea36
commit a14194b428
6 changed files with 14 additions and 47 deletions

View file

@ -34,7 +34,7 @@ use crate::{
config::RustfmtConfig,
from_json, from_proto,
global_state::{GlobalState, GlobalStateSnapshot},
lsp_ext::{self, DocumentationLink, InlayHint, InlayHintsParams, OpenDocsParams},
lsp_ext::{self, InlayHint, InlayHintsParams},
to_proto, LspError, Result,
};
@ -1312,15 +1312,14 @@ pub(crate) fn handle_semantic_tokens_range(
pub(crate) fn handle_open_docs(
snap: GlobalStateSnapshot,
params: OpenDocsParams,
) -> Result<DocumentationLink> {
params: lsp_types::TextDocumentPositionParams,
) -> Result<Option<lsp_types::Url>> {
let _p = profile::span("handle_open_docs");
let position = from_proto::file_position(&snap, params.position)?;
let position = from_proto::file_position(&snap, params)?;
// FIXME: Propogate or ignore this error instead of panicking.
let remote = snap.analysis.get_doc_url(position)?.unwrap();
let remote = snap.analysis.external_docs(position)?;
Ok(DocumentationLink { remote })
Ok(remote.and_then(|remote| Url::parse(&remote).ok()))
}
fn implementation_title(count: usize) -> String {

View file

@ -348,30 +348,10 @@ pub struct CommandLink {
pub tooltip: Option<String>,
}
pub enum OpenDocs {}
pub enum ExternalDocs {}
impl Request for OpenDocs {
type Params = OpenDocsParams;
type Result = DocumentationLink;
const METHOD: &'static str = "rust-analyzer/openDocs";
}
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct OpenDocsParams {
// TODO: I don't know the difference between these two methods of passing position.
#[serde(flatten)]
pub position: lsp_types::TextDocumentPositionParams,
// pub textDocument: lsp_types::TextDocumentIdentifier,
// pub position: lsp_types::Position,
}
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DocumentationLink {
pub remote: String, // TODO: Better API?
// #[serde(skip_serializing_if = "Option::is_none")]
// pub remote: Option<String>,
// #[serde(skip_serializing_if = "Option::is_none")]
// pub local: Option<String>
impl Request for ExternalDocs {
type Params = lsp_types::TextDocumentPositionParams;
type Result = Option<lsp_types::Url>;
const METHOD: &'static str = "experimental/externalDocs";
}

View file

@ -384,7 +384,7 @@ impl GlobalState {
.on::<lsp_ext::CodeActionRequest>(handlers::handle_code_action)?
.on::<lsp_ext::ResolveCodeActionRequest>(handlers::handle_resolve_code_action)?
.on::<lsp_ext::HoverRequest>(handlers::handle_hover)?
.on::<lsp_ext::OpenDocs>(handlers::handle_open_docs)?
.on::<lsp_ext::ExternalDocs>(handlers::handle_open_docs)?
.on::<lsp_types::request::OnTypeFormatting>(handlers::handle_on_type_formatting)?
.on::<lsp_types::request::DocumentSymbolRequest>(handlers::handle_document_symbol)?
.on::<lsp_types::request::WorkspaceSymbol>(handlers::handle_workspace_symbol)?