// Hard-coded defs for now :-(
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum MacroDef {
- CTry,
Vec,
QueryGroup,
}
let def = {
let path = macro_call.path()?;
let name_ref = path.segment()?.name_ref()?;
- if name_ref.text() == "ctry" {
- MacroDef::CTry
- } else if name_ref.text() == "vec" {
+ if name_ref.text() == "vec" {
MacroDef::Vec
} else if name_ref.text() == "query_group" {
MacroDef::QueryGroup
fn expand(self, input: MacroInput) -> Option<MacroExpansion> {
match self {
- MacroDef::CTry => self.expand_ctry(input),
MacroDef::Vec => self.expand_vec(input),
MacroDef::QueryGroup => self.expand_query_group(input),
}
}
- fn expand_ctry(self, input: MacroInput) -> Option<MacroExpansion> {
- let text = format!(
- r"
- fn dummy() {{
- match {} {{
- None => return Ok(None),
- Some(it) => it,
- }}
- }}",
- input.text
- );
- let file = SourceFile::parse(&text);
- let match_expr = file.syntax().descendants().find_map(ast::MatchExpr::cast)?;
- let match_arg = match_expr.expr()?;
- let ptr = SyntaxNodePtr::new(match_arg.syntax());
- let src_range = TextRange::offset_len(0.into(), TextUnit::of_str(&input.text));
- let ranges_map = vec![(src_range, match_arg.syntax().range())];
- let res = MacroExpansion {
- text,
- ranges_map,
- ptr,
- };
- Some(res)
- }
fn expand_vec(self, input: MacroInput) -> Option<MacroExpansion> {
let text = format!(r"fn dummy() {{ {}; }}", input.text);
let file = SourceFile::parse(&text);
let (analysis, frange) = single_file_with_range(
"
fn main() {
- ctry!(foo(|x| <|>x<|>));
+ vec![foo(|x| <|>x<|>)];
}
",
);
let r = analysis.extend_selection(frange).unwrap();
- assert_eq!(r, TextRange::from_to(51.into(), 56.into()));
+ assert_eq!(r, TextRange::from_to(50.into(), 55.into()));
}
}
---
-created: "2019-01-22T14:45:01.043047100+00:00"
-creator: insta@0.4.0
+created: "2019-02-01T07:46:59.130146403+00:00"
+creator: insta@0.5.3
expression: "&highlights"
-source: "crates\\ra_ide_api\\src\\syntax_highlighting.rs"
+source: crates/ra_ide_api/src/syntax_highlighting.rs
---
[
HighlightedRange {
tag: "function"
},
HighlightedRange {
- range: [41; 46),
+ range: [41; 45),
tag: "macro"
},
HighlightedRange {
- range: [49; 52),
+ range: [48; 51),
tag: "keyword"
},
HighlightedRange {
- range: [57; 59),
+ range: [56; 58),
tag: "literal"
},
HighlightedRange {
- range: [82; 86),
- tag: "macro"
- },
- HighlightedRange {
- range: [89; 92),
- tag: "keyword"
- },
- HighlightedRange {
- range: [97; 99),
- tag: "literal"
- },
- HighlightedRange {
- range: [49; 52),
- tag: "keyword"
- },
- HighlightedRange {
- range: [53; 54),
- tag: "function"
- },
- HighlightedRange {
- range: [57; 59),
- tag: "literal"
- },
- HighlightedRange {
- range: [61; 62),
- tag: "text"
- },
- HighlightedRange {
- range: [89; 92),
+ range: [48; 51),
tag: "keyword"
},
HighlightedRange {
- range: [93; 94),
+ range: [52; 53),
tag: "function"
},
HighlightedRange {
- range: [97; 99),
+ range: [56; 58),
tag: "literal"
},
HighlightedRange {
- range: [101; 102),
+ range: [60; 61),
tag: "text"
}
]