Changes from review
This commit is contained in:
parent
8c32bdea36
commit
a14194b428
@ -100,9 +100,6 @@ pub fn get_doc_link<T: Resolvable + Clone>(db: &dyn HirDatabase, definition: &T)
|
||||
// BUG: For Option
|
||||
// Returns https://doc.rust-lang.org/nightly/core/prelude/v1/enum.Option.html#variant.Some
|
||||
// Instead of https://doc.rust-lang.org/nightly/core/option/enum.Option.html
|
||||
//
|
||||
// BUG: For methods
|
||||
// import_map.path_of(ns) fails, is not designed to resolve methods
|
||||
fn get_doc_link_impl(db: &dyn HirDatabase, moddef: &ModuleDef) -> Option<String> {
|
||||
// Get the outermost definition for the moduledef. This is used to resolve the public path to the type,
|
||||
// then we can join the method, field, etc onto it if required.
|
||||
|
@ -383,7 +383,7 @@ impl Analysis {
|
||||
}
|
||||
|
||||
/// Return URL(s) for the documentation of the symbol under the cursor.
|
||||
pub fn get_doc_url(
|
||||
pub fn external_docs(
|
||||
&self,
|
||||
position: FilePosition,
|
||||
) -> Cancelable<Option<doc_links::DocumentationLink>> {
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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)?
|
||||
|
@ -119,13 +119,4 @@ export interface CommandLinkGroup {
|
||||
commands: CommandLink[];
|
||||
}
|
||||
|
||||
export interface DocumentationLink {
|
||||
remote: string;
|
||||
}
|
||||
|
||||
export interface OpenDocsParams {
|
||||
textDocument: lc.TextDocumentIdentifier;
|
||||
position: lc.Position;
|
||||
}
|
||||
|
||||
export const openDocs = new lc.RequestType<OpenDocsParams, DocumentationLink, void>('rust-analyzer/openDocs');
|
||||
export const openDocs = new lc.RequestType<lc.TextDocumentPositionParams, String | void, void>('experimental/externalDocs');
|
||||
|
Loading…
x
Reference in New Issue
Block a user