diff options
| author | Edwin Cheng <[email protected]> | 2020-03-22 07:00:44 +0000 |
|---|---|---|
| committer | Edwin Cheng <[email protected]> | 2020-03-22 07:00:44 +0000 |
| commit | bb22a4e386c13a17b518a3822d343f6dd3dc4398 (patch) | |
| tree | 260af0f85f02d70f24f153ed7704e045542bb25f /crates | |
| parent | 6fe956420fc63609a84dd005b8190b1f19fff280 (diff) | |
Add support for macro in symbo_index
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 12 | ||||
| -rw-r--r-- | crates/ra_ide_db/src/symbol_index.rs | 7 | ||||
| -rw-r--r-- | crates/ra_syntax/src/ast/extensions.rs | 13 |
3 files changed, 20 insertions, 12 deletions
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index e8c58ed32..3cf0c66ea 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
| @@ -453,7 +453,7 @@ impl ExprCollector<'_> { | |||
| 453 | } | 453 | } |
| 454 | } | 454 | } |
| 455 | ast::Expr::MacroCall(e) => { | 455 | ast::Expr::MacroCall(e) => { |
| 456 | if let Some(name) = is_macro_rules(&e) { | 456 | if let Some(name) = e.is_macro_rules().map(|it| it.as_name()) { |
| 457 | let mac = MacroDefId { | 457 | let mac = MacroDefId { |
| 458 | krate: Some(self.expander.module.krate), | 458 | krate: Some(self.expander.module.krate), |
| 459 | ast_id: Some(self.expander.ast_id(&e)), | 459 | ast_id: Some(self.expander.ast_id(&e)), |
| @@ -697,16 +697,6 @@ impl ExprCollector<'_> { | |||
| 697 | } | 697 | } |
| 698 | } | 698 | } |
| 699 | 699 | ||
| 700 | fn is_macro_rules(m: &ast::MacroCall) -> Option<Name> { | ||
| 701 | let name = m.path()?.segment()?.name_ref()?.as_name(); | ||
| 702 | |||
| 703 | if name == name![macro_rules] { | ||
| 704 | Some(m.name()?.as_name()) | ||
| 705 | } else { | ||
| 706 | None | ||
| 707 | } | ||
| 708 | } | ||
| 709 | |||
| 710 | impl From<ast::BinOp> for BinaryOp { | 700 | impl From<ast::BinOp> for BinaryOp { |
| 711 | fn from(ast_op: ast::BinOp) -> Self { | 701 | fn from(ast_op: ast::BinOp) -> Self { |
| 712 | match ast_op { | 702 | match ast_op { |
diff --git a/crates/ra_ide_db/src/symbol_index.rs b/crates/ra_ide_db/src/symbol_index.rs index 884359ee3..0f46f93c1 100644 --- a/crates/ra_ide_db/src/symbol_index.rs +++ b/crates/ra_ide_db/src/symbol_index.rs | |||
| @@ -362,6 +362,13 @@ fn to_symbol(node: &SyntaxNode) -> Option<(SmolStr, SyntaxNodePtr, TextRange)> { | |||
| 362 | ast::TypeAliasDef(it) => { decl(it) }, | 362 | ast::TypeAliasDef(it) => { decl(it) }, |
| 363 | ast::ConstDef(it) => { decl(it) }, | 363 | ast::ConstDef(it) => { decl(it) }, |
| 364 | ast::StaticDef(it) => { decl(it) }, | 364 | ast::StaticDef(it) => { decl(it) }, |
| 365 | ast::MacroCall(it) => { | ||
| 366 | if it.is_macro_rules().is_some() { | ||
| 367 | decl(it) | ||
| 368 | } else { | ||
| 369 | None | ||
| 370 | } | ||
| 371 | }, | ||
| 365 | _ => None, | 372 | _ => None, |
| 366 | } | 373 | } |
| 367 | } | 374 | } |
diff --git a/crates/ra_syntax/src/ast/extensions.rs b/crates/ra_syntax/src/ast/extensions.rs index c3ae8f90e..392731dac 100644 --- a/crates/ra_syntax/src/ast/extensions.rs +++ b/crates/ra_syntax/src/ast/extensions.rs | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | use itertools::Itertools; | 4 | use itertools::Itertools; |
| 5 | 5 | ||
| 6 | use crate::{ | 6 | use crate::{ |
| 7 | ast::{self, child_opt, children, AstNode, AttrInput, SyntaxNode}, | 7 | ast::{self, child_opt, children, AstNode, AttrInput, NameOwner, SyntaxNode}, |
| 8 | SmolStr, SyntaxElement, | 8 | SmolStr, SyntaxElement, |
| 9 | SyntaxKind::*, | 9 | SyntaxKind::*, |
| 10 | SyntaxToken, T, | 10 | SyntaxToken, T, |
| @@ -514,3 +514,14 @@ impl ast::Visibility { | |||
| 514 | self.syntax().children_with_tokens().any(|it| it.kind() == T![super]) | 514 | self.syntax().children_with_tokens().any(|it| it.kind() == T![super]) |
| 515 | } | 515 | } |
| 516 | } | 516 | } |
| 517 | |||
| 518 | impl ast::MacroCall { | ||
| 519 | pub fn is_macro_rules(&self) -> Option<ast::Name> { | ||
| 520 | let name_ref = self.path()?.segment()?.name_ref()?; | ||
| 521 | if name_ref.text() == "macro_rules" { | ||
| 522 | self.name() | ||
| 523 | } else { | ||
| 524 | None | ||
| 525 | } | ||
| 526 | } | ||
| 527 | } | ||
