//! FIXME: write short doc here
use either::Either;
-use hir::{
- AssocItem, Documentation, FieldSource, HasAttrs, HasSource, HirFileId, InFile, ModuleSource,
-};
+use hir::{AssocItem, Documentation, FieldSource, HasAttrs, HasSource, InFile, ModuleSource};
use ide_db::base_db::{FileId, SourceDatabase};
use ide_db::{defs::Definition, RootDatabase};
use syntax::{
focus_range: self.name_range,
container_name: self.container_name.clone(),
description: description_from_symbol(db, self),
- docs: docs_from_symbol(db, self),
+ docs: None,
}
}
}
}
}
-pub(crate) fn docs_from_symbol(db: &RootDatabase, symbol: &FileSymbol) -> Option<Documentation> {
- let parse = db.parse(symbol.file_id);
- let node = symbol.ptr.to_node(parse.tree().syntax());
- let file_id = HirFileId::from(symbol.file_id);
-
- let it = match_ast! {
- match node {
- ast::Fn(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Struct(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Enum(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Trait(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Module(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::TypeAlias(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Const(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Static(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::RecordField(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::Variant(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- ast::MacroCall(it) => hir::Attrs::from_attrs_owner(db, InFile::new(file_id, &it)),
- _ => return None,
- }
- };
- it.docs()
-}
-
/// Get a description of a symbol.
///
/// e.g. `struct Name`, `enum Name`, `fn Name`
use assists::utils::test_related_attribute;
use cfg::CfgExpr;
-use hir::{AsAssocItem, Attrs, HirFileId, InFile, Semantics};
+use hir::{AsAssocItem, HasAttrs, InFile, Semantics};
use ide_db::RootDatabase;
use itertools::Itertools;
use syntax::{
match item {
ast::Struct(it) => runnable_struct(sema, it, file_id),
ast::Fn(it) => runnable_fn(sema, it, file_id),
- ast::Module(it) => runnable_mod(sema, it, file_id),
+ ast::Module(it) => runnable_mod(sema, it),
_ => None,
}
}
fn_def: ast::Fn,
file_id: FileId,
) -> Option<Runnable> {
+ let def = sema.to_def(&fn_def)?;
let name_string = fn_def.name()?.text().to_string();
- let attrs = Attrs::from_attrs_owner(sema.db, InFile::new(HirFileId::from(file_id), &fn_def));
+ let attrs = def.attrs(sema.db);
let kind = if name_string == "main" {
RunnableKind::Bin
} else {
struct_def: ast::Struct,
file_id: FileId,
) -> Option<Runnable> {
+ let def = sema.to_def(&struct_def)?;
let name_string = struct_def.name()?.text().to_string();
- let attrs =
- Attrs::from_attrs_owner(sema.db, InFile::new(HirFileId::from(file_id), &struct_def));
+ let attrs = def.attrs(sema.db);
if !has_runnable_doc_test(&attrs) {
return None;
}
})
}
-fn runnable_mod(
- sema: &Semantics<RootDatabase>,
- module: ast::Module,
- file_id: FileId,
-) -> Option<Runnable> {
+fn runnable_mod(sema: &Semantics<RootDatabase>, module: ast::Module) -> Option<Runnable> {
if !has_test_function_or_multiple_test_submodules(&module) {
return None;
}
.filter_map(|it| it.name(sema.db))
.join("::");
- let attrs = Attrs::from_attrs_owner(sema.db, InFile::new(HirFileId::from(file_id), &module));
+ let def = sema.to_def(&module)?;
+ let attrs = def.attrs(sema.db);
let cfg = attrs.cfg();
let nav = module_def.to_nav(sema.db);
Some(Runnable { nav, kind: RunnableKind::TestMod { path }, cfg })