Skip to content

Commit b3652ef

Browse files
committed
Remove documentation query
1 parent 03b886d commit b3652ef

File tree

6 files changed

+26
-59
lines changed

6 files changed

+26
-59
lines changed

crates/hir/src/attrs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ macro_rules! impl_has_attrs {
3838
}
3939
fn docs(self, db: &dyn HirDatabase) -> Option<Documentation> {
4040
let def = AttrDefId::$def_id(self.into());
41-
db.documentation(def)
41+
db.attrs(def).docs()
4242
}
4343
fn resolve_doc_path(self, db: &dyn HirDatabase, link: &str, ns: Option<Namespace>) -> Option<ModuleDef> {
4444
let def = AttrDefId::$def_id(self.into());

crates/hir/src/db.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
33
pub use hir_def::db::{
44
AttrsQuery, BodyQuery, BodyWithSourceMapQuery, ConstDataQuery, CrateDefMapQueryQuery,
5-
CrateLangItemsQuery, DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery,
6-
ExprScopesQuery, FunctionDataQuery, GenericParamsQuery, ImplDataQuery, ImportMapQuery,
7-
InternConstQuery, InternDatabase, InternDatabaseStorage, InternEnumQuery, InternFunctionQuery,
8-
InternImplQuery, InternStaticQuery, InternStructQuery, InternTraitQuery, InternTypeAliasQuery,
9-
InternUnionQuery, ItemTreeQuery, LangItemQuery, ModuleLangItemsQuery, StaticDataQuery,
10-
StructDataQuery, TraitDataQuery, TypeAliasDataQuery, UnionDataQuery,
5+
CrateLangItemsQuery, DefDatabase, DefDatabaseStorage, EnumDataQuery, ExprScopesQuery,
6+
FunctionDataQuery, GenericParamsQuery, ImplDataQuery, ImportMapQuery, InternConstQuery,
7+
InternDatabase, InternDatabaseStorage, InternEnumQuery, InternFunctionQuery, InternImplQuery,
8+
InternStaticQuery, InternStructQuery, InternTraitQuery, InternTypeAliasQuery, InternUnionQuery,
9+
ItemTreeQuery, LangItemQuery, ModuleLangItemsQuery, StaticDataQuery, StructDataQuery,
10+
TraitDataQuery, TypeAliasDataQuery, UnionDataQuery,
1111
};
1212
pub use hir_expand::db::{
1313
AstDatabase, AstDatabaseStorage, AstIdMapQuery, InternEagerExpansionQuery, InternMacroQuery,

crates/hir_def/src/attr.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use std::{ops, sync::Arc};
55
use cfg::{CfgExpr, CfgOptions};
66
use either::Either;
77
use hir_expand::{hygiene::Hygiene, AstId, InFile};
8+
use itertools::Itertools;
89
use mbe::ast_to_token_tree;
910
use syntax::{
1011
ast::{self, AstNode, AttrsOwner},
@@ -14,6 +15,7 @@ use tt::Subtree;
1415

1516
use crate::{
1617
db::DefDatabase,
18+
docs::Documentation,
1719
item_tree::{ItemTreeId, ItemTreeNode},
1820
nameres::ModuleSource,
1921
path::ModPath,
@@ -140,6 +142,20 @@ impl Attrs {
140142
Some(cfg) => cfg_options.check(&cfg) != Some(false),
141143
}
142144
}
145+
146+
pub fn docs(&self) -> Option<Documentation> {
147+
let mut docs = String::new();
148+
self.by_key("doc")
149+
.attrs()
150+
.flat_map(|attr| match attr.input.as_ref()? {
151+
AttrInput::Literal(s) => Some(s),
152+
AttrInput::TokenTree(_) => None,
153+
})
154+
.intersperse(&SmolStr::new_inline("\n"))
155+
// No FromIterator<SmolStr> for String
156+
.for_each(|s| docs.push_str(s.as_str()));
157+
if docs.is_empty() { None } else { Some(docs) }.map(|it| Documentation::new(&it))
158+
}
143159
}
144160

145161
#[derive(Debug, Clone, PartialEq, Eq)]

crates/hir_def/src/db.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use crate::{
1010
attr::Attrs,
1111
body::{scope::ExprScopes, Body, BodySourceMap},
1212
data::{ConstData, FunctionData, ImplData, StaticData, TraitData, TypeAliasData},
13-
docs::Documentation,
1413
generics::GenericParams,
1514
import_map::ImportMap,
1615
item_tree::ItemTree,
@@ -105,11 +104,6 @@ pub trait DefDatabase: InternDatabase + AstDatabase + Upcast<dyn AstDatabase> {
105104
#[salsa::invoke(LangItems::lang_item_query)]
106105
fn lang_item(&self, start_crate: CrateId, item: SmolStr) -> Option<LangItemTarget>;
107106

108-
// FIXME(https://github.com/rust-analyzer/rust-analyzer/issues/2148#issuecomment-550519102)
109-
// Remove this query completely, in favor of `Attrs::docs` method
110-
#[salsa::invoke(Documentation::documentation_query)]
111-
fn documentation(&self, def: AttrDefId) -> Option<Documentation>;
112-
113107
#[salsa::invoke(ImportMap::import_map_query)]
114108
fn import_map(&self, krate: CrateId) -> Arc<ImportMap>;
115109
}

crates/hir_def/src/docs.rs

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,9 @@
55
66
use std::sync::Arc;
77

8-
use either::Either;
98
use itertools::Itertools;
109
use syntax::{ast, SmolStr};
1110

12-
use crate::{
13-
db::DefDatabase,
14-
src::{HasChildSource, HasSource},
15-
AdtId, AttrDefId, Lookup,
16-
};
17-
1811
/// Holds documentation
1912
#[derive(Debug, Clone, PartialEq, Eq)]
2013
pub struct Documentation(Arc<str>);
@@ -26,7 +19,7 @@ impl Into<String> for Documentation {
2619
}
2720

2821
impl Documentation {
29-
fn new(s: &str) -> Documentation {
22+
pub fn new(s: &str) -> Documentation {
3023
Documentation(s.into())
3124
}
3225

@@ -40,42 +33,6 @@ impl Documentation {
4033
pub fn as_str(&self) -> &str {
4134
&*self.0
4235
}
43-
44-
pub(crate) fn documentation_query(
45-
db: &dyn DefDatabase,
46-
def: AttrDefId,
47-
) -> Option<Documentation> {
48-
match def {
49-
AttrDefId::ModuleId(module) => {
50-
let def_map = db.crate_def_map(module.krate);
51-
let src = def_map[module.local_id].declaration_source(db)?;
52-
docs_from_ast(&src.value)
53-
}
54-
AttrDefId::FieldId(it) => {
55-
let src = it.parent.child_source(db);
56-
match &src.value[it.local_id] {
57-
Either::Left(_tuple) => None,
58-
Either::Right(record) => docs_from_ast(record),
59-
}
60-
}
61-
AttrDefId::AdtId(it) => match it {
62-
AdtId::StructId(it) => docs_from_ast(&it.lookup(db).source(db).value),
63-
AdtId::EnumId(it) => docs_from_ast(&it.lookup(db).source(db).value),
64-
AdtId::UnionId(it) => docs_from_ast(&it.lookup(db).source(db).value),
65-
},
66-
AttrDefId::EnumVariantId(it) => {
67-
let src = it.parent.child_source(db);
68-
docs_from_ast(&src.value[it.local_id])
69-
}
70-
AttrDefId::TraitId(it) => docs_from_ast(&it.lookup(db).source(db).value),
71-
AttrDefId::MacroDefId(it) => docs_from_ast(&it.ast_id?.to_node(db.upcast())),
72-
AttrDefId::ConstId(it) => docs_from_ast(&it.lookup(db).source(db).value),
73-
AttrDefId::StaticId(it) => docs_from_ast(&it.lookup(db).source(db).value),
74-
AttrDefId::FunctionId(it) => docs_from_ast(&it.lookup(db).source(db).value),
75-
AttrDefId::TypeAliasId(it) => docs_from_ast(&it.lookup(db).source(db).value),
76-
AttrDefId::ImplId(_) => None,
77-
}
78-
}
7936
}
8037

8138
pub(crate) fn docs_from_ast<N>(node: &N) -> Option<Documentation>
@@ -94,7 +51,8 @@ fn merge_doc_comments_and_attrs(
9451
) -> Option<String> {
9552
match (doc_comment_text, doc_attr_text) {
9653
(Some(mut comment_text), Some(attr_text)) => {
97-
comment_text.push_str("\n");
54+
comment_text.reserve(attr_text.len() + 1);
55+
comment_text.push('\n');
9856
comment_text.push_str(&attr_text);
9957
Some(comment_text)
10058
}

crates/ide_db/src/apply_change.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ impl RootDatabase {
166166
hir::db::ModuleLangItemsQuery
167167
hir::db::CrateLangItemsQuery
168168
hir::db::LangItemQuery
169-
hir::db::DocumentationQuery
170169
hir::db::ImportMapQuery
171170

172171
// HirDatabase

0 commit comments

Comments
 (0)