diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2019-04-23 22:13:28 +0200 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2019-04-24 13:21:24 +0200 |
commit | 971e72514fd38938ae5370ff13473e5111e886ce (patch) | |
tree | c7645be60ef8dc36511341f9c65e6415134b414c | |
parent | 0ee5ac5367fd9d51719608ccc6174f81b0b91206 (diff) | |
download | bison-971e72514fd38938ae5370ff13473e5111e886ce.tar.gz |
updates: insert/remove %empty
* src/reader.c (grammar_rule_check_and_complete): Generate fixits for
adding/removing %empty.
* tests/actions.at, tests/diagnostics.at, tests/existing.at: Adjust.
-rw-r--r-- | src/reader.c | 17 | ||||
-rw-r--r-- | tests/actions.at | 3 | ||||
-rw-r--r-- | tests/diagnostics.at | 3 | ||||
-rw-r--r-- | tests/existing.at | 3 |
4 files changed, 22 insertions, 4 deletions
diff --git a/src/reader.c b/src/reader.c index e776ed1f..32feb0dc 100644 --- a/src/reader.c +++ b/src/reader.c @@ -26,6 +26,7 @@ #include "complain.h" #include "conflicts.h" #include "files.h" +#include "fixits.h" #include "getargs.h" #include "gram.h" #include "muscle-tab.h" @@ -344,14 +345,22 @@ grammar_rule_check_and_complete (symbol_list *r) /* Check that %empty => empty rule. */ if (r->percent_empty_loc.start.file && r->next && r->next->content.sym) - complain (&r->percent_empty_loc, complaint, - _("%%empty on non-empty rule")); + { + complain (&r->percent_empty_loc, complaint, + _("%%empty on non-empty rule")); + fixits_register (&r->percent_empty_loc, ""); + } /* Check that empty rule => %empty. */ if (!(r->next && r->next->content.sym) && !r->midrule_parent_rule - && !r->percent_empty_loc.start.file) - complain (&r->location, Wempty_rule, _("empty rule without %%empty")); + && !r->percent_empty_loc.start.file + && warning_is_enabled (Wempty_rule)) + { + complain (&r->location, Wempty_rule, + _("empty rule without %%empty")); + fixits_register (&r->location, " %empty "); + } /* See comments in grammar_current_rule_prec_set for how POSIX mandates this complaint. It's only for identifiers, so skip diff --git a/tests/actions.at b/tests/actions.at index ec2e8836..7157805b 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -134,6 +134,7 @@ AT_BISON_CHECK([-fcaret -Wempty-rule 1.y], [0], [], [[1.y:11.17-18: warning: empty rule without %empty [-Wempty-rule] 11 | a: /* empty. */ {}; | ^~ +1.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_DATA_GRAMMAR([[2.y]], @@ -151,6 +152,7 @@ AT_BISON_CHECK([-fcaret 2.y], [0], [], 2.y:13.17-18: warning: empty rule without %empty [-Wempty-rule] 13 | c: /* empty. */ {}; | ^~ +2.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_BISON_CHECK([-fcaret -Wno-empty-rule 2.y], [0]) @@ -229,6 +231,7 @@ two.y:12.3-8: error: %empty on non-empty rule two.y:13.3-8: error: %empty on non-empty rule 13 | | %empty {} {} | ^~~~~~ +two.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_BISON_OPTION_POPDEFS diff --git a/tests/diagnostics.at b/tests/diagnostics.at index ab5fde38..773982ff 100644 --- a/tests/diagnostics.at +++ b/tests/diagnostics.at @@ -112,6 +112,7 @@ input.y:16.2: <warning>warning:</warning> empty rule without %empty [<warning>-W input.y:17.3: <warning>warning:</warning> empty rule without %empty [<warning>-Wempty-rule</warning>] 17 | e: | <warning>^</warning> +input.y: <warning>warning:</warning> fix-its can be applied. Rerun with option '--update'. [<warning>-Wother</warning>] ]]) @@ -158,6 +159,7 @@ input.y:17.4-17: <warning>warning:</warning> empty rule without %empty [<warning input.y:18.4-17: <warning>warning:</warning> empty rule without %empty [<warning>-Wempty-rule</warning>] 18 | h: <warning>{ 🐃 }</warning> | <warning>^~~~~~~~~~~~~~</warning> +input.y: <warning>warning:</warning> fix-its can be applied. Rerun with option '--update'. [<warning>-Wother</warning>] ]]) @@ -180,6 +182,7 @@ b: {} 11 | a: <warning>{}</warning> | <warning>^~</warning> /dev/stdout:1.4-5: <warning>warning:</warning> empty rule without %empty [<warning>-Wempty-rule</warning>] +/dev/stdout: <warning>warning:</warning> fix-its can be applied. Rerun with option '--update'. [<warning>-Wother</warning>] ]]) diff --git a/tests/existing.at b/tests/existing.at index 782633ad..018178bf 100644 --- a/tests/existing.at +++ b/tests/existing.at @@ -457,6 +457,7 @@ input.y:47.1-6: warning: useless associativity for UNARY, use %precedence [-Wpre input.y:50.1-5: warning: useless associativity for '$', use %precedence [-Wprecedence] input.y:51.1-5: warning: useless associativity for '(', use %precedence [-Wprecedence] input.y:51.1-5: warning: useless precedence and associativity for ')' [-Wprecedence] +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]], dnl LAST-STATE @@ -1428,6 +1429,7 @@ input.y:54.1-5: warning: useless associativity for HORELSE, use %precedence [-Wp input.y:55.1-5: warning: useless associativity for HANDTHEN, use %precedence [-Wprecedence] input.y:61.1-5: warning: useless associativity for HNOT, use %precedence [-Wprecedence] input.y:68.1-5: warning: useless associativity for UNEAR, use %precedence [-Wprecedence] +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]], dnl LAST-STATE @@ -2096,6 +2098,7 @@ input.y:157.1-5: warning: useless associativity for '`', use %precedence [-Wprec input.y:159.1-5: warning: useless associativity for '@<:@', use %precedence [-Wprecedence] input.y:170.1-5: warning: useless associativity for ',', use %precedence [-Wprecedence] input.y:181.1-6: warning: useless associativity for '!', use %precedence [-Wprecedence] +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]], dnl LAST-STATE |