summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkim Demaille <akim.demaille@gmail.com>2019-04-23 22:13:28 +0200
committerAkim Demaille <akim.demaille@gmail.com>2019-04-24 13:21:24 +0200
commit971e72514fd38938ae5370ff13473e5111e886ce (patch)
treec7645be60ef8dc36511341f9c65e6415134b414c
parent0ee5ac5367fd9d51719608ccc6174f81b0b91206 (diff)
downloadbison-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.c17
-rw-r--r--tests/actions.at3
-rw-r--r--tests/diagnostics.at3
-rw-r--r--tests/existing.at3
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