diff options
author | João Távora <joaotavora@gmail.com> | 2017-09-28 12:06:56 +0100 |
---|---|---|
committer | João Távora <joaotavora@gmail.com> | 2017-10-03 14:18:55 +0100 |
commit | 8118f0f95f993f64f30ab1d48d9e988ab6f58019 (patch) | |
tree | 18ec49524249a9673e129084a37e8f550b879f3a /test/lisp/progmodes/flymake-resources/errors-and-warnings.c | |
parent | 9a629a73e0eb10589f5befaf0a1a3290d9ba6a47 (diff) | |
download | emacs-8118f0f95f993f64f30ab1d48d9e988ab6f58019.tar.gz emacs-8118f0f95f993f64f30ab1d48d9e988ab6f58019.tar.bz2 emacs-8118f0f95f993f64f30ab1d48d9e988ab6f58019.zip |
Fix three Flymake bugs when checking C header files
The first of these problems is longstanding: if an error-less B.h is
included from error-ridden A.h, flymake's legacy parser will panic
(and disable itself) since it sees a non-zero exit for a clean file.
To fix this, recommend returning 'true' in the documentation for the
check-syntax target.
Another problem was introduced by the parser rewrite. For error
patterns spanning more than one line, point may be left in the middle
of a line and thus render other patterns useless. Those patterns were
written for the old line-by-line parser. To make them useful again,
move to the beginning of line in those situations.
The third problem was also longstanding and happened on newer GCC's:
The "In file included from" prefix confused
flymake-proc-get-real-file-name. Fix this.
Also updated flymake--diag-region to fallback to highlighting a full
line less often.
Add automatic tests to check this.
* lisp/progmodes/flymake-proc.el
(flymake-proc--diagnostics-for-pattern): Fix bug when patterns
accidentally spans more than one line. Don't create
diagnostics without error messages.
(flymake-proc-real-file-name-considering-includes): New
helper.
(flymake-proc-allowed-file-name-masks): Use it.
* lisp/progmodes/flymake.el (flymake-diag-region): Make COL
argument explicitly optional. Only fall back to full line in extreme
cases.
* test/lisp/progmodes/flymake-tests.el
(included-c-header-files): New test.
(different-diagnostic-types): Update.
* test/lisp/progmodes/flymake-resources/Makefile
(check-syntax): Always return success (0) error code.
(CC_OPTS): Add -Wextra
* test/lisp/progmodes/flymake-resources/errors-and-warnings.c
(main): Rewrite comments.
* test/lisp/progmodes/flymake-resources/errors-and-warnings.c:
Include some dummy header files.
* test/lisp/progmodes/flymake-resources/no-problems.h: New file.
* test/lisp/progmodes/flymake-resources/some-problems.h: New file.
* doc/misc/flymake.texi (Example---Configuring a tool called
via make): Recommend adding "|| true" to the check-syntax target.
Diffstat (limited to 'test/lisp/progmodes/flymake-resources/errors-and-warnings.c')
-rw-r--r-- | test/lisp/progmodes/flymake-resources/errors-and-warnings.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/test/lisp/progmodes/flymake-resources/errors-and-warnings.c b/test/lisp/progmodes/flymake-resources/errors-and-warnings.c index 6454dd20236..1d38bd6bd27 100644 --- a/test/lisp/progmodes/flymake-resources/errors-and-warnings.c +++ b/test/lisp/progmodes/flymake-resources/errors-and-warnings.c @@ -1,10 +1,13 @@ - int main() +/* Flymake should notice an error on the next line, since + that file has at least one warning.*/ +#include "some-problems.h" +/* But not this one */ +#include "no-problems.h" + +int main() { - char c = 1000; + char c = 1000; /* a note and a warning */ int bla; - /* The following line should have one warning and one error. The - warning spans the full line because gcc (at least 6.3.0) points - places the error at the =, which isn't a sexp.*/ - char c; if (bla == (void*)3); + char c; if (bla == (void*)3); /* an error, and two warnings */ return c; } |