fixits: be sure to preserve the action when adding %empty

Currently we remove the rhs to install %empty instead.

* src/reader.c (grammar_rule_check_and_complete): Insert the missing
%empty in front of the rhs, not in replacement thereof.
* tests/actions.at (Add missing %empty): Check that.
This commit is contained in:
Akim Demaille
2019-05-03 09:19:21 +02:00
parent b5233ba323
commit 8c06cb9130
2 changed files with 44 additions and 3 deletions

View File

@@ -357,9 +357,10 @@ grammar_rule_check_and_complete (symbol_list *r)
&& !r->percent_empty_loc.start.file
&& warning_is_enabled (Wempty_rule))
{
complain (&r->rhs_loc, Wempty_rule,
_("empty rule without %%empty"));
fixits_register (&r->rhs_loc, " %empty ");
complain (&r->rhs_loc, Wempty_rule, _("empty rule without %%empty"));
location loc = r->rhs_loc;
loc.end = loc.start;
fixits_register (&loc, " %empty ");
}
/* See comments in grammar_current_rule_prec_set for how POSIX

View File

@@ -259,6 +259,46 @@ AT_BISON_OPTION_POPDEFS
AT_CLEANUP
## -------------------- ##
## Add missing %empty. ##
## -------------------- ##
AT_SETUP([Add missing %empty])
AT_DATA([input.y],
[[%%
exp: a b c d e
a: {}
b:{
};
c:
d
:
e:
%%
]])
AT_BISON_CHECK([--update -Wall input.y], [], [], [ignore])
AT_CHECK([cat input.y], [],
[[%%
exp: a b c d e
a: %empty {}
b: %empty {
};
c: %empty @&t@
d
: %empty @&t@
e: %empty @&t@
%%
]])
# No warnings.
AT_BISON_CHECK([-Wall input.y])
AT_CLEANUP
## ------------------ ##
## Initial location. ##
## ------------------ ##