62 lines
2 KiB
Rust
62 lines
2 KiB
Rust
use super::helpers::fixtures::get_test_language;
|
|
use crate::generate::generate_parser_for_grammar;
|
|
use tree_sitter::Parser;
|
|
|
|
#[test]
|
|
fn test_basic_node_refs() {
|
|
let (parser_name, parser_code) = generate_parser_for_grammar(
|
|
r#"
|
|
{
|
|
"name": "test_grammar_with_refs",
|
|
"extras": [
|
|
{"type": "PATTERN", "value": "\\s+"}
|
|
],
|
|
"rules": {
|
|
"rule_a": {
|
|
"type": "SEQ",
|
|
"members": [
|
|
{
|
|
"type": "REF",
|
|
"value": "ref_1",
|
|
"content": {
|
|
"type": "STRING",
|
|
"value": "child-1"
|
|
}
|
|
},
|
|
{
|
|
"type": "CHOICE",
|
|
"members": [
|
|
{
|
|
"type": "STRING",
|
|
"value": "child-2"
|
|
},
|
|
{
|
|
"type": "BLANK"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"type": "REF",
|
|
"value": "ref_2",
|
|
"content": {
|
|
"type": "STRING",
|
|
"value": "child-3"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
"#,
|
|
)
|
|
.unwrap();
|
|
|
|
let mut parser = Parser::new();
|
|
let language = get_test_language(&parser_name, &parser_code, None);
|
|
parser.set_language(language).unwrap();
|
|
|
|
let tree = parser.parse("child-1 child-2 child-3", None).unwrap();
|
|
let root_node = tree.root_node();
|
|
assert_eq!(root_node.child_by_ref("ref_1"), root_node.child(0));
|
|
assert_eq!(root_node.child_by_ref("ref_2"), root_node.child(2));
|
|
}
|