From 0113bd28a4709cbbe35589fb8e278b1502aa229f Mon Sep 17 00:00:00 2001 From: Nat Mote Date: Wed, 10 Aug 2022 07:25:46 -0700 Subject: [PATCH 1/2] Test for unused extra alias Tests the issue described in #1834 --- .../test_grammars/aliased_rules/corpus.txt | 3 ++- .../test_grammars/aliased_rules/grammar.js | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/test/fixtures/test_grammars/aliased_rules/corpus.txt b/test/fixtures/test_grammars/aliased_rules/corpus.txt index 8789179d..f843dec8 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_aliased) (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 +}); From 4e3179fbc0fbe65f83780bf4a93f1106545a6df2 Mon Sep 17 00:00:00 2001 From: Nat Mote Date: Tue, 9 Aug 2022 17:18:56 -0700 Subject: [PATCH 2/2] Avoid extracting default alias for extras Fixes #1834 --- .../prepare_grammar/extract_default_aliases.rs | 12 ++++++++++++ test/fixtures/test_grammars/aliased_rules/corpus.txt | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) 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 f843dec8..32093729 100644 --- a/test/fixtures/test_grammars/aliased_rules/corpus.txt +++ b/test/fixtures/test_grammars/aliased_rules/corpus.txt @@ -7,7 +7,7 @@ Method calls --- (statement - (star_aliased) + (star) (call_expression (member_expression (variable_name)