diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2019-01-15 21:00:41 +0100 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2019-01-16 07:59:16 +0100 |
commit | 169fe80c7f1f0061bb0ee5b01d35185232045f5d (patch) | |
tree | 300957fd7e97d0ef2d1f7d5cc597a7251b422c0a | |
parent | b7e0d3131d2e0e5a370d3dea4c89958366d59d28 (diff) | |
download | bison-169fe80c7f1f0061bb0ee5b01d35185232045f5d.tar.gz |
fixits: suggest running --update if there are fixits
* src/fixits.h, src/fixits.c (fixits_empty): New.
* src/complain.c (deprecated_directive): Register the Wdeprecated
fixits only if -Wdeprecated was enabled, so that we don't apply
updates if the user didn't ask for them.
* src/main.c (main): If there were fixits, issue a warning suggesting
running with --update.
Free uniqstrs after the fixits, since the latter use the former.
* tests/headers.at, tests/input.at: Update expectations.
-rw-r--r-- | src/complain.c | 4 | ||||
-rw-r--r-- | src/fixits.c | 7 | ||||
-rw-r--r-- | src/fixits.h | 3 | ||||
-rw-r--r-- | src/main.c | 20 | ||||
-rw-r--r-- | tests/headers.at | 1 | ||||
-rw-r--r-- | tests/input.at | 8 |
6 files changed, 35 insertions, 8 deletions
diff --git a/src/complain.c b/src/complain.c index b9e832e9..af2d337e 100644 --- a/src/complain.c +++ b/src/complain.c @@ -394,7 +394,9 @@ deprecated_directive (location const *loc, char const *old, char const *upd) complain (loc, Wdeprecated, _("deprecated directive: %s, use %s"), quote (old), quote_n (1, upd)); - fixits_register (loc, upd); + /* Register updates only if -Wdeprecated is enabled. */ + if (warnings_flag[warning_deprecated] != severity_disabled) + fixits_register (loc, upd); } void diff --git a/src/fixits.c b/src/fixits.c index b0afa443..5ffd7935 100644 --- a/src/fixits.c +++ b/src/fixits.c @@ -91,6 +91,13 @@ fixits_register (location const *loc, char const* fix) } +bool +fixits_empty (void) +{ + return !fixits; +} + + void fixits_run (void) { diff --git a/src/fixits.h b/src/fixits.h index 5adaf685..45c2780a 100644 --- a/src/fixits.h +++ b/src/fixits.h @@ -26,6 +26,9 @@ void fixits_register (location const *loc, char const* update); /* Apply the fixits: update the source file. */ void fixits_run (void); +/* Whether there are no fixits. */ +bool fixits_empty (void); + /* Free the registered fixits. */ void fixits_free (void); @@ -103,12 +103,6 @@ main (int argc, char *argv[]) reader (); timevar_pop (tv_reader); - /* Fix input file now, even if there are errors: that's less - warnings in the following runs. */ - if (update_flag) - fixits_run (); - fixits_free (); - if (complaint_status == status_complaint) goto finish; @@ -217,7 +211,6 @@ main (int argc, char *argv[]) contains things such as user actions, prologue, epilogue etc. */ gram_scanner_free (); muscle_free (); - uniqstrs_free (); code_scanner_free (); skel_scanner_free (); quotearg_free (); @@ -234,5 +227,18 @@ main (int argc, char *argv[]) cleanup_caret (); + /* Fix input file now, even if there are errors: that's less + warnings in the following runs. */ + if (!fixits_empty ()) + { + if (update_flag) + fixits_run (); + else + complain (NULL, Wother, + _("fix-its can be applied. Rerun with option '--update'.")); + fixits_free (); + } + uniqstrs_free (); + return complaint_status ? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/tests/headers.at b/tests/headers.at index a58074fe..87b765dd 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -86,6 +86,7 @@ exp: %empty; AT_BISON_CHECK([--defines -o input.c input.y], [], [], [[input.y:11.1-18: warning: deprecated directive: '%name-prefix "my_"', use '%define api.prefix {my_}' [-Wdeprecated] +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) # YYLTYPE should be defined, and MY_LLOC declared. diff --git a/tests/input.at b/tests/input.at index a61fcf2b..f4a2cbbb 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1744,6 +1744,7 @@ AT_BISON_CHECK([[input-redefined.y]], [[1]], [], input-redefined.y:1.1-20: previous definition input-redefined.y:3.2-21: error: %define variable 'var' redefined input-redefined.y:2.1-20: previous definition +input-redefined.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_DATA([input-unused.y], @@ -1799,6 +1800,7 @@ start: %empty; AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [], [[input-dg.y:1.1-18: error: %define variable 'var' redefined <command line>:2: previous definition +input-dg.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_DATA([[input-dg.y]], @@ -1811,6 +1813,7 @@ AT_BISON_CHECK([[-fcaret -Dvar=cmd-d input-dg.y]], [[1]], [], %define var "gram" ^~~~~~~~~~~~~~~~~~ <command line>:3: previous definition +input-dg.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_DATA([[input-unused.y]], @@ -2017,6 +2020,7 @@ input.y:5.1-15: warning: deprecated directive, use '%define api.value.type varia input.y:6.1-34: warning: deprecated directive, use '%define api.parser.class {parser}' [-Wdeprecated] %define parser_class_name {parser} ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_CLEANUP @@ -2354,6 +2358,7 @@ AT_TEST([[%union foo {}; input.y:1.8-10: previous definition input.y:4.1-32: error: %define variable 'api.value.union.name' redefined input.y:3.8-10: previous definition +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_TEST([[%define api.value.union.name {foo}]], @@ -2542,6 +2547,7 @@ input.y:11.1-14: previous definition fix-it:"input.y":{27:1-27:15}:"" input.y:29.1-18: warning: deprecated directive: '%name-prefix "bar"', use '%define api.prefix {bar}' [-Wdeprecated] fix-it:"input.y":{29:1-29:19}:"%define api.prefix {bar}" +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_CHECK([[sed -e '/^fix-it:/d' errors-all >experr]]) @@ -2599,6 +2605,7 @@ AT_BISON_CHECK([[-fcaret input.y]], [[1]], [], input.y:19.1-24: previous definition %define api.prefix {foo} ^~~~~~~~~~~~~~~~~~~~~~~~ +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_CLEANUP @@ -2636,6 +2643,7 @@ input.y:13.16-29: error: %define variable 'parse.error' redefined input.y:13.1-14: previous definition input.y:14.16-29: error: %define variable 'parse.error' redefined input.y:13.16-29: previous definition +input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] ]]) AT_CLEANUP |