Skip to content

Commit 1195cb5

Browse files
committed
Add simple test for syntax_node_to_token_tree_censored
1 parent d6134b6 commit 1195cb5

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/mbe/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ cov-mark = "2.0.0-pre.1"
1313
rustc-hash = "1.1.0"
1414
smallvec = "1.2.0"
1515
log = "0.4.8"
16+
expect-test = "1.1"
1617

1718
syntax = { path = "../syntax", version = "0.0.0" }
1819
parser = { path = "../parser", version = "0.0.0" }

crates/mbe/src/syntax_bridge.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ use tt::buffer::{Cursor, TokenBuffer};
1515
use crate::{subtree_source::SubtreeTokenSource, tt_iter::TtIter};
1616
use crate::{ExpandError, TokenMap};
1717

18-
/// Convert the syntax node to a `TokenTree` with the censored nodes excluded (what macro
18+
/// Convert the syntax node to a `TokenTree` (what macro
1919
/// will consume).
2020
pub fn syntax_node_to_token_tree(node: &SyntaxNode) -> (tt::Subtree, TokenMap) {
2121
syntax_node_to_token_tree_censored(node, None)
2222
}
2323

24-
/// Convert the syntax node to a `TokenTree` with the censored nodes excluded (what macro
25-
/// will consume).
24+
/// Convert the syntax node to a `TokenTree` (what macro will consume)
25+
/// with the censored range excluded.
2626
pub fn syntax_node_to_token_tree_censored(
2727
node: &SyntaxNode,
2828
censor: Option<TextRange>,

crates/mbe/src/tests.rs

+41
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,44 @@ fn debug_dump_ignore_spaces(node: &syntax::SyntaxNode) -> String {
228228

229229
buf
230230
}
231+
232+
#[test]
233+
fn test_node_to_tt_censor() {
234+
use syntax::ast::{AttrsOwner, ModuleItemOwner};
235+
236+
let source = r##"
237+
#[attr0]
238+
#[attr1]
239+
#[attr2]
240+
struct Struct {
241+
field: ()
242+
}
243+
"##;
244+
let source_file = ast::SourceFile::parse(&source).ok().unwrap();
245+
let item = source_file.items().next().unwrap();
246+
let attr = item.attrs().nth(1).unwrap();
247+
248+
let (tt, _) =
249+
syntax_node_to_token_tree_censored(item.syntax(), Some(attr.syntax().text_range()));
250+
expect_test::expect![[r##"# [attr0] # [attr2] struct Struct {field : ()}"##]]
251+
.assert_eq(&tt.to_string());
252+
253+
let source = r##"
254+
#[derive(Derive0)]
255+
#[derive(Derive1)]
256+
#[derive(Derive2)]
257+
struct Struct {
258+
field: ()
259+
}
260+
"##;
261+
let source_file = ast::SourceFile::parse(&source).ok().unwrap();
262+
let item = source_file.items().next().unwrap();
263+
let attr = item.attrs().nth(1).unwrap();
264+
265+
let (tt, _) = syntax_node_to_token_tree_censored(
266+
item.syntax(),
267+
Some(attr.syntax().text_range().cover_offset(0.into())),
268+
);
269+
expect_test::expect![[r##"# [derive (Derive2)] struct Struct {field : ()}"##]]
270+
.assert_eq(&tt.to_string());
271+
}

0 commit comments

Comments
 (0)