Change return type of expand_macro

This commit is contained in:
Edwin Cheng 2019-11-19 22:56:48 +08:00
parent 94c63d2802
commit 4012da07fd
5 changed files with 33 additions and 13 deletions

View file

@ -11,7 +11,12 @@ use ra_syntax::{
AstNode, NodeOrToken, SyntaxKind, SyntaxNode, WalkEvent,
};
pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<(String, String)> {
pub struct ExpandedMacro {
pub name: String,
pub expansion: String,
}
pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<ExpandedMacro> {
let parse = db.parse(position.file_id);
let file = parse.tree();
let name_ref = find_node_at_offset::<ast::NameRef>(file.syntax(), position.offset)?;
@ -23,8 +28,8 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
// FIXME:
// macro expansion may lose all white space information
// But we hope someday we can use ra_fmt for that
let res = insert_whitespaces(expanded);
Some((name_ref.text().to_string(), res))
let expansion = insert_whitespaces(expanded);
Some(ExpandedMacro { name: name_ref.text().to_string(), expansion })
}
fn expand_macro_recur(
@ -87,7 +92,8 @@ mod tests {
let (analysis, pos) = analysis_and_position(fixture);
let result = analysis.expand_macro(pos).unwrap().unwrap();
assert_eq!(result, (expected.0.to_string(), expected.1.to_string()));
assert_eq!(result.name, expected.0.to_string());
assert_eq!(result.expansion, expected.1.to_string());
}
#[test]

View file

@ -66,6 +66,7 @@ pub use crate::{
completion::{CompletionItem, CompletionItemKind, InsertTextFormat},
diagnostics::Severity,
display::{file_structure, FunctionSignature, NavigationTarget, StructureNode},
expand_macro::ExpandedMacro,
feature_flags::FeatureFlags,
folding_ranges::{Fold, FoldKind},
hover::HoverResult,
@ -297,7 +298,7 @@ impl Analysis {
self.with_db(|db| syntax_tree::syntax_tree(&db, file_id, text_range))
}
pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<(String, String)>> {
pub fn expand_macro(&self, position: FilePosition) -> Cancelable<Option<ExpandedMacro>> {
self.with_db(|db| expand_macro::expand_macro(db, position))
}