diff --git a/cli/src/generate/prepare_grammar/extract_default_aliases.rs b/cli/src/generate/prepare_grammar/extract_default_aliases.rs index 13edb090..d39bf8dd 100644 --- a/cli/src/generate/prepare_grammar/extract_default_aliases.rs +++ b/cli/src/generate/prepare_grammar/extract_default_aliases.rs @@ -62,6 +62,18 @@ pub(super) fn extract_default_aliases( } } + for symbol in syntax_grammar.extra_symbols.iter() { + let mut status = match symbol.kind { + SymbolType::External => &mut external_status_list[symbol.index], + SymbolType::NonTerminal => &mut non_terminal_status_list[symbol.index], + SymbolType::Terminal => &mut terminal_status_list[symbol.index], + SymbolType::End | SymbolType::EndOfNonTerminalExtra => { + panic!("Unexpected end token") + } + }; + status.appears_unaliased = true; + } + let symbols_with_statuses = (terminal_status_list .iter_mut() .enumerate() diff --git a/test/fixtures/test_grammars/aliased_rules/corpus.txt b/test/fixtures/test_grammars/aliased_rules/corpus.txt index 8789179d..32093729 100644 --- a/test/fixtures/test_grammars/aliased_rules/corpus.txt +++ b/test/fixtures/test_grammars/aliased_rules/corpus.txt @@ -2,11 +2,12 @@ Method calls ====================================== -a.b(c(d.e)); +*a.b(c(d.e)); --- (statement + (star) (call_expression (member_expression (variable_name) diff --git a/test/fixtures/test_grammars/aliased_rules/grammar.js b/test/fixtures/test_grammars/aliased_rules/grammar.js index c3cb15cb..a615a90d 100644 --- a/test/fixtures/test_grammars/aliased_rules/grammar.js +++ b/test/fixtures/test_grammars/aliased_rules/grammar.js @@ -1,7 +1,10 @@ module.exports = grammar({ name: 'aliased_rules', - extras: $ => [/\s/], + extras: $ => [ + /\s/, + $.star, + ], rules: { statement: $ => seq($._expression, ';'), @@ -25,6 +28,15 @@ module.exports = grammar({ alias($.identifier, $.property_name) )), - identifier: $ => /[a-z]+/ + identifier: $ => /[a-z]+/, + + // Tests for https://github.com/tree-sitter/tree-sitter/issues/1834 + // + // Even though the alias is unused, that issue causes all instances of + // the extra that appear in the tree to be renamed to `star_aliased`. + // + // Instead, this alias should have no effect because it is unused. + star: $ => '*', + unused: $ => alias($.star, $.star_aliased), } -}); \ No newline at end of file +});