Skip to content

Commit

Permalink
Enabling Grit metavariables inside of flow maps (#462)
Browse files Browse the repository at this point in the history
  • Loading branch information
dscleaver committed Aug 15, 2024
1 parent d3c76b3 commit e7d0f20
Show file tree
Hide file tree
Showing 9 changed files with 20,270 additions and 19,688 deletions.
43 changes: 43 additions & 0 deletions crates/core/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2262,6 +2262,49 @@ fn yaml_match_list() {
.unwrap();
}

#[test]
fn yaml_metavariable_in_flow() {
run_test_match({
TestArg {
pattern: r#"
|language yaml
|`{ key: $data }`"#
.trim_margin()
.unwrap(),
source: r#"
|---
|something: { key: 10 }"#
.trim_margin()
.unwrap(),
}
})
.unwrap();
}

#[test]
fn yaml_metavariable_in_flow_rewrite() {
run_test_expected({
TestArgExpected {
pattern: r#"
|language yaml
|`{ key: $data }` => `{ key: 10 }`"#
.trim_margin()
.unwrap(),
source: r#"
|---
|something: { key: 5 }"#
.trim_margin()
.unwrap(),
expected: r#"
|---
|something: { key: 10 }"#
.trim_margin()
.unwrap(),
}
})
.unwrap();
}

#[test]
fn undefined_assignment() {
run_test_expected({
Expand Down
30 changes: 30 additions & 0 deletions crates/language/src/yaml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,4 +170,34 @@ mod tests {
assert!(!nodes.is_empty());
assert!(found_metavar);
}

fn find_metavar_rec(node: &tree_sitter::Node, metavariable_id: u16) -> bool {
if node.kind_id() == metavariable_id {
return true;
}
for child in node.children(&mut node.walk()) {
if find_metavar_rec(&child, metavariable_id) {
return true;
}
}
false
}

#[test]
fn flow_yaml_metavariable() {
let snippet = "{ hello: $value }";
let lang = Yaml::new(None);
let snippets = lang.parse_snippet_contexts(snippet);
let nodes = nodes_from_indices(&snippets);
let mut found_metavar = false;
for node in &nodes {
print_node(&node.node);
if find_metavar_rec(&node.node, lang.metavariable_sort()) {
found_metavar = true;
}
}
assert!(!nodes.is_empty());
assert!(found_metavar);
}

}
Binary file modified crates/wasm-bindings/wasm_parsers/tree-sitter-yaml.wasm
Binary file not shown.
14 changes: 8 additions & 6 deletions resources/language-metavariables/tree-sitter-yaml/grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -703,12 +703,13 @@ module.exports = grammar({
_b_sgl_flw_map_val: ($) =>
choice($._b_sgl_flw_map, seq($._b_sgl_prp, $._r_sgl_flw_map)),

_r_flw_map: ($) => seq($._r_flw_map_bgn, $._flw_map_tal),
_br_flw_map: ($) => seq($._br_flw_map_bgn, $._flw_map_tal),
_r_flw_map: ($) =>
seq($._r_flw_map_bgn, field("items", $._flw_map_tal)),
_br_flw_map: ($) => seq($._br_flw_map_bgn, field("items", $._flw_map_tal)),

_r_sgl_flw_map: ($) => seq($._r_flw_map_bgn, $._sgl_flw_map_tal),
_br_sgl_flw_map: ($) => seq($._br_flw_map_bgn, $._sgl_flw_map_tal),
_b_sgl_flw_map: ($) => seq($._b_flw_map_bgn, $._sgl_flw_map_tal),
_r_sgl_flw_map: ($) => seq($._r_flw_map_bgn, field("items", $._sgl_flw_map_tal)),
_br_sgl_flw_map: ($) => seq($._br_flw_map_bgn, field("items", $._sgl_flw_map_tal)),
_b_sgl_flw_map: ($) => seq($._b_flw_map_bgn, field("items", $._sgl_flw_map_tal)),

_flw_map_tal: ($) =>
seq(
Expand Down Expand Up @@ -1103,7 +1104,8 @@ module.exports = grammar({
$._r_sgl_pln_bol_flw,
$._r_sgl_pln_int_flw,
$._r_sgl_pln_flt_flw,
$._r_sgl_pln_str_flw
$._r_sgl_pln_str_flw,
$.grit_metavariable
),
_hidden_br_sgl_pln_flw: ($) =>
choice(
Expand Down
44 changes: 34 additions & 10 deletions resources/language-metavariables/tree-sitter-yaml/src/grammar.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e7d0f20

Please sign in to comment.