bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

fixits: suggest running --update if there are fixits


From: Akim Demaille
Subject: fixits: suggest running --update if there are fixits
Date: Wed, 16 Jan 2019 08:39:24 +0100

commit 169fe80c7f1f0061bb0ee5b01d35185232045f5d
Author: Akim Demaille <address@hidden>
Date:   Tue Jan 15 21:00:41 2019 +0100

    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.

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);
 
diff --git a/src/main.c b/src/main.c
index 94782573..10a07d2e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]