diff --git a/cli/src/generate/rules.rs b/cli/src/generate/rules.rs index f3e39ebf..a1295ffd 100644 --- a/cli/src/generate/rules.rs +++ b/cli/src/generate/rules.rs @@ -366,7 +366,7 @@ impl FromIterator for TokenSet { fn add_metadata(input: Rule, f: T) -> Rule { match input { - Rule::Metadata { rule, mut params } => { + Rule::Metadata { rule, mut params } if !params.is_token => { f(&mut params); Rule::Metadata { rule, params } } diff --git a/test/fixtures/test_grammars/aliased_token_rules/corpus.txt b/test/fixtures/test_grammars/aliased_token_rules/corpus.txt new file mode 100644 index 00000000..cb37a095 --- /dev/null +++ b/test/fixtures/test_grammars/aliased_token_rules/corpus.txt @@ -0,0 +1,9 @@ +====================== +Aliased token rules +====================== + +abcde + +--- + +(expression (X) (Y)) diff --git a/test/fixtures/test_grammars/aliased_token_rules/grammar.json b/test/fixtures/test_grammars/aliased_token_rules/grammar.json new file mode 100644 index 00000000..76df46eb --- /dev/null +++ b/test/fixtures/test_grammars/aliased_token_rules/grammar.json @@ -0,0 +1,61 @@ +{ + "name": "aliased_token_rules", + + "extras": [ + {"type": "PATTERN", "value": "\\s"} + ], + + "rules": { + "expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "a" + }, + { + "type": "ALIAS", + "value": "X", + "named": true, + "content": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "b" + }, + { + "type": "STRING", + "value": "c" + } + ] + } + } + }, + { + "type": "ALIAS", + "value": "Y", + "named": true, + "content": { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "d" + }, + { + "type": "STRING", + "value": "e" + } + ] + } + } + } + ] + } + } +} diff --git a/test/fixtures/test_grammars/aliased_token_rules/readme.md b/test/fixtures/test_grammars/aliased_token_rules/readme.md new file mode 100644 index 00000000..03898a5f --- /dev/null +++ b/test/fixtures/test_grammars/aliased_token_rules/readme.md @@ -0,0 +1 @@ +This grammar shows that `ALIAS` rules can be applied directly to `TOKEN` and `IMMEDIATE_TOKEN` rules.