mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-26 15:21:51 -08:00
Rewrote a significant part of the Flymake backend API. Flymake now ignores the return value of backend functions: a function can either returns or errors. If it doesn't error, a backend is no longer constrained to call REPORT-FN exactly once. It may do so any number of times, cumulatively reporting diagnostics. Flymake keeps track of outdated REPORT-FN instances and disconsiders obsolete reports. Backends should avoid reporting obsolete data by cancelling any ongoing processing at every renewed call to the backend function. Consolidated flymake.el internal data structures to require less buffer-local variables. Adjusted Flymake's mode-line indicator to the new semantics. Adapted and simplified the implementation of elisp and legacy backends, fixing potential race conditions when calling backends in rapid succession. Added a new test for a backend that calls REPORT-FN multiple times. Simplify test infrastructure. * lisp/progmodes/flymake-elisp.el (flymake-elisp-checkdoc) (flymake-elisp-byte-compile): Error instead of returning nil if not in emacs-lisp-mode. (flymake-elisp--byte-compile-process): New buffer-local variable. (flymake-elisp-byte-compile): Mark (and kill) previous process obsolete process before starting a new one. Don't report if obsolete process. * lisp/progmodes/flymake-proc.el (flymake-proc--current-process): New buffer-local variable. (flymake-proc--processes): Remove. (flymake-proc--process-filter): Don't bind flymake-proc--report-fn. (flymake-proc--process-sentinel): Rewrite. Don't report if obsolete process. (flymake-proc-legacy-flymake): Rewrite. Mark (and kill) previous process obsolete process before starting a new one. Integrate flymake-proc--start-syntax-check-process helper. (flymake-proc--start-syntax-check-process): Delete. (flymake-proc-stop-all-syntax-checks): Don't use flymake-proc--processes, iterate buffers. (flymake-proc-compile): * lisp/progmodes/flymake.el (subr-x): Require it explicitly. (flymake-diagnostic-functions): Reword docstring. (flymake--running-backends, flymake--disabled-backends) (flymake--diagnostics-table): Delete. (flymake--backend-state): New buffer-local variable and new defstruct. (flymake--with-backend-state, flymake--collect) (flymake-running-backends, flymake-disabled-backends) (flymake-reporting-backends): New helpers. (flymake-is-running): Use flymake-running-backends. (flymake--handle-report): Rewrite. (flymake-make-report-fn): Ensure REPORT-FN runs in the correct buffer or not at all. (flymake--disable-backend, flymake--run-backend): Rewrite. (flymake-start): Rewrite. (flymake-mode): Set flymake--backend-state. (flymake--mode-line-format): Rewrite. * test/lisp/progmodes/flymake-tests.el (flymake-tests--wait-for-backends): New helper. (flymake-tests--call-with-fixture): Use it. (included-c-header-files): Fix whitespace. (flymake-tests--diagnose-words): New helper. (dummy-backends): Rewrite for new semantics. Use cl-letf. (flymake-tests--assert-set): Use quote. (recurrent-backend): New test. |
||
|---|---|---|
| .. | ||
| data | ||
| lib-src | ||
| lisp | ||
| manual | ||
| src | ||
| ChangeLog.1 | ||
| file-organization.org | ||
| Makefile.in | ||
| README | ||
Copyright (C) 2008-2017 Free Software Foundation, Inc. See the end of the file for license conditions. This directory contains files intended to test various aspects of Emacs's functionality. Please help add tests! See the file file-organization.org for the details of the directory structure and file-naming conventions. Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See (info "(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/ for more information on writing and running tests. The Makefile in this directory supports the following targets: * make check Run all tests as defined in the directory. Expensive tests are suppressed. The result of the tests for <filename>.el is stored in <filename>.log. * make check-maybe Like "make check", but run only the tests for files which have unresolved prerequisites. * make check-expensive Like "make check", but run also the tests marked as expensive. * make <filename> or make <filename>.log Run all tests declared in <filename>.el. This includes expensive tests. In the former case the output is shown on the terminal, in the latter case the output is written to <filename>.log. ERT offers selectors, which make it possible to filter out which test cases shall run. The make variable $(SELECTOR) gives you a simple mean to use your own selectors. The ERT manual describes how selectors are constructed, see (info "(ert)Test Selectors") or https://www.gnu.org/software/emacs/manual/html_node/ert/Test-Selectors.html You could use predefined selectors of the Makefile. "make <filename> SELECTOR='$(SELECTOR_DEFAULT)'" runs all tests for <filename>.el except the tests tagged as expensive. If your test file contains the tests "test-foo", "test2-foo" and "test-foo-remote", and you want to run only the former two tests, you could use a selector regexp: "make <filename> SELECTOR='\"foo$$\"'". (Also, see etc/compilation.txt for compilation mode font lock tests.) 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 <https://www.gnu.org/licenses/>.