• João Távora's avatar
    Fix three Flymake bugs when checking C header files · 8118f0f9
    João Távora authored
    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.
    8118f0f9
flymake.el 34.4 KB