aboutsummaryrefslogtreecommitdiff
path: root/crates/ide/src/fn_references.rs
diff options
context:
space:
mode:
authorvsrs <[email protected]>2020-09-02 15:27:57 +0100
committervsrs <[email protected]>2020-09-29 13:29:20 +0100
commit1895716c885eba9aae710f80f4c29eb2b424c6f0 (patch)
treef18ed9c1032465e8c715a5fdc66c7373b94bd1fb /crates/ide/src/fn_references.rs
parent06fbd6905014b90aa2efc1f67b92f31845011d76 (diff)
Do not show references CodeLens for tests.
Diffstat (limited to 'crates/ide/src/fn_references.rs')
-rw-r--r--crates/ide/src/fn_references.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/crates/ide/src/fn_references.rs b/crates/ide/src/fn_references.rs
new file mode 100644
index 000000000..ca91b98cf
--- /dev/null
+++ b/crates/ide/src/fn_references.rs
@@ -0,0 +1,21 @@
1use hir::Semantics;
2use ide_db::RootDatabase;
3use syntax::{ast, ast::NameOwner, AstNode, SyntaxNode};
4
5use crate::{runnables::has_test_related_attribute, FileId, FileRange};
6
7pub(crate) fn find_all_methods(db: &RootDatabase, file_id: FileId) -> Vec<FileRange> {
8 let sema = Semantics::new(db);
9 let source_file = sema.parse(file_id);
10 source_file.syntax().descendants().filter_map(|it| method_range(it, file_id)).collect()
11}
12
13pub(crate) fn method_range(item: SyntaxNode, file_id: FileId) -> Option<FileRange> {
14 ast::Fn::cast(item).and_then(|fn_def|{
15 if has_test_related_attribute(&fn_def) {
16 None
17 } else {
18 fn_def.name().map(|name| FileRange{ file_id, range: name.syntax().text_range() })
19 }
20 })
21}