aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-12-28 10:27:30 +0000
committerAleksey Kladov <[email protected]>2018-12-28 10:27:30 +0000
commit072028e67996162f5a9da14cfd59ed64de5e8729 (patch)
tree6883b7d82c15653f6ad76f66bdbec8cdb5c5e8d8
parentdc496d05160f9693a4e48977b7f7a3fe2689ac51 (diff)
add macro-call node
-rw-r--r--crates/ra_analysis/src/syntax_highlighting.rs6
-rw-r--r--crates/ra_syntax/src/ast/generated.rs41
-rw-r--r--crates/ra_syntax/src/grammar.ron1
3 files changed, 46 insertions, 2 deletions
diff --git a/crates/ra_analysis/src/syntax_highlighting.rs b/crates/ra_analysis/src/syntax_highlighting.rs
index 65409beb2..0bf19eea0 100644
--- a/crates/ra_analysis/src/syntax_highlighting.rs
+++ b/crates/ra_analysis/src/syntax_highlighting.rs
@@ -7,6 +7,8 @@ use crate::{
7}; 7};
8 8
9pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Cancelable<Vec<HighlightedRange>> { 9pub(crate) fn highlight(db: &RootDatabase, file_id: FileId) -> Cancelable<Vec<HighlightedRange>> {
10 let file = db.source_file(file_id); 10 let source_file = db.source_file(file_id);
11 Ok(ra_editor::highlight(&file)) 11 let mut res = ra_editor::highlight(&source_file);
12 for node in source_file.syntax().descendants() {}
13 Ok(res)
12} 14}
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs
index c22e026cf..b0d2c3e20 100644
--- a/crates/ra_syntax/src/ast/generated.rs
+++ b/crates/ra_syntax/src/ast/generated.rs
@@ -1838,6 +1838,47 @@ impl<R: TreeRoot<RaTypes>> LoopExprNode<R> {
1838impl<'a> ast::LoopBodyOwner<'a> for LoopExpr<'a> {} 1838impl<'a> ast::LoopBodyOwner<'a> for LoopExpr<'a> {}
1839impl<'a> LoopExpr<'a> {} 1839impl<'a> LoopExpr<'a> {}
1840 1840
1841// MacroCall
1842#[derive(Debug, Clone, Copy,)]
1843pub struct MacroCallNode<R: TreeRoot<RaTypes> = OwnedRoot> {
1844 pub(crate) syntax: SyntaxNode<R>,
1845}
1846pub type MacroCall<'a> = MacroCallNode<RefRoot<'a>>;
1847
1848impl<R1: TreeRoot<RaTypes>, R2: TreeRoot<RaTypes>> PartialEq<MacroCallNode<R1>> for MacroCallNode<R2> {
1849 fn eq(&self, other: &MacroCallNode<R1>) -> bool { self.syntax == other.syntax }
1850}
1851impl<R: TreeRoot<RaTypes>> Eq for MacroCallNode<R> {}
1852impl<R: TreeRoot<RaTypes>> Hash for MacroCallNode<R> {
1853 fn hash<H: Hasher>(&self, state: &mut H) { self.syntax.hash(state) }
1854}
1855
1856impl<'a> AstNode<'a> for MacroCall<'a> {
1857 fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> {
1858 match syntax.kind() {
1859 MACRO_CALL => Some(MacroCall { syntax }),
1860 _ => None,
1861 }
1862 }
1863 fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax }
1864}
1865
1866impl<R: TreeRoot<RaTypes>> MacroCallNode<R> {
1867 pub fn borrowed(&self) -> MacroCall {
1868 MacroCallNode { syntax: self.syntax.borrowed() }
1869 }
1870 pub fn owned(&self) -> MacroCallNode {
1871 MacroCallNode { syntax: self.syntax.owned() }
1872 }
1873}
1874
1875
1876impl<'a> MacroCall<'a> {
1877 pub fn token_tree(self) -> Option<TokenTree<'a>> {
1878 super::child_opt(self)
1879 }
1880}
1881
1841// MatchArm 1882// MatchArm
1842#[derive(Debug, Clone, Copy,)] 1883#[derive(Debug, Clone, Copy,)]
1843pub struct MatchArmNode<R: TreeRoot<RaTypes> = OwnedRoot> { 1884pub struct MatchArmNode<R: TreeRoot<RaTypes> = OwnedRoot> {
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron
index 4bcff4e14..07b8433b2 100644
--- a/crates/ra_syntax/src/grammar.ron
+++ b/crates/ra_syntax/src/grammar.ron
@@ -484,6 +484,7 @@ Grammar(
484 484
485 "Name": (), 485 "Name": (),
486 "NameRef": (), 486 "NameRef": (),
487 "MacroCall": ( options: [ "TokenTree" ] ),
487 "Attr": ( options: [ ["value", "TokenTree"] ] ), 488 "Attr": ( options: [ ["value", "TokenTree"] ] ),
488 "TokenTree": (), 489 "TokenTree": (),
489 "TypeParamList": ( 490 "TypeParamList": (