From ff6f6b3a5223ddab81c7357a3c59bdb09936a552 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 18:14:27 +0300 Subject: move docs under code model --- crates/ra_hir/src/code_model.rs | 1 + crates/ra_hir/src/code_model/docs.rs | 96 ++++++++++++++++++++++++++++++++++++ crates/ra_hir/src/db.rs | 4 +- crates/ra_hir/src/docs.rs | 96 ------------------------------------ crates/ra_hir/src/lib.rs | 3 +- 5 files changed, 100 insertions(+), 100 deletions(-) create mode 100644 crates/ra_hir/src/code_model/docs.rs delete mode 100644 crates/ra_hir/src/docs.rs (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 0cfab27dc..830aea1f3 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -1,4 +1,5 @@ pub(crate) mod src; +pub(crate) mod docs; use std::sync::Arc; diff --git a/crates/ra_hir/src/code_model/docs.rs b/crates/ra_hir/src/code_model/docs.rs new file mode 100644 index 000000000..da2b9b854 --- /dev/null +++ b/crates/ra_hir/src/code_model/docs.rs @@ -0,0 +1,96 @@ +use std::sync::Arc; + +use ra_syntax::ast; + +use crate::{ + HirDatabase, DefDatabase, AstDatabase, HasSource, + Module, StructField, Struct, Enum, EnumVariant, Static, Const, Function, Union, Trait, TypeAlias, FieldSource, MacroDef, +}; + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum DocDef { + Module(Module), + StructField(StructField), + Struct(Struct), + Enum(Enum), + EnumVariant(EnumVariant), + Static(Static), + Const(Const), + Function(Function), + Union(Union), + Trait(Trait), + TypeAlias(TypeAlias), + MacroDef(MacroDef), +} + +impl_froms!( + DocDef: Module, + StructField, + Struct, + Enum, + EnumVariant, + Static, + Const, + Function, + Union, + Trait, + TypeAlias, + MacroDef +); + +/// Holds documentation +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Documentation(Arc); + +impl Documentation { + fn new(s: &str) -> Documentation { + Documentation(s.into()) + } + + pub fn as_str(&self) -> &str { + &*self.0 + } +} + +impl Into for Documentation { + fn into(self) -> String { + self.as_str().to_owned() + } +} + +pub trait Docs { + fn docs(&self, db: &impl HirDatabase) -> Option; +} + +pub(crate) fn docs_from_ast(node: &impl ast::DocCommentsOwner) -> Option { + node.doc_comment_text().map(|it| Documentation::new(&it)) +} + +pub(crate) fn documentation_query( + db: &(impl DefDatabase + AstDatabase), + def: DocDef, +) -> Option { + match def { + DocDef::Module(it) => docs_from_ast(&*it.declaration_source(db)?.ast), + DocDef::StructField(it) => match it.source(db).ast { + FieldSource::Named(named) => docs_from_ast(&*named), + FieldSource::Pos(..) => return None, + }, + DocDef::Struct(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Enum(it) => docs_from_ast(&*it.source(db).ast), + DocDef::EnumVariant(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Static(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Const(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Function(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Union(it) => docs_from_ast(&*it.source(db).ast), + DocDef::Trait(it) => docs_from_ast(&*it.source(db).ast), + DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).ast), + DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).ast), + } +} + +impl + Copy> Docs for T { + fn docs(&self, db: &impl HirDatabase) -> Option { + db.documentation((*self).into()) + } +} diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index d2a372f3b..d2d6f95b7 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs @@ -128,8 +128,8 @@ pub trait DefDatabase: SourceDatabase { #[salsa::invoke(crate::lang_item::LangItems::lang_item_query)] fn lang_item(&self, start_crate: Crate, item: SmolStr) -> Option; - #[salsa::invoke(crate::docs::documentation_query)] - fn documentation(&self, def: crate::docs::DocDef) -> Option; + #[salsa::invoke(crate::code_model::docs::documentation_query)] + fn documentation(&self, def: crate::DocDef) -> Option; } #[salsa::query_group(HirDatabaseStorage)] diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs deleted file mode 100644 index da2b9b854..000000000 --- a/crates/ra_hir/src/docs.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::sync::Arc; - -use ra_syntax::ast; - -use crate::{ - HirDatabase, DefDatabase, AstDatabase, HasSource, - Module, StructField, Struct, Enum, EnumVariant, Static, Const, Function, Union, Trait, TypeAlias, FieldSource, MacroDef, -}; - -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub enum DocDef { - Module(Module), - StructField(StructField), - Struct(Struct), - Enum(Enum), - EnumVariant(EnumVariant), - Static(Static), - Const(Const), - Function(Function), - Union(Union), - Trait(Trait), - TypeAlias(TypeAlias), - MacroDef(MacroDef), -} - -impl_froms!( - DocDef: Module, - StructField, - Struct, - Enum, - EnumVariant, - Static, - Const, - Function, - Union, - Trait, - TypeAlias, - MacroDef -); - -/// Holds documentation -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct Documentation(Arc); - -impl Documentation { - fn new(s: &str) -> Documentation { - Documentation(s.into()) - } - - pub fn as_str(&self) -> &str { - &*self.0 - } -} - -impl Into for Documentation { - fn into(self) -> String { - self.as_str().to_owned() - } -} - -pub trait Docs { - fn docs(&self, db: &impl HirDatabase) -> Option; -} - -pub(crate) fn docs_from_ast(node: &impl ast::DocCommentsOwner) -> Option { - node.doc_comment_text().map(|it| Documentation::new(&it)) -} - -pub(crate) fn documentation_query( - db: &(impl DefDatabase + AstDatabase), - def: DocDef, -) -> Option { - match def { - DocDef::Module(it) => docs_from_ast(&*it.declaration_source(db)?.ast), - DocDef::StructField(it) => match it.source(db).ast { - FieldSource::Named(named) => docs_from_ast(&*named), - FieldSource::Pos(..) => return None, - }, - DocDef::Struct(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Enum(it) => docs_from_ast(&*it.source(db).ast), - DocDef::EnumVariant(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Static(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Const(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Function(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Union(it) => docs_from_ast(&*it.source(db).ast), - DocDef::Trait(it) => docs_from_ast(&*it.source(db).ast), - DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).ast), - DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).ast), - } -} - -impl + Copy> Docs for T { - fn docs(&self, db: &impl HirDatabase) -> Option { - db.documentation((*self).into()) - } -} diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index 1690296e5..2e99bdac8 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -38,7 +38,6 @@ mod impl_block; mod expr; mod lang_item; mod generics; -mod docs; mod resolve; pub mod diagnostics; @@ -64,7 +63,6 @@ pub use self::{ nameres::{PerNs, Namespace, ImportId}, ty::{Ty, ApplicationTy, TypeCtor, TraitRef, Substs, display::HirDisplay, CallableDef}, impl_block::{ImplBlock, ImplItem}, - docs::{Docs, Documentation}, adt::AdtDef, expr::ExprScopes, resolve::Resolution, @@ -83,4 +81,5 @@ pub use self::code_model::{ Trait, TypeAlias, MacroDef, Container, BuiltinType, src::{Source, HasSource}, + docs::{Docs, Documentation, DocDef}, }; -- cgit v1.2.3