Commit c5b0993e authored by Eduard Wiebe's avatar Eduard Wiebe Committed by Stefan Monnier

Extend flymake's warning predicate to be a function. Test suite for flymake.

* lisp/progmodes/flymake.el (flymake-warning-predicate): New.
(flymake-parse-line): Use it.
(flymake-warning-re): Make obsolete alias to
`flymake-warning-predicate'.
* doc/misc/flymake.texi (Parsing the output, Customizable variables):
Add reference to `flymake-warning-predicate'.
* test/automated/flymake-tests.el:
* test/automated/flymake/warnpred/Makefile
* test/automated/flymake/warnpred/test.c
* test/automated/flymake/warnpred/test.pl: New files.

Fixes: debbugs:14217
parent a7d2d465
2013-06-21 Eduard Wiebe <usenet@pusto.de>
* flymake.texi (Parsing the output, Customizable variables):
Add reference to `flymake-warning-predicate'.
2013-06-19 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Top, Configuration): Insert section `Predefined
......@@ -101,8 +106,8 @@
2013-03-08 Jay Belanger <jay.p.belanger@gmail.com>
* calc.texi (Basic Operations on Units): Fix
cross-reference.
* calc.texi (Basic Operations on Units):
Fix cross-reference.
2013-03-07 Katsumi Yamaoka <yamaoka@jpl.org>
......@@ -140,8 +145,8 @@
* tramp.texi (Inline methods): Remove "ssh1", "ssh2", "plink1"
and "plink2" entries. "plink2" is obsolete for a long time.
(External methods): Remove "scp1" and "scp2" entries. Explain
user name and host name specification for "adb".
(External methods): Remove "scp1" and "scp2" entries.
Explain user name and host name specification for "adb".
2013-02-28 Michael Albinus <michael.albinus@gmx.de>
......@@ -221,8 +226,8 @@
from ede new.
(Simple projects): Re-write to not talk about ede-simple-project
which is deprecated, and instead use the term to mean projects
that don't do much management, just project wrapping. Add
ede-generic-project link.
that don't do much management, just project wrapping.
Add ede-generic-project link.
(ede-generic-project): New node (bug#11441).
2013-02-07 Glenn Morris <rgm@gnu.org>
......@@ -361,8 +366,8 @@
2012-12-24 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Browse Foreign Server): Document
`gnus-browse-delete-group'.
* gnus.texi (Browse Foreign Server):
Document `gnus-browse-delete-group'.
2012-12-22 Glenn Morris <rgm@gnu.org>
......@@ -599,8 +604,8 @@
Improve docs for url-queue-*.
(Supported URL Types): Copyedits. Delete empty subnodes.
* url.texi (Introduction): Rename from Getting Started. Rewrite
the introduction.
* url.texi (Introduction): Rename from Getting Started.
Rewrite the introduction.
(URI Parsing): Rewrite. Omit the obsolete attributes slot.
2012-11-10 Glenn Morris <rgm@gnu.org>
......@@ -700,14 +705,14 @@
2012-10-26 Bastien Guerry <bzg@gnu.org>
* org.texi (Installation): Update the link to Org's ELPA. Also
don't mention org-install.el anymore as the replacement file
* org.texi (Installation): Update the link to Org's ELPA.
Also don't mention org-install.el anymore as the replacement file
org-loaddefs.el is now loaded by org.el.
2012-10-25 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Frequently Asked Questions): Mention
`tramp-completion-reread-directory-timeout' for performance
* tramp.texi (Frequently Asked Questions):
Mention `tramp-completion-reread-directory-timeout' for performance
improvement.
2012-10-25 Glenn Morris <rgm@gnu.org>
......@@ -830,8 +835,8 @@
(Referencing Labels): Update regarding reference styles.
(Citation Styles): Mention support for ConTeXt.
(Options (Defining Label Environments)): Fix typo.
(Options (Creating Citations)): Document
`reftex-cite-key-separator'.
(Options (Creating Citations)):
Document `reftex-cite-key-separator'.
2012-09-30 Achim Gratz <Stromeko@Stromeko.DE>
......@@ -863,8 +868,8 @@
2012-09-30 Bastien Guerry <bzg@gnu.org>
* org.texi (Installation, Feedback, Batch execution): Use
(add-to-list 'load-path ... t) for the contrib dir.
* org.texi (Installation, Feedback, Batch execution):
Use (add-to-list 'load-path ... t) for the contrib dir.
* org.texi (results): Update documentation for ":results drawer"
and ":results org".
......@@ -891,8 +896,8 @@
(Agenda commands): Reorder. Document `*' to toggle persistent
marks.
* org.texi (Agenda dispatcher): Mention
`org-toggle-agenda-sticky'.
* org.texi (Agenda dispatcher):
Mention `org-toggle-agenda-sticky'.
(Agenda commands, Exporting Agenda Views): Fix typo.
* org.texi (Templates in contexts, Setting Options): Update to
......@@ -1067,8 +1072,8 @@
(Unsafe Simplifications): Mention `m E'.
(Simplification of Units): Mention `m U'.
(Trigonometric/Hyperbolic Functions, Reducing and Mapping)
(Kinds of Declarations, Functions for Declarations): Mention
"algebraic simplifications" instead of `a s'.
(Kinds of Declarations, Functions for Declarations):
Mention "algebraic simplifications" instead of `a s'.
(Algebraic Entry): Remove mention of default simplifications.
2012-07-30 Jay Belanger <jay.p.belanger@gmail.com>
......@@ -1100,8 +1105,8 @@
2012-07-06 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Multi-hops): Introduce
`tramp-restricted-shell-hosts-alist'.
* tramp.texi (Multi-hops):
Introduce `tramp-restricted-shell-hosts-alist'.
2012-06-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
......@@ -1293,8 +1298,8 @@
(Synchronous Methods): Remove obsolete dbus-call-method-non-blocking.
(Asynchronous Methods): Fix description of
dbus-call-method-asynchronously.
(Receiving Method Calls): Fix some minor errors. Add
dbus-interface-emacs.
(Receiving Method Calls): Fix some minor errors.
Add dbus-interface-emacs.
(Signals): Describe unicast signals and the new match rules.
(Alternative Buses): Add the PRIVATE optional argument to
dbus-init-bus. Describe its new return value. Add dbus-setenv.
......@@ -1327,8 +1332,8 @@
2012-04-09 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean): Add
emacs-gnutls.
* makefile.w32-in (INFO_TARGETS, DVI_TARGETS, clean):
Add emacs-gnutls.
($(infodir)/emacs-gnutls, emacs-gnutls.dvi): New targets.
2012-04-09 Teodor Zlatanov <tzz@lifelogs.com>
......@@ -1431,7 +1436,7 @@
2012-04-01 Eric Schulte <eric.schulte@gmx.com>
* org.texi (Key bindings and useful functions): Updated babel key
* org.texi (Key bindings and useful functions): Update babel key
binding documentation in manual.
2012-04-01 Eric Schulte <eric.schulte@gmx.com>
......@@ -1532,8 +1537,8 @@
2012-02-13 Lars Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Customizing the IMAP Connection): Mention
nnimap-record-commands.
* gnus.texi (Customizing the IMAP Connection):
Mention nnimap-record-commands.
2012-02-10 Glenn Morris <rgm@gnu.org>
......@@ -1604,8 +1609,8 @@
2012-01-03 Bernt Hansen <bernt@norang.ca>
* org.texi (Agenda commands): Document
`org-clock-report-include-clocking-task'.
* org.texi (Agenda commands):
Document `org-clock-report-include-clocking-task'.
2012-01-03 Bastien Guerry <bzg@gnu.org>
......@@ -1690,8 +1695,8 @@
2012-01-03 Eric Schulte <schulte.eric@gmail.com>
* org.texi (Buffer-wide header arguments): Update
documentation to reflect removal of #+PROPERTIES.
* org.texi (Buffer-wide header arguments):
Update documentation to reflect removal of #+PROPERTIES.
2012-01-03 Carsten Dominik <carsten.dominik@gmail.com>
......@@ -1852,7 +1857,7 @@
* mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
release 8.3.
(Preface): Updated support information.
(Preface): Update support information.
(From Bill Wohler): Reset text to original version. As a
historical quote, the tense should be correct in the time that it
was written.
......@@ -2054,8 +2059,8 @@
2011-08-15 Bastien Guerry <bzg@gnu.org>
* org.texi (Dynamic blocks, Structure editing): Mention
the function `org-narrow-to-block'.
* org.texi (Dynamic blocks, Structure editing):
Mention the function `org-narrow-to-block'.
2011-08-15 Eric Schulte <schulte.eric@gmail.com>
......@@ -2082,15 +2087,15 @@
2011-08-15 Eric Schulte <schulte.eric@gmail.com>
* org.texi (Conflicts): Changed "yasnippets" to "yasnippet" and
* org.texi (Conflicts): Change "yasnippets" to "yasnippet" and
added extra whitespace around functions to be consistent with the
rest of the section.
2011-08-15 Eric Schulte <schulte.eric@gmail.com>
* org.texi (Evaluating code blocks): Expanded discussion of
* org.texi (Evaluating code blocks): Expand discussion of
#+call: line syntax.
(Header arguments in function calls): Expanded discussion of
(Header arguments in function calls): Expand discussion of
#+call: line syntax.
2011-08-15 Eric Schulte <schulte.eric@gmail.com>
......@@ -2120,12 +2125,12 @@
2011-08-15 Tom Dye <tsd@tsdye.com>
* org.texi (cache): Improved documentation of code block caches.
* org.texi (cache): Improve documentation of code block caches.
2011-08-15 Tom Dye <tsd@tsdye.com>
* org.texi (Code block specific header arguments): Documentation
of multi-line header arguments.
* org.texi (Code block specific header arguments):
Documentation of multi-line header arguments.
2011-08-15 Eric Schulte <schulte.eric@gmail.com>
......@@ -2181,15 +2186,15 @@
2011-07-04 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Cleanup remote connections): Add
`tramp-cleanup-this-connection'.
* tramp.texi (Cleanup remote connections):
Add `tramp-cleanup-this-connection'.
2011-07-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Subscription Methods): Link to "Group Levels" to explain
zombies.
(Checking New Groups): Ditto (bug#8974).
(Checking New Groups): Moved the reference to the right place.
(Checking New Groups): Move the reference to the right place.
2011-07-03 Dave Abrahams <dave@boostpro.com> (tiny change)
......@@ -2216,8 +2221,8 @@
2011-06-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus.texi (Summary Mail Commands): Document
`gnus-summary-reply-to-list-with-original'.
* gnus.texi (Summary Mail Commands):
Document `gnus-summary-reply-to-list-with-original'.
2011-06-20 Stefan Monnier <monnier@iro.umontreal.ca>
......@@ -2280,7 +2285,7 @@
* gnus.texi (nnmairix caveats, Setup, Registry Article Refer Method)
(Fancy splitting to parent, Store arbitrary data):
Updated gnus-registry docs.
Update gnus-registry docs.
2011-04-13 Juanma Barranquero <lekktu@gmail.com>
......@@ -3401,8 +3406,8 @@
Sync with Tramp 2.1.19.
* tramp.texi (Inline methods, Default Method): Mention
`tramp-inline-compress-start-size'. Remove "kludgy" phrase.
* tramp.texi (Inline methods, Default Method):
Mention `tramp-inline-compress-start-size'. Remove "kludgy" phrase.
Remove remark about doubled "-t" argument.
(Auto-save and Backup): Remove reference to Emacs 21.
(Filename Syntax): Describe port numbers.
......@@ -6056,7 +6061,7 @@
2007-10-28 Kevin Greiner <kevin.greiner@compsol.cc>
* gnus.texi (nntp-open-via-telnet-and-telnet): Fix grammar.
(Agent Parameters): Updated parameter names to match code.
(Agent Parameters): Update parameter names to match code.
(Group Agent Commands): Corrected 'gnus-agent-fetch-series' as
'gnus-agent-summary-fetch-series'.
(Agent and flags): New section providing a generalized discussion
......@@ -6860,7 +6865,7 @@
(Tag searches): Document regular expression search for tags.
(Stuck projects): New section.
(In-buffer settings): New keywords.
(History and Acknowledgments): Updated description.
(History and Acknowledgments): Update description.
2007-02-24 Alan Mackenzie <acm@muc.de>
......@@ -7092,7 +7097,7 @@
(Custom agenda views): Section completely rewritten.
(Summary): Compare with Planner.
(Feedback): More info about creating backtraces.
(Plain lists): Modified example.
(Plain lists): Modify example.
(Breaking down tasks): New section.
(Custom time format): New section.
(Time stamps): Document inactive timestamps.
......
......@@ -311,6 +311,9 @@ Used when looking for a master file. @xref{Locating a master file}.
Patterns for error/warning messages in the form @code{(regexp file-idx
line-idx col-idx err-text-idx)}. @xref{Parsing the output}.
@item flymake-warning-predicate
Predicate to classify error text as warning. @xref{Parsing the output}.
@item flymake-compilation-prevents-syntax-check
A flag indicating whether compilation and syntax check of the same
file cannot be run simultaneously.
......
2013-06-21 Eduard Wiebe <usenet@pusto.de>
Extend flymake's warning predicate to be a function (bug#14217).
* progmodes/flymake.el (flymake-warning-predicate): New.
(flymake-parse-line): Use it.
(flymake-warning-re): Make obsolete alias to
`flymake-warning-predicate'.
2013-06-21 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/package.el (package-alist): Include obsolete packages.
......
......@@ -1049,8 +1049,12 @@ from compile.el")
;; :type '(repeat (string number number number))
;;)
(defvar flymake-warning-re "^[wW]arning"
"Regexp matching against err-text to detect a warning.")
(define-obsolete-variable-alias 'flymake-warning-re 'flymake-warning-predicate "24.4")
(defvar flymake-warning-predicate "^[wW]arning"
"Predicate matching against error text to detect a warning.
Takes a single argument, the error's text and should return non-nil
if it's a warning.
Instead of a function, it can also be a regular expression.")
(defun flymake-parse-line (line)
"Parse LINE to see if it is an error or warning.
......@@ -1067,16 +1071,22 @@ Return its components if so, nil otherwise."
(line-idx (nth 2 (car patterns))))
(setq raw-file-name (if file-idx (match-string file-idx line) nil))
(setq line-no (if line-idx (string-to-number (match-string line-idx line)) 0))
(setq line-no (if line-idx (string-to-number
(match-string line-idx line)) 0))
(setq err-text (if (> (length (car patterns)) 4)
(match-string (nth 4 (car patterns)) line)
(flymake-patch-err-text (substring line (match-end 0)))))
(or err-text (setq err-text "<no error text>"))
(if (and err-text (string-match flymake-warning-re err-text))
(setq err-type "w")
)
(flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx
raw-file-name line-no err-text)
(flymake-patch-err-text
(substring line (match-end 0)))))
(if (null err-text)
(setq err-text "<no error text>")
(when (cond ((stringp flymake-warning-predicate)
(string-match flymake-warning-predicate err-text))
((functionp flymake-warning-predicate)
(funcall flymake-warning-predicate err-text)))
(setq err-type "w")))
(flymake-log
3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s"
file-idx line-idx raw-file-name line-no err-text)
(setq matched t)))
(setq patterns (cdr patterns)))
(if matched
......
2013-06-21 Eduard Wiebe <usenet@pusto.de>
Test suite for flymake.
* automated/flymake-tests.el:
* automated/flymake/warnpred/Makefile
* automated/flymake/warnpred/test.c
* automated/flymake/warnpred/test.pl: New files.
2013-06-12 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* automated/reftex-tests.el (reftex-parse-from-file-test): Fix test.
......
;;; flymake-tests.el --- Test suite for flymake
;; Copyright (C) 2011-2013 Free Software Foundation, Inc.
;; Author: Eduard Wiebe <usenet@pusto.de>
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;; Code:
(require 'ert)
(require 'flymake)
(defgroup flymake-tests nil
"Test suite for flymake.")
;; Warning predicate
(defun flymake-tests--current-face (file predicate)
(let ((buffer (find-file-noselect file)))
(unwind-protect
(with-current-buffer (find-file-noselect file)
(setq-local flymake-warning-predicate predicate)
(goto-char (point-min))
(flymake-mode 1)
;; XXX: is this reliable enough?
(sleep-for (+ 0.5 flymake-no-changes-timeout))
(flymake-goto-next-error)
(face-at-point))
(and buffer (kill-buffer buffer)))))
(ert-deftest warnining-predicate-rx-gcc ()
"Test GCC warning via regexp predicate."
:expected-result (if (executable-find "gcc") :passed :failed)
(should (eq 'flymake-warnline
(flymake-tests--current-face
"flymake/warnpred/test.c"
"^[Ww]arning"))))
(ert-deftest warning-predicate-function-gcc ()
"Test GCC warning via function predicate."
:expected-result (if (and (executable-find "gcc") (executable-find "make"))
:passed
:failed)
(should (eq 'flymake-warnline
(flymake-tests--current-face
"flymake/warnpred/test.c"
(lambda (msg) (string-match "^[Ww]arning" msg))))))
(ert-deftest warning-predicate-rx-perl ()
"Test perl warning via regular expression predicate."
:expected-result (if (executable-find "perl") :passed :failed)
(should (eq 'flymake-warnline
(flymake-tests--current-face
"flymake/warnpred/test.pl"
"^Scalar value"))))
(ert-deftest warning-predicate-function-perl ()
"Test perl warning via function predicate."
:expected-result (if (executable-find "perl") :passed :failed)
(should (eq 'flymake-warnline
(flymake-tests--current-face
"flymake/warnpred/test.pl"
(lambda (msg) (string-match "^Scalar value" msg))))))
(provide 'flymake-tests)
;;; flymake.el ends here
# Makefile for flymake tests
CC_OPTS = -Wall
check-syntax:
$(CC) $(CC_OPTS) ${CHK_SOURCES}
# eof
int main()
{
char c = 1000;
return c;
}
@arr = [1,2,3,4];
@arr[1] = -1;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment