(yas-global-mode 1)
#+END_SRC
+*** [[https://github.com/flycheck/flycheck][flycheck]]
+
+#+BEGIN_SRC emacs-lisp
+(add-to-list 'load-path "~/.emacs.d/elpa/flycheck-20150125.601")
+(require 'flycheck)
+(add-hook 'after-init-hook #'global-flycheck-mode)
+#+END_SRC
*** [[https://github.com/kai2nenobu/guide-key][guide-key]]
#+BEGIN_SRC emacs-lisp
--- /dev/null
+This is the file .../info/dir, which contains the
+topmost node of the Info hierarchy, called (dir)Top.
+The first time you invoke Info you start off looking at this node.
+\1f
+File: dir, Node: Top This is the top of the INFO tree
+
+ This (the Directory node) gives a menu of major topics.
+ Typing "q" exits, "?" lists all Info commands, "d" returns here,
+ "h" gives a primer for first-timers,
+ "mEmacs<Return>" visits the Emacs manual, etc.
+
+ In Emacs, you can click mouse button 2 on a menu item or cross reference
+ to select it.
+
+* Menu:
+
+Emacs
+* flycheck: (flycheck.info). On the fly syntax checking for GNU Emacs
--- /dev/null
+;;; flycheck-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+
+\f
+;;;### (autoloads (flycheck-def-option-var flycheck-def-config-file-var
+;;;;;; flycheck-define-command-checker flycheck-define-error-level
+;;;;;; global-flycheck-mode flycheck-mode flycheck-info) "flycheck"
+;;;;;; "flycheck.el" (21701 7957 0 0))
+;;; Generated autoloads from flycheck.el
+
+(autoload 'flycheck-info "flycheck" "\
+Open the Flycheck manual.
+
+\(fn)" t nil)
+
+(autoload 'flycheck-mode "flycheck" "\
+Minor mode for on-the-fly syntax checking.
+
+When called interactively, toggle `flycheck-mode'. With prefix
+ARG, enable `flycheck-mode' if ARG is positive, otherwise disable
+it.
+
+When called from Lisp, enable `flycheck-mode' if ARG is omitted,
+nil or positive. If ARG is `toggle', toggle `flycheck-mode'.
+Otherwise behave as if called interactively.
+
+In `flycheck-mode' the buffer is automatically syntax-checked
+using the first suitable syntax checker from `flycheck-checkers'.
+Use `flycheck-select-checker' to select a checker for the current
+buffer manually.
+
+\\{flycheck-mode-map}
+
+\(fn &optional ARG)" t nil)
+
+(defvar global-flycheck-mode nil "\
+Non-nil if Global-Flycheck mode is enabled.
+See the command `global-flycheck-mode' for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `global-flycheck-mode'.")
+
+(custom-autoload 'global-flycheck-mode "flycheck" nil)
+
+(autoload 'global-flycheck-mode "flycheck" "\
+Toggle Flycheck mode in all buffers.
+With prefix ARG, enable Global-Flycheck mode if ARG is positive;
+otherwise, disable it. If called from Lisp, enable the mode if
+ARG is omitted or nil.
+
+Flycheck mode is enabled in all buffers where
+`flycheck-mode-on-safe' would do it.
+See `flycheck-mode' for more information on Flycheck mode.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'flycheck-define-error-level "flycheck" "\
+Define a new error LEVEL with PROPERTIES.
+
+The following PROPERTIES constitute an error level:
+
+`:severity SEVERITY'
+ A number denoting the severity of this level. The higher
+ the number, the more severe is this level compared to other
+ levels. Defaults to 0.
+
+ The severity is used by `flycheck-error-level-<' to
+ determine the ordering of errors according to their levels.
+
+`:overlay-category CATEGORY'
+ A symbol denoting the overlay category to use for error
+ highlight overlays for this level. See Info
+ node `(elisp)Overlay Properties' for more information about
+ overlay categories.
+
+ A category for an error level overlay should at least define
+ the `face' property, for error highlighting. Other useful
+ properties for error level categories are `priority' to
+ influence the stacking of multiple error level overlays, and
+ `help-echo' to define a default error messages for errors
+ without messages.
+
+`:fringe-bitmap BITMAP'
+ A fringe bitmap symbol denoting the bitmap to use for fringe
+ indicators for this level. See Info node `(elisp)Fringe
+ Bitmaps' for more information about fringe bitmaps,
+ including a list of built-in fringe bitmaps.
+
+`:fringe-face FACE'
+ A face symbol denoting the face to use for fringe indicators
+ for this level.
+
+`:error-list-face FACE'
+ A face symbol denoting the face to use for messages of this
+ level in the error list. See `flycheck-list-errors'.
+
+\(fn LEVEL &rest PROPERTIES)" nil nil)
+
+(put 'flycheck-define-error-level 'lisp-indent-function '1)
+
+(autoload 'flycheck-define-command-checker "flycheck" "\
+Define SYMBOL as syntax checker which runs a command.
+
+Define SYMBOL as generic syntax checker via
+`flycheck-define-generic-checker', which uses an external command
+to check the buffer. SYMBOL and DOCSTRING are the same as for
+`flycheck-define-generic-checker'.
+
+In addition to the properties understood by
+`flycheck-define-generic-checker', the following PROPERTIES
+constitute a command syntax checker. Unless otherwise noted, all
+properties are mandatory. Note that the default `:error-filter'
+of command checkers is `flycheck-sanitize-errors'.
+
+`:command COMMAND'
+ The command to run for syntax checking.
+
+ COMMAND is a list of the form `(EXECUTABLE [ARG ...])'.
+
+ EXECUTABLE is a string with the executable of this syntax
+ checker. It can be overridden with the variable
+ `flycheck-SYMBOL-executable'. Note that this variable is
+ NOT implicitly defined by this function. Use
+ `flycheck-def-executable-var' to define this variable.
+
+ Each ARG is an argument to the executable, either as string,
+ or as special symbol or form for
+ `flycheck-substitute-argument', which see.
+
+`:error-patterns PATTERNS'
+ A list of patterns to parse the output of the `:command'.
+
+ Each ITEM in PATTERNS is a list `(LEVEL SEXP ...)', where
+ LEVEL is a Flycheck error level (see
+ `flycheck-define-error-level'), followed by one or more RX
+ `SEXP's which parse an error of that level and extract line,
+ column, file name and the message.
+
+ See `rx' for general information about RX, and
+ `flycheck-rx-to-string' for some special RX forms provided
+ by Flycheck.
+
+ All patterns are applied in the order of declaration to the
+ whole output of the syntax checker. Output already matched
+ by a pattern will not be matched by subsequent patterns. In
+ other words, the first pattern wins.
+
+ This property is optional. If omitted, however, an
+ `:error-parser' is mandatory.
+
+`:error-parser FUNCTION'
+ A function to parse errors with.
+
+ The function shall accept three arguments OUTPUT CHECKER
+ BUFFER. OUTPUT is the syntax checker output as string,
+ CHECKER the syntax checker that was used, and BUFFER a
+ buffer object representing the checked buffer. The function
+ must return a list of `flycheck-error' objects parsed from
+ OUTPUT.
+
+ This property is optional. If omitted, it defaults to
+ `flycheck-parse-with-patterns'. In this case,
+ `:error-patterns' is mandatory.
+
+Note that you may not give `:start', `:interrupt', and
+`:print-doc' for a command checker. You can give a custom
+`:verify' function, but you should take care to call
+`flycheck-verify-command-checker' in a custom `:verify'
+function.
+
+\(fn SYMBOL DOCSTRING &rest PROPERTIES)" nil nil)
+
+(put 'flycheck-define-command-checker 'lisp-indent-function '1)
+
+(put 'flycheck-define-command-checker 'doc-string-elt '2)
+
+(autoload 'flycheck-def-config-file-var "flycheck" "\
+Define SYMBOL as config file variable for CHECKER, with default FILE-NAME.
+
+SYMBOL is declared as customizable variable using `defcustom', to
+provide a configuration file for the given syntax CHECKER.
+CUSTOM-ARGS are forwarded to `defcustom'.
+
+FILE-NAME is the initial value of the new variable. If omitted,
+the default value is nil.
+
+Use this together with the `config-file' form in the `:command'
+argument to `flycheck-define-checker'.
+
+\(fn SYMBOL CHECKER &optional FILE-NAME &rest CUSTOM-ARGS)" nil t)
+
+(put 'flycheck-def-config-file-var 'lisp-indent-function '3)
+
+(autoload 'flycheck-def-option-var "flycheck" "\
+Define SYMBOL as option variable with INIT-VALUE for CHECKER.
+
+SYMBOL is declared as customizable variable using `defcustom', to
+provide an option for the given syntax CHECKER. INIT-VALUE is
+the initial value of the variable, and DOCSTRING is its
+docstring. CUSTOM-ARGS are forwarded to `defcustom'.
+
+Use this together with the `option', `option-list' and
+`option-flag' forms in the `:command' argument to
+`flycheck-define-checker'.
+
+\(fn SYMBOL INIT-VALUE CHECKER DOCSTRING &rest CUSTOM-ARGS)" nil t)
+
+(put 'flycheck-def-option-var 'lisp-indent-function '3)
+
+(put 'flycheck-def-option-var 'doc-string-elt '4)
+
+;;;***
+\f
+;;;### (autoloads nil nil ("flycheck-ert.el" "flycheck-pkg.el") (21701
+;;;;;; 7957 765828 0))
+
+;;;***
+\f
+(provide 'flycheck-autoloads)
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; coding: utf-8
+;; End:
+;;; flycheck-autoloads.el ends here
--- /dev/null
+;;; flycheck-ert.el --- Flycheck: ERT extensions -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2013-2015 Sebastian Wiesner <swiesnerNOSPAMlunaryorn.com>
+
+;; Author: Sebastian Wiesner <swiesnerNOSPAMlunaryorn.com>
+;; URL: https://github.com/flycheck/flycheck
+
+;; This file is not part of GNU Emacs.
+
+;; This program 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.
+
+;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Unit testing library for Flycheck, the modern on-the-fly syntax checking
+;; extension for GNU Emacs.
+
+;; Provide various utility functions and unit test helpers to test Flycheck and
+;; Flycheck extensions.
+
+;;; Code:
+
+(require 'flycheck)
+(require 'ert)
+(require 'macroexp) ; For macro utilities
+
+\f
+;;; Compatibility
+
+(eval-and-compile
+ ;; Provide `ert-skip' and friends for Emacs 24.3
+ (defconst flycheck-ert-ert-can-skip (fboundp 'ert-skip)
+ "Whether ERT supports test skipping.")
+
+ (unless flycheck-ert-ert-can-skip
+ ;; Fake skipping
+
+ (put 'flycheck-ert-skipped 'error-message "Test skipped")
+ (put 'flycheck-ert-skipped 'error-conditions '(error))
+
+ (defun ert-skip (data)
+ (signal 'flycheck-ert-skipped data))
+
+ (defmacro skip-unless (form)
+ `(unless (ignore-errors ,form)
+ (signal 'flycheck-ert-skipped ',form)))
+
+ (defun ert-test-skipped-p (result)
+ (and (ert-test-failed-p result)
+ (eq (car (ert-test-failed-condition result))
+ 'flycheck-ert-skipped)))))
+
+\f
+;;; Internal variables
+
+(defvar flycheck-ert--resource-directory nil
+ "The directory to get resources from in this test suite.")
+
+\f
+;;; Resource management macros
+
+(defmacro flycheck-ert-with-temp-buffer (&rest body)
+ "Eval BODY within a temporary buffer.
+
+Like `with-temp-buffer', but resets the modification state of the
+temporary buffer to make sure that it is properly killed even if
+it has a backing file and is modified."
+ (declare (indent 0))
+ `(with-temp-buffer
+ (unwind-protect
+ ,(macroexp-progn body)
+ ;; Reset modification state of the buffer, and unlink it from its backing
+ ;; file, if any, because Emacs refuses to kill modified buffers with
+ ;; backing files, even if they are temporary.
+ (set-buffer-modified-p nil)
+ (set-visited-file-name nil 'no-query))))
+
+(defmacro flycheck-ert-with-file-buffer (file-name &rest body)
+ "Create a buffer from FILE-NAME and eval BODY.
+
+BODY is evaluated with `current-buffer' being a buffer with the
+contents FILE-NAME."
+ (declare (indent 1))
+ `(let ((file-name ,file-name))
+ (unless (file-exists-p file-name)
+ (error "%s does not exist" file-name))
+ (flycheck-ert-with-temp-buffer
+ (insert-file-contents file-name 'visit)
+ (set-visited-file-name file-name 'no-query)
+ (cd (file-name-directory file-name))
+ ;; Mark the buffer as not modified, because we just loaded the file up to
+ ;; now.
+ (set-buffer-modified-p nil)
+ ,@body)))
+
+(defmacro flycheck-ert-with-help-buffer (&rest body)
+ "Execute BODY and kill the help buffer afterwards.
+
+Use this macro to test functions that create a Help buffer."
+ (declare (indent 0))
+ `(unwind-protect
+ ,(macroexp-progn body)
+ (when (buffer-live-p (get-buffer (help-buffer)))
+ (kill-buffer (help-buffer)))))
+
+(defmacro flycheck-ert-with-global-mode (&rest body)
+ "Execute BODY with Global Flycheck Mode enabled.
+
+After BODY, restore the old state of Global Flycheck Mode."
+ (declare (indent 0))
+ `(let ((old-state global-flycheck-mode))
+ (unwind-protect
+ (progn
+ (global-flycheck-mode 1)
+ ,@body)
+ (global-flycheck-mode old-state))))
+
+(defmacro flycheck-ert-with-env (env &rest body)
+ "Add ENV to `process-environment' in BODY.
+
+Execute BODY with a `process-environment' with contains all
+variables from ENV added.
+
+ENV is an alist, where each cons cell `(VAR . VALUE)' is a
+environment variable VAR to be added to `process-environment'
+with VALUE."
+ (declare (indent 1))
+ `(let ((process-environment (copy-sequence process-environment)))
+ (pcase-dolist (`(,var . ,value) ,env)
+ (setenv var value))
+ ,@body))
+
+\f
+;;; Test resources
+(defun flycheck-ert-resource-filename (resource-file)
+ "Determine the absolute file name of a RESOURCE-FILE.
+
+Relative file names are expanded against
+`flycheck-ert-resources-directory'."
+ (expand-file-name resource-file flycheck-ert--resource-directory))
+
+(defmacro flycheck-ert-with-resource-buffer (resource-file &rest body)
+ "Create a temp buffer from a RESOURCE-FILE and execute BODY.
+
+The absolute file name of RESOURCE-FILE is determined with
+`flycheck-ert-resource-filename'."
+ (declare (indent 1))
+ `(flycheck-ert-with-file-buffer
+ (flycheck-ert-resource-filename ,resource-file)
+ ,@body))
+
+(defun flycheck-ert-locate-config-file (filename _checker)
+ "Find a configuration FILENAME within unit tests.
+
+_CHECKER is ignored."
+ (let* ((directory (flycheck-ert-resource-filename "config-files"))
+ (filepath (expand-file-name filename directory)))
+ (when (file-exists-p filepath)
+ filepath)))
+
+\f
+;;; Test suite initialization
+
+(defun flycheck-ert-initialize (resource-dir)
+ "Initialize a test suite with RESOURCE-DIR.
+
+RESOURCE-DIR is the directory, `flycheck-ert-resource-filename'
+should use to lookup resource files."
+ (when flycheck-ert--resource-directory
+ (error "Test suite already initialized"))
+ (let ((tests (ert-select-tests t t)))
+ ;; Select all tests
+ (unless tests
+ (error "No tests defined. Call `flycheck-ert-initialize' after defining all tests!"))
+
+ (setq flycheck-ert--resource-directory resource-dir)
+
+ ;; Emacs 24.3 don't support skipped tests, so we add poor man's test
+ ;; skipping: We mark skipped tests as expected failures by adjusting the
+ ;; expected result of all test cases. Not particularly pretty, but works :)
+ (unless flycheck-ert-ert-can-skip
+ (dolist (test tests)
+ (let ((result (ert-test-expected-result-type test)))
+ (setf (ert-test-expected-result-type test)
+ `(or ,result (satisfies ert-test-skipped-p))))))))
+
+\f
+;;; Environment and version information
+
+(defconst flycheck-ert-user-error-type
+ (if (version< emacs-version "24.2")
+ 'error
+ 'user-error)
+ "The `user-error' type used by Flycheck.")
+
+(defun flycheck-ert-travis-ci-p ()
+ "Determine whether we are running on Travis CI."
+ (string= (getenv "TRAVIS") "true"))
+
+(defun flycheck-ert-check-gpg ()
+ "Check whether GPG is available."
+ (or (epg-check-configuration (epg-configuration)) t))
+
+(defun flycheck-ert-extract-version-command (re executable &rest args)
+ "Use RE to extract the version from EXECUTABLE with ARGS.
+
+Run EXECUTABLE with ARGS, catch the output, and apply RE to find
+the version number. Return the text captured by the first group
+in RE, or nil, if EXECUTABLE is missing, or if RE failed to
+match."
+ (-when-let (executable (executable-find executable))
+ (with-temp-buffer
+ (apply #'call-process executable nil t nil args)
+ (goto-char (point-min))
+ (when (re-search-forward re nil 'no-error)
+ (match-string 1)))))
+
+\f
+;;; Test case definitions
+(defmacro flycheck-ert-def-checker-test (checker language name
+ &rest keys-and-body)
+ "Define a test case for a syntax CHECKER for LANGUAGE.
+
+CHECKER is a symbol or a list of symbols denoting syntax checkers
+being tested by the test. The test case is skipped, if any of
+these checkers cannot be used. LANGUAGE is a symbol or a list of
+symbols denoting the programming languages supported by the
+syntax checkers. This is currently only used for tagging the
+test appropriately.
+
+NAME is a symbol denoting the local name of the test. The test
+itself is ultimately named
+`flycheck-define-checker/CHECKER/NAME'. If CHECKER is a list,
+the first checker in the list is used for naming the test.
+
+Optionally, the keyword arguments `:tags' and `:expected-result'
+may be given. They have the same meaning as in `ert-deftest.',
+and are added to the tags and result expectations set up by this
+macro.
+
+The remaining forms denote the body of the test case, including
+assertions and setup code."
+ (declare (indent 3))
+ (unless checker
+ (error "No syntax checkers specified."))
+ (unless language
+ (error "No languages specified"))
+ (let* ((checkers (if (symbolp checker) (list checker) checker))
+ (checker (car checkers))
+ (languages (if (symbolp language) (list language) language))
+ (language-tags (mapcar (lambda (l) (intern (format "language-%s" l)))
+ languages))
+ (checker-tags (mapcar (lambda (c) (intern (format "checker-%s" c)))
+ checkers))
+ (local-name (or name 'default))
+ (full-name (intern (format "flycheck-define-checker/%s/%s"
+ checker local-name)))
+ (keys-and-body (ert--parse-keys-and-body keys-and-body))
+ (body (cadr keys-and-body))
+ (keys (car keys-and-body))
+ (default-tags '(syntax-checker external-tool)))
+ `(ert-deftest ,full-name ()
+ :expected-result
+ (list 'or
+ '(satisfies flycheck-ert-syntax-check-timed-out-p)
+ ,(or (plist-get keys :expected-result) :passed))
+ :tags (append ',(append default-tags language-tags checker-tags)
+ ,(plist-get keys :tags))
+ ,@(mapcar (lambda (c) `(skip-unless
+ ;; Ignore non-command checkers
+ (or (not (get ',c 'flycheck-command))
+ (executable-find (flycheck-checker-executable ',c)))))
+ checkers)
+ ,@body)))
+
+\f
+;;; Test case results
+
+(defun flycheck-ert-syntax-check-timed-out-p (result)
+ "Whether RESULT denotes a timed-out test.
+
+RESULT is an ERT test result object."
+ (and (ert-test-failed-p result)
+ (eq (car (ert-test-failed-condition result))
+ 'flycheck-ert-syntax-check-timed-out)))
+
+\f
+;;; Syntax checking in tests
+
+(defvar-local flycheck-ert-syntax-checker-finished nil
+ "Non-nil if the current checker has finished.")
+
+(add-hook 'flycheck-after-syntax-check-hook
+ (lambda () (setq flycheck-ert-syntax-checker-finished t)))
+
+(defconst flycheck-ert-checker-wait-time 10
+ "Time to wait until a checker is finished in seconds.
+
+After this time has elapsed, the checker is considered to have
+failed, and the test aborted with failure.")
+
+(put 'flycheck-ert-syntax-check-timed-out 'error-message
+ "Syntax check timed out.")
+(put 'flycheck-ert-syntax-check-timed-out 'error-conditions '(error))
+
+(defun flycheck-ert-wait-for-syntax-checker ()
+ "Wait until the syntax check in the current buffer is finished."
+ (let ((starttime (float-time)))
+ (while (and (not flycheck-ert-syntax-checker-finished)
+ (< (- (float-time) starttime) flycheck-ert-checker-wait-time))
+ (sleep-for 1))
+ (unless (< (- (float-time) starttime) flycheck-ert-checker-wait-time)
+ (flycheck-stop)
+ (signal 'flycheck-ert-syntax-check-timed-out nil)))
+ (setq flycheck-ert-syntax-checker-finished nil))
+
+(defun flycheck-ert-buffer-sync ()
+ "Like `flycheck-buffer', but synchronously."
+ (setq flycheck-ert-syntax-checker-finished nil)
+ (should (not (flycheck-running-p)))
+ (flycheck-mode) ; This will only start a deferred check,
+ (flycheck-buffer) ; so we need an explicit manual check
+ ;; After starting the check, the checker should either be running now, or
+ ;; already be finished (if it was fast).
+ (should (or flycheck-current-syntax-check
+ flycheck-ert-syntax-checker-finished))
+ ;; Also there should be no deferred check pending anymore
+ (should-not (flycheck-deferred-check-p))
+ (flycheck-ert-wait-for-syntax-checker))
+
+(defun flycheck-ert-ensure-clear ()
+ "Clear the current buffer.
+
+Raise an assertion error if the buffer is not clear afterwards."
+ (flycheck-clear)
+ (should (not flycheck-current-errors))
+ (should (not (-any? (lambda (ov) (overlay-get ov 'flycheck-overlay))
+ (overlays-in (point-min) (point-max))))))
+
+\f
+;;; Test assertions
+
+(defun flycheck-ert-should-overlay (error)
+ "Test that ERROR has a proper overlay in the current buffer.
+
+ERROR is a Flycheck error object."
+ (let* ((overlay (-first (lambda (ov) (equal (overlay-get ov 'flycheck-error)
+ error))
+ (flycheck-overlays-in 0 (+ 1 (buffer-size)))))
+ (region (flycheck-error-region-for-mode error 'symbols))
+ (message (flycheck-error-message error))
+ (level (flycheck-error-level error))
+ (category (flycheck-error-level-overlay-category level))
+ (face (get category 'face))
+ (fringe-bitmap (flycheck-error-level-fringe-bitmap level))
+ (fringe-face (flycheck-error-level-fringe-face level))
+ (fringe-icon (list 'left-fringe fringe-bitmap fringe-face)))
+ (should overlay)
+ (should (overlay-get overlay 'flycheck-overlay))
+ (should (= (overlay-start overlay) (car region)))
+ (should (= (overlay-end overlay) (cdr region)))
+ (should (eq (overlay-get overlay 'face) face))
+ (should (equal (get-char-property 0 'display
+ (overlay-get overlay 'before-string))
+ fringe-icon))
+ (should (eq (overlay-get overlay 'category) category))
+ (should (equal (overlay-get overlay 'flycheck-error) error))
+ (should (string= (overlay-get overlay 'help-echo) message))))
+
+(defun flycheck-ert-should-errors (&rest errors)
+ "Test that the current buffers has ERRORS.
+
+ERRORS is a list of errors expected to be present in the current
+buffer. Each error is given as a list of arguments to
+`flycheck-error-new-at'.
+
+If ERRORS are omitted, test that there are no errors at all in
+the current buffer.
+
+With ERRORS, test that each error in ERRORS is present in the
+current buffer, and that the number of errors in the current
+buffer is equal to the number of given ERRORS. In other words,
+check that the buffer has all ERRORS, and no other errors."
+ (let ((expected (mapcar (apply-partially #'apply #'flycheck-error-new-at)
+ errors)))
+ (should (equal expected flycheck-current-errors))
+ (mapc #'flycheck-ert-should-overlay expected))
+ (should (= (length errors)
+ (length (flycheck-overlays-in (point-min) (point-max))))))
+
+(defun flycheck-ert-should-syntax-check (resource-file modes &rest errors)
+ "Test a syntax check in RESOURCE-FILE with MODES.
+
+RESOURCE-FILE is the file to check. MODES is a single major mode
+symbol or a list thereof, specifying the major modes to syntax
+check with. If more than one major mode is specified, the test
+is run for each mode separately, so if you give three major
+modes, the entire test will run three times. ERRORS is the list
+of expected errors, as in `flycheck-ert-should-errors'. If
+omitted, the syntax check must not emit any errors. The errors
+are cleared after each test.
+
+The syntax checker is selected via standard syntax checker
+selection. To test a specific checker, you need to set
+`flycheck-checker' or `flycheck-disabled-checkers' accordingly
+before using this predicate, depending on whether you want to use
+manual or automatic checker selection.
+
+During the syntax check, configuration files of syntax checkers
+are also searched in the `config-files' sub-directory of the
+resource directory."
+ (when (symbolp modes)
+ (setq modes (list modes)))
+ (dolist (mode modes)
+ (unless (fboundp mode)
+ (ert-skip (format "%S missing" mode)))
+ (flycheck-ert-with-resource-buffer resource-file
+ (funcall mode)
+ ;; Configure config file locating for unit tests
+ (dolist (fn '(flycheck-locate-config-file-absolute-path
+ flycheck-ert-locate-config-file))
+ (add-hook 'flycheck-locate-config-file-functions fn 'append 'local))
+ (let ((process-hook-called 0))
+ (add-hook 'flycheck-process-error-functions
+ (lambda (_err)
+ (setq process-hook-called (1+ process-hook-called))
+ nil)
+ nil :local)
+ (flycheck-ert-buffer-sync)
+ (apply #'flycheck-ert-should-errors errors)
+ (should (= process-hook-called (length errors))))
+ (flycheck-ert-ensure-clear))))
+
+(defun flycheck-ert-at-nth-error (n)
+ "Determine whether point is at the N'th Flycheck error.
+
+Return non-nil if the point is at the N'th Flycheck error in the
+current buffer. Otherwise return nil."
+ (let* ((error (nth (1- n) flycheck-current-errors))
+ (mode flycheck-highlighting-mode)
+ (region (flycheck-error-region-for-mode error mode)))
+ (and (member error (flycheck-overlay-errors-at (point)))
+ (= (point) (car region)))))
+
+(defun flycheck-ert-explain--at-nth-error (n)
+ (let ((errors (flycheck-overlay-errors-at (point))))
+ (if (null errors)
+ (format "Expected to be at error %s, but no error at point %s"
+ n (point))
+ (let ((pos (cl-position (car errors) flycheck-current-errors)))
+ (format "Expected to be at error %s, but point %s is at error %s"
+ n (point) (1+ pos))))))
+
+(put 'flycheck-ert-at-nth-error 'ert-explainer
+ 'flycheck-ert-explain--at-nth-error)
+
+(provide 'flycheck-ert)
+
+;;; flycheck-ert.el ends here
--- /dev/null
+(define-package "flycheck" "20150125.601" "Modern on-the-fly syntax checking for GNU Emacs"
+ '((dash "2.4.0")
+ (pkg-info "0.4")
+ (let-alist "1.0.1")
+ (cl-lib "0.3")
+ (emacs "24.1"))
+ :url "https://www.flycheck.org" :keywords
+ '("convenience" "languages" "tools"))
+;; Local Variables:
+;; no-byte-compile: t
+;; End:
--- /dev/null
+;;; flycheck.el --- Modern on-the-fly syntax checking for GNU Emacs -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2012-2015 Sebastian Wiesner <swiesnerNOSPAMlunaryorn.com>
+;; Copyright (C) 2013, 2014 Free Software Foundation, Inc.
+;;
+;; Author: Sebastian Wiesner <swiesnerNOSPAMlunaryorn.com>
+;; URL: https://www.flycheck.org
+;; Keywords: convenience languages tools
+;; Version: 0.23-cvs
+;; Package-Requires: ((dash "2.4.0") (pkg-info "0.4") (let-alist "1.0.1") (cl-lib "0.3") (emacs "24.1"))
+
+;; This file is not part of GNU Emacs.
+
+;; This program 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.
+
+;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Modern on-the-fly syntax checking for GNU Emacs.
+
+;; Provide `flycheck-mode' which enables on-the-fly syntax checking for a large
+;; number of different modes and languages (see `flycheck-checkers' for a
+;; complete list).
+;;
+;; Support for new modes and languages can be added by defining a new syntax
+;; checker (see `flycheck-define-checker').
+
+;;; Code:
+
+(eval-when-compile
+ (require 'let-alist) ; `let-alist'
+ (require 'cl-lib) ; `cl-defstruct'
+ (require 'compile) ; Compile Mode integration
+ (require 'package) ; Tell Emacs about package-user-dir
+ (require 'sh-script) ; `sh-shell' for sh checker predicates
+ (require 'jka-compr) ; For JKA workarounds in `flycheck-temp-file-system'
+ (require 'pcase) ; `pcase-dolist' (`pcase' itself is autoloaded)
+ )
+
+(require 'dash)
+
+(require 'subr-x nil 'no-error) ; Additional utilities, Emacs 24.4 and upwards
+(require 'tabulated-list) ; To list errors
+(require 'easymenu) ; Flycheck Mode menu definition
+(require 'rx) ; Regexp fanciness in `flycheck-define-checker'
+(require 'help-mode) ; `define-button-type'
+(require 'find-func) ; `find-function-regexp-alist'
+
+;; Tell the byte compiler about autoloaded functions from packages
+(declare-function pkg-info-version-info "pkg-info" (package))
+
+\f
+;;; Compatibility
+(eval-and-compile
+ ;; `defvar-local' Emacs 24.2 and below
+ (unless (fboundp 'defvar-local)
+ (defmacro defvar-local (var val &optional docstring)
+ "Define VAR as a buffer-local variable with default value VAL.
+Like `defvar' but additionally marks the variable as being automatically
+buffer-local wherever it is set."
+ (declare (debug defvar) (doc-string 3))
+ `(progn
+ (defvar ,var ,val ,docstring)
+ (make-variable-buffer-local ',var))))
+
+ (unless (fboundp 'setq-local)
+ ;; `setq-local' for Emacs 24.2 and below
+ (defmacro setq-local (var val)
+ "Set variable VAR to value VAL in current buffer."
+ `(set (make-local-variable ',var) ,val)))
+
+ (unless (fboundp 'user-error)
+ ;; `user-error' for Emacs 24.2 and below
+ (defalias 'user-error 'error)
+
+ (add-to-list 'debug-ignored-errors
+ (rx string-start "No more Flycheck errors" string-end))
+ (add-to-list 'debug-ignored-errors
+ (rx string-start "Flycheck mode disabled" string-end))
+ (add-to-list 'debug-ignored-errors
+ (rx string-start "Configured syntax checker "
+ symbol-start (one-or-more not-newline) symbol-end
+ " cannot be used" string-end)))
+
+ (unless (fboundp 'string-suffix-p)
+ ;; `string-suffix-p' for Emacs 24.3 and below
+ (defun string-suffix-p (suffix string &optional ignore-case)
+ "Return non-nil if SUFFIX is a suffix of STRING.
+If IGNORE-CASE is non-nil, the comparison is done without paying
+attention to case differences."
+ (let ((start-pos (- (length string) (length suffix))))
+ (and (>= start-pos 0)
+ (eq t (compare-strings suffix nil nil
+ string start-pos nil ignore-case))))))
+
+ (unless (featurep 'subr-x)
+ ;; `subr-x' function for Emacs 24.3 and below
+ (defsubst string-join (strings &optional separator)
+ "Join all STRINGS using SEPARATOR."
+ (mapconcat 'identity strings separator))
+
+ (defsubst string-trim-left (string)
+ "Remove leading whitespace from STRING."
+ (if (string-match "\\`[ \t\n\r]+" string)
+ (replace-match "" t t string)
+ string))
+
+ (defsubst string-trim-right (string)
+ "Remove trailing whitespace from STRING."
+ (if (string-match "[ \t\n\r]+\\'" string)
+ (replace-match "" t t string)
+ string))
+
+ (defsubst string-trim (string)
+ "Remove leading and trailing whitespace from STRING."
+ (string-trim-left (string-trim-right string)))
+
+ (defsubst string-empty-p (string)
+ "Check whether STRING is empty."
+ (string= string ""))))
+
+(when (and (not (get 'exclamation-mark 'fringe))
+ (fboundp 'define-fringe-bitmap))
+ ;; Provide `exclamation-mark' bitmap for Emacs 24.2 and below. We also check,
+ ;; whether `define-fringe-bitmap' is defined, because this function is not
+ ;; available if Emacs is built without GUI support. See
+ ;; https://github.com/flycheck/flycheck/issues/57
+ (define-fringe-bitmap 'exclamation-mark
+ [24 60 60 24 24 0 0 24 24] nil nil 'center))
+
+\f
+;;; Customization
+(defgroup flycheck nil
+ "Modern on-the-fly syntax checking for GNU Emacs."
+ :prefix "flycheck-"
+ :group 'tools
+ :link '(url-link :tag "Online manual" "http://flycheck.readthedocs.org")
+ :link '(url-link :tag "Github" "https://github.com/flycheck/flycheck")
+ :link '(custom-manual "(flycheck)Top")
+ :link '(info-link "(flycheck)Usage"))
+
+(defgroup flycheck-config-files nil
+ "Configuration files for on-the-fly syntax checkers."
+ :prefix "flycheck-"
+ :group 'flycheck
+ :link '(custom-manual "(flycheck)Syntax checker configuration files"))
+
+(defgroup flycheck-options nil
+ "Options for on-the-fly syntax checkers."
+ :prefix "flycheck-"
+ :group 'flycheck
+ :link '(custom-manual "(flycheck)Syntax checker options"))
+
+(defgroup flycheck-executables nil
+ "Executables of syntax checkers."
+ :prefix "flycheck-"
+ :group 'flycheck
+ :link '(custom-manual "(flycheck)Syntax checker executables"))
+
+(defgroup flycheck-faces nil
+ "Faces used by on-the-fly syntax checking."
+ :prefix "flycheck-"
+ :group 'flycheck
+ :link '(info-link "(flycheck)Error reporting"))
+
+(defcustom flycheck-checkers
+ '(ada-gnat
+ asciidoc
+ c/c++-clang
+ c/c++-gcc
+ c/c++-cppcheck
+ cfengine
+ chef-foodcritic
+ coffee
+ coffee-coffeelint
+ coq
+ css-csslint
+ d-dmd
+ elixir
+ emacs-lisp
+ emacs-lisp-checkdoc
+ erlang
+ eruby-erubis
+ fortran-gfortran
+ go-gofmt
+ go-golint
+ go-vet
+ go-build
+ go-test
+ go-errcheck
+ haml
+ handlebars
+ haskell-ghc
+ haskell-hlint
+ html-tidy
+ javascript-jshint
+ javascript-eslint
+ javascript-gjslint
+ json-jsonlint
+ less
+ lua
+ perl
+ perl-perlcritic
+ php
+ php-phpmd
+ php-phpcs
+ puppet-parser
+ puppet-lint
+ python-flake8
+ python-pylint
+ python-pycompile
+ r-lintr
+ racket
+ rpm-rpmlint
+ rst
+ rst-sphinx
+ ruby-rubocop
+ ruby-rubylint
+ ruby
+ ruby-jruby
+ rust
+ sass
+ scala
+ scala-scalastyle
+ scss
+ sh-bash
+ sh-posix-dash
+ sh-posix-bash
+ sh-zsh
+ sh-shellcheck
+ slim
+ tex-chktex
+ tex-lacheck
+ texinfo
+ verilog-verilator
+ xml-xmlstarlet
+ xml-xmllint
+ yaml-jsyaml
+ yaml-ruby)
+ "Syntax checkers available for automatic selection.
+
+A list of Flycheck syntax checkers to choose from when syntax
+checking a buffer. Flycheck will automatically select a suitable
+syntax checker from this list, unless `flycheck-checker' is set,
+either directly or with `flycheck-select-checker'.
+
+You should not need to change this variable normally. In order
+to disable syntax checkers, please use
+`flycheck-disabled-checkers'. This variable is intended for 3rd
+party extensions to tell Flycheck about new syntax checkers.
+
+Syntax checkers in this list must be defined with
+`flycheck-define-checker'."
+ :group 'flycheck
+ :type '(repeat (symbol :tag "Checker"))
+ :risky t)
+
+(defcustom flycheck-disabled-checkers nil
+ "Syntax checkers excluded from automatic selection.
+
+A list of Flycheck syntax checkers to exclude from automatic
+selection. Flycheck will never automatically select a syntax
+checker in this list, regardless of the value of
+`flycheck-checkers'.
+
+However, syntax checkers in this list are still available for
+manual selection with `flycheck-select-checker'.
+
+Use this variable to disable syntax checkers, instead of removing
+the syntax checkers from `flycheck-checkers'. You may also use
+this option as a file or directory local variable to disable
+specific checkers in individual files and directories
+respectively."
+ :group 'flycheck
+ :type '(repeat (symbol :tag "Checker"))
+ :package-version '(flycheck . "0.16")
+ :safe #'flycheck-symbol-list-p)
+(make-variable-buffer-local 'flycheck-disabled-checkers)
+
+(defvar-local flycheck-checker nil
+ "Syntax checker to use for the current buffer.
+
+If unset or nil, automatically select a suitable syntax checker
+from `flycheck-checkers' on every syntax check.
+
+If set to a syntax checker only use this syntax checker and never
+select one from `flycheck-checkers' automatically. The syntax
+checker is used regardless of whether it is contained in
+`flycheck-checkers' or `flycheck-disabled-checkers'. If the
+syntax checker is unusable in the current buffer an error is
+signaled.
+
+A syntax checker assigned to this variable must be defined with
+`flycheck-define-checker'.
+
+Use the command `flycheck-select-checker' to select a syntax
+checker for the current buffer, or set this variable as file
+local variable to always use a specific syntax checker for a
+file. See Info Node `(emacs)Specifying File Variables' for more
+information about file variables.")
+(put 'flycheck-checker 'safe-local-variable 'flycheck-registered-checker-p)
+
+(defcustom flycheck-locate-config-file-functions
+ '(flycheck-locate-config-file-absolute-path
+ flycheck-locate-config-file-ancestor-directories
+ flycheck-locate-config-file-home)
+ "Functions to locate syntax checker configuration files.
+
+Each function in this hook must accept two arguments: The value
+of the configuration file variable, and the syntax checker
+symbol. It must return either a string with an absolute path to
+the configuration file, or nil, if it cannot locate the
+configuration file.
+
+The functions in this hook are called in order of appearance, until a
+function returns non-nil. The configuration file returned by that
+function is then given to the syntax checker if it exists.
+
+This variable is an abnormal hook. See Info
+node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t)
+
+(defcustom flycheck-checker-error-threshold 400
+ "Maximum errors allowed per syntax checker.
+
+The value of this variable is either an integer denoting the
+maximum number of errors per syntax checker and buffer, or nil to
+not limit the errors reported from a syntax checker.
+
+If this variable is a number and a syntax checker reports more
+errors than the value of this variable, its errors are not
+discarded, and not highlighted in the buffer or available in the
+error list. The affected syntax checker is also disabled for
+future syntax checks of the buffer."
+ :group 'flycheck
+ :type '(choice (const :tag "Do not limit reported errors" nil)
+ (integer :tag "Maximum number of errors"))
+ :risky t
+ :package-version '(flycheck . "0.22"))
+
+(defcustom flycheck-process-error-functions '(flycheck-add-overlay)
+ "Functions to process errors.
+
+Each function in this hook must accept a single argument: A
+Flycheck error to process.
+
+All functions in this hook are called in order of appearance,
+until a function returns non-nil. Thus, a function in this hook
+may return nil, to allow for further processing of the error, or
+any non-nil value, to indicate that the error was fully processed
+and inhibit any further processing.
+
+The functions are called for each newly parsed error immediately
+after the corresponding syntax checker finished. At this stage,
+the overlays from the previous syntax checks are still present,
+and there may be further syntax checkers in the chain.
+
+This variable is an abnormal hook. See Info
+node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :package-version '(flycheck . "0.13")
+ :risky t)
+
+(defcustom flycheck-display-errors-delay 0.9
+ "Delay in seconds before displaying errors at point.
+
+Use floating point numbers to express fractions of seconds."
+ :group 'flycheck
+ :type 'number
+ :package-version '(flycheck . "0.15")
+ :safe #'numberp)
+
+(defcustom flycheck-display-errors-function #'flycheck-display-error-messages
+ "Function to display error messages.
+
+If set to a function, call the function with the list of errors
+to display as single argument. Each error is an instance of the
+`flycheck-error' struct.
+
+If set to nil, do not display errors at all."
+ :group 'flycheck
+ :type '(choice (const :tag "Display error messages"
+ flycheck-display-error-messages)
+ (const :tag "Display error messages only if no error list"
+ flycheck-display-error-messages-unless-error-list)
+ (function :tag "Error display function"))
+ :package-version '(flycheck . "0.13")
+ :risky t)
+
+(defcustom flycheck-indication-mode 'left-fringe
+ "The indication mode for Flycheck errors and warnings.
+
+This variable controls how Flycheck indicates errors in buffers.
+May either be `left-fringe', `right-fringe', or nil.
+
+If set to `left-fringe' or `right-fringe', indicate errors and
+warnings via icons in the left and right fringe respectively.
+
+If set to nil, do not indicate errors and warnings, but just
+highlight them according to `flycheck-highlighting-mode'."
+ :group 'flycheck
+ :type '(choice (const :tag "Indicate in the left fringe" left-fringe)
+ (const :tag "Indicate in the right fringe" right-fringe)
+ (const :tag "Do not indicate" nil))
+ :safe #'symbolp)
+
+(defcustom flycheck-highlighting-mode 'symbols
+ "The highlighting mode for Flycheck errors and warnings.
+
+The highlighting mode controls how Flycheck highlights errors in
+buffers. The following modes are known:
+
+`columns'
+ Highlight the error column. If the error does not have a column,
+ highlight the whole line.
+
+`symbols'
+ Highlight the symbol at the error column, if there is any,
+ otherwise behave like `columns'. This is the default.
+
+`sexps'
+ Highlight the expression at the error column, if there is
+ any, otherwise behave like `columns'. Note that this mode
+ can be *very* slow in some major modes.
+
+`lines'
+ Highlight the whole line.
+
+nil
+ Do not highlight errors at all. However, errors will still
+ be reported in the mode line and in error message popups,
+ and indicated according to `flycheck-indication-mode'."
+ :group 'flycheck
+ :type '(choice (const :tag "Highlight columns only" columns)
+ (const :tag "Highlight symbols" symbols)
+ (const :tag "Highlight expressions" sexps)
+ (const :tag "Highlight whole lines" lines)
+ (const :tag "Do not highlight errors" nil))
+ :package-version '(flycheck . "0.14")
+ :safe #'symbolp)
+
+(defcustom flycheck-check-syntax-automatically '(save
+ idle-change
+ new-line
+ mode-enabled)
+ "When Flycheck should check syntax automatically.
+
+This variable is a list of events that may trigger syntax checks.
+The following events are known:
+
+`save'
+ Check syntax immediately after the buffer was saved.
+
+`idle-change'
+ Check syntax a short time (see `flycheck-idle-change-delay')
+ after the last change to the buffer.
+
+`new-line'
+ Check syntax immediately after a new line was inserted into
+ the buffer.
+
+`mode-enabled'
+ Check syntax immediately when `flycheck-mode' is enabled.
+
+Flycheck performs a syntax checks only on events, which are
+contained in this list. For instance, if the value of this
+variable is `(mode-enabled save)', Flycheck will only check if
+the mode is enabled or the buffer was saved, but never after
+changes to the buffer contents.
+
+If nil, never check syntax automatically. In this case, use
+`flycheck-buffer' to start a syntax check manually."
+ :group 'flycheck
+ :type '(set (const :tag "After the buffer was saved" save)
+ (const :tag "After the buffer was changed and idle" idle-change)
+ (const :tag "After a new line was inserted" new-line)
+ (const :tag "After `flycheck-mode' was enabled" mode-enabled))
+ :package-version '(flycheck . "0.12")
+ :safe #'symbolp)
+
+(defcustom flycheck-idle-change-delay 0.5
+ "How many seconds to wait before checking syntax automatically.
+
+After the buffer was changed, Flycheck will wait as many seconds
+as the value of this variable before starting a syntax check. If
+the buffer is modified during this time, Flycheck will wait
+again.
+
+This variable has no effect, if `idle-change' is not contained in
+`flycheck-check-syntax-automatically'."
+ :group 'flycheck
+ :type 'number
+ :package-version '(flycheck . "0.13")
+ :safe #'numberp)
+
+(defcustom flycheck-standard-error-navigation t
+ "Whether to support error navigation with `next-error'.
+
+If non-nil, enable navigation of Flycheck errors with
+`next-error', `previous-error' and `first-error'. Otherwise,
+these functions just navigate errors from compilation modes.
+
+Flycheck error navigation with `flycheck-next-error',
+`flycheck-previous-error' and `flycheck-first-error' is always
+enabled, regardless of the value of this variable.
+
+Note that this setting only takes effect when `flycheck-mode' is
+enabled. Changing it will not affect buffers which already have
+`flycheck-mode' enabled."
+ :group 'flycheck
+ :type 'boolean
+ :package-version '(flycheck . "0.15")
+ :safe #'booleanp)
+
+(defcustom flycheck-navigation-minimum-level nil
+ "The minimum level of errors to navigate.
+
+If set to an error level, only navigate errors whose error level
+is at least as severe as this one. If nil, navigate all errors."
+ :group 'flycheck
+ :type '(radio (const :tag "All locations" nil)
+ (const :tag "Informational messages" info)
+ (const :tag "Warnings" warning)
+ (const :tag "Errors" error)
+ (symbol :tag "Custom error level"))
+ :safe #'flycheck-error-level-p
+ :package-version '(flycheck . "0.21"))
+
+(defcustom flycheck-completion-system nil
+ "The completion system to use.
+
+`ido'
+ Use IDO.
+
+ IDO is a built-in alternative completion system, without
+ good flex matching and a powerful UI. You may want to
+ install flx-ido (see URL `https://github.com/lewang/flx') to
+ improve the flex matching in IDO.
+
+`grizzl'
+ Use Grizzl.
+
+ Grizzl is an alternative completion system with powerful
+ flex matching, but a very limited UI. See URL
+ `https://github.com/d11wtq/grizzl'.
+
+nil
+ Use the standard unfancy `completing-read'.
+
+ `completing-read' has a very simple and primitive UI, and
+ does not offer flex matching. This is the default setting,
+ though, to match Emacs' defaults. With this system, you may
+ want enable option `icomplete-mode' to improve the display
+ of completion candidates at least."
+ :group 'flycheck
+ :type '(choice (const :tag "IDO" ido)
+ (const :tag "Grizzl" grizzl)
+ (const :tag "Completing read" nil))
+ :package-version '(flycheck . "0.17"))
+
+(defcustom flycheck-temp-prefix "flycheck"
+ "Prefix for temporary files created by Flycheck."
+ :group 'flycheck
+ :type 'string
+ :package-version '(flycheck . "0.19")
+ :risky t)
+
+(defcustom flycheck-mode-hook nil
+ "Hooks to run after `flycheck-mode'."
+ :group 'flycheck
+ :type 'hook
+ :risky t)
+
+(defcustom flycheck-after-syntax-check-hook nil
+ "Functions to run after each syntax check.
+
+This hook is run after a syntax check was finished.
+
+At this point, *all* chained checkers were run, and all errors
+were parsed, highlighted and reported. The variable
+`flycheck-current-errors' contains all errors from all syntax
+checkers run during the syntax check, so you can apply any error
+analysis functions.
+
+Note that this hook does *not* run after each individual syntax
+checker in the syntax checker chain, but only after the *last
+checker*.
+
+This variable is a normal hook. See Info node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t)
+
+(defcustom flycheck-before-syntax-check-hook nil
+ "Functions to run before each syntax check.
+
+This hook is run right before a syntax check starts.
+
+Error information from the previous syntax check is *not*
+cleared before this hook runs.
+
+Note that this hook does *not* run before each individual syntax
+checker in the syntax checker chain, but only before the *first
+checker*.
+
+This variable is a normal hook. See Info node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t)
+
+(defcustom flycheck-syntax-check-failed-hook nil
+ "Functions to run if a syntax check failed.
+
+This hook is run whenever an error occurs during Flycheck's
+internal processing. No information about the error is given to
+this hook.
+
+You should use this hook to conduct additional cleanup actions
+when Flycheck failed.
+
+This variable is a normal hook. See Info node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t)
+
+(defcustom flycheck-status-changed-functions nil
+ "Functions to run if the Flycheck status changed.
+
+This hook is run whenever the status of Flycheck changes. Each
+hook function takes the status symbol as sinlge argument, as
+given to `flycheck-report-status', which see.
+
+This variable is a abnormal hook. See Info
+node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t
+ :package-version '(flycheck . "0.20"))
+
+(defcustom flycheck-error-list-after-refresh-hook nil
+ "Functions to run after the error list was refreshed.
+
+This hook is run whenever the error list is refreshed.
+
+This variable is a normal hook. See Info node `(elisp)Hooks'."
+ :group 'flycheck
+ :type 'hook
+ :risky t
+ :package-version '(flycheck . "0.21"))
+
+(defface flycheck-error
+ '((((supports :underline (:style wave)))
+ :underline (:style wave :color "Red1"))
+ (t
+ :underline t :inherit error))
+ "Flycheck face for errors."
+ :package-version '(flycheck . "0.13")
+ :group 'flycheck-faces)
+
+(defface flycheck-warning
+ '((((supports :underline (:style wave)))
+ :underline (:style wave :color "DarkOrange"))
+ (t
+ :underline t :inherit warning))
+ "Flycheck face for warnings."
+ :package-version '(flycheck . "0.13")
+ :group 'flycheck-faces)
+
+(defface flycheck-info
+ '((((supports :underline (:style wave)))
+ :underline (:style wave :color "ForestGreen"))
+ (t
+ :underline t :inherit success))
+ "Flycheck face for informational messages."
+ :package-version '(flycheck . "0.15")
+ :group 'flycheck-faces)
+
+(defface flycheck-fringe-error
+ '((t :inherit error))
+ "Flycheck face for fringe error indicators."
+ :package-version '(flycheck . "0.13")
+ :group 'flycheck-faces)
+
+(defface flycheck-fringe-warning
+ '((t :inherit warning))
+ "Flycheck face for fringe warning indicators."
+ :package-version '(flycheck . "0.13")
+ :group 'flycheck-faces)
+
+(defface flycheck-fringe-info
+ ;; Semantically `success' is probably not the right face, but it looks nice as
+ ;; a base face
+ '((t :inherit success))
+ "Flycheck face for fringe info indicators."
+ :package-version '(flycheck . "0.15")
+ :group 'flycheck-faces)
+
+(defface flycheck-error-list-error
+ '((t :inherit error))
+ "Flycheck face for error messages in the error list."
+ :package-version '(flycheck . "0.16")
+ :group 'flycheck-faces)
+
+(defface flycheck-error-list-warning
+ '((t :inherit warning))
+ "Flycheck face for warning messages in the error list."
+ :package-version '(flycheck . "0.16")
+ :group 'flycheck-faces)
+
+(defface flycheck-error-list-info
+ '((t :inherit success))
+ "Flycheck face for info messages in the error list."
+ :package-version '(flycheck . "0.16")
+ :group 'flycheck-faces)
+
+;; The base faces for the following two faces are inspired by Compilation Mode
+(defface flycheck-error-list-line-number
+ '((t :inherit font-lock-constant-face))
+ "Face for line numbers in the error list."
+ :group 'flycheck-faces
+ :package-version '(flycheck . "0.16"))
+
+(defface flycheck-error-list-column-number
+ '((t :inherit font-lock-constant-face))
+ "Face for line numbers in the error list."
+ :group 'flycheck-faces
+ :package-version '(flycheck . "0.16"))
+
+(defface flycheck-error-list-id
+ '((t :inherit font-lock-type-face))
+ "Face for the error ID in the error list."
+ :group 'flycheck-faces
+ :package-version '(flycheck . "0.22"))
+
+(defface flycheck-error-list-checker-name
+ '((t :inherit font-lock-function-name-face))
+ "Face for the syntax checker name in the error list."
+ :group 'flycheck-faces
+ :package-version '(flycheck . "0.21"))
+
+(defface flycheck-error-list-highlight
+ '((t :inherit highlight))
+ "Flycheck face to highlight errors in the error list."
+ :package-version '(flycheck . "0.15")
+ :group 'flycheck-faces)
+
+(defvar flycheck-command-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "c" #'flycheck-buffer)
+ (define-key map "C" #'flycheck-clear)
+ (define-key map (kbd "C-c") #'flycheck-compile)
+ (define-key map "n" #'flycheck-next-error)
+ (define-key map "p" #'flycheck-previous-error)
+ (define-key map "l" #'flycheck-list-errors)
+ (define-key map (kbd "C-w") #'flycheck-copy-errors-as-kill)
+ (define-key map "s" #'flycheck-select-checker)
+ (define-key map "e" #'flycheck-set-checker-executable)
+ (define-key map "?" #'flycheck-describe-checker)
+ (define-key map "i" #'flycheck-info)
+ (define-key map "V" #'flycheck-version)
+ (define-key map "v" #'flycheck-verify-setup)
+ (define-key map "x" #'flycheck-disable-checker)
+ map)
+ "Keymap of Flycheck interactive commands.")
+
+(defcustom flycheck-keymap-prefix (kbd "C-c !")
+ "Prefix for key bindings of Flycheck.
+
+Changing this variable outside Customize does not have any
+effect. To change the keymap prefix from Lisp, you need to
+explicitly re-define the prefix key:
+
+ (define-key flycheck-mode-map flycheck-keymap-prefix nil)
+ (setq flycheck-keymap-prefix (kbd \"C-c f\"))
+ (define-key flycheck-mode-map flycheck-keymap-prefix
+ flycheck-command-map)
+
+Please note that Flycheck's manual documents the default
+keybindings. Changing this variable is at your own risk."
+ :group 'flycheck
+ :package-version '(flycheck . "0.19")
+ :type 'string
+ :risky t
+ :set
+ (lambda (variable key)
+ (when (and (boundp variable) (boundp 'flycheck-mode-map))
+ (define-key flycheck-mode-map (symbol-value variable) nil)
+ (define-key flycheck-mode-map key flycheck-command-map))
+ (set-default variable key)))
+
+(defcustom flycheck-mode-line '(:eval (flycheck-mode-line-status-text))
+ "Mode line lighter for Flycheck.
+
+The value of this variable is a mode line template as in
+`mode-line-format'. See Info Node `(elisp)Mode Line Format' for
+more information. Note that it should contain a _single_ mode
+line construct only.
+
+Customize this variable to change how Flycheck reports its status
+in the mode line. You may use `flycheck-mode-line-status-text'
+to obtain a human-readable status text, including an
+error/warning count.
+
+You may also assemble your own status text. The current status
+of Flycheck is available in `flycheck-last-status-change'. The
+errors in the current buffer are stored in
+`flycheck-current-errors', and the function
+`flycheck-count-errors' may be used to obtain the number of
+errors grouped by error level.
+
+Set this variable to nil to disable the mode line completely."
+ :group 'flycheck
+ :type 'sexp
+ :risky t
+ :package-version '(flycheck . "0.20"))
+
+(defcustom flycheck-error-list-mode-line
+ `(,(propertized-buffer-identification "%12b")
+ " for buffer "
+ (:eval (flycheck-error-list-propertized-source-name)))
+ "Mode line construct for Flycheck error list.
+
+The value of this variable is a mode line template as in
+`mode-line-format', to be used as
+`mode-line-buffer-identification' in `flycheck-error-list-mode'.
+See Info Node `(elisp)Mode Line Format' for more information.
+
+Customize this variable to change how the error list appears in
+the mode line. The default shows the name of the buffer and the
+name of the source buffer, i.e. the buffer whose errors are
+currently listed."
+ :group 'flycheck
+ :type 'sexp
+ :risky t
+ :package-version '(flycheck . "0.20"))
+
+(defcustom flycheck-global-modes t
+ "Modes for which `flycheck-mode' is turned on by `global-flycheck-mode'.
+
+If t, Flycheck Mode is turned on for all major modes. If a list,
+Flycheck Mode is turned on for all `major-mode' symbols in that
+list. If the `car' of the list is `not', Flycheck Mode is turned
+on for all `major-mode' symbols _not_ in that list. If nil,
+Flycheck Mode is never turned on by `global-flycheck-mode'.
+
+Note that Flycheck is never turned on for modes whose
+`mode-class' property is `special' (see Info node `(elisp)Major
+Mode Conventions'), regardless of the value of this option."
+ :group 'flycheck
+ :type '(choice (const :tag "none" nil)
+ (const :tag "all" t)
+ (set :menu-tag "mode specific" :tag "modes"
+ :value (not)
+ (const :tag "Except" not)
+ (repeat :inline t (symbol :tag "mode"))))
+ :risky t
+ :package-version '(flycheck . "0.23"))
+
+\f
+;;; Global Flycheck menu
+(defvar flycheck-mode-menu-map
+ (easy-menu-create-menu
+ "Syntax Checking"
+ '(["Enable on-the-fly syntax checking" flycheck-mode
+ :style toggle :selected flycheck-mode
+ ;; Don't let users toggle the mode if there is no syntax checker for this
+ ;; buffer
+ :enable (or flycheck-mode (flycheck-get-checker-for-buffer))]
+ ["Check current buffer" flycheck-buffer flycheck-mode]
+ ["Clear errors in buffer" flycheck-clear t]
+ "---"
+ ["Go to next error" flycheck-next-error flycheck-mode]
+ ["Go to previous error" flycheck-previous-error flycheck-mode]
+ ["Show all errors" flycheck-list-errors flycheck-mode]
+ "---"
+ ["Copy messages at point" flycheck-copy-errors-as-kill
+ (flycheck-overlays-at (point))]
+ "---"
+ ["Select syntax checker" flycheck-select-checker flycheck-mode]
+ ["Disable syntax checker" flycheck-disable-checker flycheck-mode]
+ ["Set executable of syntax checker" flycheck-set-checker-executable
+ flycheck-mode]
+ "---"
+ ["Describe syntax checker" flycheck-describe-checker t]
+ ["Show Flycheck version" flycheck-version t]
+ ["Read the Flycheck manual" flycheck-info t]))
+ "Menu of `flycheck-mode'.")
+
+(easy-menu-add-item nil '("Tools") flycheck-mode-menu-map "Spell Checking")
+
+\f
+;;; Version information, manual and loading of Flycheck
+(defun flycheck-version (&optional show-version)
+ "Get the Flycheck version as string.
+
+If called interactively or if SHOW-VERSION is non-nil, show the
+version in the echo area and the messages buffer.
+
+The returned string includes both, the version from package.el
+and the library version, if both a present and different.
+
+If the version number could not be determined, signal an error,
+if called interactively, or if SHOW-VERSION is non-nil, otherwise
+just return nil."
+ (interactive (list t))
+ (let ((version (pkg-info-version-info 'flycheck)))
+ (when show-version
+ (message "Flycheck version: %s" version))
+ version))
+
+(defun flycheck-unload-function ()
+ "Unload function for Flycheck."
+ (global-flycheck-mode -1)
+ (easy-menu-remove-item nil '("Tools") (cadr flycheck-mode-menu-map))
+ (remove-hook 'kill-emacs-hook #'flycheck-global-teardown)
+ (setq find-function-regexp-alist
+ (assq-delete-all 'flycheck-checker find-function-regexp-alist)))
+
+;;;###autoload
+(defun flycheck-info ()
+ "Open the Flycheck manual."
+ (interactive)
+ (info "flycheck"))
+
+\f
+;;; Utility functions
+(defun flycheck-sexp-to-string (sexp)
+ "Convert SEXP to a string.
+
+Like `prin1-to-string' but ensure that the returned string
+is loadable."
+ (let ((print-quoted t)
+ (print-length nil)
+ (print-level nil))
+ (prin1-to-string sexp)))
+
+(defun flycheck-string-to-number-safe (string)
+ "Safely convert STRING to a number.
+
+If STRING is of string type and a numeric string, convert STRING
+to a number and return it. Otherwise return nil."
+ (let ((number-re (rx string-start (one-or-more (any digit)) string-end)))
+ (when (and (stringp string) (string-match-p number-re string))
+ (string-to-number string))))
+
+(defun flycheck-string-list-p (obj)
+ "Determine if OBJ is a list of strings."
+ (and (listp obj) (-all? #'stringp obj)))
+
+(defun flycheck-symbol-list-p (obj)
+ "Determine if OBJ is a list of symbols."
+ (and (listp obj) (-all? #'symbolp obj)))
+
+(defun flycheck-same-files-p (file-a file-b)
+ "Determine whether FILE-A and FILE-B refer to the same file."
+ (string= (directory-file-name (expand-file-name file-a))
+ (directory-file-name (expand-file-name file-b))))
+
+(defvar-local flycheck-temporaries nil
+ "Temporary files and directories created by Flycheck.")
+
+(defun flycheck-temp-dir-system ()
+ "Create a unique temporary directory.
+
+Use `flycheck-temp-prefix' as prefix, and add the directory to
+`flycheck-temporaries'.
+
+Return the path of the directory"
+ (let* ((tempdir (make-temp-file flycheck-temp-prefix 'directory)))
+ (push tempdir flycheck-temporaries)
+ tempdir))
+
+(defun flycheck-temp-file-system (filename)
+ "Create a temporary file named after FILENAME.
+
+If FILENAME is non-nil, this function creates a temporary
+directory with `flycheck-temp-dir-system', and creates a file
+with the same name as FILENAME in this directory.
+
+Otherwise this function creates a temporary file with
+`flycheck-temp-prefix' and a random suffix. The path of the file
+is added to `flycheck-temporaries'.
+
+Add the path of the file to `flycheck-temporaries'.
+
+Return the path of the file."
+ (let (tempfile)
+ (if filename
+ (let ((directory (flycheck-temp-dir-system)))
+ (setq tempfile (expand-file-name (file-name-nondirectory filename)
+ directory)))
+ (setq tempfile (make-temp-file flycheck-temp-prefix)))
+ (push tempfile flycheck-temporaries)
+ tempfile))
+
+(defun flycheck-temp-file-inplace (filename)
+ "Create an in-place copy of FILENAME.
+
+Prefix the file with `flycheck-temp-prefix' and add the path of
+the file to `flycheck-temporaries'.
+
+If FILENAME is nil, fall back to `flycheck-temp-file-system'.
+
+Return the path of the file."
+ (if filename
+ (let* ((tempname (format "%s_%s"
+ flycheck-temp-prefix
+ (file-name-nondirectory filename)))
+ (tempfile (expand-file-name tempname
+ (file-name-directory filename))))
+ (push tempfile flycheck-temporaries)
+ tempfile)
+ (flycheck-temp-file-system filename)))
+
+(defun flycheck-save-buffer-to-file (file-name)
+ "Save the contents of the current buffer to FILE-NAME."
+ (make-directory (file-name-directory file-name) t)
+ (let ((jka-compr-inhibit t))
+ (write-region nil nil file-name nil 0)))
+
+(defun flycheck-save-buffer-to-temp (temp-file-fn)
+ "Save buffer to temp file returned by TEMP-FILE-FN.
+
+Return the name of the temporary file."
+ (let ((filename (funcall temp-file-fn (buffer-file-name))))
+ ;; Do not flush short-lived temporary files onto disk
+ (let ((write-region-inhibit-fsync t))
+ (flycheck-save-buffer-to-file filename))
+ filename))
+
+(defun flycheck-prepend-with-option (option items &optional prepend-fn)
+ "Prepend OPTION to each item in ITEMS, using PREPEND-FN.
+
+Prepend OPTION to each item in ITEMS.
+
+ITEMS is a list of strings to pass to the syntax checker. OPTION
+is the option, as string. PREPEND-FN is a function called to
+prepend OPTION to each item in ITEMS. It receives the option and
+a single item from ITEMS as argument, and must return a string or
+a list of strings with OPTION prepended to the item. If
+PREPEND-FN is nil or omitted, use `list'.
+
+Return a list of strings where OPTION is prepended to each item
+in ITEMS using PREPEND-FN. If PREPEND-FN returns a list, it is
+spliced into the resulting list."
+ (unless (stringp option)
+ (error "Option %S is not a string" option))
+ (unless prepend-fn
+ (setq prepend-fn #'list))
+ (let ((prepend
+ (lambda (item)
+ (let ((result (funcall prepend-fn option item)))
+ (cond
+ ((and (listp result) (-all? #'stringp result)) result)
+ ((stringp result) (list result))
+ (t (error "Invalid result type for option: %S" result)))))))
+ (apply #'append (mapcar prepend items))))
+
+(defun flycheck-find-in-buffer (pattern)
+ "Find PATTERN in the current buffer.
+
+Return the result of the first matching group of PATTERN, or nil,
+if PATTERN did not match."
+ (save-restriction
+ (widen)
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward pattern nil 'no-error)
+ (match-string-no-properties 1)))))
+
+(defun flycheck-ephemeral-buffer-p ()
+ "Determine whether the current buffer is an ephemeral buffer.
+
+See Info node `(elisp)Buffer Names' for information about
+ephemeral buffers."
+ (string-prefix-p " " (buffer-name)))
+
+(defun flycheck-encrypted-buffer-p ()
+ "Determine whether the current buffer is an encrypted file.
+
+See Info node `(epa)Top' for Emacs' interface to encrypted
+files."
+ ;; The EPA file handler sets this variable locally to remember the recipients
+ ;; of the encrypted file for re-encryption. Hence, a local binding of this
+ ;; variable is a good indication that the buffer is encrypted. I haven't
+ ;; found any better indicator anyway.
+ (local-variable-p 'epa-file-encrypt-to))
+
+(defun flycheck-autoloads-file-p ()
+ "Determine whether the current buffer is a autoloads file.
+
+Autoloads are generated by package.el during installation."
+ (string-suffix-p "-autoloads.el" (buffer-name)))
+
+(defun flycheck-in-user-emacs-directory-p (filename)
+ "Whether FILENAME is in `user-emacs-directory'."
+ (string-prefix-p (file-name-as-directory (file-truename user-emacs-directory))
+ (file-truename filename)))
+
+(defun flycheck-safe-delete (file-or-dir)
+ "Safely delete FILE-OR-DIR."
+ (ignore-errors
+ (if (file-directory-p file-or-dir)
+ (delete-directory file-or-dir 'recursive)
+ (delete-file file-or-dir))))
+
+(defun flycheck-safe-delete-temporaries ()
+ "Safely delete all temp files and directories of Flycheck.
+
+Safely delete all files and directories listed in
+`flycheck-temporaries' and set the variable's value to nil."
+ (mapc #'flycheck-safe-delete flycheck-temporaries)
+ (setq flycheck-temporaries nil))
+
+(eval-and-compile
+ (defun flycheck-rx-file-name (form)
+ "Translate the `(file-name)' FORM into a regular expression."
+ (let ((body (or (cdr form) '((minimal-match
+ (one-or-more not-newline))))))
+ (rx-submatch-n `(group-n 1 ,@body))))
+
+ (defun flycheck-rx-message (form)
+ "Translate the `(message)' FORM into a regular expression."
+ (let ((body (or (cdr form) '((one-or-more not-newline)))))
+ (rx-submatch-n `(group-n 4 ,@body))))
+
+ (defun flycheck-rx-id (form)
+ "Translate the `(id)' FORM into a regular expression."
+ (rx-submatch-n `(group-n 5 ,@(cdr form))))
+
+ (defun flycheck-rx-to-string (form &optional no-group)
+ "Like `rx-to-string' for FORM, but with special keywords:
+
+`line'
+ matches the line number.
+
+`column'
+ matches the column number.
+
+`(file-name SEXP ...)'
+ matches the file name. SEXP describes the file name. If no
+ SEXP is given, use a default body of `(minimal-match
+ (one-or-more not-newline))'.
+
+`(message SEXP ...)'
+ matches the message. SEXP constitutes the body of the message. If no SEXP
+ is given, use a default body of `(one-or-more not-newline)'.
+
+`(id SEXP ...)'
+ matches an error ID. SEXP describes the ID.
+
+NO-GROUP is passed to `rx-to-string'."
+ (let ((rx-constituents
+ (append
+ `((line . ,(rx (group-n 2 (one-or-more digit))))
+ (column . ,(rx (group-n 3 (one-or-more digit))))
+ (file-name flycheck-rx-file-name 0 nil)
+ (message flycheck-rx-message 0 nil)
+ (id flycheck-rx-id 0 nil))
+ rx-constituents nil)))
+ (rx-to-string form no-group))))
+
+(defun flycheck-current-load-file ()
+ "Get the source file currently being loaded.
+
+Always return the name of the corresponding source file, never
+any byte-compiled file.
+
+Return nil, if the currently loaded file cannot be determined."
+ (-when-let* ((this-file (cond
+ (load-in-progress load-file-name)
+ ((bound-and-true-p byte-compile-current-file))
+ (t (buffer-file-name))))
+ ;; A best guess for the source file of a compiled library. Works
+ ;; well in most cases, and especially for ELPA packages
+ (source-file (concat (file-name-sans-extension this-file)
+ ".el")))
+ (when (file-exists-p source-file)
+ source-file)))
+
+(defun flycheck-module-root-directory (module &optional file-name)
+ "Get the root directory for a MODULE in FILE-NAME.
+
+MODULE is a qualified module name, either a string with
+components separated by a dot, or as list of components.
+FILE-NAME is the name of the file or directory containing the
+module as string. When nil or omitted, defaults to the return
+value of function `buffer-file-name'.
+
+Return the root directory of the module, that is, the directory,
+from which FILE-NAME can be reached by descending directories
+along each part of MODULE.
+
+If the MODULE name does not match the directory hierarchy upwards
+from FILE-NAME, return the directory containing FILE-NAME. When
+FILE-NAME is nil, return `default-directory'."
+ (let ((file-name (or file-name (buffer-file-name)))
+ (module-components (if (stringp module)
+ (split-string module (rx "."))
+ (copy-sequence module))))
+ (if (and module-components file-name)
+ (let ((parts (nreverse module-components))
+ (base-directory (directory-file-name
+ (file-name-sans-extension file-name))))
+ (while (and parts
+ (string= (file-name-nondirectory base-directory)
+ (car parts)))
+ (pop parts)
+ (setq base-directory (directory-file-name
+ (file-name-directory base-directory))))
+ (file-name-as-directory base-directory))
+ (if file-name
+ (file-name-directory file-name)
+ (expand-file-name default-directory)))))
+
+\f
+;;; Minibuffer tools
+(defvar read-flycheck-checker-history nil
+ "`completing-read' history of `read-flycheck-checker'.")
+
+(defun read-flycheck-checker (prompt &optional default property candidates)
+ "Read a flycheck checker from minibuffer with PROMPT and DEFAULT.
+
+PROMPT is a string to show in the minibuffer as prompt. It
+should end with a single space. DEFAULT is a symbol denoting the
+default checker to use, if the user did not select any checker.
+PROPERTY is a symbol denoting a syntax checker property. If
+non-nil, only complete syntax checkers which have a non-nil value
+for PROPERTY. CANDIDATES is an optional list of all syntax
+checkers available for completion, defaulting to all defined
+checkers. If given, PROPERTY is ignored.
+
+Return the checker as symbol, or DEFAULT if no checker was
+chosen. If DEFAULT is nil and no checker was chosen, signal a
+`user-error' if the underlying completion system does not provide
+a default on its own."
+ (when (and default (not (flycheck-valid-checker-p default)))
+ (error "%S is no valid Flycheck checker" default))
+ (let* ((candidates (mapcar #'symbol-name
+ (or candidates
+ (flycheck-defined-checkers property))))
+ (default (and default (symbol-name default)))
+ (input (pcase flycheck-completion-system
+ (`ido (ido-completing-read prompt candidates nil
+ 'require-match nil
+ 'read-flycheck-checker-history
+ default))
+ (`grizzl (if (and (fboundp 'grizzl-make-index)
+ (fboundp 'grizzl-completing-read))
+ (grizzl-completing-read
+ prompt (grizzl-make-index candidates))
+ (user-error "Please install Grizzl from \
+https://github.com/d11wtq/grizzl")))
+ (_ (completing-read prompt candidates nil 'require-match
+ nil 'read-flycheck-checker-history
+ default)))))
+ (when (string-empty-p input)
+ (unless default
+ (user-error "No syntax checker selected"))
+ (setq input default))
+ (let ((checker (intern input)))
+ (unless (flycheck-valid-checker-p checker)
+ (error "%S is no Flycheck syntax checker" checker))
+ checker)))
+
+\f
+;;; Checker API
+(defun flycheck-defined-checkers (&optional property)
+ "Find all defined syntax checkers, optionally with PROPERTY.
+
+PROPERTY is a symbol. If given, only return syntax checkers with
+a non-nil value for PROPERTY.
+
+The returned list is sorted alphapetically by the symbol name of
+the syntax checkers."
+ (let (defined-checkers)
+ (mapatoms (lambda (symbol)
+ (when (and (flycheck-valid-checker-p symbol)
+ (or (null property) (get symbol property)))
+ (push symbol defined-checkers))))
+ (sort defined-checkers #'string<)))
+
+(defun flycheck-registered-checker-p (checker)
+ "Determine whether CHECKER is registered.
+
+A checker is registered if it is contained in
+`flycheck-checkers'."
+ (and (flycheck-valid-checker-p checker)
+ (memq checker flycheck-checkers)))
+
+(defun flycheck-disabled-checker-p (checker)
+ "Determine whether CHECKER is disabled.
+
+A checker is disabled if it is contained in
+`flycheck-disabled-checkers'."
+ (memq checker flycheck-disabled-checkers))
+
+(defun flycheck-possibly-suitable-checkers ()
+ "Find possibly suitable checkers for the current buffer.
+
+Return a list of all syntax checkers which could possibly be
+suitable for the current buffer, if any problems in their setup
+were fixed.
+
+Currently this function collects all registered syntax checkers
+whose `:modes' contain the current major mode or which do not
+have any `:modes', but a `:predicate' that returns non-nil for
+the current buffer."
+ (let (checkers)
+ (dolist (checker flycheck-checkers)
+ (let ((modes (flycheck-checker-modes checker))
+ (predicate (flycheck-checker-predicate checker)))
+ (when (or (memq major-mode modes)
+ (and (not modes)
+ (functionp predicate)
+ (funcall predicate)))
+ (push checker checkers))))
+ (nreverse checkers)))
+
+\f
+;;; Generic syntax checkers
+(defconst flycheck-generic-checker-version 2
+ "The internal version of generic syntax checker declarations.
+
+Flycheck will not use syntax checkers whose generic version is
+less than this constant.")
+
+(defun flycheck-validate-next-checker (next &optional strict)
+ "Validate NEXT checker.
+
+With STRICT non-nil, also check whether the syntax checker and
+the error level in NEXT are valid. Otherwise just check whether
+these are symbols.
+
+Signal an error if NEXT is not a valid entry for
+`:next-checkers'."
+ (when (symbolp next)
+ (setq next (cons t next)))
+ (pcase next
+ (`(,level . ,checker)
+ (if strict
+ (progn
+ (unless (or (eq level t) (flycheck-error-level-p level))
+ (error "%S is not a valid Flycheck error level" level))
+ (unless (flycheck-valid-checker-p checker)
+ (error "%s is not a valid Flycheck syntax checker" checker)))
+ (unless (symbolp level)
+ (error "Error level %S must be a symbol" level))
+ (unless (symbolp checker)
+ (error "Checker %S must be a symbol" checker))))
+ (_ (error "%S must be a symbol or cons cell" next)))
+ t)
+
+(defun flycheck-define-generic-checker (symbol docstring &rest properties)
+ "Define SYMBOL as generic syntax checker.
+
+Any syntax checker defined with this macro is eligible for manual
+syntax checker selection with `flycheck-select-checker'. To make
+the new syntax checker available for automatic selection, it must
+be registered in `flycheck-checkers'.
+
+DOCSTRING is the documentation of the syntax checker, for
+`flycheck-describe-checker'. The following PROPERTIES constitute
+a generic syntax checker. Unless otherwise noted, all properties
+are mandatory.
+
+`:start FUNCTION'
+ A function to start the syntax checker.
+
+ FUNCTION shall take two arguments and return a context
+ object if the checker is started successfully. Otherwise it
+ shall signal an error.
+
+ The first argument is the syntax checker being started. The
+ second is a callback function to report state changes to
+ Flycheck. The callback takes two arguments STATUS DATA,
+ where STATUS is a symbol denoting the syntax checker status
+ and DATA an optional argument with additional data for the
+ status report. See `flycheck-report-buffer-checker-status'
+ for more information about STATUS and DATA.
+
+ FUNCTION may be synchronous or asynchronous, i.e. it may
+ call the given callback either immediately, or at some later
+ point (e.g. from a process sentinel).
+
+ A syntax checker _must_ call CALLBACK at least once with a
+ STATUS that finishes the current syntax checker. Otherwise
+ Flycheck gets stuck at the current syntax check with this
+ syntax checker.
+
+ The context object returned by FUNCTION is passed to
+ `:interrupt'.
+
+`:interrupt FUNCTION'
+ A function to interrupt the syntax check.
+
+ FUNCTION is called with the syntax checker and the context
+ object returned by the `:start' function and shall try to
+ interrupt the syntax check. The context may be nil, if the
+ syntax check is interrupted before actually started.
+ FUNCTION should handle this situation.
+
+ If it cannot interrupt the syntax check, it may either
+ signal an error or silently ignore the attempt to interrupt
+ the syntax checker, depending on the severity of the
+ situation.
+
+ If interrupting the syntax check failed, Flycheck will let
+ the syntax check continue, but ignore any status reports.
+ Notably, it won't highlight any errors reported by the
+ syntax check in the buffer.
+
+ This property is optional. If omitted, Flycheck won't
+ attempt to interrupt syntax checks wit this syntax checker,
+ and simply ignore their results.
+
+`:print-doc FUNCTION'
+ A function to print additional documentation into the Help
+ buffer of this checker.
+
+ FUNCTION is called when creating the Help buffer for the
+ syntax checker, with the syntax checker as single argument,
+ after printing the name of the syntax checker and its modes
+ and predicate, but before printing DOCSTRING. It may insert
+ additional documentation into the current buffer.
+
+ The call occurs within `with-help-window'. Hence
+ `standard-output' points to the current buffer, so you may
+ use `princ' and friends to add content. Also, the current
+ buffer is put into Help mode afterwards, which automatically
+ turns symbols into references, if possible.
+
+ This property is optional. If omitted, no additional
+ documentation is printed for this syntax checker.
+
+:verify FUNCTION
+ A function to verify the checker for the current buffer.
+
+ FUNCTION is called with the syntax checker as single
+ argument, and shall return a list of
+ `flycheck-verification-result' objects indicating whether
+ the syntax checker could be used in the current buffer, and
+ highlighting potential setup problems.
+
+ This property is optional. If omitted, no additional
+ verification occurs for this syntax checker. It is however
+ absolutely recommended that you add a `:verify' function to
+ your syntax checker, because it will help users to spot
+ potential setup problems.
+
+`:modes MODES'
+ A major mode symbol or a list thereof, denoting major modes
+ to use this syntax checker in.
+
+ If given this syntax checker is only used in buffers whose
+ `major-mode' is `eq' to any mode in MODES.
+
+ If `:predicate' is also given, the syntax checker will only
+ be used in buffers for which the `:predicate' returns
+ non-nil.
+
+ This property is optional, however at least one of `:modes'
+ or `:predicate' must be given.
+
+`:predicate FUNCTION'
+ A function to determine whether to use the syntax checker in
+ the current buffer.
+
+ FUNCTION is called without arguments and shall return
+ non-nil if this syntax checker shall be used to check the
+ current buffer. Otherwise it shall return nil.
+
+ If `:modes' is also given, FUNCTION is only called in
+ matching major modes.
+
+ This property is optional, however at least one of `:modes'
+ or `:predicate' must be given.
+
+`:error-filter FUNCTION'
+ A function to filter the errors returned by this checker.
+
+ FUNCTION is called with the list of `flycheck-error' objects
+ returned by the syntax checker and shall return another list
+ of `flycheck-error' objects, which is considered the final
+ result of this syntax checker.
+
+ FUNCTION is free to add, remove or modify errors, whether in
+ place or by copying.
+
+ This property is optional. The default filter is
+ `identity'.
+
+`:next-checkers NEXT-CHECKERS'
+ A list denoting syntax checkers to apply after this syntax
+ checker, in what we call \"chaining\" of syntax checkers.
+
+ Each ITEM is a cons cell `(LEVEL . CHECKER)'. CHECKER is a
+ syntax checker to run after this syntax checker. LEVEL is
+ an error level. CHECKER will only be used if there are no
+ current errors of at least LEVEL. LEVEL may also be t, in
+ which case CHECKER is used regardless of the current errors.
+
+ ITEM may also be a syntax checker symbol, which is
+ equivalent to `(t . ITEM)'.
+
+ Flycheck tries all items in order of declaration, and uses
+ the first whose LEVEL matches and whose CHECKER is
+ registered and can be used for the current buffer.
+
+ This feature is typically used to apply more than one syntax
+ checker to a buffer. For instance, you might first use a
+ compiler to check a buffer for syntax and type errors, and
+ then run a linting tool that checks for insecure code, or
+ questionable style.
+
+ This property is optional. If omitted, it defaults to the
+ nil, i.e. no other syntax checkers are applied after this
+ syntax checker.
+
+Signal an error, if any property has an invalid value."
+ (declare (indent 1)
+ (doc-string 2))
+ (let ((start (plist-get properties :start))
+ (interrupt (plist-get properties :interrupt))
+ (print-doc (plist-get properties :print-doc))
+ (modes (plist-get properties :modes))
+ (predicate (plist-get properties :predicate))
+ (verify (plist-get properties :verify))
+ (filter (or (plist-get properties :error-filter) #'identity))
+ (next-checkers (plist-get properties :next-checkers))
+ (file (flycheck-current-load-file)))
+
+ (unless (listp modes)
+ (setq modes (list modes)))
+
+ (unless (functionp start)
+ (error ":start %S of syntax checker %s is not a function" symbol start))
+ (unless (or (null interrupt) (functionp interrupt))
+ (error ":interrupt %S of syntax checker %s is not a function"
+ symbol interrupt))
+ (unless (or (null print-doc) (functionp print-doc))
+ (error ":print-doc %S of syntax checker %s is not a function"
+ symbol print-doc))
+ (unless (or (null verify) (functionp verify))
+ (error ":verify %S of syntax checker %S is not a function"
+ symbol verify))
+ (unless (or modes predicate)
+ (error "Missing :modes or :predicate in syntax checker %s" symbol))
+ (dolist (mode modes)
+ (unless (symbolp mode)
+ (error "Invalid :modes %s in syntax checker %s, %s must be a symbol"
+ modes symbol mode)))
+ (unless (or (null predicate) (functionp predicate))
+ (error ":predicate %S of syntax checker %s is not a function"
+ symbol predicate))
+ (unless (functionp filter)
+ (error ":error-filter %S of syntax checker %s is not a function"
+ symbol filter))
+ (dolist (checker next-checkers)
+ (flycheck-validate-next-checker checker))
+
+ (let ((real-predicate (lambda ()
+ (if (flycheck-valid-checker-p symbol)
+ (or (null predicate) (funcall predicate))
+ (lwarn 'flycheck :warning "%S is no valid Flycheck syntax checker.
+Try to reinstall the package defining this syntax checker." symbol)
+ nil))))
+ (pcase-dolist (`(,prop . ,value)
+ `((flycheck-start . ,start)
+ (flycheck-interrupt . ,interrupt)
+ (flycheck-print-doc . ,print-doc)
+ (flycheck-modes . ,modes)
+ (flycheck-predicate . ,real-predicate)
+ (flycheck-verify . ,verify)
+ (flycheck-error-filter . ,filter)
+ (flycheck-next-checkers . ,next-checkers)
+ (flycheck-documentation . ,docstring)
+ (flycheck-file . ,file)))
+ (put symbol prop value)))
+
+ ;; Track the version, to avoid breakage if the internal format changes
+ (put symbol 'flycheck-generic-checker-version
+ flycheck-generic-checker-version)))
+
+(defun flycheck-valid-checker-p (checker)
+ "Check whether a CHECKER is valid.
+
+A valid checker is a symbol defined as syntax checker with
+`flycheck-define-checker'."
+ (and (symbolp checker)
+ (= (or (get checker 'flycheck-generic-checker-version) 0)
+ flycheck-generic-checker-version)))
+
+(defun flycheck-checker-modes (checker)
+ "Get the modes of CHECKER."
+ (get checker 'flycheck-modes))
+
+(defun flycheck-checker-predicate (checker)
+ "Get the predicate function of CHECKER."
+ (get checker 'flycheck-predicate))
+
+(defun flycheck-checker-next-checkers (checker)
+ "Get the next checkers for CHECKER."
+ (get checker 'flycheck-next-checkers))
+
+(defun flycheck-checker-error-filter (checker)
+ "Get the error filter of CHECKER."
+ (get checker 'flycheck-error-filter))
+
+(defun flycheck-checker-documentation (checker)
+ "Get the documentation of CHECKER."
+ (documentation-property checker 'flycheck-documentation))
+
+(defun flycheck-checker-file (checker)
+ "Get the file CHECKER was defined in.
+
+Return nil if the file cannot be determined."
+ (get checker 'flycheck-file))
+
+(defun flycheck-may-use-checker (checker)
+ "Whether a generic CHECKER may be used.
+
+Return non-nil if CHECKER may be used for the current buffer, and
+nil otherwise."
+ (let ((modes (flycheck-checker-modes checker))
+ (predicate (flycheck-checker-predicate checker)))
+ (and (flycheck-valid-checker-p checker)
+ (or (not modes) (memq major-mode modes))
+ (funcall predicate)
+ (not (flycheck-disabled-checker-p checker)))))
+
+(defun flycheck-may-use-next-checker (next-checker)
+ "Determine whether NEXT-CHECKER may be used."
+ (when (symbolp next-checker)
+ (push t next-checker))
+ (let ((level (car next-checker))
+ (next-checker (cdr next-checker)))
+ (and (or (eq level t)
+ (flycheck-has-max-current-errors-p level))
+ (flycheck-registered-checker-p next-checker)
+ (flycheck-may-use-checker next-checker))))
+
+\f
+;;; Help for generic syntax checkers
+(define-button-type 'help-flycheck-checker-def
+ :supertype 'help-xref
+ 'help-function #'flycheck-goto-checker-definition
+ 'help-echo "mouse-2, RET: find Flycheck checker definition")
+
+(defconst flycheck-find-checker-regexp
+ (rx line-start (zero-or-more (syntax whitespace))
+ "(" symbol-start "flycheck-define-checker" symbol-end
+ (eval (list 'regexp find-function-space-re))
+ symbol-start
+ "%s"
+ symbol-end
+ (or (syntax whitespace) line-end))
+ "Regular expression to find a checker definition.")
+
+(add-to-list 'find-function-regexp-alist
+ '(flycheck-checker . flycheck-find-checker-regexp))
+
+(defun flycheck-goto-checker-definition (checker file)
+ "Go to to the definition of CHECKER in FILE."
+ (let ((location (find-function-search-for-symbol
+ checker 'flycheck-checker file)))
+ (pop-to-buffer (car location))
+ (if (cdr location)
+ (goto-char (cdr location))
+ (message "Unable to find checker location in file"))))
+
+(defun flycheck-checker-at-point ()
+ "Return the Flycheck checker found at or before point.
+
+Return 0 if there is no checker."
+ (let ((symbol (variable-at-point 'any-symbol)))
+ (if (and (symbolp symbol) (flycheck-valid-checker-p symbol))
+ symbol
+ 0)))
+
+(defun flycheck-describe-checker (checker)
+ "Display the documentation of CHECKER.
+
+CHECKER is a checker symbol.
+
+Pop up a help buffer with the documentation of CHECKER."
+ (interactive
+ (let* ((checker (flycheck-checker-at-point))
+ (enable-recursive-minibuffers t)
+ (prompt (if (symbolp checker)
+ (format "Describe syntax checker (default %s): " checker)
+ "Describe syntax checker: "))
+ (reply (read-flycheck-checker prompt)))
+ (list (or reply checker))))
+ (if (or (null checker) (not (flycheck-valid-checker-p checker)))
+ (message "You didn't specify a Flycheck syntax checker.")
+ (help-setup-xref (list #'flycheck-describe-checker checker)
+ (called-interactively-p 'interactive))
+ (save-excursion
+ (with-help-window (help-buffer)
+ (let ((filename (flycheck-checker-file checker))
+ (modes (flycheck-checker-modes checker))
+ (predicate (flycheck-checker-predicate checker))
+ (print-doc (get checker 'flycheck-print-doc)))
+ (princ (format "%s is a Flycheck syntax checker" checker))
+ (when filename
+ (princ (format " in `%s'" (file-name-nondirectory filename)))
+ (with-current-buffer standard-output
+ (save-excursion
+ (re-search-backward "`\\([^`']+\\)'" nil t)
+ (help-xref-button 1 'help-flycheck-checker-def checker filename))))
+ (princ ".\n\n")
+
+ (let ((modes-start (with-current-buffer standard-output (point-max))))
+ ;; Track the start of the modes documentation, to properly re-fill
+ ;; it later
+ (if (not modes)
+ ;; Syntax checkers without modes must have a predicate
+ (princ " This syntax checker checks syntax if a custom predicate holds")
+ (princ " This syntax checker checks syntax in the major mode(s) ")
+ (princ (string-join
+ (mapcar (apply-partially #'format "`%s'") modes)
+ ", "))
+ (when predicate
+ (princ ", and uses a custom predicate")))
+ (princ ".")
+ (with-current-buffer standard-output
+ (save-excursion
+ (fill-region-as-paragraph modes-start (point-max)))))
+ (princ "\n")
+ ;; Call the custom print-doc function of the checker, if present
+ (when print-doc
+ (funcall print-doc checker))
+ ;; Ultimately, print the docstring
+ (princ "\nDocumentation:\n")
+ (princ (flycheck-checker-documentation checker)))))))
+
+\f
+;;; Syntax checker verification
+(cl-defstruct (flycheck-verification-result
+ (:constructor flycheck-verification-result-new))
+ "Structure for storing a single verification result.
+
+Slots:
+
+`label'
+ A label for this result, as string
+
+`message'
+ A message for this result, as string
+
+`face'
+ The face to use for the `message'.
+
+ You can either use a face symbol, or a list of face symbols."
+ label message face)
+
+(defun flycheck-verify-generic-checker (checker)
+ "Verify a generic CHECKER in the current buffer.
+
+Return a list of `flycheck-verification-result' objects."
+ (let (results
+ (predicate (flycheck-checker-predicate checker))
+ (verify (get checker 'flycheck-verify)))
+ (when predicate
+ (let ((result (funcall predicate)))
+ (push (flycheck-verification-result-new
+ :label "predicate"
+ :message (prin1-to-string (not (null result)))
+ :face (if result 'success '(bold warning)))
+ results)))
+ (append (nreverse results)
+ (and verify (funcall verify checker)))))
+
+(define-button-type 'help-flycheck-checker-doc
+ :supertype 'help-xref
+ 'help-function #'flycheck-describe-checker
+ 'help-echo "mouse-2, RET: describe Flycheck checker")
+
+(defun flycheck-verify-setup ()
+ "Check whether Flycheck can be used in this buffer.
+
+Display a new buffer listing all syntax checkers that could be
+applicable in the current buffer. For each syntax checkers,
+possible problems are shown."
+ (interactive)
+ (when (and (buffer-file-name) (buffer-modified-p))
+ ;; Save the buffer
+ (save-buffer))
+
+ (let ((buffer (current-buffer))
+ (checkers (flycheck-possibly-suitable-checkers)))
+
+ ;; Now print all applicable checkers
+ (with-help-window (get-buffer-create " *Flycheck checkers*")
+ (with-current-buffer standard-output
+ (princ "Syntax checkers for buffer ")
+ (insert (propertize (buffer-name buffer) 'face 'bold))
+ (princ " in ")
+ (let ((mode (buffer-local-value 'major-mode buffer)))
+ (insert-button (symbol-name mode)
+ 'type 'help-function
+ 'help-args (list mode)))
+ (princ ":\n\n")
+ (unless checkers
+ (insert (propertize "There are no syntax checkers for this buffer!\n\n"
+ 'face '(bold error))))
+ (dolist (checker checkers)
+ (princ " ")
+ (insert-button (symbol-name checker)
+ 'type 'help-flycheck-checker-doc
+ 'help-args (list checker))
+ (princ "\n")
+ (let* ((results (with-current-buffer buffer
+ (flycheck-verify-generic-checker checker)))
+ (label-length
+ (-max (mapcar
+ (lambda (res)
+ (length (flycheck-verification-result-label res)))
+ results)))
+ (message-column (+ 8 label-length)))
+ (dolist (result results)
+ (princ " - ")
+ (princ (flycheck-verification-result-label result))
+ (princ ": ")
+ (princ (make-string (- message-column (current-column)) ?\ ))
+ (let ((message (flycheck-verification-result-message result))
+ (face (flycheck-verification-result-face result)))
+ (insert (propertize message 'face face)))
+ (princ "\n")))
+ (princ "\n"))
+ (princ "Flycheck Mode is ")
+ (let ((enabled (buffer-local-value 'flycheck-mode buffer)))
+ (insert (propertize (if enabled "enabled" "disabled")
+ 'face (if enabled 'success '(warning bold)))))
+ (princ ".\n")
+
+ (let ((unregistered-checkers (-difference (flycheck-defined-checkers)
+ flycheck-checkers)))
+ (when unregistered-checkers
+ (insert (propertize "\nThe following syntax checkers are not registered:\n\n"
+ 'face '(bold warning)))
+ (dolist (checker unregistered-checkers)
+ (princ " - ")
+ (princ checker)
+ (princ "\n"))
+ (princ "\nTry adding these syntax checkers to `flycheck-checkers'.")))))))
+
+\f
+;;; Predicates for generic syntax checkers
+(defun flycheck-buffer-saved-p (&optional buffer)
+ "Determine whether BUFFER is saved to a file.
+
+BUFFER is the buffer to check. If omitted or nil, use the
+current buffer as BUFFER.
+
+Return non-nil if the BUFFER is backed by a file, and not
+modified, or nil otherwise."
+ (and (buffer-file-name buffer) (not (buffer-modified-p buffer))))
+
+\f
+;;; Extending generic checkers
+(defun flycheck-add-next-checker (checker next &optional append)
+ "Add a NEXT checker after CHECKER.
+
+CHECKER is a syntax checker symbol, to which to add NEXT checker.
+
+NEXT is a cons cell `(LEVEL . NEXT-CHECKER)'. NEXT-CHECKER is a
+symbol denoting the syntax checker to run after CHECKER. LEVEL
+is an error level. NEXT-CHECKER will only be used if there is no
+current error whose level is more severe than LEVEL. LEVEL may
+also be t, in which case NEXT-CHECKER is used regardless of the
+current errors.
+
+NEXT can also be a syntax checker symbol only, which is
+equivalent to `(t . NEXT)'.
+
+NEXT-CHECKER is prepended before other next checkers, unless
+APPEND is non-nil."
+ (unless (flycheck-valid-checker-p checker)
+ (error "%s is not a valid syntax checker" checker))
+ (flycheck-validate-next-checker next 'strict)
+ (if append
+ (put checker 'flycheck-next-checkers
+ (append (get checker 'flycheck-next-checkers) (list next)))
+ (push next (get checker 'flycheck-next-checkers))))
+
+(defun flycheck-add-mode (checker mode)
+ "Add a new major MODE to CHECKER.
+
+CHECKER and MODE are symbols denoting a syntax checker and a
+major mode respectively.
+
+Add MODE to the `:modes' property of CHECKER, so that CHECKER
+will be used in buffers with MODE."
+ (unless (flycheck-valid-checker-p checker)
+ (error "%s is not a valid syntax checker" checker))
+ (unless (symbolp mode)
+ (error "%s is not a symbol" mode))
+ (push mode (get checker 'flycheck-modes)))
+
+\f
+;;; Generic syntax checks
+(cl-defstruct (flycheck-syntax-check
+ (:constructor flycheck-syntax-check-new))
+ "Structure for storing syntax check state.
+
+Slots:
+
+`buffer'
+ The buffer being checked
+
+`checker'
+ The syntax checker being used
+
+`context'
+ The context object."
+ buffer checker context)
+
+(defun flycheck-syntax-check-start (syntax-check callback)
+ "Start a SYNTAX-CHECK with CALLBACK."
+ (let ((checker (flycheck-syntax-check-checker syntax-check)))
+ (setf (flycheck-syntax-check-context syntax-check)
+ (funcall (get checker 'flycheck-start) checker callback))))
+
+(defun flycheck-syntax-check-interrupt (syntax-check)
+ "Interrupt a SYNTAX-CHECK."
+ (let* ((checker (flycheck-syntax-check-checker syntax-check))
+ (interrupt-fn (get checker 'flycheck-interrupt))
+ (context (flycheck-syntax-check-context syntax-check)))
+ (when interrupt-fn
+ (funcall interrupt-fn checker context))))
+
+\f
+;;; Syntax checking mode
+
+(defvar flycheck-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map flycheck-keymap-prefix flycheck-command-map)
+ ;; We place the menu under a custom menu key. Since this menu key is not
+ ;; present in the menu of the global map, no top-level menu entry is added
+ ;; to the global menu bar. However, it still appears on the mode line
+ ;; lighter.
+ (define-key map [menu-bar flycheck] flycheck-mode-menu-map)
+ map)
+ "Keymap of `flycheck-mode'.")
+
+(defvar-local flycheck-old-next-error-function nil
+ "Remember the old `next-error-function'.")
+
+(defconst flycheck-hooks-alist
+ '(
+ ;; Handle events that may start automatic syntax checks
+ (after-save-hook . flycheck-handle-save)
+ (after-change-functions . flycheck-handle-change)
+ ;; Handle events that may triggered pending deferred checks
+ (window-configuration-change-hook . flycheck-perform-deferred-syntax-check)
+ (post-command-hook . flycheck-perform-deferred-syntax-check)
+ ;; Teardown Flycheck whenever the buffer state is about to get lost, to
+ ;; clean up temporary files and directories.
+ (kill-buffer-hook . flycheck-teardown)
+ (change-major-mode-hook . flycheck-teardown)
+ (before-revert-hook . flycheck-teardown)
+ ;; Update the error list if necessary
+ (post-command-hook . flycheck-error-list-update-source)
+ (post-command-hook . flycheck-error-list-highlight-errors)
+ ;; Show or hide error popups after commands
+ (post-command-hook . flycheck-display-error-at-point-soon)
+ (post-command-hook . flycheck-hide-error-buffer)
+ ;; Immediately show error popups when navigating to an error
+ (next-error-hook . flycheck-display-error-at-point))
+ "Hooks which Flycheck needs to hook in.
+
+The `car' of each pair is a hook variable, the `cdr' a function
+to be added or removed from the hook variable if Flycheck mode is
+enabled and disabled respectively.")
+
+;;;###autoload
+(define-minor-mode flycheck-mode
+ "Minor mode for on-the-fly syntax checking.
+
+When called interactively, toggle `flycheck-mode'. With prefix
+ARG, enable `flycheck-mode' if ARG is positive, otherwise disable
+it.
+
+When called from Lisp, enable `flycheck-mode' if ARG is omitted,
+nil or positive. If ARG is `toggle', toggle `flycheck-mode'.
+Otherwise behave as if called interactively.
+
+In `flycheck-mode' the buffer is automatically syntax-checked
+using the first suitable syntax checker from `flycheck-checkers'.
+Use `flycheck-select-checker' to select a checker for the current
+buffer manually.
+
+\\{flycheck-mode-map}"
+ :init-value nil
+ :keymap flycheck-mode-map
+ :lighter flycheck-mode-line
+ :group 'flycheck
+ :require 'flycheck
+ :after-hook (flycheck-buffer-automatically 'mode-enabled 'force-deferred)
+ (cond
+ (flycheck-mode
+ (flycheck-clear)
+
+ (pcase-dolist (`(,hook . ,fn) flycheck-hooks-alist)
+ (add-hook hook fn nil 'local))
+
+ (setq flycheck-old-next-error-function (if flycheck-standard-error-navigation
+ next-error-function
+ :unset))
+ (when flycheck-standard-error-navigation
+ (setq next-error-function #'flycheck-next-error-function)))
+ (t
+ (unless (eq flycheck-old-next-error-function :unset)
+ (setq next-error-function flycheck-old-next-error-function))
+
+ (pcase-dolist (`(,hook . ,fn) flycheck-hooks-alist)
+ (remove-hook hook fn 'local))
+
+ (flycheck-teardown))))
+
+\f
+;;; Syntax checker selection for the current buffer
+(defvar-local flycheck-last-checker nil
+ "The last checker used for the current buffer.")
+
+(defun flycheck-clear-checker ()
+ "Clear configured and remembered checkers in the current buffer."
+ (setq flycheck-last-checker nil))
+
+(defun flycheck-try-last-checker-for-buffer ()
+ "Try the last checker for the current buffer.
+
+Return the checker if it may be used, or nil otherwise."
+ ;; We should not use the last checker if it was removed from the list of
+ ;; allowed checkers in the meantime
+ (when (and (flycheck-registered-checker-p flycheck-last-checker)
+ (flycheck-may-use-checker flycheck-last-checker))
+ flycheck-last-checker))
+
+(defun flycheck-get-new-checker-for-buffer ()
+ "Find a new checker for the current buffer.
+
+Return the checker if there is any, or nil otherwise."
+ (let ((checkers flycheck-checkers))
+ (while (and checkers (not (flycheck-may-use-checker (car checkers))))
+ (setq checkers (cdr checkers)))
+ (car checkers)))
+
+(defun flycheck-get-checker-for-buffer ()
+ "Find the checker for the current buffer.
+
+Return checker if there is a checker for the current buffer, or
+nil otherwise."
+ (if flycheck-checker
+ (if (flycheck-may-use-checker flycheck-checker)
+ flycheck-checker
+ (user-error "Selected syntax checker %s cannot be used"
+ flycheck-checker))
+ (or (flycheck-try-last-checker-for-buffer)
+ (flycheck-get-new-checker-for-buffer))))
+
+(defun flycheck-get-next-checker-for-buffer (checker)
+ "Get the checker to run after CHECKER for the current buffer."
+ (let ((next-checkers (flycheck-checker-next-checkers checker)))
+ (while (and next-checkers
+ (not (flycheck-may-use-next-checker (car next-checkers))))
+ (setq next-checkers (cdr next-checkers)))
+ (when next-checkers
+ (if (symbolp (car next-checkers))
+ (car next-checkers)
+ (cdar next-checkers)))))
+
+(defun flycheck-select-checker (checker)
+ "Select CHECKER for the current buffer.
+
+CHECKER is a syntax checker symbol (see `flycheck-checkers') or
+nil. In the former case, use CHECKER for the current buffer,
+otherwise deselect the current syntax checker (if any) and use
+automatic checker selection via `flycheck-checkers'.
+
+If called interactively prompt for CHECKER. With prefix arg
+deselect the current syntax checker and enable automatic
+selection again.
+
+Set `flycheck-checker' to CHECKER and automatically start a new
+syntax check if the syntax checker changed.
+
+CHECKER will be used, even if it is not contained in
+`flycheck-checkers', or if it is disabled via
+`flycheck-disabled-checkers'."
+ (interactive
+ (if current-prefix-arg
+ (list nil)
+ (list (read-flycheck-checker "Select checker: " flycheck-last-checker))))
+ (when (not (eq checker flycheck-checker))
+ (unless (or (not checker) (flycheck-may-use-checker checker))
+ (user-error "Can't use syntax checker %S in this buffer" checker))
+ (setq flycheck-checker checker
+ ;; Clear cached checker to make sure that automatic selection restarts
+ ;; if necessary
+ flycheck-last-checker nil)
+ (when flycheck-mode
+ (flycheck-buffer))))
+
+(defun flycheck-disable-checker (checker &optional enable)
+ "Interactively disable CHECKER for the current buffer.
+
+Interactively, prompt for a syntax checker to disable, and add
+the syntax checker to the buffer-local value of
+`flycheck-disabled-checkers'. With prefix arg, prompt for a
+disabled syntax checker and re-enable it by removing it from the
+buffer-local value of `flycheck-disabled-checkers'."
+ (interactive
+ (let* ((enable current-prefix-arg)
+ (candidates (if enable flycheck-disabled-checkers flycheck-checkers))
+ (prompt (if enable "Enable syntax checker: "
+ "Disable syntax checker: ")))
+ (when (and enable (not candidates))
+ (user-error "No syntax checkers disabled in this buffer"))
+ (list (read-flycheck-checker prompt nil nil candidates) enable)))
+ (unless checker
+ (user-error "No syntax checker given"))
+ (if enable
+ ;; We must use `remq' instead of `delq', because we must _not_ modify the
+ ;; list. Otherwise we could potentially modify the global default value,
+ ;; in case the list is the global default.
+ (setq flycheck-disabled-checkers (remq checker flycheck-disabled-checkers))
+ (unless (memq checker flycheck-disabled-checkers)
+ (push checker flycheck-disabled-checkers))))
+(put 'flycheck-disable-checker 'interactive-only
+ "Directly set `flycheck-disabled-checkers' instead")
+
+\f
+;;; Syntax checks for the current buffer
+(defvar-local flycheck-current-syntax-check nil
+ "The current syntax check in the this buffer.")
+(put 'flycheck-current-syntax-check 'permanent-local t)
+
+(defun flycheck-start-current-syntax-check (checker)
+ "Start a syntax check in the current buffer with CHECKER.
+
+Set `flycheck-current-syntax-check' accordingly."
+ ;; Allocate the current syntax check *before* starting it. This allows for
+ ;; synchronous checks, which call the status callback immediately in there
+ ;; start function.
+ (let* ((check (flycheck-syntax-check-new :buffer (current-buffer)
+ :checker checker
+ :context nil))
+ (callback (flycheck-buffer-status-callback check)))
+ (setq flycheck-current-syntax-check check)
+ (flycheck-report-status 'running)
+ (flycheck-syntax-check-start check callback)))
+
+(defun flycheck-running-p ()
+ "Determine whether a syntax check is running in the current buffer."
+ (not (null flycheck-current-syntax-check)))
+
+(defun flycheck-stop ()
+ "Stop any ongoing syntax check in the current buffer."
+ (when (flycheck-running-p)
+ (flycheck-syntax-check-interrupt flycheck-current-syntax-check)
+ ;; Remove the current syntax check, to reset Flycheck into a non-running
+ ;; state, and to make `flycheck-report-buffer-checker-status' ignore any
+ ;; status reports from the current syntax check.
+ (setq flycheck-current-syntax-check nil)
+ (flycheck-report-status 'interrupted)))
+
+(defun flycheck-buffer-status-callback (syntax-check)
+ "Create a status callback for SYNTAX-CHECK in the current buffer."
+ (lambda (&rest args)
+ (apply #'flycheck-report-buffer-checker-status
+ syntax-check args)))
+
+(defun flycheck-buffer ()
+ "Check syntax in the current buffer.
+
+The syntax checker used for the syntax check is cached in
+`flycheck-last-checker' and re-used for the next check, if
+possible."
+ (interactive)
+ (flycheck-clean-deferred-check)
+ (if flycheck-mode
+ (unless (flycheck-running-p)
+ ;; Clear error list and mark all overlays for deletion. We do not
+ ;; delete all overlays immediately to avoid excessive re-displays and
+ ;; flickering, if the same errors gets highlighted again after the check
+ ;; completed.
+ (run-hooks 'flycheck-before-syntax-check-hook)
+ (flycheck-clear-errors)
+ (flycheck-mark-all-overlays-for-deletion)
+ (condition-case err
+ (let* ((checker (flycheck-get-checker-for-buffer)))
+ (if checker
+ (progn
+ ;; Remember the last syntax checker to speed up checker
+ ;; selection
+ (setq flycheck-last-checker checker)
+ (flycheck-start-current-syntax-check checker))
+ (flycheck-clear)
+ (flycheck-report-status 'no-checker)))
+ (error
+ (flycheck-report-failed-syntax-check)
+ (signal (car err) (cdr err)))))
+ (user-error "Flycheck mode disabled")))
+
+(defun flycheck-report-buffer-checker-status
+ (syntax-check status &optional data)
+ "In BUFFER, report a SYNTAX-CHECK STATUS with DATA.
+
+SYNTAX-CHECK is the `flycheck-syntax-check' which reported
+STATUS. STATUS denotes the status of CHECKER, with an optional
+DATA. STATUS may be one of the following symbols:
+
+`errored'
+ The syntax checker has errored. DATA is an optional error
+ message.
+
+ This report finishes the current syntax check.
+
+`interrupted'
+ The syntax checker was interrupted. DATA is ignored.
+
+ This report finishes the current syntax check.
+
+`finished'
+ The syntax checker has finished with a proper error report
+ for the current buffer. DATA is the (potentially empty)
+ list of `flycheck-error' objects reported by the syntax
+ check.
+
+ This report finishes the current syntax check.
+
+`suspicious'
+ The syntax checker encountered a suspicious state, which the
+ user needs to be informed about. DATA is an optional
+ message.
+
+A syntax checker _must_ report a status at least once with any
+symbol that finishes the current syntax checker. Otherwise
+Flycheck gets stuck with the current syntax check.
+
+If CHECKER is not the currently used syntax checker in
+`flycheck-current-syntax-check', the status report is largely
+ignored. Notably, any errors reported by the checker are
+discarded."
+ (let ((buffer (flycheck-syntax-check-buffer syntax-check)))
+ ;; Ignore the status report if the buffer is gone, or if this syntax check
+ ;; isn't the current one in buffer (which can happen if this is an old
+ ;; report of an interrupted syntax check, and a new syntax check was started
+ ;; since this check was interrupted)
+ (when (and (buffer-live-p buffer)
+ (eq syntax-check
+ (buffer-local-value 'flycheck-current-syntax-check buffer)))
+ (with-current-buffer buffer
+ (let ((checker (flycheck-syntax-check-checker syntax-check)))
+ (pcase status
+ ((or `errored `interrupted)
+ (flycheck-report-failed-syntax-check status)
+ (when (eq status 'errored)
+ ;; In case of error, show the error message
+ (message "Error from syntax checker %s: %s"
+ checker (or data "UNKNOWN!"))))
+ (`suspicious
+ (when flycheck-mode
+ (message "Suspicious state from syntax checker %s: %s"
+ checker (or data "UNKNOWN!")))
+ (flycheck-report-status 'suspicious))
+ (`finished
+ (when flycheck-mode
+ ;; Only report errors from the checker if Flycheck Mode is
+ ;; still enabled.
+ (flycheck-finish-current-syntax-check data)))
+ (_
+ (error "Unknown status %s from syntax checker %s"
+ status checker))))))))
+
+(defun flycheck-finish-current-syntax-check (errors)
+ "Finish the current syntax-check in the current buffer with ERRORS.
+
+ERRORS is a list of `flycheck-error' objects reported by the
+current syntax check in `flycheck-current-syntax-check'.
+
+Report all ERRORS and potentially start any next syntax checkers.
+
+If the current syntax checker reported excessive errors, it is disabled
+via `flycheck-disable-excessive-checker' for subsequent syntax
+checks."
+ (let* ((syntax-check flycheck-current-syntax-check)
+ (checker (flycheck-syntax-check-checker syntax-check))
+ (errors (flycheck-relevant-errors
+ (flycheck-filter-errors
+ (flycheck-assert-error-list-p errors) checker))))
+ (unless (flycheck-disable-excessive-checker checker errors)
+ (flycheck-report-current-errors errors))
+ (let ((next-checker (flycheck-get-next-checker-for-buffer checker)))
+ (if next-checker
+ (flycheck-start-current-syntax-check next-checker)
+ (setq flycheck-current-syntax-check nil)
+ (flycheck-report-status 'finished)
+ ;; Delete overlays only after the very last checker has run, to avoid
+ ;; flickering on intermediate re-displays
+ (flycheck-delete-marked-overlays)
+ (flycheck-error-list-refresh)
+ (run-hooks 'flycheck-after-syntax-check-hook)
+ (when (eq (current-buffer) (window-buffer))
+ (flycheck-display-error-at-point))
+ ;; Immediately try to run any pending deferred syntax check, which
+ ;; were triggered by intermediate automatic check event, to make sure
+ ;; that we quickly refine outdated error information
+ (flycheck-perform-deferred-syntax-check)))))
+
+(defun flycheck-disable-excessive-checker (checker errors)
+ "Disable CHECKER if it reported excessive ERRORS.
+
+If ERRORS has more items than `flycheck-checker-error-threshold',
+add CHECKER to `flycheck-disabled-checkers', and show a warning.
+
+Return t when CHECKER was disabled, or nil otherwise."
+ (when (and flycheck-checker-error-threshold
+ (> (length errors) flycheck-checker-error-threshold))
+ ;; Disable CHECKER for this buffer (`flycheck-disabled-checkers' is a local
+ ;; variable).
+ (lwarn '(flycheck syntax-checker) :warning
+ "Syntax checker %s reported too many errors (%s) and is disabled."
+ checker (length errors))
+ (push checker flycheck-disabled-checkers)
+ t))
+
+(defun flycheck-clear (&optional shall-interrupt)
+ "Clear all errors in the current buffer.
+
+With prefix arg or SHALL-INTERRUPT non-nil, also interrupt the
+current syntax check."
+ (interactive "P")
+ (when shall-interrupt
+ (flycheck-stop))
+ (flycheck-delete-all-overlays)
+ (flycheck-clear-errors)
+ (flycheck-error-list-refresh)
+ (flycheck-hide-error-buffer))
+
+(defun flycheck-teardown ()
+ "Teardown Flycheck in the current buffer..
+
+Completely clear the whole Flycheck state. Remove overlays, kill
+running checks, and empty all variables used by Flycheck."
+ (flycheck-safe-delete-temporaries)
+ (flycheck-stop)
+ (flycheck-clean-deferred-check)
+ (flycheck-clear)
+ (flycheck-cancel-error-display-error-at-point-timer)
+ (flycheck-clear-checker))
+
+\f
+;;; Automatic syntax checking in a buffer
+(defun flycheck-may-check-automatically (&optional condition)
+ "Determine whether the buffer may be checked under CONDITION.
+
+Read-only buffers may never be checked automatically.
+
+If CONDITION is non-nil, determine whether syntax may checked
+automatically according to
+`flycheck-check-syntax-automatically'."
+ (and (not (or buffer-read-only (flycheck-ephemeral-buffer-p)))
+ (or (not condition)
+ (memq condition flycheck-check-syntax-automatically))))
+
+(defun flycheck-buffer-automatically (&optional condition force-deferred)
+ "Automatically check syntax at CONDITION.
+
+Syntax is not checked if `flycheck-may-check-automatically'
+returns nil for CONDITION.
+
+The syntax check is deferred if FORCE-DEFERRED is non-nil, or if
+`flycheck-must-defer-check' returns t."
+ (when (and flycheck-mode (flycheck-may-check-automatically condition))
+ (if (or force-deferred (flycheck-must-defer-check))
+ (flycheck-buffer-deferred)
+ (with-demoted-errors "Error while checking syntax automatically: %S"
+ (flycheck-buffer)))))
+
+(defvar-local flycheck-idle-change-timer nil
+ "Timer to mark the idle time since the last change.")
+
+(defun flycheck-clear-idle-change-timer ()
+ "Clear the idle change timer."
+ (when flycheck-idle-change-timer
+ (cancel-timer flycheck-idle-change-timer)
+ (setq flycheck-idle-change-timer nil)))
+
+(defun flycheck-handle-change (beg end _len)
+ "Handle a buffer change between BEG and END.
+
+BEG and END mark the beginning and end of the change text. _LEN
+is ignored.
+
+Start a syntax check if a new line has been inserted into the
+buffer."
+ ;; Save and restore the match data, as recommended in (elisp)Change Hooks
+ (save-match-data
+ (when flycheck-mode
+ ;; The buffer was changed, thus clear the idle timer
+ (flycheck-clear-idle-change-timer)
+ (if (string-match-p (rx "\n") (buffer-substring beg end))
+ (flycheck-buffer-automatically 'new-line 'force-deferred)
+ (setq flycheck-idle-change-timer
+ (run-at-time flycheck-idle-change-delay nil
+ #'flycheck-handle-idle-change))))))
+
+(defun flycheck-handle-idle-change ()
+ "Handle an expired idle time since the last change."
+ (flycheck-clear-idle-change-timer)
+ (flycheck-buffer-automatically 'idle-change))
+
+(defun flycheck-handle-save ()
+ "Handle a save of the buffer."
+ (flycheck-buffer-automatically 'save))
+
+\f
+;;; Deferred syntax checking
+(defvar-local flycheck-deferred-syntax-check nil
+ "If non-nil, a deferred syntax check is pending.")
+
+(defun flycheck-must-defer-check ()
+ "Determine whether the syntax check has to be deferred.
+
+A check has to be deferred if the buffer is not visible, or if the buffer is
+currently being reverted.
+
+Return t if the check is to be deferred, or nil otherwise."
+ (or (not (get-buffer-window))
+ ;; We defer the syntax check if Flycheck is already running, to
+ ;; immediately start a new syntax check after the current one finished,
+ ;; because the result of the current check will most likely be outdated by
+ ;; the time it is finished.
+ (flycheck-running-p)
+ ;; We must defer checks while a buffer is being reverted, to avoid race
+ ;; conditions while the buffer contents are being restored.
+ revert-buffer-in-progress-p))
+
+(defun flycheck-deferred-check-p ()
+ "Determine whether the current buffer has a deferred check.
+
+Return t if so, or nil otherwise."
+ flycheck-deferred-syntax-check)
+
+(defun flycheck-buffer-deferred ()
+ "Defer syntax check for the current buffer."
+ (setq flycheck-deferred-syntax-check t))
+
+(defun flycheck-clean-deferred-check ()
+ "Clean an deferred syntax checking state."
+ (setq flycheck-deferred-syntax-check nil))
+
+(defun flycheck-perform-deferred-syntax-check ()
+ "Perform any deferred syntax checks."
+ (when (flycheck-deferred-check-p)
+ (flycheck-clean-deferred-check)
+ (flycheck-buffer-automatically)))
+
+\f
+;;; Syntax checking in all buffers
+(defun flycheck-may-enable-mode ()
+ "Determine whether Flycheck mode may be enabled.
+
+Flycheck mode is not enabled for
+
+- the minibuffer,
+- major modes whose `mode-class' property is `special',
+- ephemeral buffers (see `flycheck-ephemeral-buffer-p'),
+- encrypted buffers (see `flycheck-encrypted-buffer-p'),
+- remote files (see `file-remote-p'),
+- and major modes excluded by `flycheck-global-modes'.
+
+Return non-nil if Flycheck mode may be enabled, and nil
+otherwise."
+ (and (pcase flycheck-global-modes
+ ;; Whether `major-mode' is disallowed by `flycheck-global-modes'
+ (`t t)
+ (`(not . ,modes) (not (memq major-mode modes)))
+ (modes (memq major-mode modes)))
+ (not (or (minibufferp)
+ (eq (get major-mode 'mode-class) 'special)
+ (flycheck-ephemeral-buffer-p)
+ (flycheck-encrypted-buffer-p)
+ (and (buffer-file-name)
+ (file-remote-p (buffer-file-name) 'method))))))
+
+(defun flycheck-mode-on-safe ()
+ "Enable `flycheck-mode' if it is safe to do so.
+
+`flycheck-mode' is only enabled if `flycheck-may-enable-mode'
+returns t."
+ (when (flycheck-may-enable-mode)
+ (flycheck-mode)))
+
+;;;###autoload
+(define-globalized-minor-mode global-flycheck-mode flycheck-mode
+ flycheck-mode-on-safe
+ :init-value nil
+ :group 'flycheck
+ :require 'flycheck)
+
+(defun flycheck-global-teardown ()
+ "Teardown Flycheck in all buffers.
+
+Completely clear the whole Flycheck state in all buffers, stop
+all running checks, remove all temporary files, and empty all
+variables of Flycheck."
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+ (when flycheck-mode
+ (flycheck-teardown)))))
+
+;; Clean up the entire state of Flycheck when Emacs is killed, to get rid of any
+;; pending temporary files.
+(add-hook 'kill-emacs-hook #'flycheck-global-teardown)
+
+\f
+;;; Errors from syntax checks
+(cl-defstruct (flycheck-error
+ (:constructor flycheck-error-new)
+ (:constructor flycheck-error-new-at (line column
+ &optional level message
+ &key checker id
+ (filename (buffer-file-name))
+ (buffer (current-buffer)))))
+ "Structure representing an error reported by a syntax checker.
+Slots:
+
+`buffer'
+ The buffer the reported was reported for, as buffer object.
+
+`checker'
+ The syntax checker which reported this error, as symbol.
+
+`filename'
+ The file name the error refers to, as string.
+
+`line'
+ The line number the error refers to, as number.
+
+`column' (optional)
+ The column number the error refers to, as number.
+
+ For compatibility with external tools and unlike Emacs
+ itself (e.g. in Compile Mode) Flycheck uses _1-based_
+ columns: The first character on a line is column 1.
+
+ Occasionally some tools try to proactively adapt to Emacs
+ and emit 0-based columns automatically. In these cases, the
+ columns must be adjusted for Flycheck, see
+ `flycheck-increment-error-columns'.
+
+`level'
+ The error level, as either `warning' or `error'.
+
+`id' (optional)
+ An ID identifying the kind of error."
+ buffer checker filename line column message level id)
+
+(defmacro flycheck-error-with-buffer (err &rest forms)
+ "Switch to the buffer of ERR and evaluate FORMS.
+
+If the buffer of ERR is not live, FORMS are not evaluated."
+ (declare (indent 1) (debug t))
+ `(when (buffer-live-p (flycheck-error-buffer ,err))
+ (with-current-buffer (flycheck-error-buffer ,err)
+ ,@forms)))
+
+(defun flycheck-error-line-region (err)
+ "Get the line region of ERR.
+
+ERR is a Flycheck error whose region to get.
+
+Return a cons cell `(BEG . END)' where BEG is the first
+non-whitespace character on the line ERR refers to, and END the
+end of the line."
+ (flycheck-error-with-buffer err
+ (save-restriction
+ (save-excursion
+ (widen)
+ (goto-char (point-min))
+ (forward-line (- (flycheck-error-line err) 1))
+ ;; We are at the beginning of the line now, so move to the beginning of
+ ;; its indentation, similar to `back-to-indentation'
+ (let ((end (line-end-position)))
+ (skip-syntax-forward " " end)
+ (backward-prefix-chars)
+ ;; If the current line is empty, include the previous line break
+ ;; character(s) to have any region at all. When called with 0,
+ ;; `line-end-position' gives us the end of the previous line
+ (cons (if (eolp) (line-end-position 0) (point)) end))))))
+
+(defun flycheck-error-column-region (err)
+ "Get the error column region of ERR.
+
+ERR is a Flycheck error whose region to get.
+
+Return a cons cell `(BEG . END)' where BEG is the character
+before the error column, and END the actual error column, or nil
+if ERR has no column."
+ (flycheck-error-with-buffer err
+ (save-restriction
+ (save-excursion
+ (-when-let (column (flycheck-error-column err))
+ (widen)
+ (goto-char (point-min))
+ (forward-line (- (flycheck-error-line err) 1))
+ (cond
+ ((eobp) ; Line beyond EOF
+ ;; If we are at the end of the file (i.e. the line was beyond the
+ ;; end of the file), use the very last column in the file.
+ (cons (- (point-max) 1) (point-max)))
+ ((eolp) ; Empty line
+ ;; If the target line is empty, there's no column to highlight on
+ ;; this line, so return the last column of the previous line.
+ (cons (line-end-position 0) (point)))
+ (t
+ ;; The end is either the column offset of the line, or the end of
+ ;; the line, if the column offset points beyond the end of the
+ ;; line.
+ (let ((end (min (+ (point) column)
+ (+ (line-end-position) 1))))
+ (cons (- end 1) end)))))))))
+
+(defun flycheck-error-thing-region (thing err)
+ "Get the region of THING at the column of ERR.
+
+ERR is a Flycheck error whose region to get. THING is a
+understood by `thing-at-point'.
+
+Return a cons cell `(BEG . END)' where BEG is the beginning of
+the THING at the error column, and END the end of the symbol. If
+ERR has no error column, or if there is no THING at this column,
+return nil."
+ (-when-let (column (car (flycheck-error-column-region err)))
+ (flycheck-error-with-buffer err
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char column)
+ (bounds-of-thing-at-point thing))))))
+
+(defun flycheck-error-region-for-mode (err mode)
+ "Get the region of ERR for the highlighting MODE.
+
+ERR is a Flycheck error. MODE may be one of the following symbols:
+
+`columns'
+ Get the column region of ERR, or the line region if ERR
+ has no column.
+
+`symbols'
+ Get the symbol region of ERR, or the result of `columns', if
+ there is no sexp at the error column.
+
+`sexps'
+ Get the sexp region of ERR, or the result of `columns', if
+ there is no sexp at the error column.
+
+`lines'
+ Return the line region.
+
+Otherwise signal an error."
+ (pcase mode
+ (`columns (or (flycheck-error-column-region err)
+ (flycheck-error-line-region err)))
+ (`symbols (or (flycheck-error-thing-region 'symbol err)
+ (flycheck-error-region-for-mode err 'columns)))
+ (`sexps (or (flycheck-error-thing-region 'sexp err)
+ (flycheck-error-region-for-mode err 'columns)))
+ (`lines (flycheck-error-line-region err))
+ (_ (error "Invalid mode %S" mode))))
+
+(defun flycheck-error-pos (err)
+ "Get the buffer position of ERR.
+
+ERR is a Flycheck error whose position to get.
+
+The error position is the error column, or the first
+non-whitespace character of the error line, if ERR has no error column."
+ (car (or (flycheck-error-column-region err)
+ (flycheck-error-line-region err))))
+
+(defun flycheck-error-format-message-and-id (err)
+ "Format the message and id of ERR as human-readable string."
+ (let ((id (flycheck-error-id err))
+ (message (flycheck-error-message err)))
+ (if id (format "%s [%s]" message id) message)))
+
+(defun flycheck-error-format (err)
+ "Format ERR as human-readable string.
+
+Return a string that represents the given ERR. This string does
+_not_ include the file name."
+ (let* ((line (flycheck-error-line err))
+ (column (flycheck-error-column err))
+ (level (symbol-name (flycheck-error-level err)))
+ (checker (symbol-name (flycheck-error-checker err)))
+ (format `(,(number-to-string line) ":"
+ ,@(when column (list (number-to-string column) ":"))
+ ,level ": "
+ ,(flycheck-error-format-message-and-id err)
+ " (" ,checker ")")))
+ (apply #'concat format)))
+
+(defun flycheck-error-< (err1 err2)
+ "Determine whether ERR1 goes before ERR2 by location.
+
+Compare by line numbers and then by column numbers."
+ (let ((line1 (flycheck-error-line err1))
+ (line2 (flycheck-error-line err2)))
+ (if (= line1 line2)
+ (let ((col1 (flycheck-error-column err1))
+ (col2 (flycheck-error-column err2)))
+ (and col2
+ ;; Sort errors for the whole line first
+ (or (not col1) (< col1 col2))))
+ (< line1 line2))))
+
+(defun flycheck-error-level-< (err1 err2)
+ "Determine whether ERR1 goes before ERR2 by error level.
+
+Like `flycheck-error-<', but compares by error level severity
+first. Levels of the same severity are compared by name."
+ (let* ((level1 (flycheck-error-level err1))
+ (level2 (flycheck-error-level err2))
+ (severity1 (flycheck-error-level-severity level1))
+ (severity2 (flycheck-error-level-severity level2)))
+ (cond
+ ((= severity1 severity2)
+ (if (string= level1 level2)
+ (flycheck-error-< err1 err2)
+ (string< level1 level2)))
+ (t (< severity1 severity2)))))
+
+(defun flycheck-assert-error-list-p (errors)
+ "Assert that all items in ERRORS are of `flycheck-error' type.
+
+Signal an error if any item in ERRORS is not a `flycheck-error'
+object, as by `flycheck-error-p'. Otherwise return ERRORS
+again."
+ (unless (listp errors)
+ (signal 'wrong-type-argument (list 'listp errors)))
+ (dolist (err errors)
+ (unless (flycheck-error-p err)
+ (signal 'wrong-type-argument (list 'flycheck-error-p err))))
+ errors)
+
+\f
+;;; Errors in the current buffer
+(defvar-local flycheck-current-errors nil
+ "A list of all errors and warnings in the current buffer.")
+
+(defun flycheck-report-current-errors (errors)
+ "Report ERRORS in the current buffer.
+
+Add ERRORS to `flycheck-current-errors' and process each error
+with `flycheck-process-error-functions'."
+ (setq flycheck-current-errors (sort (append errors flycheck-current-errors)
+ #'flycheck-error-<))
+ (mapc (lambda (err)
+ (run-hook-with-args-until-success 'flycheck-process-error-functions
+ err))
+ errors))
+
+(defun flycheck-clear-errors ()
+ "Remove all error information from the current buffer."
+ (setq flycheck-current-errors nil)
+ (flycheck-report-status 'not-checked))
+
+(defun flycheck-relevant-error-p (err)
+ "Determine whether ERR is relevant for the current buffer.
+
+Return t if ERR may be shown for the current buffer, or nil
+otherwise."
+ (flycheck-error-with-buffer err
+ (let ((file-name (flycheck-error-filename err))
+ (message (flycheck-error-message err)))
+ (and
+ (or (not file-name) (flycheck-same-files-p file-name (buffer-file-name)))
+ message
+ (not (string-empty-p message))
+ (flycheck-error-line err)))))
+
+(defun flycheck-relevant-errors (errors)
+ "Filter the relevant errors from ERRORS.
+
+Return a list of all errors that are relevant for their
+corresponding buffer."
+ (-filter #'flycheck-relevant-error-p errors))
+
+\f
+;;; Status reporting for the current buffer
+(defvar-local flycheck-last-status-change 'not-checked
+ "The last status change in the current buffer.")
+
+(defun flycheck-report-failed-syntax-check (&optional status)
+ "Report a failed Flycheck syntax check with STATUS.
+
+STATUS is a status symbol for `flycheck-report-status',
+defaulting to `errored'.
+
+Clear Flycheck state, run `flycheck-syntax-check-failed-hook' and
+report an error STATUS."
+ (flycheck-clear)
+ (setq flycheck-current-syntax-check nil)
+ (run-hooks 'flycheck-syntax-check-failed-hook)
+ (flycheck-report-status (or status 'errored)))
+
+(defun flycheck-report-status (status)
+ "Report Flycheck STATUS.
+
+STATUS is one of the following symbols:
+
+`not-checked'
+ The current buffer was not checked.
+
+`no-checker'
+ Automatic syntax checker selection did not find a suitable
+ syntax checker.
+
+`running'
+ A syntax check is now running in the current buffer.
+
+`errored'
+ The current syntax check has errored.
+
+`finished'
+ The current syntax check was finished normally.
+
+`interrupted'
+ The current syntax check was interrupted.
+
+`suspicious'
+ The last syntax check had a suspicious result.
+
+Set `flycheck-last-status-change' and call
+`flycheck-status-changed-functions' with STATUS. Afterwards
+refresh the mode line."
+ (setq flycheck-last-status-change status)
+ (run-hook-with-args 'flycheck-status-changed-functions status)
+ (force-mode-line-update))
+
+(defun flycheck-mode-line-status-text (&optional status)
+ "Get a text describing STATUS for use in the mode line.
+
+STATUS defaults to `flycheck-last-status-change' if omitted or
+nil."
+ (let ((text (pcase (or status flycheck-last-status-change)
+ (`not-checked "")
+ (`no-checker "-")
+ (`running "*")
+ (`errored "!")
+ (`finished
+ (if flycheck-current-errors
+ (let-alist (flycheck-count-errors flycheck-current-errors)
+ (format ":%s/%s" (or .error 0) (or .warning 0)))
+ ""))
+ (`interrupted "-")
+ (`suspicious "?"))))
+ (concat " FlyC" text)))
+
+\f
+;;; Error levels
+;;;###autoload
+(defun flycheck-define-error-level (level &rest properties)
+ "Define a new error LEVEL with PROPERTIES.
+
+The following PROPERTIES constitute an error level:
+
+`:severity SEVERITY'
+ A number denoting the severity of this level. The higher
+ the number, the more severe is this level compared to other
+ levels. Defaults to 0.
+
+ The severity is used by `flycheck-error-level-<' to
+ determine the ordering of errors according to their levels.
+
+`:overlay-category CATEGORY'
+ A symbol denoting the overlay category to use for error
+ highlight overlays for this level. See Info
+ node `(elisp)Overlay Properties' for more information about
+ overlay categories.
+
+ A category for an error level overlay should at least define
+ the `face' property, for error highlighting. Other useful
+ properties for error level categories are `priority' to
+ influence the stacking of multiple error level overlays, and
+ `help-echo' to define a default error messages for errors
+ without messages.
+
+`:fringe-bitmap BITMAP'
+ A fringe bitmap symbol denoting the bitmap to use for fringe
+ indicators for this level. See Info node `(elisp)Fringe
+ Bitmaps' for more information about fringe bitmaps,
+ including a list of built-in fringe bitmaps.
+
+`:fringe-face FACE'
+ A face symbol denoting the face to use for fringe indicators
+ for this level.
+
+`:error-list-face FACE'
+ A face symbol denoting the face to use for messages of this
+ level in the error list. See `flycheck-list-errors'."
+ (declare (indent 1))
+ (put level 'flycheck-error-level t)
+ (put level 'flycheck-error-severity
+ (or (plist-get properties :severity) 0))
+ (put level 'flycheck-overlay-category
+ (plist-get properties :overlay-category))
+ (put level 'flycheck-fringe-bitmap
+ (plist-get properties :fringe-bitmap))
+ (put level 'flycheck-fringe-face
+ (plist-get properties :fringe-face))
+ (put level 'flycheck-error-list-face
+ (plist-get properties :error-list-face)))
+
+(defun flycheck-error-level-p (level)
+ "Determine whether LEVEL is a Flycheck error level."
+ (get level 'flycheck-error-level))
+
+(defun flycheck-error-level-severity (level)
+ "Get the numeric severity of LEVEL."
+ (or (get level 'flycheck-error-severity) 0))
+
+(defun flycheck-error-level-overlay-category (level)
+ "Get the overlay category for LEVEL."
+ (get level 'flycheck-overlay-category))
+
+(defun flycheck-error-level-fringe-bitmap (level)
+ "Get the fringe bitmap for LEVEL."
+ (get level 'flycheck-fringe-bitmap))
+
+(defun flycheck-error-level-fringe-face (level)
+ "Get the fringe face for LEVEL."
+ (get level 'flycheck-fringe-face))
+
+(defun flycheck-error-level-error-list-face (level)
+ "Get the error list face for LEVEL."
+ (get level 'flycheck-error-list-face))
+
+(defun flycheck-error-level-make-fringe-icon (level side)
+ "Create the fringe icon for LEVEL at SIDE.
+
+Return a propertized string that shows a fringe bitmap according
+to LEVEL and the given fringe SIDE.
+
+LEVEL is a Flycheck error level defined with
+`flycheck-define-error-level', and SIDE is either `left-fringe'
+or `right-fringe'.
+
+Return a propertized string representing the fringe icon,
+intended for use as `before-string' of an overlay to actually
+show the icon."
+ (unless (memq side '(left-fringe right-fringe))
+ (error "Invalid fringe side: %S" side))
+ (propertize "!" 'display
+ (list side
+ (flycheck-error-level-fringe-bitmap level)
+ (flycheck-error-level-fringe-face level))))
+
+\f
+;;; Built-in error levels
+(put 'flycheck-error-overlay 'face 'flycheck-error)
+(put 'flycheck-error-overlay 'priority 110)
+(put 'flycheck-error-overlay 'help-echo "Unknown error.")
+
+(flycheck-define-error-level 'error
+ :severity 100
+ :overlay-category 'flycheck-error-overlay
+ :fringe-bitmap 'exclamation-mark
+ :fringe-face 'flycheck-fringe-error
+ :error-list-face 'flycheck-error-list-error)
+
+(put 'flycheck-warning-overlay 'face 'flycheck-warning)
+(put 'flycheck-warning-overlay 'priority 100)
+(put 'flycheck-warning-overlay 'help-echo "Unknown warning.")
+
+(flycheck-define-error-level 'warning
+ :severity 10
+ :overlay-category 'flycheck-warning-overlay
+ :fringe-bitmap 'question-mark
+ :fringe-face 'flycheck-fringe-warning
+ :error-list-face 'flycheck-error-list-warning)
+
+(put 'flycheck-info-overlay 'face 'flycheck-info)
+(put 'flycheck-info-overlay 'priority 90)
+(put 'flycheck-info-overlay 'help-echo "Unknown info.")
+
+(flycheck-define-error-level 'info
+ :severity -1
+ :overlay-category 'flycheck-info-overlay
+ ;; Not exactly the right indicator, but looks pretty, and I prefer to use
+ ;; built-in bitmaps over diving into the hassle of messing around with custom
+ ;; fringe bitmaps
+ :fringe-bitmap 'empty-line
+ :fringe-face 'flycheck-fringe-info
+ :error-list-face 'flycheck-error-list-info)
+
+\f
+;;; Error filtering
+(defun flycheck-filter-errors (errors checker)
+ "Filter ERRORS from CHECKER.
+
+Apply the error filter of CHECKER to ERRORs and return the
+result. If CHECKER has no error filter, fall back to
+`flycheck-sanitize-errors'."
+ (let ((filter (or (flycheck-checker-error-filter checker)
+ #'flycheck-sanitize-errors)))
+ (funcall filter errors)))
+
+(defun flycheck-sanitize-errors (errors)
+ "Sanitize ERRORS.
+
+Sanitize ERRORS by trimming leading and trailing whitespace in
+all error messages, and by replacing 0 columns and empty error
+messages with nil.
+
+Returns sanitized ERRORS."
+ (dolist (err errors)
+ (flycheck-error-with-buffer err
+ (let ((message (flycheck-error-message err))
+ (column (flycheck-error-column err)))
+ (when message
+ (setq message (string-trim message))
+ (setf (flycheck-error-message err)
+ (if (string-empty-p message) nil message)))
+ (when (eq column 0)
+ (setf (flycheck-error-column err) nil)))))
+ errors)
+
+(defun flycheck-increment-error-columns (errors &optional offset)
+ "Increment all columns of ERRORS by OFFSET.
+
+Use this as `:error-filter' if a syntax checker outputs 0-based
+columns."
+ (mapc (lambda (err)
+ (let ((column (flycheck-error-column err)))
+ (when column
+ (setf (flycheck-error-column err)
+ (+ column (or offset 1))))))
+ errors)
+ errors)
+
+(defun flycheck-collapse-error-message-whitespace (errors)
+ "Collapse whitespace in all messages of ERRORS.
+
+Return ERRORS."
+ (dolist (err errors)
+ (-when-let (message (flycheck-error-message err))
+ (setf (flycheck-error-message err)
+ (replace-regexp-in-string (rx (one-or-more (any space "\n" "\r")))
+ " " message 'fixed-case 'literal))))
+ errors)
+
+(defun flycheck-dedent-error-messages (errors)
+ "Dedent all messages of ERRORS.
+
+For each error in ERRORS, determine the indentation offset from
+the leading whitespace of the first line, and dedent all further
+lines accordingly.
+
+Return ERRORS, with in-place modifications."
+ (dolist (err errors)
+ (-when-let (message (flycheck-error-message err))
+ (with-temp-buffer
+ (insert message)
+ ;; Determine the indentation offset
+ (goto-char (point-min))
+ (back-to-indentation)
+ (let* ((indent-offset (- (point) (point-min))))
+ ;; Now iterate over all lines and dedent each according to
+ ;; `indent-offset'
+ (while (not (eobp))
+ (back-to-indentation)
+ ;; If the current line starts with sufficient whitespace, delete the
+ ;; indendation offset. Otherwise keep the line intact, as we might
+ ;; loose valuable information
+ (when (>= (- (point) (line-beginning-position)) indent-offset)
+ (delete-char (- indent-offset)))
+ (forward-line 1)))
+ (delete-trailing-whitespace (point-min) (point-max))
+ (setf (flycheck-error-message err)
+ (buffer-substring-no-properties (point-min) (point-max))))))
+ errors)
+
+(defun flycheck-fold-include-levels (errors sentinel-message)
+ "Fold levels of ERRORS from included files.
+
+ERRORS is a list of `flycheck-error' objects. SENTINEL-MESSAGE
+is a regular expression matched against the error message to
+determine whether the errror denotes errors from an included
+file. Alternatively, it is a function that is given an error and
+shall return non-nil, if the error denotes errors from an
+included file."
+ (unless (or (stringp sentinel-message) (functionp sentinel-message))
+ (error "Sentinel must be string or function: %S" sentinel-message))
+ (let ((sentinel (if (functionp sentinel-message)
+ sentinel-message
+ (lambda (err)
+ (string-match-p sentinel-message
+ (flycheck-error-message err)))))
+ (remaining-errors errors))
+ (while remaining-errors
+ (let* ((current-error (pop remaining-errors)))
+ (when (funcall sentinel current-error)
+ ;; We found an error denoting errors in the included file, so process
+ ;; all subsequent errors until an error has the current file name
+ ;; again, and find the most severe error level
+ (let ((current-filename (flycheck-error-filename current-error))
+ (current-level nil)
+ (faulty-include-filename (flycheck-error-filename
+ (car remaining-errors))))
+ (while (and remaining-errors
+ (not (string= (flycheck-error-filename
+ (car remaining-errors))
+ current-filename)))
+ (let* ((error-in-include (pop remaining-errors))
+ (in-include-level (flycheck-error-level error-in-include)))
+ (unless (funcall sentinel error-in-include)
+ ;; Ignore nested "included file" errors, we are only
+ ;; interested in real errors because these define our level
+ (when (or (not current-level)
+ (> (flycheck-error-level-severity in-include-level)
+ (flycheck-error-level-severity current-level)))
+ (setq current-level in-include-level)))))
+ (setf (flycheck-error-level current-error) current-level
+ (flycheck-error-message current-error)
+ (format "In include %s" faulty-include-filename))))))
+ errors))
+
+(defun flycheck-dequalify-error-ids (errors)
+ "De-qualify error ids in ERRORS.
+
+Remove all qualifications from error ids in ERRORS, by stripping
+all leading dotted components from error IDs. For instance, if
+the error ID is com.foo.E100, replace it with E100.
+
+This error filter is mainly useful to simplify error IDs obtained
+from parsing Checkstyle XML, which frequently has very verbose
+IDs, that include the name of the tool."
+ (mapc (lambda (err)
+ (let ((id (flycheck-error-id err)))
+ (when id
+ (setf (flycheck-error-id err)
+ (replace-regexp-in-string
+ (rx string-start
+ (group
+ (optional (zero-or-more not-newline) "."))
+ (one-or-more (not (any ".")))
+ string-end)
+ "" id 'fixedcase 'literal 1)))))
+ errors)
+ errors)
+
+(defun flycheck-remove-error-ids (errors)
+ "Remove all error ids from ERRORS."
+ (mapc (lambda (err) (setf (flycheck-error-id err) nil)) errors)
+ errors)
+
+\f
+;;; Error analysis
+(defun flycheck-count-errors (errors)
+ "Count the number of ERRORS, grouped by level..
+
+Return an alist, where each ITEM is a cons cell whose `car' is an
+error level, and whose `cdr' is the number of errors of that
+level."
+ (let (counts-by-level)
+ (dolist (err errors)
+ (let* ((level (flycheck-error-level err))
+ (item (assq level counts-by-level)))
+ (if item
+ (setcdr item (1+ (cdr item)))
+ (push (cons level 1) counts-by-level))))
+ counts-by-level))
+
+(defun flycheck-has-max-errors-p (errors level)
+ "Check if there is no error in ERRORS more severe than LEVEL."
+ (let ((severity (flycheck-error-level-severity level))
+ found)
+ (while (and errors (not found))
+ (setq found (< severity (flycheck-error-level-severity
+ (flycheck-error-level (pop errors))))))
+ (not found)))
+
+(defun flycheck-has-max-current-errors-p (level)
+ "Check if there is no current error more severe than LEVEL."
+ (flycheck-has-max-errors-p flycheck-current-errors level))
+
+(defun flycheck-has-errors-p (errors level)
+ "Determine if there are any ERRORS with LEVEL."
+ (let (found)
+ (while (and errors (not found))
+ (setq found (eq (flycheck-error-level (pop errors)) level)))
+ found))
+
+(defun flycheck-has-current-errors-p (&optional level)
+ "Determine if the current buffer has errors with LEVEL.
+
+If LEVEL is omitted if the current buffer has any errors at all."
+ (if level
+ (flycheck-has-errors-p flycheck-current-errors level)
+ (and flycheck-current-errors t)))
+
+\f
+;;; Error overlays in the current buffer
+(defun flycheck-add-overlay (err)
+ "Add overlay for ERR.
+
+Return the created overlay."
+ ;; We must have a proper error region for the sake of fringe indication,
+ ;; error display and error navigation, even if the highlighting is disabled.
+ ;; We erase the highlighting later on in this case
+ (pcase-let* ((`(,beg . ,end) (flycheck-error-region-for-mode
+ err (or flycheck-highlighting-mode 'lines)))
+ (overlay (make-overlay beg end))
+ (level (flycheck-error-level err))
+ (category (flycheck-error-level-overlay-category level)))
+ (unless (flycheck-error-level-p level)
+ (error "Undefined error level: %S" level))
+ (overlay-put overlay 'flycheck-overlay t)
+ (overlay-put overlay 'flycheck-error err)
+ ;; TODO: Consider hooks to re-check if overlay contents change
+ (overlay-put overlay 'category category)
+ (unless flycheck-highlighting-mode
+ ;; Erase the highlighting from the overlay if requested by the user
+ (overlay-put overlay 'face nil))
+ (when flycheck-indication-mode
+ (overlay-put overlay 'before-string
+ (flycheck-error-level-make-fringe-icon
+ level flycheck-indication-mode)))
+ (overlay-put overlay 'help-echo (flycheck-error-message err))
+ overlay))
+
+(defun flycheck-filter-overlays (overlays)
+ "Get all Flycheck overlays from OVERLAYS."
+ (-filter (lambda (o) (overlay-get o 'flycheck-overlay)) overlays))
+
+(defun flycheck-overlays-at (pos)
+ "Get all Flycheck overlays at POS."
+ (flycheck-filter-overlays (overlays-at pos)))
+
+(defun flycheck-overlays-in (beg end)
+ "Get all Flycheck overlays between BEG and END."
+ (flycheck-filter-overlays (overlays-in beg end)))
+
+(defun flycheck-overlay-errors-at (pos)
+ "Return a list of all flycheck errors overlayed at POS."
+ (mapcar (lambda (o) (overlay-get o 'flycheck-error))
+ (flycheck-overlays-at pos)))
+
+(defun flycheck-overlay-errors-in (beg end)
+ "Return a list of all flycheck errors overlayed between BEG and END."
+ (mapcar (lambda (o) (overlay-get o 'flycheck-error))
+ (flycheck-overlays-in beg end)))
+
+(defvar-local flycheck-overlays-to-delete nil
+ "Overlays mark for deletion after all syntax checks completed.")
+(put 'flycheck-overlays-to-delete 'permanent-local t)
+
+(defun flycheck-delete-all-overlays ()
+ "Remove all flycheck overlays in the current buffer."
+ (flycheck-delete-marked-overlays)
+ (save-restriction
+ (widen)
+ (mapc #'delete-overlay (flycheck-overlays-in (point-min) (point-max)))))
+
+(defun flycheck-mark-all-overlays-for-deletion ()
+ "Mark all current overlays for deletion."
+ (setq flycheck-overlays-to-delete
+ (append (flycheck-overlays-in (point-min) (point-max))
+ flycheck-overlays-to-delete)))
+
+(defun flycheck-delete-marked-overlays ()
+ "Delete all overlays marked for deletion."
+ (mapc #'delete-overlay flycheck-overlays-to-delete)
+ (setq flycheck-overlays-to-delete nil))
+
+\f
+;;; Error navigation in the current buffer
+(defun flycheck-error-level-interesting-at-pos-p (pos)
+ "Check if error severity at POS passes `flycheck-error-level-interesting-p'."
+ (flycheck-error-level-interesting-p (get-char-property pos 'flycheck-error)))
+
+(defun flycheck-error-level-interesting-p (err)
+ "Check if ERR severity is >= `flycheck-navigation-minimum-level'."
+ (when (flycheck-error-p err)
+ (-if-let (min-level flycheck-navigation-minimum-level)
+ (<= (flycheck-error-level-severity min-level)
+ (flycheck-error-level-severity (flycheck-error-level err)))
+ t)))
+
+(defun flycheck-next-error-pos (n &optional reset)
+ "Get the position of the N-th next error.
+
+With negative n, get the position of the (-N)-th previous error
+instead. With non-nil RESET, search from `point-min', otherwise
+search from the current point.
+
+Return the position of the next or previous error, or nil if
+there is none."
+ (let ((n (or n 1))
+ (pos (if reset (point-min) (point))))
+ (if (>= n 0)
+ ;; Search forwards
+ (while (and pos (> n 0))
+ (setq n (1- n))
+ (when (get-char-property pos 'flycheck-error)
+ ;; Move beyond from the current error if any
+ (setq pos (next-single-char-property-change pos 'flycheck-error)))
+ (while (not (or (= pos (point-max))
+ (flycheck-error-level-interesting-at-pos-p pos)))
+ ;; Scan for the next error
+ (setq pos (next-single-char-property-change pos 'flycheck-error)))
+ (when (and (= pos (point-max))
+ (not (flycheck-error-level-interesting-at-pos-p pos)))
+ ;; If we reached the end of the buffer, but no error, we didn't find
+ ;; any
+ (setq pos nil)))
+ ;; Search backwards
+ (while (and pos (< n 0))
+ (setq n (1+ n))
+ ;; Loop until we find an error. We need to check the position *before*
+ ;; the current one, because `previous-single-char-property-change'
+ ;; always moves to the position *of* the change.
+ (while (not (or (= pos (point-min))
+ (flycheck-error-level-interesting-at-pos-p (1- pos))))
+ (setq pos (previous-single-char-property-change pos 'flycheck-error)))
+ (when (and (= pos (point-min))
+ (not (flycheck-error-level-interesting-at-pos-p pos)))
+ ;; We didn't find any error.
+ (setq pos nil))
+ (when pos
+ ;; We found an error, so move to its beginning
+ (setq pos (previous-single-char-property-change pos
+ 'flycheck-error)))))
+ pos))
+
+(defun flycheck-next-error-function (n reset)
+ "Visit the N-th error from the current point.
+
+Intended for use with `next-error-function'."
+ (let ((pos (flycheck-next-error-pos n reset)))
+ (if pos
+ (goto-char pos)
+ (user-error "No more Flycheck errors"))))
+
+(defun flycheck-next-error (&optional n reset)
+ "Visit the N-th error from the current point.
+
+If RESET is given and non-nil, re-start from the beginning of the buffer.
+
+N specifies how many errors to move forwards. If negative, move backwards."
+ (interactive "P")
+ (when (consp n)
+ ;; Universal prefix argument means reset
+ (setq reset t n nil))
+ (flycheck-next-error-function n reset))
+
+(defun flycheck-previous-error (&optional n)
+ "Visit the N-th previous error.
+
+If given, N specifies the number of errors to move backwards. If
+N is negative, move forwards instead."
+ (interactive "P")
+ (flycheck-next-error (- (or n 1))))
+
+(defun flycheck-first-error (&optional n)
+ "Visit the N-th error from beginning of the buffer.
+
+If given, N specifies the number of errors to move forward from
+the beginning of the buffer."
+ (interactive "P")
+ (flycheck-next-error n 'reset))
+
+\f
+;;; Listing errors in buffers
+(defconst flycheck-error-list-buffer "*Flycheck errors*"
+ "The name of the buffer to show error lists.")
+
+(defvar flycheck-error-list-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "n") #'flycheck-error-list-next-error)
+ (define-key map (kbd "p") #'flycheck-error-list-previous-error)
+ (define-key map (kbd "g") #'flycheck-error-list-check-source)
+ (define-key map (kbd "RET") #'flycheck-error-list-goto-error)
+ map)
+ "The keymap of `flycheck-error-list-mode'.")
+
+(defconst flycheck-error-list-format
+ [("Line" 4 flycheck-error-list-entry-< :right-align t)
+ ("Col" 3 nil :right-align t)
+ ("Level" 8 flycheck-error-list-entry-level-<)
+ ("ID" 6 t)
+ ("Message" 0 t)
+ (" (Checker)" 8 t)]
+ "Table format for the error list.")
+
+(define-derived-mode flycheck-error-list-mode tabulated-list-mode "Flycheck errors"
+ "Major mode for listing Flycheck errors.
+
+\\{flycheck-error-list-mode-map}"
+ (setq tabulated-list-format flycheck-error-list-format
+ ;; Sort by location initially
+ tabulated-list-sort-key (cons "Line" nil)
+ tabulated-list-padding 1
+ tabulated-list-entries #'flycheck-error-list-entries
+ ;; `revert-buffer' updates the mode line for us, so all we need to do is
+ ;; set the corresponding mode line construct.
+ mode-line-buffer-identification flycheck-error-list-mode-line)
+ (tabulated-list-init-header))
+
+(defvar-local flycheck-error-list-source-buffer nil
+ "The current source buffer of the error list.")
+;; Needs to permanently local to preserve the source buffer across buffer
+;; reversions
+(put 'flycheck-error-list-source-buffer 'permanent-local t)
+
+(defun flycheck-error-list-set-source (buffer)
+ "Set BUFFER as the source buffer of the error list."
+ (when (get-buffer flycheck-error-list-buffer)
+ (with-current-buffer flycheck-error-list-buffer
+ ;; Only update the source when required
+ (unless (eq buffer flycheck-error-list-source-buffer)
+ (setq flycheck-error-list-source-buffer buffer)
+ (flycheck-error-list-refresh)))))
+
+(defun flycheck-error-list-update-source ()
+ "Update the source buffer of the error list."
+ (when (not (eq (current-buffer) (get-buffer flycheck-error-list-buffer)))
+ ;; We must not update the source buffer, if the current buffer is the error
+ ;; list itself.
+ (flycheck-error-list-set-source (current-buffer))))
+
+(defun flycheck-error-list-check-source ()
+ "Trigger a syntax check in the source buffer of the error list."
+ (interactive)
+ (let ((buffer (get-buffer flycheck-error-list-source-buffer)))
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (flycheck-buffer)))))
+
+(define-button-type 'flycheck-error-list
+ 'action #'flycheck-error-list-button-goto-error
+ 'help-echo "mouse-2, RET: goto error")
+
+(defun flycheck-error-list-button-goto-error (button)
+ "Go to the error at BUTTON."
+ (flycheck-error-list-goto-error (button-start button)))
+
+(defsubst flycheck-error-list-make-cell (text &optional face)
+ "Make an error list cell with TEXT and FACE."
+ (let ((face (or face 'default)))
+ (list text 'type 'flycheck-error-list 'face face)))
+
+(defsubst flycheck-error-list-make-number-cell (number face)
+ "Make a table cell for a NUMBER with FACE.
+
+Convert NUMBER to string, fontify it with FACE and return the
+string with attached text properties."
+ (flycheck-error-list-make-cell
+ (if (numberp number) (number-to-string number) "")
+ face))
+
+(defun flycheck-error-list-make-entry (error)
+ "Make a table cell for the given ERROR.
+
+Return a list with the contents of the table cell."
+ (let* ((level (flycheck-error-level error))
+ (level-face (flycheck-error-level-error-list-face level))
+ (line (flycheck-error-line error))
+ (column (flycheck-error-column error))
+ (message (or (flycheck-error-message error)
+ (format "Unknown %s" (symbol-name level))))
+ (id (flycheck-error-id error))
+ (checker (flycheck-error-checker error)))
+ (list error
+ (vector (flycheck-error-list-make-number-cell
+ line 'flycheck-error-list-line-number)
+ (flycheck-error-list-make-number-cell
+ column 'flycheck-error-list-column-number)
+ (flycheck-error-list-make-cell
+ (symbol-name (flycheck-error-level error)) level-face)
+ (flycheck-error-list-make-cell
+ (if id (format "%s" id) "")
+ 'flycheck-error-list-id)
+ (flycheck-error-list-make-cell message)
+ (flycheck-error-list-make-cell
+ (format "(%s)" checker)
+ 'flycheck-error-list-checker-name)))))
+
+(defun flycheck-error-list-entries ()
+ "Create the entries for the error list."
+ (when (buffer-live-p flycheck-error-list-source-buffer)
+ (let ((errors (buffer-local-value 'flycheck-current-errors
+ flycheck-error-list-source-buffer)))
+ (mapcar #'flycheck-error-list-make-entry errors))))
+
+(defun flycheck-error-list-entry-< (entry1 entry2)
+ "Determine whether ENTRY1 is before ENTRY2 by location.
+
+See `flycheck-error-<'."
+ (flycheck-error-< (car entry1) (car entry2)))
+
+(defun flycheck-error-list-entry-level-< (entry1 entry2)
+ "Determine whether ENTRY1 is before ENTRY2 by level.
+
+See `flycheck-error-level-<'."
+ (not (flycheck-error-level-< (car entry1) (car entry2))))
+
+(defvar flycheck-error-list-mode-line-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [mode-line mouse-1]
+ #'flycheck-error-list-mouse-switch-to-source)
+ map)
+ "Keymap for error list mode line.")
+
+(defun flycheck-error-list-propertized-source-name ()
+ "Get the name of the current source buffer for the mode line.
+
+Propertize the name of the current source buffer for use in the
+mode line indication of `flycheck-error-list-mode'."
+ (let ((name (replace-regexp-in-string
+ (rx "%") "%%"
+ (buffer-name flycheck-error-list-source-buffer)
+ 'fixed-case 'literal)))
+ (propertize name 'face 'mode-line-buffer-id
+ 'mouse-face 'mode-line-highlight
+ 'help-echo "mouse-1: switch to source"
+ 'local-map flycheck-error-list-mode-line-map)))
+
+(defun flycheck-error-list-mouse-switch-to-source (event)
+ "Switch to the error list source buffer of the EVENT window."
+ (interactive "e")
+ (save-selected-window
+ (when (eventp event)
+ (select-window (posn-window (event-start event))))
+ (when (buffer-live-p flycheck-error-list-source-buffer)
+ (switch-to-buffer flycheck-error-list-source-buffer))))
+
+(defun flycheck-get-error-list-window-list (&optional all-frames)
+ "Get all windows displaying the error list.
+
+ALL-FRAMES specifies the frames to consider, as in
+`get-buffer-window-list'."
+ (-when-let (buf (get-buffer flycheck-error-list-buffer))
+ (get-buffer-window-list buf nil all-frames)))
+
+(defun flycheck-get-error-list-window (&optional all-frames)
+ "Get a window displaying the error list, or nil if none.
+
+ALL-FRAMES specifies the frames to consider, as in
+`get-buffer-window'."
+ (-when-let (buf (get-buffer flycheck-error-list-buffer))
+ (get-buffer-window buf all-frames)))
+
+(defun flycheck-error-list-recenter-at (pos)
+ "Recenter the error list at POS."
+ (dolist (window (flycheck-get-error-list-window-list t))
+ (with-selected-window window
+ (goto-char pos)
+ (recenter))))
+
+(defun flycheck-error-list-refresh ()
+ "Refresh the current error list.
+
+Add all errors currently reported for the current
+`flycheck-error-list-source-buffer', and recenter the error
+list."
+ ;; We only refresh the error list, when it is visible in a window, and we
+ ;; select this window while reverting, because Tabulated List mode attempts to
+ ;; recenter the error at the old location, so it must have the proper window
+ ;; selected.
+ (-when-let (window (flycheck-get-error-list-window t))
+ (with-selected-window window
+ (revert-buffer))
+ (run-hooks 'flycheck-error-list-after-refresh-hook)
+ (let ((preserve-pos (eq (current-buffer)
+ (get-buffer flycheck-error-list-buffer))))
+ ;; If the error list is the current buffer, don't recenter when
+ ;; highlighting
+ (flycheck-error-list-highlight-errors preserve-pos))))
+
+(defun flycheck-error-list-goto-error (&optional pos)
+ "Go to the location of the error at POS in the error list.
+
+POS defaults to `point'."
+ (interactive)
+ (-when-let* ((error (tabulated-list-get-id pos))
+ (buffer (flycheck-error-buffer error)))
+ (when (buffer-live-p buffer)
+ (if (eq (window-buffer) (get-buffer flycheck-error-list-buffer))
+ ;; When called from within the error list, keep the error list,
+ ;; otherwise replace the current buffer.
+ (pop-to-buffer buffer 'other-window)
+ (switch-to-buffer buffer))
+ (let ((pos (flycheck-error-pos error)))
+ (unless (eq (goto-char pos) (point))
+ ;; If widening gets in the way of moving to the right place, remove it
+ ;; and try again
+ (widen)
+ (goto-char pos)))
+ ;; Re-highlight the errors
+ (flycheck-error-list-highlight-errors 'preserve-pos))))
+
+(defun flycheck-error-list-next-error-pos (pos &optional n)
+ "Get the N'th next error in the error list from POS.
+
+N defaults to 1. If N is negative, search for the previous error
+instead.
+
+Get the beginning position of the N'th next error from POS, or
+nil, if there is no next error."
+ (let ((n (or n 1)))
+ (if (>= n 0)
+ ;; Search forward
+ (while (and pos (/= n 0))
+ (setq n (1- n))
+ (setq pos (next-single-property-change pos 'tabulated-list-id)))
+ ;; Search backwards
+ (while (/= n 0)
+ (setq n (1+ n))
+ ;; We explicitly give the limit here to explicitly have the minimum
+ ;; point returned, to be able to move to the first error (which starts
+ ;; at `point-min')
+ (setq pos (previous-single-property-change pos 'tabulated-list-id
+ nil (point-min)))))
+ pos))
+
+(defun flycheck-error-list-previous-error (n)
+ "Go to the N'th previous error in the error list."
+ (interactive "P")
+ (flycheck-error-list-next-error (- (or n 1))))
+
+(defun flycheck-error-list-next-error (n)
+ "Go to the N'th next error in the error list."
+ (interactive "P")
+ (let ((pos (flycheck-error-list-next-error-pos (point) n)))
+ (when (and pos (/= pos (point)))
+ (goto-char pos)
+ (save-selected-window
+ ;; Keep the error list selected, so that the user can navigate errors by
+ ;; repeatedly pressing n/p, without having to re-select the error list
+ ;; window.
+ (flycheck-error-list-goto-error)))))
+
+(defvar-local flycheck-error-list-highlight-overlays nil
+ "Error highlight overlays in the error list buffer.")
+(put 'flycheck-error-list-highlight-overlays 'permanent-local t)
+
+(defun flycheck-error-list-highlight-errors (&optional preserve-pos)
+ "Highlight errors in the error list.
+
+Highlight all errors in the error lists that are at point in the
+source buffer, and on the same line as point. Then recenter the
+error list to the highlighted error, unless PRESERVE-POS is
+non-nil."
+ (when (get-buffer flycheck-error-list-buffer)
+ (let ((current-errors (flycheck-overlay-errors-in (line-beginning-position)
+ (line-end-position))))
+ (with-current-buffer flycheck-error-list-buffer
+ (let ((old-overlays flycheck-error-list-highlight-overlays)
+ (min-point (point-max))
+ (max-point (point-min)))
+ ;; Display the new overlays first, to avoid re-display flickering
+ (setq flycheck-error-list-highlight-overlays nil)
+ (when current-errors
+ (let ((next-error-pos (point-min)))
+ (while next-error-pos
+ (let* ((beg next-error-pos)
+ (end (flycheck-error-list-next-error-pos beg))
+ (err (tabulated-list-get-id beg)))
+ (when (member err current-errors)
+ (setq min-point (min min-point beg)
+ max-point (max max-point beg))
+ (let ((ov (make-overlay beg
+ ;; Extend overlay to the beginning of
+ ;; the next line, to highlight the
+ ;; whole line
+ (or end (point-max)))))
+ (push ov flycheck-error-list-highlight-overlays)
+ (overlay-put ov 'flycheck-error-highlight-overlay t)
+ (overlay-put ov 'face 'flycheck-error-list-highlight)))
+ (setq next-error-pos end)))))
+ ;; Delete the old overlays
+ (mapc #'delete-overlay old-overlays)
+ (when (and (not preserve-pos) current-errors)
+ ;; Move point to the middle error
+ (goto-char (+ min-point (/ (- max-point min-point) 2)))
+ (beginning-of-line)
+ ;; And recenter the error list at this position
+ (flycheck-error-list-recenter-at (point))))))))
+
+(defun flycheck-list-errors ()
+ "Show the error list for the current buffer."
+ (interactive)
+ (unless flycheck-mode
+ (user-error "Flycheck mode not enabled"))
+ ;; Create and initialize the error list
+ (unless (get-buffer flycheck-error-list-buffer)
+ (with-current-buffer (get-buffer-create flycheck-error-list-buffer)
+ (flycheck-error-list-mode)))
+ (flycheck-error-list-set-source (current-buffer))
+ ;; Show the error list in a window, and re-select the old window
+ (display-buffer flycheck-error-list-buffer)
+ ;; Finally, refresh the error list to show the most recent errors
+ (flycheck-error-list-refresh))
+
+(defalias 'list-flycheck-errors 'flycheck-list-errors)
+
+\f
+;;; Displaying errors in the current buffer
+(defun flycheck-display-errors (errors)
+ "Display ERRORS using `flycheck-display-errors-function'."
+ (when flycheck-display-errors-function
+ (funcall flycheck-display-errors-function errors)))
+
+(defvar-local flycheck-display-error-at-point-timer nil
+ "Timer to automatically show the error at point in minibuffer.")
+
+(defun flycheck-cancel-error-display-error-at-point-timer ()
+ "Cancel the error display timer for the current buffer."
+ (when flycheck-display-error-at-point-timer
+ (cancel-timer flycheck-display-error-at-point-timer)
+ (setq flycheck-display-error-at-point-timer nil)))
+
+(defun flycheck-display-error-at-point ()
+ "Display the all error messages at point in minibuffer."
+ (flycheck-cancel-error-display-error-at-point-timer)
+ (when flycheck-mode
+ (-when-let (errors (flycheck-overlay-errors-at (point)))
+ (flycheck-display-errors errors))))
+
+(defun flycheck-display-error-at-point-soon ()
+ "Display the first error message at point in minibuffer delayed."
+ (flycheck-cancel-error-display-error-at-point-timer)
+ (when (flycheck-overlays-at (point))
+ (setq flycheck-display-error-at-point-timer
+ (run-at-time flycheck-display-errors-delay nil 'flycheck-display-error-at-point))))
+
+\f
+;;; Functions to display errors
+(defconst flycheck-error-message-buffer "*Flycheck error messages*"
+ "The name of the buffer to show long error messages in.")
+
+(defun flycheck-error-message-buffer ()
+ "Get the buffer object to show long error messages in.
+
+Get the buffer named by variable `flycheck-error-message-buffer',
+or nil if the buffer does not exist."
+ (get-buffer flycheck-error-message-buffer))
+
+(defun flycheck-may-use-echo-area-p ()
+ "Determine whether the echo area may be used.
+
+The echo area may be used if the cursor is not in the echo area,
+and if the echo area is not occupied by minibuffer input."
+ (not (or cursor-in-echo-area (active-minibuffer-window))))
+
+(defun flycheck-display-error-messages (errors)
+ "Display the messages of ERRORS.
+
+Concatenate all non-nil messages of ERRORS separated by empty
+lines, and display them with `display-message-or-buffer', which
+shows the messages either in the echo area or in a separate
+buffer, depending on the number of lines. See Info
+node `(elisp)Displaying Messages' for more information.
+
+In the latter case, show messages in
+`flycheck-error-message-buffer'."
+ (when (and errors (flycheck-may-use-echo-area-p))
+ (let ((messages (mapcar #'flycheck-error-format-message-and-id errors)))
+ (display-message-or-buffer (string-join messages "\n\n")
+ flycheck-error-message-buffer))))
+
+(defun flycheck-display-error-messages-unless-error-list (errors)
+ "Show messages of ERRORS unless the error list is visible.
+
+Like `flycheck-display-error-messages', but only if the error
+list (see `flycheck-list-errors') is not visible in any window in
+the current frame."
+ (unless (flycheck-get-error-list-window 'current-frame)
+ (flycheck-display-error-messages errors)))
+
+(defun flycheck-hide-error-buffer ()
+ "Hide the Flycheck error buffer if necessary.
+
+Hide the error buffer if there is no error under point."
+ (-when-let* ((buffer (flycheck-error-message-buffer))
+ (window (get-buffer-window buffer)))
+ (unless (flycheck-overlays-at (point))
+ (quit-window nil window))))
+
+\f
+;;; Working with errors
+(defun flycheck-copy-errors-as-kill (pos &optional formatter)
+ "Copy each error at POS into kill ring, using FORMATTER.
+
+FORMATTER is a function to turn an error into a string,
+defaulting to `flycheck-error-message'.
+
+Interactively, use `flycheck-error-format-message-and-id' as
+FORMATTER with universal prefix arg, and `flycheck-error-id' with
+normal prefix arg, i.e. copy the message and the ID with
+universal prefix arg, and only the id with normal prefix arg."
+ (interactive (list (point)
+ (pcase current-prefix-arg
+ ((pred not) #'flycheck-error-message)
+ ((pred consp) #'flycheck-error-format-message-and-id)
+ (_ #'flycheck-error-id))))
+ (let ((messages (delq nil (mapcar (or formatter #'flycheck-error-message)
+ (flycheck-overlay-errors-at pos)))))
+ (when messages
+ (mapc #'kill-new (reverse messages))
+ (message (string-join messages "\n")))))
+
+(define-obsolete-function-alias 'flycheck-copy-messages-as-kill
+ 'flycheck-copy-errors-as-kill "0.22")
+
+\f
+;;; Syntax checkers using external commands
+(defun flycheck-command-argument-p (arg)
+ "Check whether ARG is a valid command argument."
+ (pcase arg
+ ((pred stringp) t)
+ ((or `source `source-inplace `source-original) t)
+ ((or `temporary-directory `temporary-file-name) t)
+ (`null-device t)
+ (`(config-file ,option-name ,config-file-var)
+ (and (stringp option-name)
+ (symbolp config-file-var)))
+ (`(config-file ,option-name ,config-file-var ,prepender)
+ (and (stringp option-name)
+ (symbolp config-file-var)
+ (symbolp prepender)))
+ (`(,(or `option `option-list) ,option-name ,option-var)
+ (and (stringp option-name)
+ (symbolp option-var)))
+ (`(,(or `option `option-list) ,option-name ,option-var ,prepender)
+ (and (stringp option-name)
+ (symbolp option-var)
+ (symbolp prepender)))
+ (`(,(or `option `option-list) ,option-name ,option-var ,prepender ,filter)
+ (and (stringp option-name)
+ (symbolp option-var)
+ (symbolp prepender)
+ (symbolp filter)))
+ (`(option-flag ,option-name ,option-var)
+ (and (stringp option-name)
+ (symbolp option-var)))
+ (`(eval ,_) t)
+ (_ nil)))
+
+;;;###autoload
+(defun flycheck-define-command-checker (symbol docstring &rest properties)
+ "Define SYMBOL as syntax checker which runs a command.
+
+Define SYMBOL as generic syntax checker via
+`flycheck-define-generic-checker', which uses an external command
+to check the buffer. SYMBOL and DOCSTRING are the same as for
+`flycheck-define-generic-checker'.
+
+In addition to the properties understood by
+`flycheck-define-generic-checker', the following PROPERTIES
+constitute a command syntax checker. Unless otherwise noted, all
+properties are mandatory. Note that the default `:error-filter'
+of command checkers is `flycheck-sanitize-errors'.
+
+`:command COMMAND'
+ The command to run for syntax checking.
+
+ COMMAND is a list of the form `(EXECUTABLE [ARG ...])'.
+
+ EXECUTABLE is a string with the executable of this syntax
+ checker. It can be overridden with the variable
+ `flycheck-SYMBOL-executable'. Note that this variable is
+ NOT implicitly defined by this function. Use
+ `flycheck-def-executable-var' to define this variable.
+
+ Each ARG is an argument to the executable, either as string,
+ or as special symbol or form for
+ `flycheck-substitute-argument', which see.
+
+`:error-patterns PATTERNS'
+ A list of patterns to parse the output of the `:command'.
+
+ Each ITEM in PATTERNS is a list `(LEVEL SEXP ...)', where
+ LEVEL is a Flycheck error level (see
+ `flycheck-define-error-level'), followed by one or more RX
+ `SEXP's which parse an error of that level and extract line,
+ column, file name and the message.
+
+ See `rx' for general information about RX, and
+ `flycheck-rx-to-string' for some special RX forms provided
+ by Flycheck.
+
+ All patterns are applied in the order of declaration to the
+ whole output of the syntax checker. Output already matched
+ by a pattern will not be matched by subsequent patterns. In
+ other words, the first pattern wins.
+
+ This property is optional. If omitted, however, an
+ `:error-parser' is mandatory.
+
+`:error-parser FUNCTION'
+ A function to parse errors with.
+
+ The function shall accept three arguments OUTPUT CHECKER
+ BUFFER. OUTPUT is the syntax checker output as string,
+ CHECKER the syntax checker that was used, and BUFFER a
+ buffer object representing the checked buffer. The function
+ must return a list of `flycheck-error' objects parsed from
+ OUTPUT.
+
+ This property is optional. If omitted, it defaults to
+ `flycheck-parse-with-patterns'. In this case,
+ `:error-patterns' is mandatory.
+
+Note that you may not give `:start', `:interrupt', and
+`:print-doc' for a command checker. You can give a custom
+`:verify' function, but you should take care to call
+`flycheck-verify-command-checker' in a custom `:verify'
+function."
+ (declare (indent 1)
+ (doc-string 2))
+ (dolist (prop '(:start :interrupt :print-doc))
+ (when (plist-get properties prop)
+ (error "%s not allowed in definition of command syntax checker %s"
+ prop symbol)))
+
+ (unless (plist-get properties :error-filter)
+ ;; Default to `flycheck-sanitize-errors' as error filter
+ (setq properties (plist-put properties :error-filter
+ #'flycheck-sanitize-errors)))
+
+ (let ((command (plist-get properties :command))
+ (patterns (plist-get properties :error-patterns))
+ (parser (or (plist-get properties :error-parser)
+ #'flycheck-parse-with-patterns))
+ (predicate (plist-get properties :predicate)))
+
+ (unless command
+ (error "Missing :command in syntax checker %s" symbol))
+ (unless (stringp (car command))
+ (error "Command executable for syntax checker %s must be a string: %S"
+ symbol (car command)))
+ (dolist (arg (cdr command))
+ (unless (flycheck-command-argument-p arg)
+ (error "Invalid command argument %S in syntax checker %s" arg symbol)))
+ (when (and (eq parser 'flycheck-parse-with-patterns)
+ (not patterns))
+ (error "Missing :error-patterns in syntax checker %s" symbol))
+
+ (setq properties
+ ;; Construct a predicate that checks whether the executable exists, to
+ ;; guard against syntax checker tools which are not installed
+ (plist-put properties :predicate
+ (lambda ()
+ (and (executable-find (flycheck-checker-executable symbol))
+ (or (not predicate) (funcall predicate))))))
+
+ (apply #'flycheck-define-generic-checker symbol docstring
+ :start #'flycheck-start-command-checker
+ :interrupt #'flycheck-interrupt-command-checker
+ :print-doc #'flycheck-command-checker-print-doc
+ :verify #'flycheck-verify-command-checker
+ properties)
+
+ ;; Pre-compile all errors patterns into strings, so that we don't need to do
+ ;; that on each error parse
+ (let ((patterns (mapcar (lambda (p)
+ (cons (flycheck-rx-to-string `(and ,@(cdr p))
+ 'no-group)
+ (car p)))
+ patterns)))
+ (pcase-dolist (`(,prop . ,value)
+ `((flycheck-command . ,command)
+ (flycheck-error-parser . ,parser)
+ (flycheck-error-patterns . ,patterns)))
+ (put symbol prop value)))))
+
+(eval-and-compile
+ ;; Make this function available during byte-compilation, since we need it
+ ;; at macro expansion of `flycheck-def-executable-var'.
+ (defun flycheck-checker-executable-variable (checker)
+ "Get the executable variable of CHECKER.
+
+The executable variable is named `flycheck-CHECKER-executable'."
+ (intern (format "flycheck-%s-executable" checker))))
+
+(defun flycheck-checker-default-executable (checker)
+ "Get the default executable of CHECKER."
+ (car (get checker 'flycheck-command)))
+
+(defun flycheck-checker-executable (checker)
+ "Get the command executable of CHECKER.
+
+The executable is either the value of the variable
+`flycheck-CHECKER-executable', or the default executable given in
+the syntax checker definition, if the variable is nil."
+ (let ((var (flycheck-checker-executable-variable checker)))
+ (or (and (boundp var) (symbol-value var))
+ (flycheck-checker-default-executable checker))))
+
+(defun flycheck-checker-arguments (checker)
+ "Get the command arguments of CHECKER."
+ (cdr (get checker 'flycheck-command)))
+
+(defun flycheck-checker-error-patterns (checker)
+ "Get the error patterns of CHECKER.
+
+Each pattern has the form `(REGEXP . LEVEL)' where REGEXP is the
+regular expression, and LEVEL the corresponding level symbol."
+ (get checker 'flycheck-error-patterns))
+
+(defun flycheck-checker-error-parser (checker)
+ "Get the error parser of CHECKER."
+ (get checker 'flycheck-error-parser))
+
+(defun flycheck-substitute-argument (arg checker)
+ "Substitute ARG for CHECKER.
+
+Return a list of real arguments for the executable of CHECKER,
+substituted for the symbolic argument ARG. Single arguments,
+e.g. if ARG is a literal strings, are wrapped in a list.
+
+ARG may be one of the following forms:
+
+STRING
+ Return ARG unchanged.
+
+`source', `source-inplace'
+ Create a temporary file to check and return its path. With
+ `source-inplace' create the temporary file in the same
+ directory as the original file. The value of
+ `flycheck-temp-prefix' is used as prefix of the file name.
+
+ With `source', try to retain the non-directory component of
+ the buffer's file name in the temporary file.
+
+ `source' is the preferred way to pass the input file to a
+ syntax checker. `source-inplace' should only be used if the
+ syntax checker needs other files from the source directory,
+ such as include files in C.
+
+`source-original'
+ Return the path of the actual file to check, or an empty
+ string if the buffer has no file name.
+
+ Note that the contents of the file may not be up to date
+ with the contents of the buffer to check. Do not use this
+ as primary input to a checker, unless absolutely necessary.
+
+ When using this symbol as primary input to the syntax
+ checker, add `flycheck-buffer-saved-p' to the `:predicate'.
+
+`temporary-directory'
+ Create a unique temporary directory and return its path.
+
+`temporary-file-name'
+ Return a unique temporary filename. The file is *not*
+ created.
+
+ To ignore the output of syntax checkers, try `null-device'
+ first.
+
+`null-device'
+ Return the value of `null-device', i.e the system null
+ device.
+
+ Use this option to ignore the output of a syntax checker.
+ If the syntax checker cannot handle the null device, or
+ won't write to an existing file, try `temporary-file-name'
+ instead.
+
+`(config-file OPTION VARIABLE [PREPEND-FN])'
+ Search the configuration file bound to VARIABLE with
+ `flycheck-locate-config-file' and return a list of arguments
+ that pass this configuration file to the syntax checker, or
+ nil if the configuration file was not found.
+
+ PREPEND-FN is called with the OPTION and the located
+ configuration file, and should return OPTION prepended
+ before the file, either a string or as list. If omitted,
+ PREPEND-FN defaults to `list'.
+
+`(option OPTION VARIABLE [PREPEND-FN [FILTER]])'
+ Retrieve the value of VARIABLE and return a list of
+ arguments that pass this value as value for OPTION to the
+ syntax checker.
+
+ PREPEND-FN is called with the OPTION and the value of
+ VARIABLE, and should return OPTION prepended before the
+ file, either a string or as list. If omitted, PREPEND-FN
+ defaults to `list'.
+
+ FILTER is an optional function to be applied to the value of
+ VARIABLE before prepending. This function must return nil
+ or a string. In the former case, return nil. In the latter
+ case, return a list of arguments as described above.
+
+`(option-list OPTION VARIABLE [PREPEND-FN [FILTER]])'
+ Retrieve the value of VARIABLE, which must be a list,
+ and prepend OPTION before each item in this list, using
+ PREPEND-FN.
+
+ PREPEND-FN is called with the OPTION and each item of the
+ list as second argument, and should return OPTION prepended
+ before the item, either as string or as list. If omitted,
+ PREPEND-FN defaults to `list'.
+
+ FILTER is an optional function to be applied to each item in
+ the list before prepending OPTION. It shall return the
+ option value for each item as string, or nil, if the item is
+ to be ignored.
+
+`(option-flag OPTION VARIABLE)'
+ Retrieve the value of VARIABLE and return OPTION, if the
+ value is non-nil. Otherwise return nil.
+
+`(eval FORM)'
+ Return the result of evaluating FORM in the buffer to be
+ checked. FORM must either return a string or a list of
+ strings, or nil to indicate that nothing should be
+ substituted for CELL. For all other return types, signal an
+ error
+
+ _No_ further substitutions are performed, neither in FORM
+ before it is evaluated, nor in the result of evaluating
+ FORM.
+
+In all other cases, signal an error.
+
+Note that substitution is *not* recursive. No symbols or cells
+are substituted within the body of cells!"
+ (pcase arg
+ ((pred stringp) (list arg))
+ (`source
+ (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-system)))
+ (`source-inplace
+ (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-inplace)))
+ (`source-original (list (or (buffer-file-name) "")))
+ (`temporary-directory (list (flycheck-temp-dir-system)))
+ (`temporary-file-name
+ (let ((directory (flycheck-temp-dir-system)))
+ (list (make-temp-name (expand-file-name "flycheck" directory)))))
+ (`null-device (list null-device))
+ (`(config-file ,option-name ,file-name-var)
+ (-when-let* ((value (symbol-value file-name-var))
+ (file-name (flycheck-locate-config-file value checker)))
+ (flycheck-prepend-with-option option-name (list file-name))))
+ (`(config-file ,option-name ,file-name-var ,prepend-fn)
+ (-when-let* ((value (symbol-value file-name-var))
+ (file-name (flycheck-locate-config-file value checker)))
+ (flycheck-prepend-with-option option-name (list file-name) prepend-fn)))
+ (`(option ,option-name ,variable)
+ (-when-let (value (symbol-value variable))
+ (unless (stringp value)
+ (error "Value %S of %S for option %s is not a string"
+ value variable option-name))
+ (flycheck-prepend-with-option option-name (list value))))
+ (`(option ,option-name ,variable ,prepend-fn)
+ (-when-let (value (symbol-value variable))
+ (unless (stringp value)
+ (error "Value %S of %S for option %s is not a string"
+ value variable option-name))
+ (flycheck-prepend-with-option option-name (list value) prepend-fn)))
+ (`(option ,option-name ,variable ,prepend-fn ,filter)
+ (-when-let (value (funcall filter (symbol-value variable)))
+ (unless (stringp value)
+ (error "Value %S of %S (filter: %S) for option %s is not a string"
+ value variable filter option-name))
+ (flycheck-prepend-with-option option-name (list value) prepend-fn)))
+ (`(option-list ,option-name ,variable)
+ (let ((value (symbol-value variable)))
+ (unless (and (listp value) (-all? #'stringp value))
+ (error "Value %S of %S for option %S is not a list of strings"
+ value variable option-name))
+ (flycheck-prepend-with-option option-name value)))
+ (`(option-list ,option-name ,variable ,prepend-fn)
+ (let ((value (symbol-value variable)))
+ (unless (and (listp value) (-all? #'stringp value))
+ (error "Value %S of %S for option %S is not a list of strings"
+ value variable option-name))
+ (flycheck-prepend-with-option option-name value prepend-fn)))
+ (`(option-list ,option-name ,variable ,prepend-fn ,filter)
+ (let ((value (delq nil (mapcar filter (symbol-value variable)))))
+ (unless (and (listp value) (-all? #'stringp value))
+ (error "Value %S of %S for option %S is not a list of strings"
+ value variable option-name))
+ (flycheck-prepend-with-option option-name value prepend-fn)))
+ (`(option-flag ,option-name ,variable)
+ (when (symbol-value variable)
+ (list option-name)))
+ (`(eval ,form)
+ (let ((result (eval form)))
+ (cond
+ ((and (listp result) (-all? #'stringp result)) result)
+ ((stringp result) (list result))
+ (t (error "Invalid result from evaluation of %S: %S" form result)))))
+ (_ (error "Unsupported argument %S" arg))))
+
+(defun flycheck-checker-substituted-arguments (checker)
+ "Get the substituted arguments of a CHECKER.
+
+Substitute each argument of CHECKER using
+`flycheck-substitute-argument'. This replaces any special
+symbols in the command."
+ (apply #'append
+ (mapcar (lambda (arg) (flycheck-substitute-argument arg checker))
+ (flycheck-checker-arguments checker))))
+
+(defun flycheck-start-command-checker (checker callback)
+ "Start a command CHECKER with CALLBACK."
+ (let (process)
+ (condition-case err
+ (let* ((program (flycheck-checker-executable checker))
+ (args (flycheck-checker-substituted-arguments checker))
+ ;; Use pipes to receive output from the syntax checker. They are
+ ;; more efficient and more robust than PTYs, which Emacs uses by
+ ;; default, and since we don't need any job control features, we
+ ;; can easily use pipes.
+ (process-connection-type nil))
+ ;; We pass do not associate the process with any buffer, by
+ ;; passing nil for the BUFFER argument of `start-process'.
+ ;; Instead, we just remember the buffer being checked in a
+ ;; process property (see below). This neatly avoids all
+ ;; side-effects implied by attached a process to a buffer, which
+ ;; may cause conflicts with other packages.
+ ;;
+ ;; See https://github.com/flycheck/flycheck/issues/298 for an
+ ;; example for such a conflict.
+ (setq process (apply 'start-process (format "flycheck-%s" checker)
+ nil program args))
+ (set-process-sentinel process 'flycheck-handle-signal)
+ (set-process-filter process 'flycheck-receive-checker-output)
+ (set-process-query-on-exit-flag process nil)
+ ;; Remember the syntax checker, the buffer and the callback
+ (process-put process 'flycheck-checker checker)
+ (process-put process 'flycheck-callback callback)
+ (process-put process 'flycheck-buffer (current-buffer))
+ ;; Track the temporaries created by argument substitution in the
+ ;; process itself, to get rid of the global state ASAP.
+ (process-put process 'flycheck-temporaries flycheck-temporaries)
+ (setq flycheck-temporaries nil)
+ ;; Return the process
+ process)
+ (error
+ ;; In case of error, clean up our resources, and report the error back to
+ ;; Flycheck
+ (flycheck-safe-delete-temporaries)
+ (when process
+ ;; No need to explicitly delete the temporary files of the process,
+ ;; because deleting runs the sentinel, which will delete them anyway.
+ (delete-process process))
+ (signal (car err) (cdr err))))))
+
+(defun flycheck-interrupt-command-checker (_checker process)
+ "Interrupt a PROCESS."
+ ;; Deleting the process always triggers the sentinel, which does the cleanup
+ (when process
+ (delete-process process)))
+
+(defun flycheck-command-checker-print-doc (checker)
+ "Print additional documentation for a command CHECKER."
+ (let ((executable (flycheck-checker-default-executable checker))
+ (config-file-var (flycheck-checker-config-file-var checker))
+ (option-vars (-sort #'string<
+ (flycheck-checker-option-vars checker))))
+ (princ "\n")
+
+ (let ((doc-start (with-current-buffer standard-output (point-max))))
+ ;; Track the start of our documentation so that we can re-indent it
+ ;; properly
+ (princ " This syntax checker executes \"")
+ (princ executable)
+ (princ "\"")
+ (when config-file-var
+ (princ ", using a configuration file from `")
+ (princ (symbol-name config-file-var))
+ (princ "'"))
+ (princ ". The executable can be overridden with `")
+ (princ (symbol-name (flycheck-checker-executable-variable checker)))
+ (princ "'.")
+
+ (with-current-buffer standard-output
+ (save-excursion
+ (fill-region-as-paragraph doc-start (point-max)))))
+ (princ "\n")
+ (when option-vars
+ (princ "\n This syntax checker can be configured with these options:\n\n")
+ (dolist (var option-vars)
+ (princ (format " * `%s'\n" var))))))
+
+(defun flycheck-verify-command-checker (checker)
+ "Verify a command CHECKER in the current buffer.
+
+Return a list of `flycheck-verification-result' objects for
+CHECKER."
+ (let ((executable (executable-find (flycheck-checker-executable checker))))
+ (list
+ (flycheck-verification-result-new
+ :label "executable"
+ :message (if executable (format "Found at %s" executable) "Not found")
+ :face (if executable 'success '(bold error))))))
+
+\f
+;;; Process management for command syntax checkers
+(defun flycheck-receive-checker-output (process output)
+ "Receive a syntax checking PROCESS OUTPUT."
+ (push output (process-get process 'flycheck-pending-output)))
+
+(defun flycheck-get-output (process)
+ "Get the complete output of PROCESS."
+ (with-demoted-errors "Error while retrieving process output: %S"
+ (let ((pending-output (process-get process 'flycheck-pending-output)))
+ (apply #'concat (nreverse pending-output)))))
+
+(defun flycheck-handle-signal (process _event)
+ "Handle a signal from the syntax checking PROCESS.
+
+_EVENT is ignored."
+ (when (memq (process-status process) '(signal exit))
+ (let ((files (process-get process 'flycheck-temporaries))
+ (buffer (process-get process 'flycheck-buffer))
+ (callback (process-get process 'flycheck-callback)))
+ ;; Delete the temporary files
+ (mapc #'flycheck-safe-delete files)
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (condition-case err
+ (pcase (process-status process)
+ (`signal
+ (funcall callback 'interrupted))
+ (`exit
+ (flycheck-finish-checker-process
+ (process-get process 'flycheck-checker)
+ (process-exit-status process)
+ files
+ (flycheck-get-output process) callback)))
+ (error
+ (funcall callback 'errored (error-message-string err)))))))))
+
+(defun flycheck-finish-checker-process
+ (checker exit-status files output callback)
+ "Finish a checker process from CHECKER with EXIT-STATUS.
+
+FILES is a list of files given as input to the checker. OUTPUT
+is the output of the syntax checker. CALLBACK is the status
+callback to use for reporting.
+
+Parse the OUTPUT and report an appropriate error status."
+ (let ((errors (flycheck-parse-output output checker (current-buffer))))
+ (when (and (/= exit-status 0) (not errors))
+ ;; Warn about a suspicious result from the syntax checker. We do right
+ ;; after parsing the errors, before filtering, because a syntax checker
+ ;; might report errors from other files (e.g. includes) even if there
+ ;; are no errors in the file being checked.
+ (funcall callback 'suspicious
+ (format "Checker %S returned non-zero exit code %s, but no errors from \
+output: %s\nChecker definition probably flawed." checker exit-status output)))
+ (funcall callback 'finished
+ ;; Fix error file names, by substituting them backwards from the
+ ;; temporaries
+ (mapcar (lambda (e) (flycheck-fix-error-filename e files))
+ errors))))
+
+\f
+;;; Executables of command checkers.
+(defmacro flycheck-def-executable-var (checker default-executable)
+ "Define the executable variable for CHECKER.
+
+DEFAULT-EXECUTABLE is the default executable. It is only used in
+the docstring of the variable.
+
+The variable is defined with `defcustom' in the
+`flycheck-executables' group. It's also defined to be risky as
+file-local variable, to avoid arbitrary executables being used
+for syntax checking."
+ (let ((executable-var (flycheck-checker-executable-variable checker)))
+ `(progn
+ (defcustom ,executable-var nil
+ ,(format "The executable of the %s syntax checker.
+
+Either a string containing the name or the path of the
+executable, or nil to use the default executable from the syntax
+checker declaration.
+
+The default executable is %S." checker default-executable)
+ :type '(choice (const :tag "Default executable" nil)
+ (string :tag "Name or path"))
+ :group 'flycheck-executables
+ :risky t))))
+
+(defun flycheck-set-checker-executable (checker &optional executable)
+ "Set the EXECUTABLE of CHECKER in the current buffer.
+
+CHECKER is a syntax checker symbol. EXECUTABLE is a string with
+the name of a executable or the path to an executable file, which
+is to be used as executable for CHECKER. If omitted or nil,
+reset the executable of CHECKER.
+
+Interactively, prompt for a syntax checker and an executable
+file, and set the executable of the selected syntax checker.
+With prefix arg, prompt for a syntax checker only, and reset the
+executable of the select checker to the default.
+
+Set the executable variable of CHECKER, that is,
+`flycheck-CHECKER-executable' to EXECUTABLE. Signal
+`user-error', if EXECUTABLE does not denote a command or an
+executable file.
+
+This command is intended for interactive use only. In Lisp, just
+`let'-bind the corresponding variable, or set it directly. Use
+`flycheck-checker-executable-variable' to obtain the executable
+variable symbol for a syntax checker."
+ (interactive
+ (let* ((checker (read-flycheck-checker "Syntax checker: "))
+ (default-executable (flycheck-checker-default-executable checker))
+ (executable (if current-prefix-arg
+ nil
+ (read-file-name "Executable: " nil default-executable
+ nil nil #'executable-find))))
+ (list checker executable)))
+ (when (and executable (not (executable-find executable)))
+ (user-error "%s is no executable" executable))
+ (let ((variable (flycheck-checker-executable-variable checker)))
+ (set (make-local-variable variable) executable)))
+(put 'flycheck-set-checker-executable 'interactive-only
+ "Set the executable variable directly instead")
+
+\f
+;;; Configuration files and options for command checkers
+;;;###autoload
+(defmacro flycheck-def-config-file-var (symbol checker &optional file-name
+ &rest custom-args)
+ "Define SYMBOL as config file variable for CHECKER, with default FILE-NAME.
+
+SYMBOL is declared as customizable variable using `defcustom', to
+provide a configuration file for the given syntax CHECKER.
+CUSTOM-ARGS are forwarded to `defcustom'.
+
+FILE-NAME is the initial value of the new variable. If omitted,
+the default value is nil.
+
+Use this together with the `config-file' form in the `:command'
+argument to `flycheck-define-checker'."
+ (declare (indent 3))
+ `(progn
+ (put ',checker 'flycheck-config-file-var ',symbol)
+ (defcustom ,symbol ,file-name
+ ,(format "Configuration file for `%s'.
+
+If set to a string, locate the configuration file using the
+functions from `flycheck-locate-config-file-functions'. If the
+file is found pass it to the syntax checker as configuration
+file.
+
+If no configuration file is found, or if this variable is set to
+nil, invoke the syntax checker without a configuration file.
+
+Use this variable as file-local variable if you need a specific
+configuration file a buffer." checker)
+ :type '(choice (const :tag "No configuration file" nil)
+ (string :tag "File name or path"))
+ :group 'flycheck-config-files
+ ,@custom-args)))
+
+(defun flycheck-checker-config-file-var (checker)
+ "Get the associated configuration file variable of CHECKER.
+
+Return nil if CHECKER has no associated configuration file
+variable."
+ (get checker 'flycheck-config-file-var))
+
+(defun flycheck-checker-option-vars (checker)
+ "Get the associated option variables of CHECKER.
+
+Return a (possibly empty) list of variable symbols."
+ (get checker 'flycheck-option-vars))
+
+(defun flycheck-locate-config-file (filename checker)
+ "Locate the configuration file FILENAME for CHECKER.
+
+Locate the configuration file using
+`flycheck-locate-config-file-functions'.
+
+Return the absolute path of the configuration file, or nil if no
+configuration file was found."
+ (-when-let (filepath (run-hook-with-args-until-success
+ 'flycheck-locate-config-file-functions
+ filename checker))
+ (when (file-exists-p filepath)
+ filepath)))
+
+(defun flycheck-locate-config-file-absolute-path (filepath _checker)
+ "Locate a configuration file by a FILEPATH.
+
+If FILEPATH is a contains a path separator, expand it against the
+default directory and return it. Otherwise return nil.
+
+_CHECKER is ignored."
+ ;; If the path is just a plain file name, skip it.
+ (unless (string= (file-name-nondirectory filepath) filepath)
+ (expand-file-name filepath)))
+
+(defun flycheck-locate-config-file-ancestor-directories (filename _checker)
+ "Locate a configuration FILENAME in ancestor directories.
+
+If the current buffer has a file name, search FILENAME in the
+directory of the current buffer and all ancestors thereof (see
+`locate-dominating-file'). If the file is found, return its
+absolute path. Otherwise return nil.
+
+_CHECKER is ignored."
+ (-when-let* ((basefile (buffer-file-name))
+ (directory (locate-dominating-file basefile filename)))
+ (expand-file-name filename directory)))
+
+(defun flycheck-locate-config-file-home (filename _checker)
+ "Locate a configuration FILENAME in the home directory.
+
+Return the absolute path, if FILENAME exists in the user's home
+directory, or nil otherwise."
+ (let ((path (expand-file-name filename "~")))
+ (when (file-exists-p path)
+ path)))
+
+(mapc (apply-partially #'custom-add-frequent-value
+ 'flycheck-locate-config-file-functions)
+ '(flycheck-locate-config-file-absolute-path
+ flycheck-locate-config-file-ancestor-directories
+ flycheck-locate-config-file-home))
+
+;;;###autoload
+(defmacro flycheck-def-option-var (symbol init-value checker docstring
+ &rest custom-args)
+ "Define SYMBOL as option variable with INIT-VALUE for CHECKER.
+
+SYMBOL is declared as customizable variable using `defcustom', to
+provide an option for the given syntax CHECKER. INIT-VALUE is
+the initial value of the variable, and DOCSTRING is its
+docstring. CUSTOM-ARGS are forwarded to `defcustom'.
+
+Use this together with the `option', `option-list' and
+`option-flag' forms in the `:command' argument to
+`flycheck-define-checker'."
+ (declare (indent 3)
+ (doc-string 4))
+ `(progn
+ (let ((options (flycheck-checker-option-vars ',checker)))
+ (unless (memq ',symbol options)
+ (put ',checker 'flycheck-option-vars (cons ',symbol options))))
+ (defcustom ,symbol ,init-value
+ ,(format "%s
+
+This variable is an option for the syntax checker `%s'." docstring checker)
+ :group 'flycheck-options
+ ,@custom-args)))
+
+(defun flycheck-option-int (value)
+ "Convert an integral option VALUE to a string.
+
+If VALUE is nil, return nil. Otherwise return VALUE converted to
+a string."
+ (when value
+ (number-to-string value)))
+
+(defun flycheck-option-comma-separated-list (value &optional separator filter)
+ "Convert VALUE into a list separated by SEPARATOR.
+
+SEPARATOR is a string to separate items in VALUE, defaulting to
+\",\". FILTER is an optional function, which takes a single
+argument and returns either a string or nil.
+
+If VALUE is a list, apply FILTER to each item in VALUE, remove
+all nil items, and return a single string of all remaining items
+separated by SEPARATOR.
+
+Otherwise, apply FILTER to VALUE and return the result.
+SEPARATOR is ignored in this case."
+ (let ((filter (or filter #'identity))
+ (separator (or separator ",")))
+ (if (listp value)
+ (-when-let (value (delq nil (mapcar filter value)))
+ (string-join value separator))
+ (funcall filter value))))
+
+(defmacro flycheck-def-args-var (symbol checker &rest custom-args)
+ "Define SYMBOL as argument variable for CHECKER.
+
+SYMBOL is declared as customizable, risky and buffer-local
+variable using `defcustom' to provide an option for arbitrary
+arguments for the given syntax CHECKER. CUSTOM-ARGS is forwarded
+to `defcustom'.
+
+Use the `eval' form to splice this variable into the
+`:command'."
+ (declare (indent 2))
+ `(flycheck-def-option-var ,symbol nil ,checker
+ ,(format "A list of additional arguments for `%s'.
+
+The value of this variable is a list of strings with additional
+command line arguments." checker)
+ :risky t
+ :type '(repeat (string :tag "Argument"))
+ ,@custom-args))
+
+\f
+;;; Command syntax checkers as compile commands
+(defun flycheck-checker-pattern-to-error-regexp (pattern)
+ "Convert PATTERN into an error regexp for compile.el.
+
+Return a list representing PATTERN, suitable as element in
+`compilation-error-regexp-alist'."
+ (let* ((regexp (car pattern))
+ (level (cdr pattern))
+ (level-no (pcase level
+ (`error 2)
+ (`warning 1))))
+ (list regexp 1 2 3 level-no)))
+
+(defun flycheck-checker-compilation-error-regexp-alist (checker)
+ "Convert error patterns of CHECKER for use with compile.el.
+
+Return an alist of all error patterns of CHECKER, suitable for
+use with `compilation-error-regexp-alist'."
+ (mapcar #'flycheck-checker-pattern-to-error-regexp
+ (flycheck-checker-error-patterns checker)))
+
+(defun flycheck-checker-shell-command (checker)
+ "Get a shell command for CHECKER.
+
+Perform substitution in the arguments of CHECKER, but with
+`flycheck-substitute-shell-argument'.
+
+Return the command of CHECKER as single string, suitable for
+shell execution."
+ ;; Note: Do NOT use `combine-and-quote-strings' here. Despite it's name it
+ ;; does not properly quote shell arguments, and actually breaks for special
+ ;; characters. See https://github.com/flycheck/flycheck/pull/522
+ (mapconcat
+ #'shell-quote-argument
+ (cons (flycheck-checker-executable checker)
+ (apply #'append
+ (mapcar (lambda (arg)
+ (if (memq arg '(source source-inplace source-original))
+ (list (or (buffer-file-name) ""))
+ (flycheck-substitute-argument arg checker)))
+ (flycheck-checker-arguments checker)))) " "))
+
+(defun flycheck-compile-name (_name)
+ "Get a name for a Flycheck compilation buffer.
+
+_NAME is ignored."
+ (format "*Flycheck %s*" (buffer-file-name)))
+
+(defun flycheck-compile (checker)
+ "Run CHECKER via `compile'.
+
+CHECKER must be a valid syntax checker. Interactively, prompt
+for a syntax checker to run.
+
+Instead of highlighting errors in the buffer, this command pops
+up a separate buffer with the entire output of the syntax checker
+tool, just like `compile' (\\[compile])."
+ (interactive
+ (let ((default (or flycheck-checker flycheck-last-checker)))
+ (list (read-flycheck-checker "Run syntax checker as compile command: "
+ (when (get default 'flycheck-command) default)
+ 'flycheck-command))))
+ (unless (flycheck-valid-checker-p checker)
+ (user-error "%S is not a valid syntax checker" checker))
+ (unless (buffer-file-name)
+ (user-error "Cannot compile buffers without backing file"))
+ (unless (flycheck-may-use-checker checker)
+ (user-error "Cannot use syntax checker %S in this buffer" checker))
+ (unless (flycheck-checker-executable checker)
+ (user-error "Cannot run checker %S as shell command" checker))
+ (let* ((command (flycheck-checker-shell-command checker))
+ (buffer (compilation-start command nil #'flycheck-compile-name)))
+ (with-current-buffer buffer
+ (set (make-local-variable 'compilation-error-regexp-alist)
+ (flycheck-checker-compilation-error-regexp-alist checker)))))
+
+\f
+;;; General error parsing for command checkers
+(defun flycheck-parse-output (output checker buffer)
+ "Parse OUTPUT from CHECKER in BUFFER.
+
+OUTPUT is a string with the output from the checker symbol
+CHECKER. BUFFER is the buffer which was checked.
+
+Return the errors parsed with the error patterns of CHECKER."
+ (funcall (flycheck-checker-error-parser checker) output checker buffer))
+
+(defun flycheck-fix-error-filename (err buffer-files)
+ "Fix the file name of ERR from BUFFER-FILES.
+
+Make the file name of ERR absolute. If the absolute file name of
+ERR is in BUFFER-FILES, replace it with the return value of the
+function `buffer-file-name'."
+ (flycheck-error-with-buffer err
+ (-when-let (filename (flycheck-error-filename err))
+ (setq filename (expand-file-name filename))
+ (when (-any? (apply-partially #'flycheck-same-files-p filename)
+ buffer-files)
+ (setq filename (buffer-file-name)))
+ (setf (flycheck-error-filename err) filename)))
+ err)
+
+\f
+;;; Error parsers for command syntax checkers
+(defun flycheck-parse-xml-region (beg end)
+ "Parse the xml region between BEG and END.
+
+Wrapper around `xml-parse-region' which transforms the return
+value of this function into one compatible to
+`libxml-parse-xml-region' by simply returning the first element
+from the node list."
+ (car (xml-parse-region beg end)))
+
+(defvar flycheck-xml-parser
+ (if (fboundp 'libxml-parse-xml-region)
+ 'libxml-parse-xml-region 'flycheck-parse-xml-region)
+ "Parse an xml string from a region.
+
+Use libxml if Emacs is built with libxml support. Otherwise fall
+back to `xml-parse-region', via `flycheck-parse-xml-region'.")
+
+(defun flycheck-parse-xml-string (xml)
+ "Parse an XML string.
+
+Return the document tree parsed from XML in the form `(ROOT ATTRS
+BODY...)'. ROOT is a symbol identifying the name of the root
+element. ATTRS is an alist of the attributes of the root node.
+BODY is zero or more body elements, either as strings (in case of
+text nodes) or as XML nodes, in the same for as the root node."
+ (with-temp-buffer
+ (insert xml)
+ (funcall flycheck-xml-parser (point-min) (point-max))))
+
+(defun flycheck-parse-checkstyle (output checker buffer)
+ "Parse Checkstyle errors from OUTPUT.
+
+Parse Checkstyle-like XML output. Use this error parser for
+checkers that have an option to output errors in this format.
+
+See URL `http://checkstyle.sourceforge.net/' for information
+about Checkstyle."
+ (pcase (flycheck-parse-xml-string output)
+ (`(checkstyle ,_ . ,file-nodes)
+ (let (errors)
+ (dolist (node file-nodes)
+ (pcase node
+ (`(file ,file-attrs . ,error-nodes)
+ (dolist (node error-nodes)
+ (pcase node
+ (`(error ,error-attrs . ,_)
+ (let-alist error-attrs
+ (push (flycheck-error-new-at
+ (flycheck-string-to-number-safe .line)
+ (flycheck-string-to-number-safe .column)
+ (pcase .severity
+ (`"error" 'error)
+ (`"warning" 'warning)
+ (`"info" 'info)
+ ;; Default to error for unknown .severity
+ (_ 'error))
+ .message
+ :checker checker :id .source
+ :buffer buffer
+ :filename (cdr (assq 'name file-attrs)))
+ errors))))))))
+ (nreverse errors)))))
+
+(defun flycheck-parse-cppcheck (output checker buffer)
+ "Parse Cppcheck errors from OUTPUT.
+
+Parse Cppcheck XML v2 output.
+
+See URL `http://cppcheck.sourceforge.net/' for more information
+about Cppcheck."
+ (pcase (flycheck-parse-xml-string output)
+ (`(results ,_ . ,body)
+ (let (errors)
+ (dolist (node body)
+ (pcase node
+ (`(errors ,_ . ,error-nodes)
+ (dolist (node error-nodes)
+ (pcase node
+ (`(error ,error-attrs . ,loc-nodes)
+ (let ((id (cdr (assq 'id error-attrs)))
+ (message (cdr (assq 'verbose error-attrs)))
+ (level (pcase (cdr (assq 'severity error-attrs))
+ (`"error" 'error)
+ (`"style" 'info)
+ (`"information" 'info)
+ (_ 'warning))))
+ (dolist (node loc-nodes)
+ (pcase node
+ (`(location ,loc-attrs . ,_)
+ (let-alist loc-attrs
+ (push (flycheck-error-new-at
+ (flycheck-string-to-number-safe .line)
+ nil
+ level message
+ :id id
+ :checker checker
+ :buffer buffer
+ :filename .file)
+ errors))))))))))))
+ (nreverse errors)))))
+
+(defun flycheck-parse-phpmd (output checker buffer)
+ "Parse phpmd errors from OUTPUT.
+
+See URL `http://phpmd.org/' for more information about phpmd."
+ (pcase (flycheck-parse-xml-string output)
+ (`(pmd ,_ . ,body)
+ (let (errors)
+ (dolist (node body)
+ (pcase node
+ (`(file ,file-attrs . ,violation-nodes)
+ (let ((filename (cdr (assq 'name file-attrs))))
+ (dolist (node violation-nodes)
+ (pcase node
+ (`(violation ,vio-attrs ,(and message (pred stringp)))
+ (let-alist vio-attrs
+ ;; TODO: Map priority to an error level?
+ ;; TODO: Respect endline
+ (push
+ (flycheck-error-new-at
+ (flycheck-string-to-number-safe .beginline)
+ nil
+ 'warning (string-trim message)
+ :id .rule
+ :checker checker
+ :buffer buffer
+ :filename filename)
+ errors)))))))))
+ (nreverse errors)))))
+
+\f
+;;; Error parsing with regular expressions
+(defun flycheck-get-regexp (patterns)
+ "Create a single regular expression from PATTERNS."
+ (rx-to-string `(or ,@(mapcar (lambda (p) (list 'regexp (car p))) patterns))
+ 'no-group))
+
+(defun flycheck-tokenize-output-with-patterns (output patterns)
+ "Tokenize OUTPUT with PATTERNS.
+
+Split the output into error tokens, using all regular expressions
+from the error PATTERNS. An error token is simply a string
+containing a single error from OUTPUT. Such a token can then be
+parsed into a structured error by applying the PATTERNS again,
+see `flycheck-parse-errors-with-patterns'.
+
+Return a list of error tokens."
+ (let ((regexp (flycheck-get-regexp patterns))
+ (last-match 0)
+ errors)
+ (while (string-match regexp output last-match)
+ (push (match-string 0 output) errors)
+ (setq last-match (match-end 0)))
+ (reverse errors)))
+
+(defun flycheck-try-parse-error-with-pattern (err pattern checker)
+ "Try to parse a single ERR with a PATTERN for CHECKER.
+
+Return the parsed error if PATTERN matched ERR, or nil
+otherwise."
+ (let ((regexp (car pattern))
+ (level (cdr pattern)))
+ (when (string-match regexp err)
+ (let ((filename (match-string 1 err))
+ (line (match-string 2 err))
+ (column (match-string 3 err))
+ (message (match-string 4 err))
+ (id (match-string 5 err)))
+ (flycheck-error-new-at
+ (flycheck-string-to-number-safe line)
+ (flycheck-string-to-number-safe column)
+ level
+ (unless (string-empty-p message) message)
+ :id (unless (string-empty-p id) id)
+ :checker checker
+ :filename (if (or (null filename) (string-empty-p filename))
+ (buffer-file-name)
+ filename))))))
+
+(defun flycheck-parse-error-with-patterns (err patterns checker)
+ "Parse a single ERR with error PATTERNS for CHECKER.
+
+Apply each pattern in PATTERNS to ERR, in the given order, and
+return the first parsed error."
+ ;; Try to parse patterns in the order of declaration to make sure that the
+ ;; first match wins.
+ (let (parsed-error)
+ (while (and patterns
+ (not (setq parsed-error
+ (flycheck-try-parse-error-with-pattern
+ err (car patterns) checker))))
+ (setq patterns (cdr patterns)))
+ parsed-error))
+
+(defun flycheck-parse-with-patterns (output checker buffer)
+ "Parse OUTPUT from CHECKER with error patterns.
+
+Uses the error patterns of CHECKER to tokenize the output and
+tries to parse each error token with all patterns, in the order
+of declaration. Hence an error is never matched twice by two
+different patterns. The pattern declared first always wins.
+
+_BUFFER is ignored.
+
+Return a list of parsed errors and warnings (as `flycheck-error'
+objects)."
+ (with-current-buffer buffer
+ (let ((patterns (flycheck-checker-error-patterns checker)))
+ (mapcar (lambda (err)
+ (flycheck-parse-error-with-patterns err patterns checker))
+ (flycheck-tokenize-output-with-patterns output patterns)))))
+
+\f
+;;; Convenience definition of command-syntax checkers
+(defmacro flycheck-define-checker (symbol docstring &rest properties)
+ "Define SYMBOL as command syntax checker with DOCSTRING and PROPERTIES.
+
+Like `flycheck-define-command-checker', but PROPERTIES must not
+be quoted. Also, implicitly define the executable variable for
+SYMBOL with `flycheck-def-executable-var'."
+ (declare (indent 1)
+ (doc-string 2))
+ (let ((command (plist-get properties :command))
+ (parser (plist-get properties :error-parser))
+ (filter (plist-get properties :error-filter))
+ (predicate (plist-get properties :predicate)))
+
+ `(progn
+ (flycheck-def-executable-var ,symbol ,(car command))
+
+ (flycheck-define-command-checker ',symbol
+ ,docstring
+ :command ',command
+ ,@(when parser
+ `(:error-parser #',parser))
+ :error-patterns ',(plist-get properties :error-patterns)
+ ,@(when filter
+ `(:error-filter #',filter))
+ :modes ',(plist-get properties :modes)
+ ,@(when predicate
+ `(:predicate #',predicate))
+ :next-checkers ',(plist-get properties :next-checkers)))))
+
+\f
+;;; Built-in checkers
+(flycheck-def-args-var flycheck-gnat-args ada-gnat
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gnat-include-path nil ada-gnat
+ "A list of include directories for GNAT.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the include path of gcc.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Include directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gnat-language-standard "2012" ada-gnat
+ "The language standard to use in GNAT.
+
+The value of this variable is either a string denoting a language
+standard, or nil, to use the default standard. When non-nil, pass
+the language standard via the `-std' option."
+ :type '(choice (const :tag "Default standard" nil)
+ (string :tag "Language standard"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gnat-warnings
+ '("wa") ada-gnat
+ "A list of additional Ada warnings to enable in GNAT.
+
+The value of this variable is a list of strings, where each
+string is the name of a warning category to enable. By default,
+most optional warnings are recommended, as in `-gnata'.
+
+Refer to Info Node `(gnat_ugn_unw)Warning Message Control' for
+more information about GNAT warnings."
+ :type '(repeat :tag "Warnings" (string :tag "Warning name"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-define-checker ada-gnat
+ "An Ada syntax checker using GNAT.
+
+Uses the GNAT compiler from GCC. See URL
+`https://gcc.gnu.org/onlinedocs/gnat_ugn_unw/'."
+ :command ("gnatmake"
+ "-c" ; Just compile, don't bind
+ "-f" ; Force re-compilation
+ "-u" ; Compile the main file only
+ "-gnatf" ; Full error information
+ "-gnatef" ; Full source file name
+ "-D" temporary-directory
+ (option-list "-gnat" flycheck-gnat-warnings concat)
+ (option-list "-I" flycheck-gnat-include-path concat)
+ (option "-gnat" flycheck-gnat-language-standard concat)
+ (eval flycheck-gnat-args)
+ source)
+ :error-patterns
+ ((error line-start
+ (message "In file included from") " " (file-name) ":" line ":"
+ column ":"
+ line-end)
+ (info line-start (file-name) ":" line ":" column
+ ": note: " (message) line-end)
+ (warning line-start (file-name) ":" line ":" column
+ ": warning: " (message) line-end)
+ (error line-start (file-name) ":" line ":" column ;no specific error prefix in Ada
+ ": " (message) line-end))
+ :modes ada-mode)
+
+(flycheck-define-checker asciidoc
+ "A AsciiDoc syntax checker using the AsciiDoc compiler.
+
+See URL `http://www.methods.co.nz/asciidoc'."
+ :command ("asciidoc" source)
+ :error-patterns
+ ((error line-start "asciidoc: ERROR: " (file-name)
+ ": Line " line ": " (message) line-end)
+ (warning line-start "asciidoc: " (or "WARNING" "DEPRECATED") ": " (file-name)
+ ": Line " line ": " (message) line-end))
+ :modes adoc-mode)
+
+(flycheck-def-args-var flycheck-clang-args c/c++-clang
+ :package-version '(flycheck . "0.22"))
+
+(flycheck-def-option-var flycheck-clang-blocks nil c/c++-clang
+ "Enable blocks in Clang.
+
+When non-nil, enable blocks in Clang with `-fblocks'. See URL
+`http://clang.llvm.org/docs/BlockLanguageSpec.html' for more
+information about blocks."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-clang-definitions nil c/c++-clang
+ "Additional preprocessor definitions for Clang.
+
+The value of this variable is a list of strings, where each
+string is an additional definition to pass to Clang, via the `-D'
+option."
+ :type '(repeat (string :tag "Definition"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.15"))
+
+(flycheck-def-option-var flycheck-clang-include-path nil c/c++-clang
+ "A list of include directories for Clang.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the include path of Clang.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Include directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.14"))
+
+(flycheck-def-option-var flycheck-clang-includes nil c/c++-clang
+ "A list of additional include files for Clang.
+
+The value of this variable is a list of strings, where each
+string is a file to include before syntax checking. Relative
+paths are relative to the file being checked."
+ :type '(repeat (file :tag "Include file"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.15"))
+
+(flycheck-def-option-var flycheck-clang-language-standard nil c/c++-clang
+ "The language standard to use in Clang.
+
+The value of this variable is either a string denoting a language
+standard, or nil, to use the default standard. When non-nil,
+pass the language standard via the `-std' option."
+ :type '(choice (const :tag "Default standard" nil)
+ (string :tag "Language standard"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.15"))
+(make-variable-buffer-local 'flycheck-clang-language-standard)
+
+(flycheck-def-option-var flycheck-clang-ms-extensions nil c/c++-clang
+ "Whether to enable Microsoft extensions to C/C++ in Clang.
+
+When non-nil, enable Microsoft extensions to C/C++ via
+`-fms-extensions'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-def-option-var flycheck-clang-no-exceptions nil c/c++-clang
+ "Whether to disable exceptions in Clang.
+
+When non-nil, disable exceptions for syntax checks, via
+`-fno-exceptions'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-clang-no-rtti nil c/c++-clang
+ "Whether to disable RTTI in Clang.
+
+When non-nil, disable RTTI for syntax checks, via `-fno-rtti'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.15"))
+
+(flycheck-def-option-var flycheck-clang-standard-library nil c/c++-clang
+ "The standard library to use for Clang.
+
+The value of this variable is the name of a standard library as
+string, or nil to use the default standard library.
+
+Refer to the Clang manual at URL
+`http://clang.llvm.org/docs/UsersManual.html' for more
+information about the standard library."
+ :type '(choice (const "libc++")
+ (const :tag "GNU libstdc++" "libstdc++")
+ (string :tag "Library name"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.15"))
+
+(flycheck-def-option-var flycheck-clang-warnings '("all" "extra") c/c++-clang
+ "A list of additional warnings to enable in Clang.
+
+The value of this variable is a list of strings, where each string
+is the name of a warning category to enable. By default, all
+recommended warnings and some extra warnings are enabled (as by
+`-Wall' and `-Wextra' respectively).
+
+Refer to the Clang manual at URL
+`http://clang.llvm.org/docs/UsersManual.html' for more
+information about warnings."
+ :type '(choice (const :tag "No additional warnings" nil)
+ (repeat :tag "Additional warnings"
+ (string :tag "Warning name")))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.14"))
+
+(defun flycheck-c/c++-quoted-include-directory ()
+ "Get the directory for quoted includes.
+
+C/C++ compiles typicall look up includes with quotation marks in
+the directory of the file being compiled. However, since
+Flycheck uses temporary copies for syntax checking, it needs to
+explicitly determine the directory for quoted includes.
+
+This function determines the directory by looking at
+`buffer-file-name', or if that is nil, at `default-directory'."
+ (-if-let (fn (buffer-file-name))
+ (file-name-directory fn)
+ ;; If the buffer has no file name, fall back to its default directory
+ default-directory))
+
+(flycheck-define-checker c/c++-clang
+ "A C/C++ syntax checker using Clang.
+
+See URL `http://clang.llvm.org/'."
+ :command ("clang"
+ "-fsyntax-only"
+ "-fno-color-diagnostics" ; Do not include color codes in output
+ "-fno-caret-diagnostics" ; Do not visually indicate the source
+ ; location
+ "-fno-diagnostics-show-option" ; Do not show the corresponding
+ ; warning group
+ "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
+ (option "-std=" flycheck-clang-language-standard concat)
+ (option "-stdlib=" flycheck-clang-standard-library concat)
+ (option-flag "-fms-extensions" flycheck-clang-ms-extensions)
+ (option-flag "-fno-exceptions" flycheck-clang-no-exceptions)
+ (option-flag "-fno-rtti" flycheck-clang-no-rtti)
+ (option-flag "-fblocks" flycheck-clang-blocks)
+ (option-list "-include" flycheck-clang-includes)
+ (option-list "-W" flycheck-clang-warnings concat)
+ (option-list "-D" flycheck-clang-definitions concat)
+ (option-list "-I" flycheck-clang-include-path)
+ (eval flycheck-clang-args)
+ "-x" (eval
+ (pcase major-mode
+ (`c++-mode "c++")
+ (`c-mode "c")))
+ source)
+ :error-patterns
+ ((error line-start
+ (message "In file included from") " " (file-name) ":" line ":"
+ line-end)
+ (info line-start (file-name) ":" line ":" column
+ ": note: " (optional (message)) line-end)
+ (warning line-start (file-name) ":" line ":" column
+ ": warning: " (optional (message)) line-end)
+ (error line-start (file-name) ":" line ":" column
+ ": " (or "fatal error" "error") ": " (optional (message)) line-end))
+ :error-filter
+ (lambda (errors)
+ (let ((errors (flycheck-sanitize-errors errors)))
+ (dolist (err errors)
+ ;; Clang will output empty messages for #error/#warning pragmas without
+ ;; messages. We fill these empty errors with a dummy message to get
+ ;; them past our error filtering
+ (setf (flycheck-error-message err)
+ (or (flycheck-error-message err) "no message")))
+ (flycheck-fold-include-levels errors "In file included from")))
+ :modes (c-mode c++-mode)
+ :next-checkers ((warning . c/c++-cppcheck)))
+
+(flycheck-def-args-var flycheck-gcc-args c/c++-gcc
+ :package-version '(flycheck . "0.22"))
+
+(flycheck-def-option-var flycheck-gcc-definitions nil c/c++-gcc
+ "Additional preprocessor definitions for GCC.
+
+The value of this variable is a list of strings, where each
+string is an additional definition to pass to GCC, via the `-D'
+option."
+ :type '(repeat (string :tag "Definition"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gcc-include-path nil c/c++-gcc
+ "A list of include directories for GCC.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the include path of gcc.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Include directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gcc-includes nil c/c++-gcc
+ "A list of additional include files for GCC.
+
+The value of this variable is a list of strings, where each
+string is a file to include before syntax checking. Relative
+paths are relative to the file being checked."
+ :type '(repeat (file :tag "Include file"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gcc-language-standard nil c/c++-gcc
+ "The language standard to use in GCC.
+
+The value of this variable is either a string denoting a language
+standard, or nil, to use the default standard. When non-nil,
+pass the language standard via the `-std' option."
+ :type '(choice (const :tag "Default standard" nil)
+ (string :tag "Language standard"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+(make-variable-buffer-local 'flycheck-gcc-language-standard)
+
+(flycheck-def-option-var flycheck-gcc-no-exceptions nil c/c++-gcc
+ "Whether to disable exceptions in GCC.
+
+When non-nil, disable exceptions for syntax checks, via
+`-fno-exceptions'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gcc-no-rtti nil c/c++-gcc
+ "Whether to disable RTTI in GCC.
+
+When non-nil, disable RTTI for syntax checks, via `-fno-rtti'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gcc-openmp nil c/c++-gcc
+ "Whether to enable OpenMP in GCC.
+
+When non-nil, enable OpenMP for syntax checkers, via
+`-fopenmp'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.21"))
+
+(flycheck-def-option-var flycheck-gcc-warnings '("all" "extra") c/c++-gcc
+ "A list of additional warnings to enable in GCC.
+
+The value of this variable is a list of strings, where each string
+is the name of a warning category to enable. By default, all
+recommended warnings and some extra warnings are enabled (as by
+`-Wall' and `-Wextra' respectively).
+
+Refer to the gcc manual at URL
+`https://gcc.gnu.org/onlinedocs/gcc/' for more information about
+warnings."
+ :type '(choice (const :tag "No additional warnings" nil)
+ (repeat :tag "Additional warnings"
+ (string :tag "Warning name")))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-define-checker c/c++-gcc
+ "A C/C++ syntax checker using GCC.
+
+Requires GCC 4.8 or newer. See URL `https://gcc.gnu.org/'."
+ :command ("gcc"
+ "-fshow-column"
+ "-fno-diagnostics-show-caret" ; Do not visually indicate the source location
+ "-fno-diagnostics-show-option" ; Do not show the corresponding
+ ; warning group
+ "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
+ (option "-std=" flycheck-gcc-language-standard concat)
+ (option-flag "-fno-exceptions" flycheck-gcc-no-exceptions)
+ (option-flag "-fno-rtti" flycheck-gcc-no-rtti)
+ (option-flag "-fopenmp" flycheck-gcc-openmp)
+ (option-list "-include" flycheck-gcc-includes)
+ (option-list "-W" flycheck-gcc-warnings concat)
+ (option-list "-D" flycheck-gcc-definitions concat)
+ (option-list "-I" flycheck-gcc-include-path)
+ (eval flycheck-gcc-args)
+ "-x" (eval
+ (pcase major-mode
+ (`c++-mode "c++")
+ (`c-mode "c")))
+ source
+ ;; GCC performs full checking only when actually compiling, so
+ ;; `-fsyntax-only' is not enough. Just let it generate assembly
+ ;; code.
+ "-S" "-o" null-device)
+ :error-patterns
+ ((error line-start
+ (message "In file included from") " " (file-name) ":" line ":"
+ column ":"
+ line-end)
+ (info line-start (file-name) ":" line ":" column
+ ": note: " (message) line-end)
+ (warning line-start (file-name) ":" line ":" column
+ ": warning: " (message) line-end)
+ (error line-start (file-name) ":" line ":" column
+ ": " (or "fatal error" "error") ": " (message) line-end))
+ :error-filter
+ (lambda (errors)
+ (flycheck-fold-include-levels (flycheck-sanitize-errors errors)
+ "In file included from"))
+ :modes (c-mode c++-mode)
+ :next-checkers ((warning . c/c++-cppcheck)))
+
+(flycheck-def-option-var flycheck-cppcheck-checks '("style") c/c++-cppcheck
+ "Enabled checks for Cppcheck.
+
+The value of this variable is a list of strings, where each
+string is the name of an additional check to enable. By default,
+all coding style checks are enabled.
+
+See section \"Enable message\" in the Cppcheck manual at URL
+`http://cppcheck.sourceforge.net/manual.pdf', and the
+documentation of the `--enable' option for more information,
+including a list of supported checks."
+ :type '(repeat :tag "Additional checks"
+ (string :tag "Check name"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.14"))
+
+(flycheck-def-option-var flycheck-cppcheck-inconclusive nil c/c++-cppcheck
+ "Whether to enable Cppcheck inconclusive checks.
+
+When non-nil, enable Cppcheck inconclusive checks. This allows Cppcheck to
+report warnings it's not certain of, but it may result in false positives.
+
+This will have no effect when using Cppcheck 1.53 and older."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.19"))
+
+(flycheck-define-checker c/c++-cppcheck
+ "A C/C++ checker using cppcheck.
+
+See URL `http://cppcheck.sourceforge.net/'."
+ :command ("cppcheck" "--quiet" "--xml-version=2" "--inline-suppr"
+ (option "--enable=" flycheck-cppcheck-checks concat
+ flycheck-option-comma-separated-list)
+ (option-flag "--inconclusive" flycheck-cppcheck-inconclusive)
+ source)
+ :error-parser flycheck-parse-cppcheck
+ :modes (c-mode c++-mode))
+
+(flycheck-define-checker cfengine
+ "A CFEngine syntax checker using cf-promises.
+
+See URL `http://cfengine.com/'."
+ :command ("cf-promises" "-Wall" "-f"
+ ;; We must stay in the same directory to resolve @include
+ source-inplace)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ":" column
+ ": warning: " (message) line-end)
+ (error line-start (file-name) ":" line ":" column
+ ": error: " (message) line-end))
+ :modes (cfengine-mode cfengine3-mode))
+
+(flycheck-define-checker chef-foodcritic
+ "A Chef cookbooks syntax checker using Foodcritic.
+
+See URL `http://acrmp.github.io/foodcritic/'."
+ ;; Use `source-inplace' to allow resource discovery with relative paths.
+ ;; foodcritic interprets these as relative to the source file, so we need to
+ ;; stay within the source tree. See
+ ;; https://github.com/flycheck/flycheck/pull/556
+ :command ("foodcritic" source-inplace)
+ :error-patterns
+ ((error line-start (message) ": " (file-name) ":" line line-end))
+ :modes (enh-ruby-mode ruby-mode)
+ :predicate
+ (lambda ()
+ (let ((parent-dir (file-name-directory
+ (directory-file-name
+ (expand-file-name default-directory)))))
+ (or
+ ;; Chef CookBook
+ ;; http://docs.opscode.com/chef/knife.html#id38
+ (locate-dominating-file parent-dir "recipes")
+ ;; Knife Solo
+ ;; http://matschaffer.github.io/knife-solo/#label-Init+command
+ (locate-dominating-file parent-dir "cookbooks")))))
+
+(flycheck-define-checker coffee
+ "A CoffeeScript syntax checker using coffee.
+
+See URL `http://coffeescript.org/'."
+ ;; --print suppresses generation of compiled .js files
+ :command ("coffee" "--compile" "--print" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column
+ ": error: " (message) line-end))
+ :modes coffee-mode
+ :next-checkers ((warning . coffee-coffeelint)))
+
+(flycheck-def-config-file-var flycheck-coffeelintrc coffee-coffeelint
+ ".coffeelint.json"
+ :safe #'stringp)
+
+(flycheck-define-checker coffee-coffeelint
+ "A CoffeeScript style checker using coffeelint.
+
+This syntax checker requires coffeelint 1.0 or newer.
+
+See URL `http://www.coffeelint.org/'."
+ :command
+ ("coffeelint"
+ (config-file "--file" flycheck-coffeelintrc)
+ "--reporter" "checkstyle" source)
+ :error-parser flycheck-parse-checkstyle
+ :error-filter (lambda (errors)
+ (flycheck-remove-error-ids
+ (flycheck-sanitize-errors errors)))
+ :modes coffee-mode)
+
+(flycheck-define-checker coq
+ "A Coq syntax checker using the Coq compiler.
+
+See URL `http://coq.inria.fr/'."
+ ;; We use coqtop in batch mode, because coqc is picky about file names.
+ :command ("coqtop" "-batch" "-load-vernac-source" source)
+ :error-patterns
+ ((error line-start "File \"" (file-name) "\", line " line
+ ;; TODO: Parse the end column, once Flycheck supports that
+ ", characters " column "-" (one-or-more digit) ":\n"
+ (or "Syntax error: " "Error: ")
+ ;; Most Coq error messages span multiple lines, and end with a dot.
+ ;; There are simple one-line messages, too, though.
+ (message (or (and (one-or-more (or not-newline "\n")) ".")
+ (one-or-more not-newline)))
+ line-end))
+ :error-filter
+ (lambda (errors)
+ (dolist (err errors)
+ (setf (flycheck-error-message err)
+ (replace-regexp-in-string (rx (1+ (syntax whitespace)) line-end)
+ "" (flycheck-error-message err)
+ 'fixedcase 'literal)))
+ (flycheck-increment-error-columns errors))
+ :modes coq-mode)
+
+(flycheck-define-checker css-csslint
+ "A CSS syntax and style checker using csslint.
+
+See URL `https://github.com/CSSLint/csslint'."
+ :command ("csslint" "--format=checkstyle-xml" source)
+ :error-parser flycheck-parse-checkstyle
+ :error-filter flycheck-dequalify-error-ids
+ :modes css-mode)
+
+(defconst flycheck-d-module-re
+ (rx "module" (one-or-more (syntax whitespace))
+ (group (one-or-more (not (syntax whitespace))))
+ (zero-or-more (syntax whitespace))
+ ";")
+ "Regular expression to match a D module declaration.")
+
+(defun flycheck-d-base-directory ()
+ "Get the relative base directory path for this module."
+ (let* ((file-name (buffer-file-name))
+ (module-file (if (string= (file-name-nondirectory file-name)
+ "package.d")
+ (directory-file-name (file-name-directory file-name))
+ file-name)))
+ (flycheck-module-root-directory
+ (flycheck-find-in-buffer flycheck-d-module-re)
+ module-file)))
+
+(flycheck-def-option-var flycheck-dmd-include-path nil d-dmd
+ "A list of include directories for dmd.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the include path of dmd.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Include directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.18"))
+
+(flycheck-define-checker d-dmd
+ "A D syntax checker using the DMD compiler.
+
+Requires DMD 2.066 or newer. See URL `http://dlang.org/'."
+ :command ("dmd"
+ "-debug" ; Compile in debug mode
+ "-o-" ; Don't generate an object file
+ "-vcolumns" ; Add columns in output
+ "-wi" ; Compilation will continue even if there are warnings
+ (eval (concat "-I" (flycheck-d-base-directory)))
+ (option-list "-I" flycheck-dmd-include-path concat)
+ source)
+ :error-patterns
+ ((error line-start
+ (file-name) "(" line "," column "): Error: " (message)
+ line-end)
+ (warning line-start (file-name) "(" line "," column "): "
+ (or "Warning" "Deprecation") ": " (message) line-end))
+ :modes d-mode)
+
+(flycheck-define-checker elixir
+ "An Elixir syntax checker using the Elixir interpreter.
+
+See URL `http://elixir-lang.org/'."
+ :command ("elixirc"
+ "-o" temporary-directory ; Move compiler output out of the way
+ "--ignore-module-conflict" ; Prevent tedious module redefinition
+ ; warning.
+ source)
+ :error-patterns
+ ;; Elixir compiler errors
+ ((error line-start "** (" (zero-or-more not-newline) ") "
+ (file-name) ":" line ": " (message) line-end)
+ ;; Warnings from Elixir >= 0.12.4
+ (warning line-start (file-name) ":" line ": warning:" (message) line-end)
+ ;; Warnings from older Elixir versions
+ (warning line-start (file-name) ":" line ": " (message) line-end))
+ :modes elixir-mode)
+
+(defconst flycheck-this-emacs-executable
+ (concat invocation-directory invocation-name)
+ "The path to the currently running Emacs executable.")
+
+(defconst flycheck-emacs-args '("-Q" "--batch")
+ "Common arguments to Emacs invocations.")
+
+(defmacro flycheck-prepare-emacs-lisp-form (&rest body)
+ "Prepare BODY for use as check form in a subprocess."
+ (declare (indent 0))
+ `(flycheck-sexp-to-string
+ '(progn
+ (defvar jka-compr-inhibit)
+ (unwind-protect
+ ;; Flycheck inhibits compression of temporary files, thus we
+ ;; must not attempt to decompress.
+ (let ((jka-compr-inhibit t))
+ ;; Strip option-argument separator from arguments, if present
+ (when (equal (car command-line-args-left) "--")
+ (setq command-line-args-left (cdr command-line-args-left)))
+ ,@body)
+ ;; Prevent Emacs from processing the arguments on its own, see
+ ;; https://github.com/flycheck/flycheck/issues/319
+ (setq command-line-args-left nil)))))
+
+(defconst flycheck-emacs-lisp-check-form
+ (flycheck-prepare-emacs-lisp-form
+ ;; Keep track of the generated bytecode files, to delete them after byte
+ ;; compilation.
+ (defvar flycheck-byte-compiled-files nil)
+ (let ((byte-compile-dest-file-function
+ (lambda (source)
+ (let ((temp-file (make-temp-file (file-name-nondirectory source))))
+ (push temp-file flycheck-byte-compiled-files)
+ temp-file))))
+ (unwind-protect
+ (byte-compile-file (car command-line-args-left))
+ (mapc (lambda (f) (ignore-errors (delete-file f)))
+ flycheck-byte-compiled-files)))))
+
+(flycheck-def-option-var flycheck-emacs-lisp-load-path nil emacs-lisp
+ "Load path to use in the Emacs Lisp syntax checker.
+
+When set to `inherit', use the `load-path' of the current Emacs
+session during syntax checking.
+
+When set to a list of strings, add each directory in this list to
+the `load-path' before invoking the byte compiler. Relative
+paths in this list are expanded against the `default-directory'
+of the buffer to check.
+
+When nil, do not explicitly set the `load-path' during syntax
+checking. The syntax check only uses the built-in `load-path' of
+Emacs in this case.
+
+Note that changing this variable can lead to wrong results of the
+syntax check, e.g. if an unexpected version of a required library
+is used."
+ :type '(choice (const :tag "Inherit current `load-path'" inherit)
+ (repeat :tag "Load path" directory))
+ :risky t
+ :package-version '(flycheck . "0.14"))
+
+(flycheck-def-option-var flycheck-emacs-lisp-initialize-packages
+ 'auto emacs-lisp
+ "Whether to initialize packages in the Emacs Lisp syntax checker.
+
+To initialize packages, call `package-initialize' before
+byte-compiling the file to check.
+
+When nil, never initialize packages. When `auto', initialize
+packages only when checking files from `user-emacs-directory'.
+For any other non-nil value, always initialize packages."
+ :type '(choice (const :tag "Do not initialize packages" nil)
+ (const :tag "Initialize packages for configuration only" auto)
+ (const :tag "Always initialize packages" t))
+ :risky t
+ :package-version '(flycheck . "0.14"))
+
+(defconst flycheck-emacs-lisp-package-initialize-form
+ (flycheck-sexp-to-string
+ '(with-demoted-errors "Error during package initialization: %S"
+ (package-initialize)))
+ "Form used to initialize packages.")
+
+(defun flycheck-option-emacs-lisp-package-initialize (value)
+ "Option VALUE filter for `flycheck-emacs-lisp-initialize-packages'."
+ (let ((shall-initialize
+ (if (eq value 'auto)
+ (flycheck-in-user-emacs-directory-p (buffer-file-name))
+ value)))
+ (when shall-initialize
+ ;; If packages shall be initialized, return the corresponding form,
+ ;; otherwise make Flycheck ignore the option by returning nil.
+ flycheck-emacs-lisp-package-initialize-form)))
+
+(flycheck-def-option-var flycheck-emacs-lisp-package-user-dir nil emacs-lisp
+ "Package directory for the Emacs Lisp syntax checker.
+
+When set to a string, set `package-user-dir' to the value of this
+variable before initializing packages.
+
+This variable has no effect, if
+`flycheck-emacs-lisp-initialize-packages' is nil."
+ :type '(choice (const :tag "Default package directory" nil)
+ (directory :tag "Custom package directory"))
+ :risky t
+ :package-version '(flycheck . "0.14"))
+
+(defun flycheck-option-emacs-lisp-package-user-dir (value)
+ "Option VALUE filter for `flycheck-emacs-lisp-package-user-dir'."
+ (unless value
+ ;; Inherit the package directory from our Emacs session
+ (setq value (and (boundp 'package-user-dir) package-user-dir)))
+ (when value
+ (flycheck-sexp-to-string `(setq package-user-dir ,value))))
+
+(flycheck-define-checker emacs-lisp
+ "An Emacs Lisp syntax checker using the Emacs Lisp Byte compiler.
+
+See Info Node `(elisp)Byte Compilation'."
+ :command ("emacs" (eval flycheck-emacs-args)
+ (eval
+ (let ((path (pcase flycheck-emacs-lisp-load-path
+ (`inherit load-path)
+ (p (mapcar #'expand-file-name p)))))
+ (flycheck-prepend-with-option "--directory" path)))
+ (option "--eval" flycheck-emacs-lisp-package-user-dir nil
+ flycheck-option-emacs-lisp-package-user-dir)
+ (option "--eval" flycheck-emacs-lisp-initialize-packages nil
+ flycheck-option-emacs-lisp-package-initialize)
+ "--eval" (eval flycheck-emacs-lisp-check-form)
+ "--"
+ source-inplace)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ":Error:"
+ (message (zero-or-more not-newline)
+ (zero-or-more "\n " (zero-or-more not-newline)))
+ line-end)
+ (warning line-start (file-name) ":" line ":" column ":Warning:"
+ (message (zero-or-more not-newline)
+ (zero-or-more "\n " (zero-or-more not-newline)))
+ line-end))
+ :error-filter
+ (lambda (errors)
+ (flycheck-collapse-error-message-whitespace
+ (flycheck-sanitize-errors errors)))
+ :modes (emacs-lisp-mode lisp-interaction-mode)
+ :predicate
+ (lambda ()
+ (and
+ ;; Ensure that we only check buffers with a backing file. For buffers
+ ;; without a backing file we cannot guarantee that file names in error
+ ;; messages are properly resolved, because `byte-compile-file' emits file
+ ;; names *relative to the directory of the checked file* instead of the
+ ;; working directory. Hence our backwards-substitution will fail, because
+ ;; the checker process has a different base directory to resolve relative
+ ;; file names than the Flycheck code working on the buffer to check.
+ (buffer-file-name)
+ ;; Do not check buffers which should not be byte-compiled. The checker
+ ;; process will refuse to compile these, which would confuse Flycheck
+ (not (bound-and-true-p no-byte-compile))
+ ;; Do not check buffers used for autoloads generation during package
+ ;; installation. These buffers are too short-lived for being checked, and
+ ;; doing so causes spurious errors. See
+ ;; https://github.com/flycheck/flycheck/issues/45 and
+ ;; https://github.com/bbatsov/prelude/issues/248. We must also not check
+ ;; compilation buffers, but as these are ephemeral, Flycheck won't check
+ ;; them anyway.
+ (not (flycheck-autoloads-file-p))))
+ :next-checkers (emacs-lisp-checkdoc))
+
+(defconst flycheck-emacs-lisp-checkdoc-form
+ (flycheck-prepare-emacs-lisp-form
+ (require 'checkdoc)
+
+ (let ((source (car command-line-args-left))
+ ;; Remember the default directory of the process
+ (process-default-directory default-directory))
+ (with-temp-buffer
+ (insert-file-contents source 'visit)
+ (setq buffer-file-name source)
+ ;; And change back to the process default directory to make file-name
+ ;; back-substutition work
+ (setq default-directory process-default-directory)
+ (with-demoted-errors "Error in checkdoc: %S"
+ (checkdoc-current-buffer t)
+ (with-current-buffer checkdoc-diagnostic-buffer
+ (princ (buffer-substring-no-properties (point-min) (point-max)))
+ (kill-buffer)))))))
+
+(flycheck-define-checker emacs-lisp-checkdoc
+ "An Emacs Lisp style checker using CheckDoc.
+
+The checker runs `checkdoc-current-buffer'."
+ :command ("emacs" (eval flycheck-emacs-args)
+ "--eval" (eval flycheck-emacs-lisp-checkdoc-form)
+ "--" source)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ": " (message) line-end))
+ :modes (emacs-lisp-mode)
+ :predicate
+ (lambda ()
+ ;; Do not check Autoloads, Cask/Carton and dir-locals files. These files
+ ;; really don't need to follow Checkdoc conventions.
+ (not (or (flycheck-autoloads-file-p)
+ (and (buffer-file-name)
+ (member (file-name-nondirectory (buffer-file-name))
+ '("Cask" "Carton" ".dir-locals.el")))))))
+
+(progn
+ ;; Use the currently running Emacs by default.
+ (setcar (get 'emacs-lisp 'flycheck-command) flycheck-this-emacs-executable)
+ (setcar (get 'emacs-lisp-checkdoc 'flycheck-command)
+ flycheck-this-emacs-executable))
+
+(flycheck-define-checker erlang
+ "An Erlang syntax checker using the Erlang interpreter.
+
+See URL `http://www.erlang.org/'."
+ :command ("erlc" "-o" temporary-directory "-Wall" source)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ": Warning:" (message) line-end)
+ (error line-start (file-name) ":" line ": " (message) line-end))
+ :modes erlang-mode)
+
+(flycheck-define-checker eruby-erubis
+ "A eRuby syntax checker using the `erubis' command.
+
+See URL `http://www.kuwata-lab.com/erubis/'."
+ :command ("erubis" "-z" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ": " (message) line-end))
+ :modes (html-erb-mode rhtml-mode))
+
+(flycheck-def-args-var flycheck-gfortran-args fortran-gfortran
+ :package-version '(flycheck . "0.22"))
+
+(flycheck-def-option-var flycheck-gfortran-include-path nil fortran-gfortran
+ "A list of include directories for GCC Fortran.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the include path of gcc.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Include directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gfortran-language-standard "f95" fortran-gfortran
+ "The language standard to use in GFortran.
+
+The value of this variable is either a string denoting a language
+standard, or nil, to use the default standard. When non-nil,
+pass the language standard via the `-std' option."
+ :type '(choice (const :tag "Default standard" nil)
+ (string :tag "Language standard"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-gfortran-layout nil fortran-gfortran
+ "The source code layout to use in GFortran.
+
+The value of this variable is one of the following symbols:
+
+nil
+ Let gfortran determine the layout from the extension
+
+`free'
+ Use free form layout
+
+
+`fixed'
+ Use fixed form layout
+
+In any other case, an error is signaled.")
+
+(defun flycheck-option-gfortran-layout (value)
+ "Option VALUE filter for `flycheck-gfortran-layout'."
+ (pcase value
+ (`nil nil)
+ (`free "free-form")
+ (`fixed "fixed-form")
+ (_ (error "Invalid value for flycheck-gfortran-layout: %S" value))))
+
+(flycheck-def-option-var flycheck-gfortran-warnings '("all" "extra")
+ fortran-gfortran
+ "A list of warnings for GCC Fortran.
+
+The value of this variable is a list of strings, where each string
+is the name of a warning category to enable. By default, all
+recommended warnings and some extra warnings are enabled (as by
+`-Wall' and `-Wextra' respectively).
+
+Refer to the gfortran manual at URL
+`https://gcc.gnu.org/onlinedocs/gfortran/' for more information
+about warnings")
+
+(flycheck-define-checker fortran-gfortran
+ "An Fortran syntax checker using GCC.
+
+Uses GCC's Fortran compiler gfortran. See URL
+`https://gcc.gnu.org/onlinedocs/gfortran/'."
+ :command ("gfortran"
+ "-fsyntax-only"
+ "-fshow-column"
+ "-fno-diagnostics-show-caret" ; Do not visually indicate the source location
+ "-fno-diagnostics-show-option" ; Do not show the corresponding
+ ; warning group
+ ;; Fortran has similar include processing as C/C++
+ "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
+ (option "-std=" flycheck-gfortran-language-standard concat)
+ (option "-f" flycheck-gfortran-layout concat
+ flycheck-option-gfortran-layout)
+ (option-list "-W" flycheck-gfortran-warnings concat)
+ (option-list "-I" flycheck-gfortran-include-path concat)
+ (eval flycheck-gfortran-args)
+ source)
+ :error-patterns
+ ((error line-start (file-name) ":" line "." column ":\n"
+ (= 3 (zero-or-more not-newline) "\n")
+ (or "Error" "Fatal Error") ": " (message) line-end)
+ (warning line-start (file-name) ":" line "." column ":\n"
+ (= 3 (zero-or-more not-newline) "\n")
+ "Warning: " (message) line-end))
+ :modes (fortran-mode f90-mode))
+
+(flycheck-define-checker go-gofmt
+ "A Go syntax and style checker using the gofmt utility.
+
+See URL `http://golang.org/cmd/gofmt/'."
+ :command ("gofmt" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ": " (message) line-end))
+ :modes go-mode
+ :next-checkers ((warning . go-golint)
+ ;; Fall back, if go-golint doesn't exist
+ (warning . go-vet)
+ ;; Fall back, if go-vet doesn't exist
+ (warning . go-build) (warning . go-test)
+ (warning . go-errcheck)))
+
+(flycheck-define-checker go-golint
+ "A Go style checker using Golint.
+
+See URL `https://github.com/golang/lint'."
+ :command ("golint" source)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
+ :modes go-mode
+ :next-checkers (go-vet
+ ;; Fall back, if go-vet doesn't exist
+ go-build go-test go-errcheck))
+
+(flycheck-def-option-var flycheck-go-vet-print-functions nil go-vet
+ "A comma-separated list of print-like functions for `go tool vet'.
+
+Go vet will check these functions for format string problems and
+issues, such as a mismatch between the number of formats used,
+and the number of arguments given.
+
+Each entry is in the form Name:N where N is the zero-based
+argument position of the first argument involved in the print:
+either the format or the first print argument for non-formatted
+prints. For example, if you have Warn and Warnf functions that
+take an io.Writer as their first argument, like Fprintf,
+-printfuncs=Warn:1,Warnf:1 "
+ :type '(repeat :tag "print-like functions"
+ (string :tag "function"))
+ :safe #'flycheck-string-list-p)
+
+(flycheck-define-checker go-vet
+ "A Go syntax checker using the `go tool vet' command.
+
+See URL `http://golang.org/cmd/go/' and URL
+`http://godoc.org/golang.org/x/tools/cmd/vet'."
+ :command ("go" "tool" "vet"
+ (option "-printfuncs=" flycheck-go-vet-print-functions concat
+ flycheck-option-comma-separated-list)
+ source)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ": " (message) line-end))
+ :modes go-mode
+ ;; We must explicitly check whether the "vet" tool is available
+ :predicate (lambda ()
+ (let ((go (flycheck-checker-executable 'go-vet)))
+ (member "vet" (ignore-errors (process-lines go "tool")))))
+ :next-checkers (go-build
+ go-test
+ ;; Fall back if `go build' or `go test' can be used
+ go-errcheck))
+
+(flycheck-define-checker go-build
+ "A Go syntax and type checker using the `go build' command.
+
+See URL `http://golang.org/cmd/go'."
+ ;; We need to use `temporary-file-name' instead of `null-device', because Go
+ ;; can't write to the null device. It's “too magic”. See
+ ;; https://code.google.com/p/go/issues/detail?id=4851 for details.
+ :command ("go" "build" "-o" temporary-file-name)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":"
+ (optional column ":") " "
+ (message (one-or-more not-newline)
+ (zero-or-more "\n\t" (one-or-more not-newline)))
+ line-end))
+ :modes go-mode
+ :predicate (lambda ()
+ (and (flycheck-buffer-saved-p)
+ (not (string-suffix-p "_test.go" (buffer-file-name)))))
+ :next-checkers ((warning . go-errcheck)))
+
+(flycheck-define-checker go-test
+ "A Go syntax and type checker using the `go test' command.
+
+See URL `http://golang.org/cmd/go'."
+ ;; This command builds the test executable and leaves it in the current
+ ;; directory. Unfortunately 'go test -c' does not have the '-o' option.
+ :command ("go" "test" "-c")
+ :error-patterns
+ ((error line-start (file-name) ":" line ": "
+ (message (one-or-more not-newline)
+ (zero-or-more "\n\t" (one-or-more not-newline)))
+ line-end))
+ :modes go-mode
+ :predicate
+ (lambda () (and (flycheck-buffer-saved-p)
+ (string-suffix-p "_test.go" (buffer-file-name))))
+ :next-checkers ((warning . go-errcheck)))
+
+(defun flycheck-go-package-name (&optional file-name gopath)
+ "Determine the package name for FILE-NAME and GOPATH.
+
+FILE-NAME defaults to `buffer-file-name'. GOPATH defaults to
+$GOPATH.
+
+Return the package name for FILE-NAME, or nil if FILE-NAME is not
+part of any package or if GOPATH is nil."
+ (-when-let* ((gopath (or gopath (getenv "GOPATH")))
+ (file-name (or file-name (buffer-file-name))))
+ (let ((gosrc (file-name-as-directory (expand-file-name "src/" gopath)))
+ (file-name (expand-file-name file-name)))
+ (when (string-prefix-p gosrc file-name)
+ ;; The file is part of a package, so determine the package name, as
+ ;; relative file name to the GO source directory
+ (directory-file-name ; Remove trailing /
+ (file-relative-name (file-name-directory file-name) gosrc))))))
+
+(flycheck-define-checker go-errcheck
+ "A Go checker for unchecked errors.
+
+See URL `https://github.com/kisielk/errcheck'."
+ :command ("errcheck" (eval (flycheck-go-package-name)))
+ :error-patterns
+ ((warning line-start
+ (file-name) ":" line ":" column (one-or-more "\t")
+ (message)
+ line-end))
+ :error-filter
+ (lambda (errors)
+ (let ((errors (flycheck-sanitize-errors errors))
+ (gosrc (expand-file-name "src/" (getenv "GOPATH"))))
+ (dolist (err errors)
+ ;; File names are relative to the Go source directory, so we need to
+ ;; unexpand and re-expand them
+ (setf (flycheck-error-filename err)
+ (expand-file-name
+ ;; Get the relative name back, since Flycheck has already
+ ;; expanded the name for us
+ (file-relative-name (flycheck-error-filename err))
+ ;; And expand it against the Go source directory
+ gosrc))
+ (-when-let (message (flycheck-error-message err))
+ ;; Improve the messages reported by errcheck to make them more clear.
+ (setf (flycheck-error-message err)
+ (format "Ignored `error` returned from `%s`" message)))))
+ errors)
+ :modes go-mode
+ :predicate
+ (lambda ()
+ ;; We need a valid package name, since errcheck only works on entire
+ ;; packages, and can't check individual Go files.
+ (and (flycheck-buffer-saved-p) (flycheck-go-package-name))))
+
+(flycheck-define-checker haml
+ "A Haml syntax checker using the Haml compiler.
+
+See URL `http://haml.info'."
+ :command ("haml" "-c" source)
+ :error-patterns
+ ((error line-start "Syntax error on line " line ": " (message) line-end))
+ :modes haml-mode)
+
+(flycheck-define-checker handlebars
+ "A Handlebars syntax checker using the Handlebars compiler.
+
+See URL `http://handlebarsjs.com/'."
+ :command ("handlebars" source)
+ :error-patterns
+ ((error line-start
+ "Error: Parse error on line " line ":" (optional "\r") "\n"
+ (zero-or-more not-newline) "\n" (zero-or-more not-newline) "\n"
+ (message) line-end))
+ :modes (handlebars-mode handlebars-sgml-mode))
+
+(defconst flycheck-haskell-module-re
+ (rx line-start (zero-or-more (or "\n" (any space)))
+ "module" (one-or-more (or "\n" (any space)))
+ (group (one-or-more (not (any space "\n")))))
+ "Regular expression for a Haskell module name.")
+
+(flycheck-def-args-var flycheck-ghc-args haskell-ghc
+ :package-version '(flycheck . "0.22"))
+
+(flycheck-def-option-var flycheck-ghc-no-user-package-database nil haskell-ghc
+ "Whether to disable the user package database in GHC.
+
+When non-nil, disable the user package database in GHC, via
+`-no-user-package-db'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-def-option-var flycheck-ghc-package-databases nil haskell-ghc
+ "Additional module databases for GHC.
+
+The value of this variable is a list of strings, where each
+string is a directory of a package database. Each package
+database is given to GHC via `-package-db'."
+ :type '(repeat (directory :tag "Package database"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-def-option-var flycheck-ghc-search-path nil haskell-ghc
+ "Module search path for GHC.
+
+The value of this variable is a list of strings, where each
+string is a directory containing Haskell modules. Each directory
+is added to the GHC search path via `-i'."
+ :type '(repeat (directory :tag "Module directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-def-option-var flycheck-ghc-language-extensions nil haskell-ghc
+ "Language extensions for GHC.
+
+The value of this variable is a list of strings, where each
+string is a Haskell language extension, as in the LANGUAGE
+pragma. Each extension is enabled via `-X'."
+ :type '(repeat (string :tag "Language extension"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.19"))
+
+(flycheck-define-checker haskell-ghc
+ "A Haskell syntax and type checker using ghc.
+
+See URL `http://www.haskell.org/ghc/'."
+ :command ("ghc" "-Wall" "-fno-code"
+ (option-flag "-no-user-package-db"
+ flycheck-ghc-no-user-package-database)
+ (option-list "-package-db" flycheck-ghc-package-databases)
+ (option-list "-i" flycheck-ghc-search-path concat)
+ ;; Include the parent directory of the current module tree, to
+ ;; properly resolve local imports
+ (eval (concat
+ "-i"
+ (flycheck-module-root-directory
+ (flycheck-find-in-buffer flycheck-haskell-module-re))))
+ (option-list "-X" flycheck-ghc-language-extensions concat)
+ (eval flycheck-ghc-args)
+ "-x" (eval
+ (pcase major-mode
+ (`haskell-mode "hs")
+ (`literate-haskell-mode "lhs")))
+ source)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ":" column ":"
+ (or " " "\n ") "Warning:" (optional "\n")
+ (message
+ (one-or-more " ") (one-or-more not-newline)
+ (zero-or-more "\n"
+ (one-or-more " ")
+ (one-or-more not-newline)))
+ line-end)
+ (error line-start (file-name) ":" line ":" column ":"
+ (or (message (one-or-more not-newline))
+ (and "\n"
+ (message
+ (one-or-more " ") (one-or-more not-newline)
+ (zero-or-more "\n"
+ (one-or-more " ")
+ (one-or-more not-newline)))))
+ line-end))
+ :error-filter
+ (lambda (errors)
+ (flycheck-sanitize-errors (flycheck-dedent-error-messages errors)))
+ :modes (haskell-mode literate-haskell-mode)
+ :next-checkers ((warning . haskell-hlint)))
+
+(flycheck-define-checker haskell-hlint
+ "A Haskell style checker using hlint.
+
+See URL `https://github.com/ndmitchell/hlint'."
+ :command ("hlint" source-inplace)
+ :error-patterns
+ ((warning line-start
+ (file-name) ":" line ":" column
+ ": Warning: "
+ (message (one-or-more not-newline)
+ (one-or-more "\n" (one-or-more not-newline)))
+ line-end)
+ (error line-start
+ (file-name) ":" line ":" column
+ ": Error: "
+ (message (one-or-more not-newline)
+ (one-or-more "\n" (one-or-more not-newline)))
+ line-end))
+ :modes (haskell-mode literate-haskell-mode))
+
+(flycheck-def-config-file-var flycheck-tidyrc html-tidy ".tidyrc"
+ :safe #'stringp)
+
+(flycheck-define-checker html-tidy
+ "A HTML syntax and style checker using Tidy.
+
+See URL `https://github.com/w3c/tidy-html5'."
+ :command ("tidy" (config-file "-config" flycheck-tidyrc) "-e" "-q" source)
+ :error-patterns
+ ((error line-start
+ "line " line
+ " column " column
+ " - Error: " (message) line-end)
+ (warning line-start
+ "line " line
+ " column " column
+ " - Warning: " (message) line-end))
+ :modes (html-mode nxhtml-mode))
+
+(flycheck-def-config-file-var flycheck-jshintrc javascript-jshint ".jshintrc"
+ :safe #'stringp)
+
+(flycheck-define-checker javascript-jshint
+ "A JavaScript syntax and style checker using jshint.
+
+See URL `http://www.jshint.com'."
+ :command ("jshint" "--checkstyle-reporter"
+ (config-file "--config" flycheck-jshintrc)
+ source)
+ :error-parser flycheck-parse-checkstyle
+ :error-filter flycheck-dequalify-error-ids
+ :modes (js-mode js2-mode js3-mode))
+
+(flycheck-def-option-var flycheck-eslint-rulesdir nil javascript-eslint
+ "The directory of custom rules for ESLint.
+
+The value of this variable is either a string containing the path
+to a directory with custom rules, or nil, to not give any custom
+rules to ESLint.
+
+Refer to the ESLint manual at URL
+`https://github.com/eslint/eslint/tree/master/docs/command-line-interface#--rulesdir'
+for more information about the custom directory."
+ :type '(choice (const :tag "No custom rules directory" nil)
+ (directory :tag "Custom rules directory"))
+ :safe #'stringp
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-def-config-file-var flycheck-eslintrc javascript-eslint nil
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-define-checker javascript-eslint
+ "A JavaScript syntax and style checker using eslint.
+
+See URL `https://github.com/eslint/eslint'."
+ :command ("eslint" "--format=checkstyle"
+ (config-file "--config" flycheck-eslintrc)
+ (option "--rulesdir" flycheck-eslint-rulesdir)
+ ;; We need to use source-inplace because eslint looks for
+ ;; configuration files in the directory of the file being checked.
+ ;; See https://github.com/flycheck/flycheck/issues/447
+ source-inplace)
+ :error-parser flycheck-parse-checkstyle
+ :error-filter (lambda (errors)
+ (mapc (lambda (err)
+ ;; Parse error ID from the error message
+ (setf (flycheck-error-message err)
+ (replace-regexp-in-string
+ (rx " ("
+ (group (one-or-more (not (any ")"))))
+ ")" string-end)
+ (lambda (s)
+ (setf (flycheck-error-id err)
+ (match-string 1 s))
+ "")
+ (flycheck-error-message err))))
+ (flycheck-sanitize-errors errors))
+ errors)
+ :modes (js-mode js2-mode js3-mode))
+
+(flycheck-def-config-file-var flycheck-gjslintrc javascript-gjslint ".gjslintrc"
+ :safe #'stringp)
+
+(flycheck-define-checker javascript-gjslint
+ "A JavaScript syntax and style checker using Closure Linter.
+
+See URL `https://developers.google.com/closure/utilities'."
+ :command ("gjslint" "--unix_mode"
+ (config-file "--flagfile" flycheck-gjslintrc)
+ source)
+ :error-patterns ((warning
+ line-start (file-name) ":" line ":("
+ (id (one-or-more digit)) ") " (message) line-end))
+ :modes (js-mode js2-mode js3-mode))
+
+(flycheck-define-checker json-jsonlint
+ "A JSON syntax and style checker using jsonlint.
+
+See URL `https://github.com/zaach/jsonlint'."
+ :command ("jsonlint" "-c" "-q" source)
+ :error-patterns
+ ((error line-start
+ (file-name)
+ ": line " line
+ ", col " column ", "
+ (message) line-end))
+ :predicate
+ (lambda ()
+ (or
+ (eq major-mode 'json-mode)
+ (and (buffer-file-name)
+ (string= (file-name-extension (buffer-file-name)) "json")))))
+
+(flycheck-define-checker less
+ "A LESS syntax checker using lessc.
+
+At least version 1.4 of lessc is required.
+
+See URL `http://lesscss.org'."
+ :command ("lessc" "--lint" "--no-color"
+ ;; We need `source-inplace' to resolve relative `data-uri' paths,
+ ;; see https://github.com/flycheck/flycheck/issues/471
+ source-inplace)
+ :error-patterns
+ ((error line-start (one-or-more word) ":"
+ (message)
+ " in "
+ (file-name)
+
+ " on line " line
+ ", column " column ":"
+ line-end))
+ :modes less-css-mode)
+
+(flycheck-define-checker lua
+ "A Lua syntax checker using the Lua compiler.
+
+See URL `http://www.lua.org/'."
+ :command ("luac" "-p" source)
+ :error-patterns
+ ((error line-start
+ ;; Skip the name of the luac executable. We also skip the file name,
+ ;; because luac is stupid enough as to abbreviate file names in its
+ ;; output, which for obvious reasons breaks our file name
+ ;; detection. See https://github.com/flycheck/flycheck/issues/251
+ (minimal-match (zero-or-more not-newline))
+ ":" line ": " (message) line-end))
+ :modes lua-mode)
+
+(flycheck-define-checker perl
+ "A Perl syntax checker using the Perl interpreter.
+
+See URL `http://www.perl.org'."
+ :command ("perl" "-w" "-c" source)
+ :error-patterns
+ ((error line-start (minimal-match (message))
+ " at " (file-name) " line " line
+ (or "." (and ", " (zero-or-more not-newline))) line-end))
+ :modes (perl-mode cperl-mode)
+ :next-checkers (perl-perlcritic))
+
+(flycheck-def-option-var flycheck-perlcritic-severity nil perl-perlcritic
+ "The message severity for Perl Critic.
+
+The value of this variable is a severity level as integer, for
+the `--severity' option to Perl Critic."
+ :type '(integer :tag "Severity level")
+ :safe #'integerp
+ :package-version '(flycheck . "0.18"))
+
+(define-obsolete-variable-alias 'flycheck-perlcritic-verbosity
+ 'flycheck-perlcritic-severity "0.22")
+
+(flycheck-define-checker perl-perlcritic
+ "A Perl syntax checker using Perl::Critic.
+
+See URL `https://metacpan.org/pod/Perl::Critic'."
+ :command ("perlcritic" "--no-color" "--verbose" "%f/%l/%c/%s/%p/%m (%e)\n"
+ (option "--severity" flycheck-perlcritic-severity nil
+ flycheck-option-int)
+ source)
+ :error-patterns
+ ((info line-start
+ (file-name) "/" line "/" column "/" (any "1") "/"
+ (id (one-or-more (not (any "/")))) "/" (message)
+ line-end)
+ (warning line-start
+ (file-name) "/" line "/" column "/" (any "234") "/"
+ (id (one-or-more (not (any "/")))) "/" (message)
+ line-end)
+ (error line-start
+ (file-name) "/" line "/" column "/" (any "5") "/"
+ (id (one-or-more (not (any "/")))) "/" (message)
+ line-end))
+ :modes (cperl-mode perl-mode))
+
+(flycheck-define-checker php
+ "A PHP syntax checker using the PHP command line interpreter.
+
+See URL `http://php.net/manual/en/features.commandline.php'."
+ :command ("php" "-l" "-d" "error_reporting=E_ALL" "-d" "display_errors=1"
+ "-d" "log_errors=0" source)
+ :error-patterns
+ ((error line-start (or "Parse" "Fatal" "syntax") " error" (any ":" ",") " "
+ (message) " in " (file-name) " on line " line line-end))
+ :modes (php-mode php+-mode)
+ :next-checkers ((warning . php-phpmd)
+ (warning . php-phpcs)))
+
+(flycheck-def-option-var flycheck-phpmd-rulesets
+ '("cleancode" "codesize" "controversial" "design" "naming" "unusedcode")
+ php-phpmd
+ "The rule sets for PHP Mess Detector.
+
+Set default rule sets and custom rule set files.
+
+See section \"Using multiple rule sets\" in the PHP Mess Detector
+manual at URL `http://phpmd.org/documentation/index.html'."
+ :type '(repeat :tag "rule sets"
+ (string :tag "A filename or rule set"))
+ :safe #'flycheck-string-list-p)
+
+(flycheck-define-checker php-phpmd
+ "A PHP style checker using PHP Mess Detector.
+
+See URL `http://phpmd.org/'."
+ :command ("phpmd" source "xml"
+ (eval (flycheck-option-comma-separated-list
+ flycheck-phpmd-rulesets)))
+ :error-parser flycheck-parse-phpmd
+ :modes (php-mode php+-mode)
+ :next-checkers (php-phpcs))
+
+(flycheck-def-option-var flycheck-phpcs-standard nil php-phpcs
+ "The coding standard for PHP CodeSniffer.
+
+When nil, use the default standard from the global PHP
+CodeSniffer configuration. When set to a string, pass the string
+to PHP CodeSniffer which will interpret it as name as a standard,
+or as path to a standard specification."
+ :type '(choice (const :tag "Default standard" nil)
+ (string :tag "Standard name or file"))
+ :safe #'stringp)
+
+(flycheck-define-checker php-phpcs
+ "A PHP style checker using PHP_CodeSniffer.
+
+See URL `http://pear.php.net/package/PHP_CodeSniffer/'."
+ :command ("phpcs" "--report=checkstyle"
+ (option "--standard=" flycheck-phpcs-standard concat)
+ source)
+ :error-parser flycheck-parse-checkstyle
+ :modes (php-mode php+-mode))
+
+(flycheck-define-checker puppet-parser
+ "A Puppet DSL syntax checker using puppet's own parser.
+
+See URL `http://puppetlabs.com/'."
+ :command ("puppet" "parser" "validate" "--color=false" source)
+ :error-patterns
+ ((error line-start
+ ;; Skip over the path of the Puppet executable
+ (minimal-match (zero-or-more not-newline))
+ ": Could not parse for environment " (one-or-more word)
+ ": " (message (minimal-match (zero-or-more anything)))
+ " at " (file-name "/" (zero-or-more not-newline)) ":" line line-end))
+ :modes puppet-mode
+ :next-checkers ((warning . puppet-lint)))
+
+(flycheck-define-checker puppet-lint
+ "A Puppet DSL style checker using puppet-lint.
+
+See URL `http://puppet-lint.com/'."
+ ;; We must check the original file, because Puppetlint is quite picky on the
+ ;; names of files and there place in the directory structure, to comply with
+ ;; Puppet's autoload directory layout. For instance, a class foo::bar is
+ ;; required to be in a file foo/bar.pp. Any other place, such as a Flycheck
+ ;; temporary file will cause an error.
+ :command ("puppet-lint"
+ "--log-format" "%{path}:%{linenumber}:%{kind}: %{message} (%{check})"
+ source-original)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ":warning: " (message) line-end)
+ (error line-start (file-name) ":" line ":error: " (message) line-end))
+ :modes puppet-mode
+ ;; Since we check the original file, we can only use this syntax checker if
+ ;; the buffer is actually linked to a file, and if it is not modified.
+ :predicate flycheck-buffer-saved-p)
+
+(flycheck-def-config-file-var flycheck-flake8rc python-flake8 ".flake8rc"
+ :safe #'stringp)
+
+(flycheck-def-option-var flycheck-flake8-error-level-alist
+ '(("^E9.*$" . error) ; Syntax errors from pep8
+ ("^F82.*$" . error) ; undefined variables from pyflakes
+ ("^F83.*$" . error) ; Duplicate arguments from flake8
+ ("^N.*$" . info) ; Naming issues from naming
+ )
+ python-flake8
+ "An alist mapping flake8 error IDs to Flycheck error levels.
+
+Each item in this list is a cons cell `(PATTERN . LEVEL)' where
+PATTERN is a regular expression matched against the error ID, and
+LEVEL is a Flycheck error level symbol.
+
+Each PATTERN is matched in the order of appearance in this list
+against the error ID. If it matches the ID, the level of the
+corresponding error is set to LEVEL. An error that is not
+matched by any PATTERN defaults to warning level.
+
+This option exists because flake8 categorises errors by the
+underlying tool that produced them (e.g. F for pyflakes messages,
+E for pep8 messages, etc.). These categorisations do not map
+directly to Flycheck error levels. Hence, this option exists to
+allow for a custom mapping. The default value handles all of the
+built-in tools of flake8, and naming errors from pep8-naming."
+ :type '(repeat (cons (regexp :tag "Error ID pattern")
+ (symbol :tag "Error level")))
+ :package-version '(flycheck . "0.22"))
+
+(flycheck-def-option-var flycheck-flake8-maximum-complexity nil python-flake8
+ "The maximum McCabe complexity of methods.
+
+If nil, do not check the complexity of methods. If set to an
+integer, report any complexity greater than the value of this
+variable as warning.
+
+If set to an integer, this variable overrules any similar setting
+in the configuration file denoted by `flycheck-flake8rc'."
+ :type '(choice (const :tag "Do not check McCabe complexity" nil)
+ (integer :tag "Maximum complexity"))
+ :safe #'integerp)
+
+(flycheck-def-option-var flycheck-flake8-maximum-line-length nil python-flake8
+ "The maximum length of lines.
+
+If set to an integer, the value of this variable denotes the
+maximum length of lines, overruling any similar setting in the
+configuration file denoted by `flycheck-flake8rc'. An error will
+be reported for any line longer than the value of this variable.
+
+If set to nil, use the maximum line length from the configuration
+file denoted by `flycheck-flake8rc', or the PEP 8 recommendation
+of 79 characters if there is no configuration with this setting."
+ :type '(choice (const :tag "Default value")
+ (integer :tag "Maximum line length in characters"))
+ :safe #'integerp)
+
+(defun flycheck-flake8-fix-error-level (err)
+ "Fix the error level of ERR.
+
+Update the error level of ERR according to
+`flycheck-flake8-error-level-alist'."
+ (pcase-dolist (`(,pattern . ,level) flycheck-flake8-error-level-alist)
+ (when (string-match-p pattern (flycheck-error-id err))
+ (setf (flycheck-error-level err) level)))
+ err)
+
+(flycheck-define-checker python-flake8
+ "A Python syntax and style checker using Flake8.
+
+Requires Flake8 2.0 or newer. See URL
+`https://pypi.python.org/pypi/flake8'."
+ :command ("flake8"
+ (config-file "--config" flycheck-flake8rc)
+ (option "--max-complexity" flycheck-flake8-maximum-complexity nil
+ flycheck-option-int)
+ (option "--max-line-length" flycheck-flake8-maximum-line-length nil
+ flycheck-option-int)
+ source)
+ :error-filter (lambda (errors)
+ (let ((errors (flycheck-sanitize-errors errors)))
+ (mapc #'flycheck-flake8-fix-error-level errors)
+ errors))
+ :error-patterns
+ ((warning line-start
+ (file-name) ":" line ":" (optional column ":") " "
+ (id (one-or-more (any alpha)) (one-or-more digit)) " "
+ (message (one-or-more not-newline))
+ line-end))
+ :modes python-mode)
+
+(flycheck-def-config-file-var flycheck-pylintrc python-pylint
+ ".pylintrc"
+ :safe #'stringp)
+
+(flycheck-define-checker python-pylint
+ "A Python syntax and style checker using Pylint.
+
+This syntax checker requires Pylint 1.0 or newer.
+
+See URL `http://www.pylint.org/'."
+ ;; -r n disables the scoring report
+ :command ("pylint" "-r" "n"
+ "--msg-template" "{path}:{line}:{column}:{C}:{msg_id}:{msg}"
+ (config-file "--rcfile" flycheck-pylintrc)
+ ;; Need `source-inplace' for relative imports (e.g. `from .foo
+ ;; import bar'), see https://github.com/flycheck/flycheck/issues/280
+ source-inplace)
+ :error-filter
+ (lambda (errors)
+ (flycheck-sanitize-errors (flycheck-increment-error-columns errors)))
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ":"
+ (or "E" "F") ":"
+ (id (one-or-more (not (any ":")))) ":"
+ (message) line-end)
+ (warning line-start (file-name) ":" line ":" column ":"
+ (or "W" "R") ":"
+ (id (one-or-more (not (any ":")))) ":"
+ (message) line-end)
+ (info line-start (file-name) ":" line ":" column ":"
+ "C:" (id (one-or-more (not (any ":")))) ":"
+ (message) line-end))
+ :modes python-mode)
+
+(flycheck-define-checker python-pycompile
+ "A Python syntax checker using Python's builtin compiler.
+
+See URL `https://docs.python.org/3.4/library/py_compile.html'."
+ :command ("python" "-m" "py_compile" source)
+ :error-patterns
+ ;; Python 2.7
+ ((error line-start " File \"" (file-name) "\", line " line "\n"
+ (= 2 (zero-or-more not-newline) "\n")
+ "SyntaxError: " (message) line-end)
+ ;; 2.6
+ (error line-start "SyntaxError: ('" (message (one-or-more (not (any "'"))))
+ "', ('" (file-name (one-or-more (not (any "'")))) "', "
+ line ", " column ", " (one-or-more not-newline) line-end))
+ :modes python-mode)
+
+(flycheck-def-option-var flycheck-lintr-caching t r-lintr
+ "Whether to enable caching in lintr.
+
+By default, lintr caches all expressions in a file and re-checks
+only those that have changed. Setting this option to nil
+disables caching in case there are problems."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.23"))
+
+(flycheck-def-option-var flycheck-lintr-linters "default_linters" r-lintr
+ "Linters to use with lintr.
+
+The value of this variable is a string containing an R
+expression, which selects linters for lintr."
+ :type 'string
+ :risky t
+ :package-version '(flycheck . "0.23"))
+
+(flycheck-define-checker r-lintr
+ "An R style and syntax checker using the lintr package.
+
+See URL `https://github.com/jimhester/lintr'."
+ :command ("R" "--slave" "--restore" "--no-save" "-e"
+ (eval (concat
+ "library(lintr);"
+ "try(lint(commandArgs(TRUE)"
+ ", cache=" (if flycheck-lintr-caching "TRUE" "FALSE")
+ ", " flycheck-lintr-linters
+ "))"))
+ "--args" source)
+ :error-patterns
+ ((info line-start (file-name) ":" line ":" column ": style: " (message)
+ line-end)
+ (warning line-start (file-name) ":" line ":" column ": warning: " (message)
+ line-end)
+ (error line-start (file-name) ":" line ":" column ": error: " (message)
+ line-end))
+ :modes ess-mode)
+
+(flycheck-define-checker racket
+ "A Racket syntax checker using the Racket compiler.
+
+See URL `http://racket-lang.org/'."
+ :command ("racket" "-f" source-inplace)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ":" (message) line-end))
+ :modes racket-mode)
+
+(flycheck-define-checker rpm-rpmlint
+ "A RPM SPEC file syntax checker using rpmlint.
+
+See URL `http://sourceforge.net/projects/rpmlint/'."
+ :command ("rpmlint" source)
+ :error-patterns
+ ((error line-start
+ (file-name) ":" (optional line ":") " E: " (message)
+ line-end)
+ (warning line-start
+ (file-name) ":" (optional line ":") " W: " (message)
+ line-end))
+ :error-filter
+ ;; Add fake line numbers if they are missing in the lint output
+ (lambda (errors)
+ (dolist (err errors)
+ (unless (flycheck-error-line err)
+ (setf (flycheck-error-line err) 1)))
+ errors)
+ :modes (sh-mode rpm-spec-mode)
+ :predicate (lambda () (or (not (eq major-mode 'sh-mode))
+ ;; In `sh-mode', we need the proper shell
+ (eq sh-shell 'rpm))))
+
+(defun flycheck-locate-sphinx-source-directory ()
+ "Locate the Sphinx source directory for the current buffer.
+
+Return the source directory, or nil, if the current buffer is not
+part of a Sphinx project."
+ (-when-let* ((filename (buffer-file-name))
+ (dir (locate-dominating-file filename "conf.py")))
+ (expand-file-name dir)))
+
+(flycheck-define-checker rst
+ "A ReStructuredText (RST) syntax checker using Docutils.
+
+See URL `http://docutils.sourceforge.net/'."
+ ;; We need to use source-inplace to properly resolve relative paths in
+ ;; include:: directives
+ :command ("rst2pseudoxml.py" "--report=2" "--halt=5" source-inplace)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ": (WARNING/2) " (message) line-end)
+ (error line-start
+ (file-name) ":" line
+ ": (" (or "ERROR/3" "SEVERE/4") ") "
+ (message) line-end))
+ :modes rst-mode
+ ;; Don't use the generic ReST checker in Sphinx projects, because it'll
+ ;; produce a lot of false positives.
+ :predicate (lambda () (not (flycheck-locate-sphinx-source-directory))))
+
+(flycheck-def-option-var flycheck-sphinx-warn-on-missing-references t rst-sphinx
+ "Whether to warn about missing references in Sphinx.
+
+When non-nil (the default), warn about all missing references in
+Sphinx via `-n'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.17"))
+
+(flycheck-define-checker rst-sphinx
+ "A ReStructuredText (RST) syntax checker using Sphinx.
+
+Requires Sphinx 1.2 or newer. See URL `http://sphinx-doc.org'."
+ :command ("sphinx-build" "-b" "pseudoxml"
+ "-q" "-N" ; Reduced output and no colors
+ (option-flag "-n" flycheck-sphinx-warn-on-missing-references)
+ (eval (flycheck-locate-sphinx-source-directory))
+ temporary-directory ; Redirect the output to a temporary
+ ; directory
+ source-original) ; Sphinx needs the original document
+ :error-patterns
+ ((warning line-start (file-name) ":" line ": WARNING: " (message) line-end)
+ (error line-start
+ (file-name) ":" line
+ ": " (or "ERROR" "SEVERE") ": "
+ (message) line-end))
+ :modes rst-mode
+ :predicate (lambda () (and (flycheck-buffer-saved-p)
+ (flycheck-locate-sphinx-source-directory))))
+
+(flycheck-def-config-file-var flycheck-rubocoprc ruby-rubocop ".rubocop.yml"
+ :safe #'stringp)
+
+(flycheck-def-option-var flycheck-rubocop-lint-only nil ruby-rubocop
+ "Whether to only report code issues in Rubocop.
+
+When non-nil, only report code issues in Rubocop, via `--lint'.
+Otherwise report style issues as well."
+ :safe #'booleanp
+ :type 'boolean
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-define-checker ruby-rubocop
+ "A Ruby syntax and style checker using the RuboCop tool.
+
+See URL `http://batsov.com/rubocop/'."
+ :command ("rubocop" "--display-cop-names" "--format" "emacs"
+ (config-file "--config" flycheck-rubocoprc)
+ (option-flag "--lint" flycheck-rubocop-lint-only)
+ source)
+ :error-patterns
+ ((info line-start (file-name) ":" line ":" column ": C: "
+ (optional (id (one-or-more (not (any ":")))) ": ") (message) line-end)
+ (warning line-start (file-name) ":" line ":" column ": W: "
+ (optional (id (one-or-more (not (any ":")))) ": ") (message)
+ line-end)
+ (error line-start (file-name) ":" line ":" column ": " (or "E" "F") ": "
+ (optional (id (one-or-more (not (any ":")))) ": ") (message)
+ line-end))
+ :modes (enh-ruby-mode ruby-mode)
+ :next-checkers ((warning . ruby-rubylint)))
+
+;; Default to `nil' to let Rubylint find its configuration file by itself, and
+;; to maintain backwards compatibility with older Rubylint and Flycheck releases
+(flycheck-def-config-file-var flycheck-rubylintrc ruby-rubylint nil
+ :safe #'stringp)
+
+(flycheck-define-checker ruby-rubylint
+ "A Ruby syntax and code analysis checker using ruby-lint.
+
+Requires ruby-lint 2.0 or newer. To use `flycheck-rubylintrc',
+ruby-lint 2.0.2 or newer is required. See URL
+`https://github.com/YorickPeterse/ruby-lint'."
+ :command ("ruby-lint" "--presenter=syntastic"
+ (config-file "--config" flycheck-rubylintrc)
+ source)
+ :error-patterns
+ ((info line-start
+ (file-name) ":I:" line ":" column ": " (message) line-end)
+ (warning line-start
+ (file-name) ":W:" line ":" column ": " (message) line-end)
+ (error line-start
+ (file-name) ":E:" line ":" column ": " (message) line-end))
+ :modes (enh-ruby-mode ruby-mode))
+
+(flycheck-define-checker ruby
+ "A Ruby syntax checker using the standard Ruby interpreter.
+
+Please note that the output of different Ruby versions and
+implementations varies wildly. This syntax checker supports
+current versions of MRI and JRuby, but may break when used with
+other implementations or future versions of these
+implementations.
+
+Please consider using `ruby-rubocop' or `ruby-rubylint' instead.
+
+See URL `https://www.ruby-lang.org/'."
+ :command ("ruby" "-w" "-c" source)
+ :error-patterns
+ ;; These patterns support output from JRuby, too, to deal with RVM or Rbenv
+ ((error line-start
+ "SyntaxError in " (file-name) ":" line ": " (message)
+ line-end)
+ (warning line-start
+ (file-name) ":" line ":" (optional column ":")
+ " warning: " (message) line-end)
+ (error line-start (file-name) ":" line ": " (message) line-end))
+ :modes (enh-ruby-mode ruby-mode)
+ :next-checkers ((warning . ruby-rubylint)))
+
+(flycheck-define-checker ruby-jruby
+ "A Ruby syntax checker using the JRuby interpreter.
+
+This syntax checker is very primitive, and may break on future
+versions of JRuby.
+
+Please consider using `ruby-rubocop' or `ruby-rubylint' instead.
+
+See URL `http://jruby.org/'."
+ :command ("jruby" "-w" "-c" source)
+ :error-patterns
+ ((error line-start
+ "SyntaxError in " (file-name) ":" line ": " (message)
+ line-end)
+ (warning line-start (file-name) ":" line " warning: " (message) line-end)
+ (error line-start (file-name) ":" line ": " (message) line-end))
+ :modes (enh-ruby-mode ruby-mode)
+ :next-checkers ((warning . ruby-rubylint)))
+
+(flycheck-def-option-var flycheck-rust-check-tests t rust
+ "Whether to check test code in Rust.
+
+When non-nil, `rustc' is passed the `--test' flag, which will
+check any code marked with the `#[cfg(test)]' attribute and any
+functions marked with `#[test]'. Otherwise, `rustc' is not passed
+`--test' and test code will not be checked. Skipping `--test' is
+necessary when using `#![no_std]', because compiling the test
+runner requires `std'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '("flycheck" . "0.19"))
+
+(flycheck-def-option-var flycheck-rust-crate-root nil rust
+ "A path to the crate root for the current buffer.
+
+The value of this variable is either a string with the path to
+the crate root for the current buffer, or nil if the current buffer
+is a crate. A relative path is relative to the current buffer.
+
+If this variable is non nil the current buffer will only be checked
+if it is not modified, i.e. after it has been saved."
+ :type 'string
+ :package-version '(flycheck . "0.20")
+ :safe #'stringp)
+(make-variable-buffer-local 'flycheck-rust-crate-root)
+
+(flycheck-def-option-var flycheck-rust-crate-type "lib" rust
+ "The type of the Rust Crate to check.
+
+The value of this variable is a string denoting the crate type,
+for the `--crate-type' flag."
+ :type 'string
+ :safe #'stringp
+ :package-version '("flycheck" . "0.20"))
+(make-variable-buffer-local 'flycheck-rust-crate-type)
+
+(flycheck-def-option-var flycheck-rust-library-path nil rust
+ "A list of library directories for Rust.
+
+The value of this variable is a list of strings, where each
+string is a directory to add to the library path of Rust.
+Relative paths are relative to the file being checked."
+ :type '(repeat (directory :tag "Library directory"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.18"))
+
+(flycheck-define-checker rust
+ "A Rust syntax checker using Rust compiler.
+
+This syntax checker needs Rust 1.0.0 alpha or newer.
+
+See URL `http://www.rust-lang.org'."
+ :command ("rustc" "-Z" "no-trans"
+ (option "--crate-type" flycheck-rust-crate-type)
+ (option-flag "--test" flycheck-rust-check-tests)
+ (option-list "-L" flycheck-rust-library-path concat)
+ (eval (or flycheck-rust-crate-root
+ (flycheck-substitute-argument 'source-inplace 'rust))))
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ": "
+ (one-or-more digit) ":" (one-or-more digit) " error: "
+ (message) line-end)
+ (warning line-start (file-name) ":" line ":" column ": "
+ (one-or-more digit) ":" (one-or-more digit) " warning: "
+ (message) line-end)
+ (info line-start (file-name) ":" line ":" column ": "
+ (one-or-more digit) ":" (one-or-more digit) " " (or "note" "help") ": "
+ (message) line-end))
+ :modes rust-mode
+ :predicate (lambda ()
+ (or (not flycheck-rust-crate-root) (flycheck-buffer-saved-p))))
+
+(defvar flycheck-sass-scss-cache-directory nil
+ "The cache directory for `sass' and `scss'.")
+
+(defun flycheck-sass-scss-cache-location ()
+ "Get the cache location for `sass' and `scss'.
+
+If no cache directory exists yet, create one and return it.
+Otherwise return the previously used cache directory."
+ (setq flycheck-sass-scss-cache-directory
+ (or flycheck-sass-scss-cache-directory
+ (make-temp-file "flycheck-sass-scss-cache" 'directory))))
+
+(flycheck-def-option-var flycheck-sass-compass nil sass
+ "Whether to enable the Compass CSS framework.
+
+When non-nil, enable the Compass CSS framework, via `--compass'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-define-checker sass
+ "A Sass syntax checker using the Sass compiler.
+
+See URL `http://sass-lang.com'."
+ :command ("sass"
+ "--cache-location" (eval (flycheck-sass-scss-cache-location))
+ (option-flag "--compass" flycheck-sass-compass)
+ "-c" source)
+ :error-patterns
+ ((error line-start "Syntax error on line " line ": " (message))
+ (warning line-start "WARNING on line " line " of " (file-name)
+ ":" (optional "\r") "\n" (message) line-end)
+ (error line-start
+ (or "Syntax error: " "Error: ")
+ (message (one-or-more not-newline)
+ (zero-or-more "\n"
+ (one-or-more " ")
+ (one-or-more not-newline)))
+ (optional "\r") "\n on line " line " of " (file-name)
+ line-end))
+ :modes sass-mode)
+
+(flycheck-define-checker scala
+ "A Scala syntax checker using the Scala compiler.
+
+See URL `http://www.scala-lang.org/'."
+ :command ("scalac" "-Ystop-after:parser" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ": error: " (message) line-end))
+ :modes scala-mode
+ :next-checkers ((warning . scala-scalastyle)))
+
+(flycheck-def-config-file-var flycheck-scalastylerc scala-scalastyle nil
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-def-option-var flycheck-scalastyle-jar nil scala-scalastyle
+ "The path to the main JAR file of Scalastyle.
+
+If this option is nil, or points to a non-existing file,
+`scala-scalastyle' can not be used."
+ :type '(file :must-match t)
+ :safe #'stringp
+ :package-version '(flycheck . "0.20"))
+
+(flycheck-define-checker scala-scalastyle
+ "A Scala style checker using scalastyle.
+
+Note that this syntax checker is not used if
+`flycheck-scalastyle-jar' or `flycheck-scalastylerc' are nil or
+point to non-existing files.
+
+See URL `http://www.scalastyle.org'."
+ :command ("java"
+ (option "-jar" flycheck-scalastyle-jar)
+ (config-file "-c" flycheck-scalastylerc)
+ source)
+ :error-patterns
+ ((error line-start "error file=" (file-name) " message="
+ (message) " line=" line (optional " column=" column) line-end)
+ (warning line-start "warning file=" (file-name) " message="
+ (message) " line=" line (optional " column=" column) line-end))
+ :modes scala-mode
+ :predicate
+ ;; Inhibit this syntax checker if the JAR or the configuration are unset or
+ ;; missing
+ (lambda () (and flycheck-scalastyle-jar flycheck-scalastylerc
+ (file-exists-p flycheck-scalastyle-jar)
+ (file-exists-p (flycheck-locate-config-file
+ flycheck-scalastylerc 'scala-scalastyle)))))
+
+(flycheck-def-option-var flycheck-scss-compass nil scss
+ "Whether to enable the Compass CSS framework.
+
+When non-nil, enable the Compass CSS framework, via `--compass'."
+ :type 'boolean
+ :safe #'booleanp
+ :package-version '(flycheck . "0.16"))
+
+(flycheck-define-checker scss
+ "A SCSS syntax checker using the SCSS compiler.
+
+See URL `http://sass-lang.com'."
+ :command ("scss"
+ "--cache-location" (eval (flycheck-sass-scss-cache-location))
+ (option-flag "--compass" flycheck-scss-compass)
+ "-c" source)
+ :error-patterns
+ ((error line-start "Syntax error on line " line ": " (message))
+ (warning line-start "WARNING on line " line " of " (file-name)
+ ":" (optional "\r") "\n" (message) line-end)
+ (error line-start
+ (or "Syntax error: " "Error: ")
+ (message (one-or-more not-newline)
+ (zero-or-more "\n"
+ (one-or-more " ")
+ (one-or-more not-newline)))
+ (optional "\r") "\n" (one-or-more " ") "on line " line " of " (file-name)
+ line-end))
+ :modes scss-mode)
+
+(flycheck-define-checker sh-bash
+ "A Bash syntax checker using the Bash shell.
+
+See URL `http://www.gnu.org/software/bash/'."
+ :command ("bash" "--norc" "-n" "--" source)
+ :error-patterns ((error line-start
+ (file-name) ":" (one-or-more (not (any digit)))
+ line (zero-or-more " ") ":" (zero-or-more " ")
+ (message) line-end))
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'bash))
+ :next-checkers ((warning . sh-shellcheck)))
+
+(flycheck-define-checker sh-posix-dash
+ "A POSIX Shell syntax checker using the Dash shell.
+
+See URL `http://gondor.apana.org.au/~herbert/dash/'."
+ :command ("dash" "-n" source)
+ :error-patterns
+ ((error line-start (file-name) ": " line ": " (backref 1) ": " (message)))
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'sh))
+ :next-checkers ((warning . sh-shellcheck)))
+
+(flycheck-define-checker sh-posix-bash
+ "A POSIX Shell syntax checker using the Bash shell.
+
+See URL `http://www.gnu.org/software/bash/'."
+ :command ("bash" "--posix" "--norc" "-n" "--" source)
+ :error-patterns
+ ((error line-start
+ (file-name) ":" (one-or-more (not (any digit)))
+ line (zero-or-more " ") ":" (zero-or-more " ")
+ (message) line-end))
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'sh))
+ :next-checkers ((warning . sh-shellcheck)))
+
+(flycheck-define-checker sh-zsh
+ "A Zsh syntax checker using the Zsh shell.
+
+See URL `http://www.zsh.org/'."
+ :command ("zsh" "-n" "-d" "-f" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ": " (message) line-end))
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'zsh))
+ :next-checkers ((warning . sh-shellcheck)))
+
+(defconst flycheck-shellcheck-supported-shells '(bash ksh88 sh zsh)
+ "Shells supported by ShellCheck.")
+
+(flycheck-def-option-var flycheck-shellcheck-excluded-warnings nil sh-shellcheck
+ "A list of excluded warnings for ShellCheck.
+
+The value of this variable is a list of strings, where each
+string is a warning code to be excluded from ShellCheck reports.
+By default, no warnings are excluded."
+ :type '(repeat :tag "Excluded warnings"
+ (string :tag "Warning code"))
+ :safe #'flycheck-string-list-p
+ :package-version '(flycheck . "0.21"))
+
+(flycheck-define-checker sh-shellcheck
+ "A shell script syntax and style checker using Shellcheck.
+
+See URL `https://github.com/koalaman/shellcheck/'."
+ :command ("shellcheck"
+ "--format" "checkstyle"
+ "--shell" (eval (symbol-name sh-shell))
+ (option "--exclude" flycheck-shellcheck-excluded-warnings list
+ flycheck-option-comma-separated-list)
+ source)
+ :error-parser flycheck-parse-checkstyle
+ :error-filter flycheck-dequalify-error-ids
+ :modes sh-mode
+ :predicate (lambda () (memq sh-shell flycheck-shellcheck-supported-shells)))
+
+(flycheck-define-checker slim
+ "A Slim syntax checker using the Slim compiler.
+
+See URL `http://slim-lang.com'."
+ :command ("slimrb" "-c" source)
+ :error-patterns
+ ((error line-start
+ "Slim::Parser::SyntaxError:" (message) (optional "\r") "\n "
+ (file-name) ", Line " line (optional ", Column " column)
+ line-end))
+ :modes slim-mode)
+
+(flycheck-def-config-file-var flycheck-chktexrc tex-chktex ".chktexrc"
+ :safe #'stringp)
+
+(flycheck-define-checker tex-chktex
+ "A TeX and LaTeX syntax and style checker using chktex.
+
+See URL `http://www.nongnu.org/chktex/'."
+ :command ("chktex" (config-file "-l" flycheck-chktexrc) "-v0" "-q" "-I"
+ source-inplace)
+ :error-patterns
+ ((warning line-start (file-name) ":" line ":" column ":"
+ (id (one-or-more digit)) ":" (message) line-end))
+ :error-filter
+ (lambda (errors)
+ (flycheck-sanitize-errors (flycheck-increment-error-columns errors)))
+ :modes (latex-mode plain-tex-mode))
+
+(flycheck-define-checker tex-lacheck
+ "A LaTeX syntax and style checker using lacheck.
+
+See URL `http://www.ctan.org/pkg/lacheck'."
+ :command ("lacheck" source-inplace)
+ :error-patterns
+ ((warning line-start
+ "\"" (file-name) "\", line " line ": " (message)
+ line-end))
+ :modes latex-mode)
+
+(flycheck-define-checker texinfo
+ "A Texinfo syntax checker using makeinfo.
+
+See URL `http://www.gnu.org/software/texinfo/'."
+ :command ("makeinfo" "-o" null-device source-inplace)
+ :error-patterns
+ ((warning line-start (file-name) ":"
+ line (optional ":" column) ": "
+ "warning: " (message) line-end)
+ (error line-start (file-name) ":"
+ line (optional ":" column) ": "
+ (message) line-end))
+ :modes texinfo-mode)
+
+(flycheck-define-checker verilog-verilator
+ "A Verilog syntax checker using the Verilator Verilog HDL simulator.
+
+See URL `http://www.veripool.org/wiki/verilator'."
+ :command ("verilator" "--lint-only" "-Wall" source)
+ :error-patterns
+ ((warning line-start "%Warning-" (zero-or-more not-newline) ": "
+ (file-name) ":" line ": " (message) line-end)
+ (error line-start "%Error: " (file-name) ":"
+ line ": " (message) line-end))
+ :modes verilog-mode)
+
+(flycheck-define-checker xml-xmlstarlet
+ "A XML syntax checker and validator using the xmlstarlet utility.
+
+See URL `http://xmlstar.sourceforge.net/'."
+ :command ("xmlstarlet" "val" "-e" "-q" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line "." column ": " (message) line-end))
+ :modes (xml-mode nxml-mode))
+
+(flycheck-define-checker xml-xmllint
+ "A XML syntax checker and validator using the xmllint utility.
+
+The xmllint is part of libxml2, see URL
+`http://www.xmlsoft.org/'."
+ :command ("xmllint" "--noout" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ": " (message) line-end))
+ :modes (xml-mode nxml-mode))
+
+(flycheck-define-checker yaml-jsyaml
+ "A YAML syntax checker using JS-YAML.
+
+See URL `https://github.com/nodeca/js-yaml'."
+ :command ("js-yaml" source)
+ :error-patterns
+ ((error line-start
+ "JS-YAML: " (message) " at line " line ", column " column ":"
+ line-end))
+ :modes yaml-mode)
+
+(flycheck-define-checker yaml-ruby
+ "A YAML syntax checker using Ruby's YAML parser.
+
+This syntax checker uses the YAML parser from Ruby's standard
+library.
+
+See URL `http://www.ruby-doc.org/stdlib-2.0.0/libdoc/yaml/rdoc/YAML.html'."
+ :command ("ruby" "-ryaml" "-e" "begin;
+ file_name = ARGV[0]; \
+ YAML.load(ARGF); \
+ rescue Exception => e; \
+ STDERR.puts \"#{file_name}:#{e}\"; \
+ end" source)
+ :error-patterns
+ (;; Syck (Ruby <= 1.9.2, unmaintained)
+ (error line-start (file-name)
+ ":syntax error on line " line ", col " column ": `" (message) "'" line-end)
+ ;; Psych (Ruby >= 1.9.3)
+ (error line-start (file-name) ":" (zero-or-more not-newline) ":" (message)
+ "at line " line " column " column line-end))
+ :modes yaml-mode)
+
+(provide 'flycheck)
+
+;; Local Variables:
+;; coding: utf-8
+;; indent-tabs-mode: nil
+;; End:
+
+;;; flycheck.el ends here
--- /dev/null
+This is flycheck.info, produced by makeinfo version 5.2 from
+flycheck.texi.
+
+This manual is for Flycheck version 0.23-cvs.
+
+Copyright © 2014-2015 Sebastian Wiesner
+
+ Permission is granted to copy, distribute and/or modify this
+ documentation under the terms of the GNU Free Documentation
+ License, Version 1.3 or any later version published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is included
+ in the section entitled “GNU Free Documentation License.”.
+
+ Alternatively, you may copy, distribute and/or modify this
+ documentation under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License. A copy of
+ the license can be obtained at
+ <https://creativecommons.org/licenses/by-sa/4.0/legalcode>.
+
+INFO-DIR-SECTION Emacs
+START-INFO-DIR-ENTRY
+* flycheck: (flycheck.info). On the fly syntax checking for GNU Emacs
+END-INFO-DIR-ENTRY
+
+
+ Generated by Sphinx 1.2.3.
+
+\1f
+Indirect:
+flycheck.info-1: 1040
+flycheck.info-2: 301299
+\1f
+Tag Table:
+(Indirect)
+Node: Top\7f1040
+Ref: index doc\7f1924
+Ref: 0\7f1924
+Node: Introduction\7f10527
+Ref: guide/introduction introduction\7f10625
+Ref: 1\7f10625
+Ref: guide/introduction doc\7f10625
+Ref: 2\7f10625
+Node: Features\7f11067
+Ref: guide/introduction features\7f11155
+Ref: 3\7f11155
+Ref: guide/introduction id1\7f11155
+Ref: 4\7f11155
+Node: 3rd party extensions\7f11633
+Ref: guide/introduction rd-party-extensions\7f11721
+Ref: b\7f11721
+Ref: guide/introduction id2\7f11721
+Ref: c\7f11721
+Ref: 3rd party extensions-Footnote-1\7f13145
+Ref: 3rd party extensions-Footnote-2\7f13195
+Ref: 3rd party extensions-Footnote-3\7f13232
+Ref: 3rd party extensions-Footnote-4\7f13293
+Ref: 3rd party extensions-Footnote-5\7f13349
+Ref: 3rd party extensions-Footnote-6\7f13409
+Ref: 3rd party extensions-Footnote-7\7f13462
+Ref: 3rd party extensions-Footnote-8\7f13517
+Ref: 3rd party extensions-Footnote-9\7f13560
+Ref: 3rd party extensions-Footnote-10\7f13610
+Ref: 3rd party extensions-Footnote-11\7f13657
+Ref: 3rd party extensions-Footnote-12\7f13709
+Ref: 3rd party extensions-Footnote-13\7f13741
+Ref: 3rd party extensions-Footnote-14\7f13795
+Ref: 3rd party extensions-Footnote-15\7f13828
+Ref: 3rd party extensions-Footnote-16\7f13880
+Ref: 3rd party extensions-Footnote-17\7f13934
+Ref: 3rd party extensions-Footnote-18\7f13988
+Node: Flycheck versus Flymake\7f14039
+Ref: guide/flycheck-versus-flymake flycheck-versus-flymake\7f14146
+Ref: d\7f14146
+Ref: guide/flycheck-versus-flymake doc\7f14146
+Ref: e\7f14146
+Ref: guide/flycheck-versus-flymake flycheck-rust\7f14146
+Ref: f\7f14146
+Ref: guide/flycheck-versus-flymake id1\7f14146
+Ref: 10\7f14146
+Ref: Flycheck versus Flymake-Footnote-1\7f14918
+Ref: Flycheck versus Flymake-Footnote-2\7f14968
+Ref: Flycheck versus Flymake-Footnote-3\7f15016
+Node: Overview\7f15073
+Ref: guide/flycheck-versus-flymake overview\7f15167
+Ref: 11\7f15167
+Ref: Overview-Footnote-1\7f21229
+Ref: Overview-Footnote-2\7f21290
+Ref: Overview-Footnote-3\7f21421
+Ref: Overview-Footnote-4\7f21534
+Ref: Overview-Footnote-5\7f21959
+Ref: Overview-Footnote-6\7f22117
+Ref: Overview-Footnote-7\7f22218
+Ref: Overview-Footnote-8\7f22368
+Ref: Overview-Footnote-9\7f22520
+Node: Detailed review\7f22672
+Ref: guide/flycheck-versus-flymake detailed-review\7f22766
+Ref: 12\7f22766
+Node: Relation to Emacs\7f23138
+Ref: guide/flycheck-versus-flymake relation-to-emacs\7f23242
+Ref: 13\7f23242
+Ref: Relation to Emacs-Footnote-1\7f23825
+Node: Enabling syntax checking\7f23870
+Ref: guide/flycheck-versus-flymake enabling-syntax-checking\7f23998
+Ref: 14\7f23998
+Ref: Enabling syntax checking-Footnote-1\7f25202
+Node: Syntax checkers\7f25250
+Ref: guide/flycheck-versus-flymake syntax-checkers\7f25389
+Ref: 16\7f25389
+Node: Built-in syntax checkers\7f25513
+Ref: guide/flycheck-versus-flymake built-in-syntax-checkers\7f25633
+Ref: 17\7f25633
+Ref: Built-in syntax checkers-Footnote-1\7f26301
+Ref: Built-in syntax checkers-Footnote-2\7f26351
+Ref: Built-in syntax checkers-Footnote-3\7f26398
+Node: Definition of new syntax checkers\7f26424
+Ref: guide/flycheck-versus-flymake definition-of-new-syntax-checkers\7f26544
+Ref: 18\7f26544
+Ref: Definition of new syntax checkers-Footnote-1\7f28812
+Ref: Definition of new syntax checkers-Footnote-2\7f28860
+Node: Functions as syntax checkers\7f28959
+Ref: guide/flycheck-versus-flymake functions-as-syntax-checkers\7f29106
+Ref: 1a\7f29106
+Ref: Functions as syntax checkers-Footnote-1\7f29820
+Ref: Functions as syntax checkers-Footnote-2\7f29871
+Node: Customization of syntax checkers\7f29923
+Ref: guide/flycheck-versus-flymake customization-of-syntax-checkers\7f30079
+Ref: 1c\7f30079
+Node: Executables of syntax checkers\7f30869
+Ref: guide/flycheck-versus-flymake executables-of-syntax-checkers\7f30970
+Ref: 1e\7f30970
+Node: Syntax checker selection\7f31377
+Ref: guide/flycheck-versus-flymake syntax-checker-selection\7f31517
+Ref: 20\7f31517
+Node: Custom predicates\7f32337
+Ref: guide/flycheck-versus-flymake custom-predicates\7f32442
+Ref: 21\7f32442
+Ref: Custom predicates-Footnote-1\7f33373
+Node: Manual selection\7f33421
+Ref: guide/flycheck-versus-flymake manual-selection\7f33570
+Ref: 22\7f33570
+Node: Multiple syntax checkers per buffer\7f33960
+Ref: guide/flycheck-versus-flymake multiple-syntax-checkers-per-buffer\7f34083
+Ref: 25\7f34083
+Node: Error levels\7f34877
+Ref: guide/flycheck-versus-flymake error-levels\7f35002
+Ref: 26\7f35002
+Ref: Error levels-Footnote-1\7f35764
+Node: Error identifiers\7f35814
+Ref: guide/flycheck-versus-flymake error-identifiers\7f35928
+Ref: 28\7f35928
+Node: Error parsing\7f36367
+Ref: guide/flycheck-versus-flymake error-parsing\7f36490
+Ref: 29\7f36490
+Ref: Error parsing-Footnote-1\7f37471
+Node: Error message display\7f37519
+Ref: guide/flycheck-versus-flymake error-message-display\7f37635
+Ref: 2a\7f37635
+Ref: Error message display-Footnote-1\7f38302
+Node: Error list\7f38359
+Ref: guide/flycheck-versus-flymake error-list\7f38482
+Ref: 2c\7f38482
+Node: Resource consumption\7f38761
+Ref: guide/flycheck-versus-flymake resource-consumption\7f38873
+Ref: 2d\7f38873
+Node: Syntax checking\7f38987
+Ref: guide/flycheck-versus-flymake syntax-checking\7f39090
+Ref: 2e\7f39090
+Ref: Syntax checking-Footnote-1\7f39975
+Node: Checking for changes\7f40025
+Ref: guide/flycheck-versus-flymake checking-for-changes\7f40128
+Ref: 2f\7f40128
+Ref: Checking for changes-Footnote-1\7f41090
+Node: Unit tests\7f41140
+Ref: guide/flycheck-versus-flymake unit-tests\7f41233
+Ref: 30\7f41233
+Ref: Unit tests-Footnote-1\7f41580
+Node: Installation\7f41628
+Ref: guide/installation installation\7f41733
+Ref: 31\7f41733
+Ref: guide/installation merlin\7f41733
+Ref: 32\7f41733
+Ref: guide/installation doc\7f41733
+Ref: 33\7f41733
+Ref: guide/installation id1\7f41733
+Ref: 34\7f41733
+Node: Prerequisites\7f41830
+Ref: guide/installation prerequisites\7f41923
+Ref: 35\7f41923
+Node: Emacs\7f42030
+Ref: guide/installation emacs\7f42112
+Ref: 36\7f42112
+Node: Operating system\7f42551
+Ref: guide/installation operating-system\7f42663
+Ref: 37\7f42663
+Node: Syntax checking tools\7f43249
+Ref: guide/installation syntax-checking-tools\7f43347
+Ref: 38\7f43347
+Ref: Syntax checking tools-Footnote-1\7f44253
+Ref: Syntax checking tools-Footnote-2\7f44293
+Ref: Syntax checking tools-Footnote-3\7f44324
+Node: Package installation\7f44348
+Ref: guide/installation homebrew\7f44455
+Ref: 3b\7f44455
+Ref: guide/installation package-installation\7f44455
+Ref: 3c\7f44455
+Node: Manual\7f44538
+Ref: guide/installation manual\7f44616
+Ref: 3d\7f44616
+Ref: Manual-Footnote-1\7f45334
+Ref: Manual-Footnote-2\7f45359
+Ref: Manual-Footnote-3\7f45391
+Node: Cask\7f45427
+Ref: guide/installation cask\7f45505
+Ref: 3e\7f45505
+Node: Setup\7f45701
+Ref: guide/installation setup\7f45786
+Ref: 3f\7f45786
+Node: Quickstart\7f46101
+Ref: guide/quickstart marmalade\7f46188
+Ref: 40\7f46188
+Ref: guide/quickstart doc\7f46188
+Ref: 41\7f46188
+Ref: guide/quickstart quickstart\7f46188
+Ref: 42\7f46188
+Node: Enable Flycheck\7f46388
+Ref: guide/quickstart enable-flycheck\7f46494
+Ref: 43\7f46494
+Node: Install some syntax checker tools\7f46684
+Ref: guide/quickstart install-some-syntax-checker-tools\7f46823
+Ref: 44\7f46823
+Node: Check syntax in a buffer\7f47475
+Ref: guide/quickstart check-syntax-in-a-buffer\7f47623
+Ref: 46\7f47623
+Node: Navigate and list errors\7f48224
+Ref: guide/quickstart navigate-and-list-errors\7f48355
+Ref: 48\7f48355
+Node: Explore the menu\7f49066
+Ref: guide/quickstart explore-the-menu\7f49188
+Ref: 4c\7f49188
+Node: Further reading\7f49460
+Ref: guide/quickstart further-reading\7f49549
+Ref: 4d\7f49549
+Node: Usage\7f49807
+Ref: guide/usage usage\7f49901
+Ref: 9\7f49901
+Ref: guide/usage doc\7f49901
+Ref: 4e\7f49901
+Ref: guide/usage id1\7f49901
+Ref: 4f\7f49901
+Ref: guide/usage el variable flycheck-keymap-prefix\7f50269
+Ref: 50\7f50269
+Node: Enabling syntax checking<2>\7f51488
+Ref: guide/usage enabling-syntax-checking\7f51584
+Ref: 51\7f51584
+Ref: guide/usage id2\7f51584
+Ref: 52\7f51584
+Ref: guide/usage el function global-flycheck-mode\7f51734
+Ref: 15\7f51734
+Ref: guide/usage el variable global-flycheck-mode\7f52412
+Ref: 55\7f52412
+Ref: guide/usage el function flycheck-mode\7f52928
+Ref: 54\7f52928
+Ref: guide/usage el variable flycheck-mode\7f53012
+Ref: 56\7f53012
+Node: Checking buffers\7f53117
+Ref: guide/usage id3\7f53247
+Ref: 57\7f53247
+Ref: guide/usage checking-buffers\7f53247
+Ref: 6\7f53247
+Ref: guide/usage el variable flycheck-check-syntax-automatically\7f53666
+Ref: 59\7f53666
+Ref: guide/usage el variable flycheck-idle-change-delay\7f55056
+Ref: 58\7f55056
+Ref: guide/usage el function flycheck-buffer\7f55864
+Ref: 47\7f55864
+Ref: guide/usage el function flycheck-verify-setup\7f56181
+Ref: 5a\7f56181
+Ref: guide/usage el variable flycheck-temp-prefix\7f56657
+Ref: 5b\7f56657
+Node: Selecting syntax checkers\7f56973
+Ref: guide/usage id4\7f57103
+Ref: 5c\7f57103
+Ref: guide/usage selecting-syntax-checkers\7f57103
+Ref: 5d\7f57103
+Ref: guide/usage el variable flycheck-checkers\7f57283
+Ref: 5e\7f57283
+Ref: guide/usage el variable flycheck-disabled-checkers\7f58309
+Ref: 5f\7f58309
+Ref: guide/usage el function flycheck-select-checker\7f60173
+Ref: 24\7f60173
+Ref: guide/usage el variable flycheck-completion-system\7f61724
+Ref: 65\7f61724
+Ref: guide/usage el variable flycheck-checker\7f63139
+Ref: 23\7f63139
+Ref: guide/usage el function flycheck-describe-checker\7f64591
+Ref: 3a\7f64591
+Ref: Selecting syntax checkers-Footnote-1\7f64722
+Ref: Selecting syntax checkers-Footnote-2\7f64760
+Node: Configuring syntax checkers\7f64801
+Ref: guide/usage configuring-syntax-checkers\7f64930
+Ref: 8\7f64930
+Ref: guide/usage id5\7f64930
+Ref: 67\7f64930
+Node: Syntax checker executables\7f65105
+Ref: guide/usage id6\7f65228
+Ref: 68\7f65228
+Ref: guide/usage syntax-checker-executables\7f65228
+Ref: 69\7f65228
+Ref: guide/usage el function flycheck-set-checker-executable\7f66017
+Ref: 1f\7f66017
+Node: Syntax checker options\7f66486
+Ref: guide/usage id7\7f66652
+Ref: 6a\7f66652
+Ref: guide/usage syntax-checker-options\7f66652
+Ref: 45\7f66652
+Node: Syntax checker configuration files\7f67194
+Ref: guide/usage syntax-checker-configuration-files\7f67325
+Ref: 6b\7f67325
+Ref: guide/usage id8\7f67325
+Ref: 6c\7f67325
+Ref: guide/usage el variable flycheck-locate-config-file-functions\7f68066
+Ref: 6d\7f68066
+Node: Error reporting\7f69467
+Ref: guide/usage error-reporting\7f69585
+Ref: 7\7f69585
+Ref: guide/usage id9\7f69585
+Ref: 6e\7f69585
+Ref: guide/usage el variable flycheck-checker-error-threshold\7f70256
+Ref: 71\7f70256
+Ref: guide/usage el variable flycheck-highlighting-mode\7f71156
+Ref: 6f\7f71156
+Ref: guide/usage el face flycheck-error\7f72433
+Ref: 72\7f72433
+Ref: guide/usage el face flycheck-warning\7f72459
+Ref: 73\7f72459
+Ref: guide/usage el face flycheck-info\7f72487
+Ref: 74\7f72487
+Ref: guide/usage el variable flycheck-indication-mode\7f73107
+Ref: 70\7f73107
+Ref: guide/usage el face flycheck-fringe-error\7f73785
+Ref: 75\7f73785
+Ref: guide/usage el face flycheck-fringe-warning\7f73818
+Ref: 76\7f73818
+Ref: guide/usage el face flycheck-fringe-info\7f73853
+Ref: 77\7f73853
+Ref: guide/usage el variable flycheck-display-errors-delay\7f74227
+Ref: 78\7f74227
+Ref: guide/usage el variable flycheck-display-errors-function\7f74855
+Ref: 2b\7f74855
+Ref: guide/usage el function flycheck-display-error-messages\7f75343
+Ref: 79\7f75343
+Ref: guide/usage el function flycheck-display-error-messages-unless-error-list\7f75900
+Ref: 7a\7f75900
+Ref: guide/usage el function flycheck-clear\7f76714
+Ref: 7c\7f76714
+Ref: Error reporting-Footnote-1\7f76962
+Ref: Error reporting-Footnote-2\7f77013
+Ref: Error reporting-Footnote-3\7f77062
+Node: Listing errors\7f77115
+Ref: guide/usage id10\7f77228
+Ref: 7d\7f77228
+Ref: guide/usage listing-errors\7f77228
+Ref: 7b\7f77228
+Ref: guide/usage el function flycheck-list-errors\7f77392
+Ref: 4b\7f77392
+Ref: guide/usage el variable flycheck-error-list-after-refresh-hook\7f77845
+Ref: 7e\7f77845
+Ref: guide/usage el face flycheck-error-list-highlight\7f78498
+Ref: 7f\7f78498
+Ref: guide/usage el face flycheck-error-list-line-number\7f78808
+Ref: 80\7f78808
+Ref: guide/usage el face flycheck-error-list-column-number\7f79011
+Ref: 81\7f79011
+Ref: guide/usage el face flycheck-error-list-checker-name\7f79216
+Ref: 82\7f79216
+Node: Copying killing errors\7f79431
+Ref: guide/usage killing-errors\7f79561
+Ref: 83\7f79561
+Ref: guide/usage copying-killing-errors\7f79561
+Ref: 84\7f79561
+Ref: guide/usage el function flycheck-copy-errors-as-kill\7f79753
+Ref: 85\7f79753
+Node: Navigating and jumping to errors\7f80481
+Ref: guide/usage navigating-errors\7f80616
+Ref: 86\7f80616
+Ref: guide/usage navigating-and-jumping-to-errors\7f80616
+Ref: 87\7f80616
+Ref: guide/usage el variable flycheck-standard-error-navigation\7f81414
+Ref: 88\7f81414
+Ref: guide/usage el function flycheck-next-error\7f82684
+Ref: 49\7f82684
+Ref: guide/usage el function flycheck-previous-error\7f82966
+Ref: 4a\7f82966
+Ref: guide/usage el function flycheck-first-error\7f83244
+Ref: 89\7f83244
+Ref: guide/usage el variable flycheck-navigation-minimum-level\7f83828
+Ref: 8a\7f83828
+Node: Mode line reporting\7f84358
+Ref: guide/usage id11\7f84462
+Ref: 8c\7f84462
+Ref: guide/usage mode-line-reporting\7f84462
+Ref: 63\7f84462
+Ref: guide/usage el variable flycheck-mode-line\7f85476
+Ref: 8e\7f85476
+Ref: Mode line reporting-Footnote-1\7f86896
+Node: Supported languages\7f86957
+Ref: guide/languages flycheck-color-mode-line\7f87049
+Ref: 93\7f87049
+Ref: guide/languages id1\7f87049
+Ref: 94\7f87049
+Ref: guide/languages doc\7f87049
+Ref: 39\7f87049
+Ref: guide/languages supported-languages\7f87049
+Ref: 5\7f87049
+Ref: Supported languages-Footnote-1\7f88288
+Ref: Supported languages-Footnote-2\7f88339
+Ref: Supported languages-Footnote-3\7f88370
+Ref: Supported languages-Footnote-4\7f88423
+Ref: Supported languages-Footnote-5\7f88455
+Ref: Supported languages-Footnote-6\7f88506
+Node: Ada\7f88558
+Ref: guide/languages ada\7f88636
+Ref: 95\7f88636
+Ref: guide/languages el flycheck-checker ada-gnat\7f88653
+Ref: 96\7f88653
+Ref: guide/languages el variable flycheck-gnat-args\7f88868
+Ref: 97\7f88868
+Ref: guide/languages el variable flycheck-gnat-include-path\7f89298
+Ref: 98\7f89298
+Ref: guide/languages el variable flycheck-gnat-language-standard\7f89996
+Ref: 9a\7f89996
+Ref: guide/languages el variable flycheck-gnat-warnings\7f90689
+Ref: 9b\7f90689
+Ref: Ada-Footnote-1\7f91574
+Node: AsciiDoc\7f91627
+Ref: guide/languages asciidoc\7f91719
+Ref: 9c\7f91719
+Ref: guide/languages el flycheck-checker asciidoc\7f91746
+Ref: 9d\7f91746
+Ref: AsciiDoc-Footnote-1\7f91940
+Node: C/C++\7f91982
+Ref: guide/languages c-c\7f92079
+Ref: 9e\7f92079
+Ref: guide/languages el flycheck-checker c/c++-clang\7f92100
+Ref: 9f\7f92100
+Ref: guide/languages el variable flycheck-clang-args\7f92547
+Ref: a2\7f92547
+Ref: guide/languages el variable flycheck-clang-blocks\7f92984
+Ref: a3\7f92984
+Ref: guide/languages el variable flycheck-clang-definitions\7f93637
+Ref: a4\7f93637
+Ref: guide/languages el variable flycheck-clang-include-path\7f94313
+Ref: a5\7f94313
+Ref: guide/languages el variable flycheck-clang-includes\7f95018
+Ref: a6\7f95018
+Ref: guide/languages el variable flycheck-clang-language-standard\7f95718
+Ref: a7\7f95718
+Ref: guide/languages el variable flycheck-clang-ms-extensions\7f96463
+Ref: a8\7f96463
+Ref: guide/languages el variable flycheck-clang-no-exceptions\7f97064
+Ref: a9\7f97064
+Ref: guide/languages el variable flycheck-clang-no-rtti\7f97648
+Ref: aa\7f97648
+Ref: guide/languages el variable flycheck-clang-standard-library\7f98198
+Ref: ab\7f98198
+Ref: guide/languages el variable flycheck-clang-warnings\7f98984
+Ref: 1d\7f98984
+Ref: guide/languages el flycheck-checker c/c++-gcc\7f99926
+Ref: ac\7f99926
+Ref: guide/languages el variable flycheck-gcc-args\7f100395
+Ref: ad\7f100395
+Ref: guide/languages el variable flycheck-gcc-definitions\7f100826
+Ref: ae\7f100826
+Ref: guide/languages el variable flycheck-gcc-include-path\7f101494
+Ref: af\7f101494
+Ref: guide/languages el variable flycheck-gcc-includes\7f102191
+Ref: b0\7f102191
+Ref: guide/languages el variable flycheck-gcc-language-standard\7f102885
+Ref: b1\7f102885
+Ref: guide/languages el variable flycheck-gcc-no-exceptions\7f103624
+Ref: b2\7f103624
+Ref: guide/languages el variable flycheck-gcc-no-rtti\7f104202
+Ref: b3\7f104202
+Ref: guide/languages el variable flycheck-gcc-openmp\7f104746
+Ref: b4\7f104746
+Ref: guide/languages el variable flycheck-gcc-warnings\7f105302
+Ref: b5\7f105302
+Ref: guide/languages el flycheck-checker c/c++-cppcheck\7f106228
+Ref: a1\7f106228
+Ref: guide/languages el variable flycheck-cppcheck-checks\7f106396
+Ref: b6\7f106396
+Ref: guide/languages el variable flycheck-cppcheck-inconclusive\7f107344
+Ref: b7\7f107344
+Ref: C/C++-Footnote-1\7f108373
+Ref: C/C++-Footnote-2\7f108404
+Ref: C/C++-Footnote-3\7f108462
+Ref: C/C++-Footnote-4\7f108514
+Ref: C/C++-Footnote-5\7f108566
+Ref: C/C++-Footnote-6\7f108595
+Ref: C/C++-Footnote-7\7f108639
+Ref: C/C++-Footnote-8\7f108680
+Ref: C/C++-Footnote-9\7f108731
+Ref: C/C++-Footnote-10\7f108781
+Ref: C/C++-Footnote-11\7f108828
+Node: CFEngine\7f108889
+Ref: guide/languages cfengine\7f108982
+Ref: b8\7f108982
+Ref: guide/languages flycheck-google-cpplint\7f108982
+Ref: b9\7f108982
+Ref: guide/languages el flycheck-checker cfengine\7f109009
+Ref: ba\7f109009
+Ref: CFEngine-Footnote-1\7f109180
+Node: Chef\7f109209
+Ref: guide/languages chef\7f109309
+Ref: bb\7f109309
+Ref: guide/languages el flycheck-checker chef-foodcritic\7f109356
+Ref: bc\7f109356
+Ref: Chef-Footnote-1\7f109554
+Ref: Chef-Footnote-2\7f109592
+Node: Coffeescript\7f109635
+Ref: guide/languages coffeescript\7f109730
+Ref: bd\7f109730
+Ref: guide/languages id3\7f109730
+Ref: be\7f109730
+Ref: guide/languages el flycheck-checker coffee\7f109765
+Ref: bf\7f109765
+Ref: guide/languages el flycheck-checker coffee-coffeelint\7f110192
+Ref: c0\7f110192
+Ref: guide/languages el variable flycheck-coffeelintrc\7f110454
+Ref: c1\7f110454
+Ref: Coffeescript-Footnote-1\7f110763
+Ref: Coffeescript-Footnote-2\7f110796
+Node: Coq\7f110831
+Ref: guide/languages coq\7f110925
+Ref: c2\7f110925
+Ref: guide/languages el flycheck-checker coq\7f110942
+Ref: c3\7f110942
+Ref: Coq-Footnote-1\7f111108
+Node: CSS\7f111137
+Ref: guide/languages css\7f111220
+Ref: c4\7f111220
+Ref: guide/languages el flycheck-checker css-csslint\7f111237
+Ref: c5\7f111237
+Ref: CSS-Footnote-1\7f111427
+Node: D\7f111470
+Ref: guide/languages d\7f111556
+Ref: c6\7f111556
+Ref: guide/languages el flycheck-checker d-dmd\7f111569
+Ref: c7\7f111569
+Ref: guide/languages el variable flycheck-dmd-include-path\7f111754
+Ref: c8\7f111754
+Ref: D-Footnote-1\7f112597
+Ref: D-Footnote-2\7f112623
+Node: Elixir\7f112679
+Ref: guide/languages flycheck-d-unittest\7f112772
+Ref: c9\7f112772
+Ref: guide/languages elixir\7f112772
+Ref: ca\7f112772
+Ref: guide/languages el flycheck-checker elixir\7f112797
+Ref: cb\7f112797
+Ref: Elixir-Footnote-1\7f112979
+Node: Emacs Lisp\7f113011
+Ref: guide/languages emacs-lisp\7f113109
+Ref: cc\7f113109
+Ref: guide/languages el flycheck-checker emacs-lisp\7f113196
+Ref: cd\7f113196
+Ref: guide/languages el variable flycheck-emacs-lisp-initialize-packages\7f113618
+Ref: cf\7f113618
+Ref: guide/languages el variable flycheck-emacs-lisp-load-path\7f114424
+Ref: d0\7f114424
+Ref: guide/languages el variable flycheck-emacs-lisp-package-user-dir\7f115623
+Ref: d1\7f115623
+Ref: guide/languages el flycheck-checker emacs-lisp-checkdoc\7f116468
+Ref: ce\7f116468
+Ref: Emacs Lisp-Footnote-1\7f116730
+Ref: Emacs Lisp-Footnote-2\7f116773
+Ref: Emacs Lisp-Footnote-3\7f116850
+Ref: Emacs Lisp-Footnote-4\7f116900
+Node: Erlang\7f116937
+Ref: guide/languages erlang\7f117034
+Ref: d2\7f117034
+Ref: guide/languages cask\7f117034
+Ref: d3\7f117034
+Ref: guide/languages el flycheck-checker erlang\7f117059
+Ref: d4\7f117059
+Ref: Erlang-Footnote-1\7f117240
+Node: ERuby\7f117271
+Ref: guide/languages eruby\7f117365
+Ref: d5\7f117365
+Ref: guide/languages el flycheck-checker eruby-erubis\7f117388
+Ref: d6\7f117388
+Ref: ERuby-Footnote-1\7f117589
+Node: Fortran\7f117631
+Ref: guide/languages fortran\7f117721
+Ref: d7\7f117721
+Ref: guide/languages el flycheck-checker fortran-gfortran\7f117748
+Ref: d8\7f117748
+Ref: guide/languages el variable flycheck-gfortran-args\7f117977
+Ref: d9\7f117977
+Ref: guide/languages el variable flycheck-gfortran-include-path\7f118427
+Ref: da\7f118427
+Ref: guide/languages el variable flycheck-gfortran-language-standard\7f119144
+Ref: db\7f119144
+Ref: guide/languages el variable flycheck-gfortran-layout\7f119854
+Ref: dc\7f119854
+Ref: guide/languages el variable flycheck-gfortran-warnings\7f120373
+Ref: dd\7f120373
+Ref: Fortran-Footnote-1\7f121030
+Ref: Fortran-Footnote-2\7f121079
+Node: Go\7f121128
+Ref: guide/languages go\7f121217
+Ref: de\7f121217
+Ref: guide/languages el flycheck-checker go-gofmt\7f121234
+Ref: df\7f121234
+Ref: guide/languages el flycheck-checker go-golint\7f122071
+Ref: e0\7f122071
+Ref: guide/languages el flycheck-checker go-vet\7f122532
+Ref: e1\7f122532
+Ref: guide/languages el variable flycheck-go-vet-print-functions\7f123076
+Ref: e5\7f123076
+Ref: guide/languages el flycheck-checker go-build\7f124064
+Ref: e2\7f124064
+Ref: guide/languages el flycheck-checker go-test\7f124507
+Ref: e3\7f124507
+Ref: guide/languages el flycheck-checker go-errcheck\7f124948
+Ref: e4\7f124948
+Ref: Go-Footnote-1\7f125128
+Ref: Go-Footnote-2\7f125165
+Ref: Go-Footnote-3\7f125204
+Ref: Go-Footnote-4\7f125238
+Ref: Go-Footnote-5\7f125298
+Ref: Go-Footnote-6\7f125331
+Ref: Go-Footnote-7\7f125364
+Node: Haml\7f125408
+Ref: guide/languages haml\7f125500
+Ref: e6\7f125500
+Ref: guide/languages el flycheck-checker haml\7f125521
+Ref: e7\7f125521
+Ref: Haml-Footnote-1\7f125686
+Node: Handlebars\7f125711
+Ref: guide/languages handlebars\7f125808
+Ref: e8\7f125808
+Ref: guide/languages el flycheck-checker handlebars\7f125841
+Ref: e9\7f125841
+Ref: Handlebars-Footnote-1\7f126032
+Node: Haskell\7f126065
+Ref: guide/languages haskell\7f126162
+Ref: ea\7f126162
+Ref: guide/languages el flycheck-checker haskell-ghc\7f126189
+Ref: eb\7f126189
+Ref: guide/languages el variable flycheck-ghc-args\7f126649
+Ref: ed\7f126649
+Ref: guide/languages el variable flycheck-ghc-language-extensions\7f127084
+Ref: ee\7f127084
+Ref: guide/languages el variable flycheck-ghc-no-user-package-database\7f127778
+Ref: ef\7f127778
+Ref: guide/languages el variable flycheck-ghc-package-databases\7f128392
+Ref: f0\7f128392
+Ref: guide/languages el variable flycheck-ghc-search-path\7f129091
+Ref: f1\7f129091
+Ref: guide/languages el flycheck-checker haskell-hlint\7f129962
+Ref: ec\7f129962
+Ref: Haskell-Footnote-1\7f130252
+Ref: Haskell-Footnote-2\7f130288
+Ref: Haskell-Footnote-3\7f130341
+Ref: Haskell-Footnote-4\7f130385
+Ref: Haskell-Footnote-5\7f130440
+Node: HTML\7f130483
+Ref: guide/languages hdevtools\7f130580
+Ref: f2\7f130580
+Ref: guide/languages html\7f130580
+Ref: f3\7f130580
+Ref: guide/languages el flycheck-checker html-tidy\7f130601
+Ref: f4\7f130601
+Ref: guide/languages el variable flycheck-tidyrc\7f130799
+Ref: f5\7f130799
+Ref: HTML-Footnote-1\7f131094
+Node: Javascript\7f131136
+Ref: guide/languages javascript\7f131230
+Ref: f6\7f131230
+Ref: guide/languages el flycheck-checker javascript-jshint\7f131263
+Ref: f7\7f131263
+Ref: guide/languages el variable flycheck-jshintrc\7f131465
+Ref: f8\7f131465
+Ref: guide/languages el flycheck-checker javascript-eslint\7f131734
+Ref: f9\7f131734
+Ref: guide/languages el variable flycheck-eslint-rulesdir\7f131925
+Ref: fa\7f131925
+Ref: guide/languages el variable flycheck-eslintrc\7f132846
+Ref: fb\7f132846
+Ref: guide/languages el flycheck-checker javascript-gjslint\7f133244
+Ref: fc\7f133244
+Ref: guide/languages el variable flycheck-gjslintrc\7f133481
+Ref: fd\7f133481
+Ref: Javascript-Footnote-1\7f133788
+Ref: Javascript-Footnote-2\7f133818
+Ref: Javascript-Footnote-3\7f133859
+Ref: Javascript-Footnote-4\7f133953
+Node: JSON\7f134009
+Ref: guide/languages json\7f134103
+Ref: fe\7f134103
+Ref: guide/languages el flycheck-checker json-jsonlint\7f134124
+Ref: ff\7f134124
+Ref: JSON-Footnote-1\7f134317
+Node: LESS\7f134359
+Ref: guide/languages less\7f134446
+Ref: 100\7f134446
+Ref: guide/languages el flycheck-checker less\7f134467
+Ref: 101\7f134467
+Ref: LESS-Footnote-1\7f134671
+Node: Lua\7f134698
+Ref: guide/languages lua\7f134785
+Ref: 102\7f134785
+Ref: guide/languages el flycheck-checker lua\7f134804
+Ref: 103\7f134804
+Ref: Lua-Footnote-1\7f134969
+Node: Make\7f134997
+Ref: guide/languages make\7f135084
+Ref: 104\7f135084
+Ref: guide/languages el flycheck-checker make\7f135105
+Ref: 105\7f135105
+Ref: Make-Footnote-1\7f135438
+Ref: Make-Footnote-2\7f135515
+Ref: Make-Footnote-3\7f135557
+Ref: Make-Footnote-4\7f135623
+Ref: Make-Footnote-5\7f135687
+Node: Perl\7f135745
+Ref: guide/languages openbsd-make\7f135832
+Ref: 106\7f135832
+Ref: guide/languages perl\7f135832
+Ref: 107\7f135832
+Ref: guide/languages el flycheck-checker perl\7f135853
+Ref: 108\7f135853
+Ref: guide/languages el flycheck-checker perl-perlcritic\7f136214
+Ref: 109\7f136214
+Ref: guide/languages el variable flycheck-perlcritic-severity\7f136398
+Ref: 10a\7f136398
+Ref: Perl-Footnote-1\7f137048
+Ref: Perl-Footnote-2\7f137076
+Node: PHP\7f137122
+Ref: guide/languages php\7f137211
+Ref: 10b\7f137211
+Ref: guide/languages el flycheck-checker php\7f137230
+Ref: 10c\7f137230
+Ref: guide/languages el flycheck-checker php-phpmd\7f137791
+Ref: 10d\7f137791
+Ref: guide/languages el variable flycheck-phpmd-rulesets\7f138172
+Ref: 10f\7f138172
+Ref: guide/languages el flycheck-checker php-phpcs\7f138744
+Ref: 10e\7f138744
+Ref: guide/languages el variable flycheck-phpcs-standard\7f138930
+Ref: 110\7f138930
+Ref: PHP-Footnote-1\7f139580
+Ref: PHP-Footnote-2\7f139638
+Ref: PHP-Footnote-3\7f139664
+Ref: PHP-Footnote-4\7f139714
+Node: Puppet\7f139767
+Ref: guide/languages puppet\7f139858
+Ref: 111\7f139858
+Ref: guide/languages el flycheck-checker puppet-parser\7f139883
+Ref: 112\7f139883
+Ref: guide/languages el flycheck-checker puppet-lint\7f140324
+Ref: 113\7f140324
+Ref: Puppet-Footnote-1\7f140503
+Ref: Puppet-Footnote-2\7f140534
+Node: Python\7f140566
+Ref: guide/languages python\7f140655
+Ref: 114\7f140655
+Ref: guide/languages el flycheck-checker python-flake8\7f140680
+Ref: 115\7f140680
+Ref: guide/languages el variable flycheck-flake8-error-level-alist\7f140901
+Ref: 116\7f140901
+Ref: guide/languages el variable flycheck-flake8-maximum-complexity\7f142166
+Ref: 117\7f142166
+Ref: guide/languages el variable flycheck-flake8-maximum-line-length\7f142865
+Ref: 119\7f142865
+Ref: guide/languages el variable flycheck-flake8rc\7f143818
+Ref: 118\7f143818
+Ref: guide/languages el flycheck-checker python-pylint\7f144083
+Ref: 11a\7f144083
+Ref: guide/languages el variable flycheck-pylintrc\7f144334
+Ref: 11b\7f144334
+Ref: guide/languages el flycheck-checker python-pycompile\7f144599
+Ref: 11c\7f144599
+Ref: Python-Footnote-1\7f144910
+Ref: Python-Footnote-2\7f144954
+Ref: Python-Footnote-3\7f144985
+Ref: Python-Footnote-4\7f145045
+Node: R\7f145098
+Ref: guide/languages flycheck-pyflakes\7f145187
+Ref: 11d\7f145187
+Ref: guide/languages r\7f145187
+Ref: 11e\7f145187
+Ref: guide/languages el flycheck-checker r-lintr\7f145202
+Ref: 11f\7f145202
+Ref: guide/languages el variable flycheck-lintr-caching\7f145388
+Ref: 120\7f145388
+Ref: guide/languages el variable flycheck-lintr-linters\7f146055
+Ref: 121\7f146055
+Ref: R-Footnote-1\7f146617
+Node: Racket\7f146660
+Ref: guide/languages racket\7f146751
+Ref: 122\7f146751
+Ref: guide/languages el flycheck-checker racket\7f146776
+Ref: 123\7f146776
+Ref: Racket-Footnote-1\7f146954
+Node: RPM SPEC\7f146986
+Ref: guide/languages rpm-spec\7f147092
+Ref: 124\7f147092
+Ref: guide/languages el flycheck-checker rpm-rpmlint\7f147121
+Ref: 125\7f147121
+Ref: RPM SPEC-Footnote-1\7f147317
+Node: ReStructuredText\7f147366
+Ref: guide/languages restructuredtext\7f147470
+Ref: 126\7f147470
+Ref: guide/languages el flycheck-checker rst\7f147515
+Ref: 127\7f147515
+Ref: guide/languages el flycheck-checker rst-sphinx\7f147668
+Ref: 128\7f147668
+Ref: guide/languages el variable flycheck-sphinx-warn-on-missing-references\7f147874
+Ref: 129\7f147874
+Ref: ReStructuredText-Footnote-1\7f148526
+Ref: ReStructuredText-Footnote-2\7f148567
+Node: Ruby\7f148597
+Ref: guide/languages ruby\7f148697
+Ref: 12a\7f148697
+Ref: guide/languages el flycheck-checker ruby-rubocop\7f148718
+Ref: 12b\7f148718
+Ref: guide/languages el variable flycheck-rubocop-lint-only\7f149190
+Ref: 12d\7f149190
+Ref: guide/languages el variable flycheck-rubocoprc\7f149857
+Ref: 12e\7f149857
+Ref: guide/languages el flycheck-checker ruby-rubylint\7f150122
+Ref: 12c\7f150122
+Ref: guide/languages el variable flycheck-rubylintrc\7f150474
+Ref: 12f\7f150474
+Ref: guide/languages el flycheck-checker ruby\7f150845
+Ref: 130\7f150845
+Ref: guide/languages el flycheck-checker ruby-jruby\7f151644
+Ref: 131\7f151644
+Ref: Ruby-Footnote-1\7f152285
+Ref: Ruby-Footnote-2\7f152320
+Ref: Ruby-Footnote-3\7f152371
+Ref: Ruby-Footnote-4\7f152406
+Node: Rust\7f152432
+Ref: guide/languages rust\7f152520
+Ref: 132\7f152520
+Ref: guide/languages el flycheck-checker rust\7f152541
+Ref: 133\7f152541
+Ref: guide/languages el variable flycheck-rust-check-tests\7f152753
+Ref: 134\7f152753
+Ref: guide/languages el variable flycheck-rust-crate-root\7f153544
+Ref: 135\7f153544
+Ref: guide/languages el variable flycheck-rust-crate-type\7f154437
+Ref: 136\7f154437
+Ref: guide/languages el variable flycheck-rust-library-path\7f154941
+Ref: 137\7f154941
+Ref: Rust-Footnote-1\7f155826
+Ref: Rust-Footnote-2\7f155859
+Node: Sass\7f155909
+Ref: guide/languages flycheck-rust\7f155998
+Ref: 138\7f155998
+Ref: guide/languages sass\7f155998
+Ref: 139\7f155998
+Ref: guide/languages el flycheck-checker sass\7f156019
+Ref: 13a\7f156019
+Ref: guide/languages el variable flycheck-sass-compass\7f156179
+Ref: 13b\7f156179
+Ref: Sass-Footnote-1\7f156770
+Node: Scala\7f156799
+Ref: guide/languages scala\7f156888
+Ref: 13c\7f156888
+Ref: guide/languages el flycheck-checker scala\7f156911
+Ref: 13d\7f156911
+Ref: guide/languages el flycheck-checker scala-scalastyle\7f157344
+Ref: 13e\7f157344
+Ref: guide/languages el variable flycheck-scalastyle-jar\7f157701
+Ref: 13f\7f157701
+Ref: guide/languages el variable flycheck-scalastylerc\7f158356
+Ref: 140\7f158356
+Ref: Scala-Footnote-1\7f158793
+Ref: Scala-Footnote-2\7f158828
+Node: Scss\7f158862
+Ref: guide/languages scss\7f158969
+Ref: 141\7f158969
+Ref: guide/languages el flycheck-checker scss\7f158990
+Ref: 142\7f158990
+Ref: guide/languages el variable flycheck-scss-compass\7f159150
+Ref: 143\7f159150
+Ref: Scss-Footnote-1\7f159741
+Node: Shell script languages\7f159770
+Ref: guide/languages shell-script-languages\7f159876
+Ref: 144\7f159876
+Ref: guide/languages el flycheck-checker sh-bash\7f159933
+Ref: 145\7f159933
+Ref: guide/languages el flycheck-checker sh-posix-dash\7f160368
+Ref: 147\7f160368
+Ref: guide/languages el flycheck-checker sh-posix-bash\7f160891
+Ref: 148\7f160891
+Ref: guide/languages el flycheck-checker sh-zsh\7f161430
+Ref: 149\7f161430
+Ref: guide/languages el flycheck-checker sh-shellcheck\7f161848
+Ref: 146\7f161848
+Ref: guide/languages el variable flycheck-shellcheck-excluded-warnings\7f162048
+Ref: 14a\7f162048
+Ref: Shell script languages-Footnote-1\7f162793
+Ref: Shell script languages-Footnote-2\7f162835
+Ref: Shell script languages-Footnote-3\7f162885
+Ref: Shell script languages-Footnote-4\7f162967
+Ref: Shell script languages-Footnote-5\7f163009
+Ref: Shell script languages-Footnote-6\7f163105
+Ref: Shell script languages-Footnote-7\7f163187
+Ref: Shell script languages-Footnote-8\7f163215
+Node: Slim\7f163263
+Ref: guide/languages gnu-bash-posix-mode\7f163374
+Ref: 14b\7f163374
+Ref: guide/languages slim\7f163374
+Ref: 14c\7f163374
+Ref: guide/languages el flycheck-checker slim\7f163395
+Ref: 14d\7f163395
+Ref: Slim-Footnote-1\7f163564
+Node: TeX/LaTeX\7f163593
+Ref: guide/languages tex-latex\7f163689
+Ref: 14e\7f163689
+Ref: guide/languages el flycheck-checker tex-chktex\7f163762
+Ref: 14f\7f163762
+Ref: guide/languages el variable flycheck-chktexrc\7f163968
+Ref: 150\7f163968
+Ref: guide/languages el flycheck-checker tex-lacheck\7f164230
+Ref: 151\7f164230
+Ref: TeX/LaTeX-Footnote-1\7f164419
+Ref: TeX/LaTeX-Footnote-2\7f164457
+Ref: TeX/LaTeX-Footnote-3\7f164493
+Ref: TeX/LaTeX-Footnote-4\7f164531
+Node: Texinfo\7f164571
+Ref: guide/languages tex-live\7f164670
+Ref: 152\7f164670
+Ref: guide/languages texinfo\7f164670
+Ref: 153\7f164670
+Ref: guide/languages el flycheck-checker texinfo\7f164697
+Ref: 154\7f164697
+Ref: Texinfo-Footnote-1\7f164879
+Node: Verilog\7f164924
+Ref: guide/languages verilog\7f165017
+Ref: 155\7f165017
+Ref: guide/languages el flycheck-checker verilog-verilator\7f165044
+Ref: 156\7f165044
+Ref: Verilog-Footnote-1\7f165266
+Node: XML\7f165313
+Ref: guide/languages xml\7f165403
+Ref: 157\7f165403
+Ref: guide/languages el flycheck-checker xml-xmlstarlet\7f165422
+Ref: 158\7f165422
+Ref: guide/languages el flycheck-checker xml-xmllint\7f165595
+Ref: 159\7f165595
+Ref: XML-Footnote-1\7f165827
+Ref: XML-Footnote-2\7f165867
+Node: YAML\7f165899
+Ref: guide/languages yaml\7f165973
+Ref: 15a\7f165973
+Ref: guide/languages el flycheck-checker yaml-jsyaml\7f165994
+Ref: 15b\7f165994
+Ref: guide/languages el flycheck-checker yaml-ruby\7f166138
+Ref: 15c\7f166138
+Ref: YAML-Footnote-1\7f166443
+Ref: YAML-Footnote-2\7f166485
+Node: Glossary\7f166557
+Ref: guide/glossary glossary\7f166661
+Ref: 15d\7f166661
+Ref: guide/glossary doc\7f166661
+Ref: 15e\7f166661
+Ref: guide/glossary term-syntax-checker\7f166684
+Ref: 64\7f166684
+Ref: guide/glossary term-registered-syntax-checker\7f166793
+Ref: 60\7f166793
+Ref: guide/glossary term-disabled-syntax-checker\7f166949
+Ref: 15f\7f166949
+Ref: guide/glossary term-enabled-syntax-checker\7f167129
+Ref: 62\7f167129
+Ref: guide/glossary term-suitable-syntax-checker\7f167254
+Ref: 53\7f167254
+Ref: guide/glossary term-chaining\7f167548
+Ref: a0\7f167548
+Node: Flycheck releases\7f168135
+Ref: guide/releases/index flycheck-releases\7f168238
+Ref: 160\7f168238
+Ref: guide/releases/index doc\7f168238
+Ref: 161\7f168238
+Node: Release announcements\7f168423
+Ref: guide/releases/index release-announcements\7f168518
+Ref: 162\7f168518
+Node: Flycheck 0 22\7f168845
+Ref: guide/releases/flycheck-0 22 doc\7f168940
+Ref: 163\7f168940
+Ref: guide/releases/flycheck-0 22 flycheck-0-22\7f168940
+Ref: 164\7f168940
+Node: Breaking changes\7f169539
+Ref: guide/releases/flycheck-0 22 breaking-changes\7f169624
+Ref: 166\7f169624
+Node: Setup<2>\7f171090
+Ref: guide/releases/flycheck-0 22 setup\7f171200
+Ref: 16a\7f171200
+Node: Language support\7f171435
+Ref: guide/releases/flycheck-0 22 language-support\7f171557
+Ref: 16b\7f171557
+Node: Ada<2>\7f171800
+Ref: guide/releases/flycheck-0 22 ada\7f171878
+Ref: 16c\7f171878
+Node: C/C++<2>\7f172007
+Ref: guide/releases/flycheck-0 22 c-c\7f172107
+Ref: 16d\7f172107
+Node: Emacs Lisp<2>\7f172496
+Ref: guide/releases/flycheck-0 22 emacs-lisp\7f172600
+Ref: 16e\7f172600
+Node: Haskell<2>\7f173075
+Ref: guide/releases/flycheck-0 22 haskell\7f173181
+Ref: 16f\7f173181
+Node: Fortran<2>\7f173394
+Ref: guide/releases/flycheck-0 22 fortran\7f173496
+Ref: 170\7f173496
+Node: Python<2>\7f173645
+Ref: guide/releases/flycheck-0 22 python\7f173744
+Ref: 171\7f173744
+Node: Rust<2>\7f174384
+Ref: guide/releases/flycheck-0 22 rust\7f174485
+Ref: 172\7f174485
+Node: TeX/LaTeX<2>\7f174589
+Ref: guide/releases/flycheck-0 22 tex-latex\7f174672
+Ref: 173\7f174672
+Node: Syntax checking improvements\7f174774
+Ref: guide/releases/flycheck-0 22 syntax-checking-improvements\7f174911
+Ref: 174\7f174911
+Node: Error list improvements\7f175339
+Ref: guide/releases/flycheck-0 22 error-list-improvements\7f175483
+Ref: 175\7f175483
+Node: Generic syntax checkers\7f175730
+Ref: guide/releases/flycheck-0 22 generic-syntax-checkers\7f175855
+Ref: 176\7f175855
+Node: Error IDs\7f176572
+Ref: guide/releases/flycheck-0 22 error-ids\7f176704
+Ref: 178\7f176704
+Node: Unit test library for Flycheck\7f177805
+Ref: guide/releases/flycheck-0 22 unit-test-library-for-flycheck\7f177905
+Ref: 17d\7f177905
+Node: Flycheck 0 21\7f178314
+Ref: guide/releases/flycheck-0 21 doc\7f178431
+Ref: 17f\7f178431
+Ref: guide/releases/flycheck-0 21 flycheck-0-21\7f178431
+Ref: 180\7f178431
+Node: Breaking changes<2>\7f178979
+Ref: guide/releases/flycheck-0 21 breaking-changes\7f179078
+Ref: 181\7f179078
+Node: Language support<2>\7f180096
+Ref: guide/releases/flycheck-0 21 language-support\7f180222
+Ref: 182\7f180222
+Node: C/C++<3>\7f180527
+Ref: guide/releases/flycheck-0 21 c-c\7f180606
+Ref: 183\7f180606
+Node: D<2>\7f180966
+Ref: guide/releases/flycheck-0 21 d\7f181059
+Ref: 184\7f181059
+Node: Go<2>\7f181248
+Ref: guide/releases/flycheck-0 21 go\7f181340
+Ref: 185\7f181340
+Node: HTML<2>\7f181448
+Ref: guide/releases/flycheck-0 21 html\7f181540
+Ref: 186\7f181540
+Node: Less\7f181630
+Ref: guide/releases/flycheck-0 21 less\7f181730
+Ref: 187\7f181730
+Node: Shell scripts\7f181832
+Ref: guide/releases/flycheck-0 21 shell-scripts\7f181916
+Ref: 188\7f181916
+Node: Error list changes\7f182307
+Ref: guide/releases/flycheck-0 21 error-list-changes\7f182442
+Ref: 189\7f182442
+Node: Error navigation and display\7f183317
+Ref: guide/releases/flycheck-0 21 error-navigation-and-display\7f183472
+Ref: 18a\7f183472
+Node: Syntax checker definition and extension\7f184152
+Ref: guide/releases/flycheck-0 21 syntax-checker-definition-and-extension\7f184314
+Ref: 18b\7f184314
+Node: Obtaining the new release\7f185060
+Ref: guide/releases/flycheck-0 21 obtaining-the-new-release\7f185185
+Ref: 18d\7f185185
+Node: Flycheck 0 20\7f185391
+Ref: guide/releases/flycheck-0 20 flycheck-0-20\7f185508
+Ref: 18e\7f185508
+Ref: guide/releases/flycheck-0 20 doc\7f185508
+Ref: 18f\7f185508
+Node: Breaking changes<3>\7f186080
+Ref: guide/releases/flycheck-0 20 breaking-changes\7f186179
+Ref: 190\7f186179
+Node: Language support<3>\7f187056
+Ref: guide/releases/flycheck-0 20 language-support\7f187190
+Ref: 191\7f187190
+Node: C/C++<4>\7f187482
+Ref: guide/releases/flycheck-0 20 c-c\7f187564
+Ref: 192\7f187564
+Node: Rust<3>\7f188078
+Ref: guide/releases/flycheck-0 20 rust\7f188177
+Ref: 193\7f188177
+Node: Scala<2>\7f188573
+Ref: guide/releases/flycheck-0 20 scala\7f188673
+Ref: 194\7f188673
+Ref: Scala<2>-Footnote-1\7f188809
+Node: Sass/SCSS\7f188844
+Ref: guide/releases/flycheck-0 20 scalastyle\7f188950
+Ref: 195\7f188950
+Ref: guide/releases/flycheck-0 20 sass-scss\7f188950
+Ref: 196\7f188950
+Node: Javascript<2>\7f189121
+Ref: guide/releases/flycheck-0 20 javascript\7f189226
+Ref: 197\7f189226
+Ref: Javascript<2>-Footnote-1\7f189507
+Ref: Javascript<2>-Footnote-2\7f189534
+Node: Ruby<2>\7f189578
+Ref: guide/releases/flycheck-0 20 ruby\7f189665
+Ref: 198\7f189665
+Ref: guide/releases/flycheck-0 20 configuring-eslint\7f189665
+Ref: 199\7f189665
+Node: Error list improvements<2>\7f189830
+Ref: guide/releases/flycheck-0 20 error-list-improvements\7f189972
+Ref: 19a\7f189972
+Node: User interface improvements\7f190643
+Ref: guide/releases/flycheck-0 20 user-interface-improvements\7f190792
+Ref: 19b\7f190792
+Node: Miscellaneous new features\7f191605
+Ref: guide/releases/flycheck-0 20 miscellaneous-new-features\7f191747
+Ref: 19d\7f191747
+Node: Miscellaneous fixes\7f192087
+Ref: guide/releases/flycheck-0 20 miscellaneous-fixes\7f192208
+Ref: 19f\7f192208
+Node: Get it\7f192430
+Ref: guide/releases/flycheck-0 20 get-it\7f192516
+Ref: 1a0\7f192516
+Node: Flycheck 0 19\7f192684
+Ref: guide/releases/flycheck-0 19 flycheck-0-19\7f192801
+Ref: 1a1\7f192801
+Ref: guide/releases/flycheck-0 19 doc\7f192801
+Ref: 1a2\7f192801
+Node: Breaking changes<4>\7f193077
+Ref: guide/releases/flycheck-0 19 breaking-changes\7f193166
+Ref: 1a3\7f193166
+Node: Languages\7f193350
+Ref: guide/releases/flycheck-0 19 languages\7f193460
+Ref: 1a4\7f193460
+Node: C/C++<5>\7f193613
+Ref: guide/releases/flycheck-0 19 c-c\7f193691
+Ref: 1a5\7f193691
+Node: Emacs Lisp<3>\7f194032
+Ref: guide/releases/flycheck-0 19 emacs-lisp\7f194124
+Ref: 1a6\7f194124
+Node: Go<3>\7f194282
+Ref: guide/releases/flycheck-0 19 go\7f194376
+Ref: 1a7\7f194376
+Node: Haskell<3>\7f194608
+Ref: guide/releases/flycheck-0 19 haskell\7f194696
+Ref: 1a8\7f194696
+Node: Rust<4>\7f194859
+Ref: guide/releases/flycheck-0 19 rust\7f194933
+Ref: 1a9\7f194933
+Node: New features\7f195075
+Ref: guide/releases/flycheck-0 19 new-features\7f195175
+Ref: 1aa\7f195175
+Node: Bug fixes\7f196284
+Ref: guide/releases/flycheck-0 19 bug-fixes\7f196387
+Ref: 1ab\7f196387
+Node: Misc changes\7f196646
+Ref: guide/releases/flycheck-0 19 misc-changes\7f196746
+Ref: 1ac\7f196746
+Ref: Misc changes-Footnote-1\7f196957
+Node: Get it<2>\7f196994
+Ref: guide/releases/flycheck-0 19 get-it\7f197076
+Ref: 1ad\7f197076
+Ref: guide/releases/flycheck-0 19 github-profile\7f197076
+Ref: 1ae\7f197076
+Node: Flycheck 0 18\7f197138
+Ref: guide/releases/flycheck-0 18 doc\7f197255
+Ref: 1af\7f197255
+Ref: guide/releases/flycheck-0 18 flycheck-0-18\7f197255
+Ref: 1b0\7f197255
+Node: Breaking changes<5>\7f197672
+Ref: guide/releases/flycheck-0 18 breaking-changes\7f197770
+Ref: 1b1\7f197770
+Node: Syntax checkers<2>\7f198495
+Ref: guide/releases/flycheck-0 18 syntax-checkers\7f198614
+Ref: 1b2\7f198614
+Ref: Syntax checkers<2>-Footnote-1\7f199776
+Ref: Syntax checkers<2>-Footnote-2\7f199815
+Ref: Syntax checkers<2>-Footnote-3\7f199861
+Node: Bug fixes<2>\7f199908
+Ref: guide/releases/flycheck-0 18 shellcheck\7f200017
+Ref: 1b3\7f200017
+Ref: guide/releases/flycheck-0 18 bug-fixes\7f200017
+Ref: 1b4\7f200017
+Node: Get it<3>\7f200693
+Ref: guide/releases/flycheck-0 18 get-it\7f200775
+Ref: 1b5\7f200775
+Node: Flycheck 0 17\7f200835
+Ref: guide/releases/flycheck-0 17 flycheck-0-17\7f200952
+Ref: 1b6\7f200952
+Ref: guide/releases/flycheck-0 17 doc\7f200952
+Ref: 1b7\7f200952
+Node: Breaking changes<6>\7f201338
+Ref: guide/releases/flycheck-0 17 breaking-changes\7f201435
+Ref: 1b8\7f201435
+Node: New online manual\7f202060
+Ref: guide/releases/flycheck-0 17 new-online-manual\7f202184
+Ref: 1b9\7f202184
+Ref: New online manual-Footnote-1\7f204074
+Ref: New online manual-Footnote-2\7f204104
+Ref: New online manual-Footnote-3\7f204149
+Ref: New online manual-Footnote-4\7f204198
+Ref: New online manual-Footnote-5\7f204243
+Node: Syntax checkers<3>\7f204273
+Ref: guide/releases/flycheck-0 17 syntax-checkers\7f204403
+Ref: 1ba\7f204403
+Ref: guide/releases/flycheck-0 17 llvm-documentation\7f204403
+Ref: 1bb\7f204403
+Ref: Syntax checkers<3>-Footnote-1\7f205028
+Node: Extending syntax checkers\7f205084
+Ref: guide/releases/flycheck-0 17 extending-syntax-checkers\7f205229
+Ref: 1bc\7f205229
+Node: Other bug fixes and improvements\7f205298
+Ref: guide/releases/flycheck-0 17 other-bug-fixes-and-improvements\7f205416
+Ref: 1bd\7f205416
+Ref: Other bug fixes and improvements-Footnote-1\7f206078
+Ref: Other bug fixes and improvements-Footnote-2\7f206134
+Ref: Other bug fixes and improvements-Footnote-3\7f206190
+Node: Flycheck 0 16\7f206246
+Ref: guide/releases/flycheck-0 16 flycheck-0-16\7f206363
+Ref: 1be\7f206363
+Ref: guide/releases/flycheck-0 16 doc\7f206363
+Ref: 1bf\7f206363
+Node: Breaking changes<7>\7f206982
+Ref: guide/releases/flycheck-0 16 breaking-changes\7f207080
+Ref: 1c0\7f207080
+Ref: Breaking changes<7>-Footnote-1\7f207366
+Ref: Breaking changes<7>-Footnote-2\7f207421
+Node: Syntax checkers<4>\7f207477
+Ref: guide/releases/flycheck-0 16 syntax-checkers\7f207599
+Ref: 1c1\7f207599
+Ref: guide/releases/flycheck-0 16 flycheck-hdevtools\7f207599
+Ref: 1c2\7f207599
+Node: New languages and checkers\7f207749
+Ref: guide/releases/flycheck-0 16 new-languages-and-checkers\7f207863
+Ref: 1c3\7f207863
+Ref: New languages and checkers-Footnote-1\7f208239
+Ref: New languages and checkers-Footnote-2\7f208268
+Ref: New languages and checkers-Footnote-3\7f208297
+Ref: New languages and checkers-Footnote-4\7f208330
+Ref: New languages and checkers-Footnote-5\7f208372
+Ref: New languages and checkers-Footnote-6\7f208405
+Ref: New languages and checkers-Footnote-7\7f208437
+Ref: New languages and checkers-Footnote-8\7f208482
+Ref: New languages and checkers-Footnote-9\7f208528
+Ref: New languages and checkers-Footnote-10\7f208569
+Ref: New languages and checkers-Footnote-11\7f208621
+Node: Better Haskell support\7f208664
+Ref: guide/releases/flycheck-0 16 js-yaml\7f208812
+Ref: 1c4\7f208812
+Ref: guide/releases/flycheck-0 16 better-haskell-support\7f208812
+Ref: 1c5\7f208812
+Ref: Better Haskell support-Footnote-1\7f209420
+Node: Miscellaneous new options\7f209473
+Ref: guide/releases/flycheck-0 16 miscellaneous-new-options\7f209586
+Ref: 1c6\7f209586
+Ref: guide/releases/flycheck-0 16 flycheck-haskell\7f209586
+Ref: 1c7\7f209586
+Node: New features<2>\7f210032
+Ref: guide/releases/flycheck-0 16 new-features\7f210154
+Ref: 1c8\7f210154
+Node: Syntax checker executables<2>\7f210305
+Ref: guide/releases/flycheck-0 16 syntax-checker-executables\7f210427
+Ref: 1c9\7f210427
+Node: Disable syntax checkers easily\7f210612
+Ref: guide/releases/flycheck-0 16 disable-syntax-checkers-easily\7f210734
+Ref: 1ca\7f210734
+Node: Improved error list\7f211623
+Ref: guide/releases/flycheck-0 16 improved-error-list\7f211736
+Ref: 1cb\7f211736
+Ref: Improved error list-Footnote-1\7f212322
+Node: Get it<4>\7f212378
+Ref: guide/releases/flycheck-0 16 get-it\7f212467
+Ref: 1cc\7f212467
+Node: Flycheck 0 15\7f212529
+Ref: guide/releases/flycheck-0 15 flycheck-0-15\7f212624
+Ref: 1cd\7f212624
+Ref: guide/releases/flycheck-0 15 doc\7f212624
+Ref: 1ce\7f212624
+Node: Breaking changes<8>\7f213278
+Ref: guide/releases/flycheck-0 15 breaking-changes\7f213377
+Ref: 1cf\7f213377
+Node: New syntax checkers\7f214216
+Ref: guide/releases/flycheck-0 15 new-syntax-checkers\7f214338
+Ref: 1d1\7f214338
+Ref: New syntax checkers-Footnote-1\7f214873
+Ref: New syntax checkers-Footnote-2\7f214902
+Ref: New syntax checkers-Footnote-3\7f214952
+Node: New error list\7f214978
+Ref: guide/releases/flycheck-0 15 new-error-list\7f215094
+Ref: 1d0\7f215094
+Ref: guide/releases/flycheck-0 15 id1\7f215094
+Ref: 1d2\7f215094
+Node: C/C++ support\7f215863
+Ref: guide/releases/flycheck-0 15 c-c-support\7f215983
+Ref: 1d3\7f215983
+Node: New info level messages\7f217327
+Ref: guide/releases/flycheck-0 15 new-info-level-messages\7f217452
+Ref: 1d4\7f217452
+Ref: New info level messages-Footnote-1\7f218672
+Ref: New info level messages-Footnote-2\7f218723
+Node: Custom error levels\7f218772
+Ref: guide/releases/flycheck-0 15 custom-error-levels\7f218902
+Ref: 1d5\7f218902
+Ref: guide/releases/flycheck-0 15 id2\7f218902
+Ref: 1d6\7f218902
+Node: Other improvements\7f219613
+Ref: guide/releases/flycheck-0 15 other-improvements\7f219729
+Ref: 1d7\7f219729
+Node: Get it<5>\7f220717
+Ref: guide/releases/flycheck-0 15 get-it\7f220805
+Ref: 1d8\7f220805
+Node: Changelog\7f220865
+Ref: guide/releases/index id1\7f220960
+Ref: 1d9\7f220960
+Ref: guide/releases/index changelog\7f220960
+Ref: 165\7f220960
+Node: master in development\7f222086
+Ref: guide/releases/index master-in-development\7f222180
+Ref: 1da\7f222180
+Ref: master in development-Footnote-1\7f222758
+Ref: master in development-Footnote-2\7f222814
+Ref: master in development-Footnote-3\7f222870
+Ref: master in development-Footnote-4\7f222926
+Ref: master in development-Footnote-5\7f222982
+Node: 0 22 Dec 23 2014\7f223038
+Ref: guide/releases/index dec-23-2014\7f223157
+Ref: 1db\7f223157
+Ref: 0 22 Dec 23 2014-Footnote-1\7f226492
+Ref: 0 22 Dec 23 2014-Footnote-2\7f226548
+Ref: 0 22 Dec 23 2014-Footnote-3\7f226604
+Ref: 0 22 Dec 23 2014-Footnote-4\7f226660
+Ref: 0 22 Dec 23 2014-Footnote-5\7f226716
+Ref: 0 22 Dec 23 2014-Footnote-6\7f226772
+Ref: 0 22 Dec 23 2014-Footnote-7\7f226828
+Ref: 0 22 Dec 23 2014-Footnote-8\7f226884
+Ref: 0 22 Dec 23 2014-Footnote-9\7f226940
+Ref: 0 22 Dec 23 2014-Footnote-10\7f226996
+Ref: 0 22 Dec 23 2014-Footnote-11\7f227053
+Ref: 0 22 Dec 23 2014-Footnote-12\7f227110
+Ref: 0 22 Dec 23 2014-Footnote-13\7f227167
+Ref: 0 22 Dec 23 2014-Footnote-14\7f227224
+Ref: 0 22 Dec 23 2014-Footnote-15\7f227281
+Ref: 0 22 Dec 23 2014-Footnote-16\7f227338
+Ref: 0 22 Dec 23 2014-Footnote-17\7f227395
+Ref: 0 22 Dec 23 2014-Footnote-18\7f227452
+Ref: 0 22 Dec 23 2014-Footnote-19\7f227509
+Ref: 0 22 Dec 23 2014-Footnote-20\7f227566
+Ref: 0 22 Dec 23 2014-Footnote-21\7f227623
+Ref: 0 22 Dec 23 2014-Footnote-22\7f227680
+Ref: 0 22 Dec 23 2014-Footnote-23\7f227737
+Ref: 0 22 Dec 23 2014-Footnote-24\7f227794
+Ref: 0 22 Dec 23 2014-Footnote-25\7f227851
+Node: 0 21 Oct 26 2014\7f227908
+Ref: guide/releases/index oct-26-2014\7f228022
+Ref: 1dc\7f228022
+Ref: 0 21 Oct 26 2014-Footnote-1\7f230565
+Ref: 0 21 Oct 26 2014-Footnote-2\7f230621
+Ref: 0 21 Oct 26 2014-Footnote-3\7f230677
+Ref: 0 21 Oct 26 2014-Footnote-4\7f230733
+Ref: 0 21 Oct 26 2014-Footnote-5\7f230789
+Ref: 0 21 Oct 26 2014-Footnote-6\7f230845
+Ref: 0 21 Oct 26 2014-Footnote-7\7f230901
+Ref: 0 21 Oct 26 2014-Footnote-8\7f230957
+Ref: 0 21 Oct 26 2014-Footnote-9\7f231013
+Ref: 0 21 Oct 26 2014-Footnote-10\7f231069
+Ref: 0 21 Oct 26 2014-Footnote-11\7f231126
+Ref: 0 21 Oct 26 2014-Footnote-12\7f231183
+Ref: 0 21 Oct 26 2014-Footnote-13\7f231240
+Ref: 0 21 Oct 26 2014-Footnote-14\7f231297
+Ref: 0 21 Oct 26 2014-Footnote-15\7f231354
+Ref: 0 21 Oct 26 2014-Footnote-16\7f231411
+Ref: 0 21 Oct 26 2014-Footnote-17\7f231468
+Ref: 0 21 Oct 26 2014-Footnote-18\7f231525
+Ref: 0 21 Oct 26 2014-Footnote-19\7f231582
+Ref: 0 21 Oct 26 2014-Footnote-20\7f231639
+Ref: 0 21 Oct 26 2014-Footnote-21\7f231696
+Node: 0 20 Aug 12 2014\7f231753
+Ref: guide/releases/index aug-12-2014\7f231867
+Ref: 1dd\7f231867
+Ref: 0 20 Aug 12 2014-Footnote-1\7f235447
+Ref: 0 20 Aug 12 2014-Footnote-2\7f235503
+Ref: 0 20 Aug 12 2014-Footnote-3\7f235559
+Ref: 0 20 Aug 12 2014-Footnote-4\7f235615
+Ref: 0 20 Aug 12 2014-Footnote-5\7f235671
+Ref: 0 20 Aug 12 2014-Footnote-6\7f235727
+Ref: 0 20 Aug 12 2014-Footnote-7\7f235783
+Ref: 0 20 Aug 12 2014-Footnote-8\7f235839
+Ref: 0 20 Aug 12 2014-Footnote-9\7f235895
+Ref: 0 20 Aug 12 2014-Footnote-10\7f235951
+Ref: 0 20 Aug 12 2014-Footnote-11\7f236008
+Ref: 0 20 Aug 12 2014-Footnote-12\7f236065
+Ref: 0 20 Aug 12 2014-Footnote-13\7f236122
+Ref: 0 20 Aug 12 2014-Footnote-14\7f236179
+Ref: 0 20 Aug 12 2014-Footnote-15\7f236236
+Ref: 0 20 Aug 12 2014-Footnote-16\7f236293
+Ref: 0 20 Aug 12 2014-Footnote-17\7f236350
+Ref: 0 20 Aug 12 2014-Footnote-18\7f236407
+Ref: 0 20 Aug 12 2014-Footnote-19\7f236464
+Ref: 0 20 Aug 12 2014-Footnote-20\7f236521
+Ref: 0 20 Aug 12 2014-Footnote-21\7f236578
+Ref: 0 20 Aug 12 2014-Footnote-22\7f236635
+Ref: 0 20 Aug 12 2014-Footnote-23\7f236692
+Ref: 0 20 Aug 12 2014-Footnote-24\7f236749
+Ref: 0 20 Aug 12 2014-Footnote-25\7f236806
+Ref: 0 20 Aug 12 2014-Footnote-26\7f236863
+Ref: 0 20 Aug 12 2014-Footnote-27\7f236920
+Ref: 0 20 Aug 12 2014-Footnote-28\7f236977
+Node: 0 19 Jun 12 2014\7f237034
+Ref: guide/releases/index jun-12-2014\7f237148
+Ref: 1de\7f237148
+Ref: 0 19 Jun 12 2014-Footnote-1\7f239018
+Ref: 0 19 Jun 12 2014-Footnote-2\7f239074
+Ref: 0 19 Jun 12 2014-Footnote-3\7f239130
+Ref: 0 19 Jun 12 2014-Footnote-4\7f239186
+Ref: 0 19 Jun 12 2014-Footnote-5\7f239242
+Ref: 0 19 Jun 12 2014-Footnote-6\7f239298
+Ref: 0 19 Jun 12 2014-Footnote-7\7f239354
+Ref: 0 19 Jun 12 2014-Footnote-8\7f239410
+Ref: 0 19 Jun 12 2014-Footnote-9\7f239466
+Ref: 0 19 Jun 12 2014-Footnote-10\7f239522
+Ref: 0 19 Jun 12 2014-Footnote-11\7f239579
+Ref: 0 19 Jun 12 2014-Footnote-12\7f239636
+Ref: 0 19 Jun 12 2014-Footnote-13\7f239693
+Ref: 0 19 Jun 12 2014-Footnote-14\7f239750
+Node: 0 18 Mar 24 2014\7f239807
+Ref: guide/releases/index mar-24-2014\7f239920
+Ref: 1df\7f239920
+Ref: 0 18 Mar 24 2014-Footnote-1\7f241936
+Ref: 0 18 Mar 24 2014-Footnote-2\7f241992
+Ref: 0 18 Mar 24 2014-Footnote-3\7f242047
+Ref: 0 18 Mar 24 2014-Footnote-4\7f242103
+Ref: 0 18 Mar 24 2014-Footnote-5\7f242159
+Ref: 0 18 Mar 24 2014-Footnote-6\7f242215
+Ref: 0 18 Mar 24 2014-Footnote-7\7f242271
+Ref: 0 18 Mar 24 2014-Footnote-8\7f242327
+Ref: 0 18 Mar 24 2014-Footnote-9\7f242383
+Ref: 0 18 Mar 24 2014-Footnote-10\7f242439
+Node: 0 17 Feb 1 2014\7f242496
+Ref: guide/releases/index feb-1-2014\7f242609
+Ref: 1e0\7f242609
+Ref: 0 17 Feb 1 2014-Footnote-1\7f244303
+Ref: 0 17 Feb 1 2014-Footnote-2\7f244333
+Ref: 0 17 Feb 1 2014-Footnote-3\7f244389
+Ref: 0 17 Feb 1 2014-Footnote-4\7f244445
+Ref: 0 17 Feb 1 2014-Footnote-5\7f244501
+Ref: 0 17 Feb 1 2014-Footnote-6\7f244557
+Ref: 0 17 Feb 1 2014-Footnote-7\7f244613
+Ref: 0 17 Feb 1 2014-Footnote-8\7f244669
+Ref: 0 17 Feb 1 2014-Footnote-9\7f244725
+Node: 0 16 Jan 11 2014\7f244781
+Ref: guide/releases/index sphinx\7f244894
+Ref: 1e1\7f244894
+Ref: guide/releases/index jan-11-2014\7f244894
+Ref: 1e2\7f244894
+Ref: 0 16 Jan 11 2014-Footnote-1\7f247726
+Ref: 0 16 Jan 11 2014-Footnote-2\7f247781
+Ref: 0 16 Jan 11 2014-Footnote-3\7f247837
+Ref: 0 16 Jan 11 2014-Footnote-4\7f247893
+Ref: 0 16 Jan 11 2014-Footnote-5\7f247949
+Ref: 0 16 Jan 11 2014-Footnote-6\7f248005
+Ref: 0 16 Jan 11 2014-Footnote-7\7f248061
+Ref: 0 16 Jan 11 2014-Footnote-8\7f248117
+Ref: 0 16 Jan 11 2014-Footnote-9\7f248173
+Ref: 0 16 Jan 11 2014-Footnote-10\7f248229
+Ref: 0 16 Jan 11 2014-Footnote-11\7f248286
+Ref: 0 16 Jan 11 2014-Footnote-12\7f248343
+Ref: 0 16 Jan 11 2014-Footnote-13\7f248400
+Ref: 0 16 Jan 11 2014-Footnote-14\7f248457
+Ref: 0 16 Jan 11 2014-Footnote-15\7f248514
+Ref: 0 16 Jan 11 2014-Footnote-16\7f248571
+Ref: 0 16 Jan 11 2014-Footnote-17\7f248628
+Ref: 0 16 Jan 11 2014-Footnote-18\7f248685
+Ref: 0 16 Jan 11 2014-Footnote-19\7f248742
+Ref: 0 16 Jan 11 2014-Footnote-20\7f248799
+Ref: 0 16 Jan 11 2014-Footnote-21\7f248856
+Ref: 0 16 Jan 11 2014-Footnote-22\7f248913
+Node: 0 15 Nov 15 2013\7f248970
+Ref: guide/releases/index nov-15-2013\7f249086
+Ref: 1e3\7f249086
+Ref: guide/releases/index flycheck-hdevtools\7f249086
+Ref: 1e4\7f249086
+Ref: 0 15 Nov 15 2013-Footnote-1\7f253294
+Ref: 0 15 Nov 15 2013-Footnote-2\7f253350
+Ref: 0 15 Nov 15 2013-Footnote-3\7f253406
+Ref: 0 15 Nov 15 2013-Footnote-4\7f253462
+Ref: 0 15 Nov 15 2013-Footnote-5\7f253518
+Ref: 0 15 Nov 15 2013-Footnote-6\7f253574
+Ref: 0 15 Nov 15 2013-Footnote-7\7f253630
+Ref: 0 15 Nov 15 2013-Footnote-8\7f253671
+Ref: 0 15 Nov 15 2013-Footnote-9\7f253727
+Ref: 0 15 Nov 15 2013-Footnote-10\7f253783
+Ref: 0 15 Nov 15 2013-Footnote-11\7f253840
+Ref: 0 15 Nov 15 2013-Footnote-12\7f253897
+Ref: 0 15 Nov 15 2013-Footnote-13\7f253954
+Ref: 0 15 Nov 15 2013-Footnote-14\7f254011
+Ref: 0 15 Nov 15 2013-Footnote-15\7f254068
+Ref: 0 15 Nov 15 2013-Footnote-16\7f254125
+Ref: 0 15 Nov 15 2013-Footnote-17\7f254182
+Ref: 0 15 Nov 15 2013-Footnote-18\7f254239
+Ref: 0 15 Nov 15 2013-Footnote-19\7f254296
+Ref: 0 15 Nov 15 2013-Footnote-20\7f254353
+Ref: 0 15 Nov 15 2013-Footnote-21\7f254410
+Ref: 0 15 Nov 15 2013-Footnote-22\7f254467
+Ref: 0 15 Nov 15 2013-Footnote-23\7f254524
+Ref: 0 15 Nov 15 2013-Footnote-24\7f254581
+Ref: 0 15 Nov 15 2013-Footnote-25\7f254638
+Ref: 0 15 Nov 15 2013-Footnote-26\7f254695
+Ref: 0 15 Nov 15 2013-Footnote-27\7f254752
+Ref: 0 15 Nov 15 2013-Footnote-28\7f254809
+Ref: 0 15 Nov 15 2013-Footnote-29\7f254866
+Ref: 0 15 Nov 15 2013-Footnote-30\7f254923
+Node: 0 14 1 Aug 16 2013\7f254980
+Ref: guide/releases/index grizzl\7f255096
+Ref: 1e5\7f255096
+Ref: guide/releases/index aug-16-2013\7f255096
+Ref: 1e6\7f255096
+Ref: 0 14 1 Aug 16 2013-Footnote-1\7f255256
+Node: 0 14 Aug 15 2013\7f255312
+Ref: guide/releases/index aug-15-2013\7f255428
+Ref: 1e7\7f255428
+Ref: 0 14 Aug 15 2013-Footnote-1\7f258398
+Ref: 0 14 Aug 15 2013-Footnote-2\7f258454
+Ref: 0 14 Aug 15 2013-Footnote-3\7f258510
+Ref: 0 14 Aug 15 2013-Footnote-4\7f258566
+Ref: 0 14 Aug 15 2013-Footnote-5\7f258622
+Ref: 0 14 Aug 15 2013-Footnote-6\7f258678
+Ref: 0 14 Aug 15 2013-Footnote-7\7f258734
+Ref: 0 14 Aug 15 2013-Footnote-8\7f258790
+Ref: 0 14 Aug 15 2013-Footnote-9\7f258846
+Ref: 0 14 Aug 15 2013-Footnote-10\7f258902
+Ref: 0 14 Aug 15 2013-Footnote-11\7f258959
+Ref: 0 14 Aug 15 2013-Footnote-12\7f259016
+Ref: 0 14 Aug 15 2013-Footnote-13\7f259073
+Ref: 0 14 Aug 15 2013-Footnote-14\7f259130
+Ref: 0 14 Aug 15 2013-Footnote-15\7f259187
+Ref: 0 14 Aug 15 2013-Footnote-16\7f259244
+Ref: 0 14 Aug 15 2013-Footnote-17\7f259301
+Ref: 0 14 Aug 15 2013-Footnote-18\7f259358
+Ref: 0 14 Aug 15 2013-Footnote-19\7f259415
+Ref: 0 14 Aug 15 2013-Footnote-20\7f259472
+Ref: 0 14 Aug 15 2013-Footnote-21\7f259529
+Ref: 0 14 Aug 15 2013-Footnote-22\7f259586
+Node: 0 13 Jun 28 2013\7f259643
+Ref: guide/releases/index jun-28-2013\7f259757
+Ref: 1e8\7f259757
+Ref: 0 13 Jun 28 2013-Footnote-1\7f262377
+Ref: 0 13 Jun 28 2013-Footnote-2\7f262433
+Ref: 0 13 Jun 28 2013-Footnote-3\7f262489
+Ref: 0 13 Jun 28 2013-Footnote-4\7f262545
+Ref: 0 13 Jun 28 2013-Footnote-5\7f262601
+Ref: 0 13 Jun 28 2013-Footnote-6\7f262657
+Ref: 0 13 Jun 28 2013-Footnote-7\7f262713
+Node: 0 12 May 18 2013\7f262769
+Ref: guide/releases/index may-18-2013\7f262883
+Ref: 1e9\7f262883
+Ref: 0 12 May 18 2013-Footnote-1\7f263712
+Ref: 0 12 May 18 2013-Footnote-2\7f263768
+Ref: 0 12 May 18 2013-Footnote-3\7f263824
+Ref: 0 12 May 18 2013-Footnote-4\7f263880
+Node: 0 11 May 01 2013\7f263936
+Ref: guide/releases/index may-01-2013\7f264050
+Ref: 1ea\7f264050
+Ref: 0 11 May 01 2013-Footnote-1\7f265016
+Ref: 0 11 May 01 2013-Footnote-2\7f265072
+Ref: 0 11 May 01 2013-Footnote-3\7f265128
+Ref: 0 11 May 01 2013-Footnote-4\7f265184
+Ref: 0 11 May 01 2013-Footnote-5\7f265230
+Node: 0 10 Apr 21 2013\7f265286
+Ref: guide/releases/index apr-21-2013\7f265399
+Ref: 1eb\7f265399
+Ref: guide/releases/index projectile\7f265399
+Ref: 1ec\7f265399
+Ref: 0 10 Apr 21 2013-Footnote-1\7f267052
+Ref: 0 10 Apr 21 2013-Footnote-2\7f267108
+Ref: 0 10 Apr 21 2013-Footnote-3\7f267164
+Ref: 0 10 Apr 21 2013-Footnote-4\7f267220
+Ref: 0 10 Apr 21 2013-Footnote-5\7f267276
+Ref: 0 10 Apr 21 2013-Footnote-6\7f267332
+Ref: 0 10 Apr 21 2013-Footnote-7\7f267390
+Ref: 0 10 Apr 21 2013-Footnote-8\7f267446
+Ref: 0 10 Apr 21 2013-Footnote-9\7f267501
+Node: 0 9 Apr 13 2013\7f267557
+Ref: guide/releases/index apr-13-2013\7f267668
+Ref: 1ed\7f267668
+Ref: guide/releases/index google-this\7f267668
+Ref: 1ee\7f267668
+Ref: 0 9 Apr 13 2013-Footnote-1\7f268056
+Ref: 0 9 Apr 13 2013-Footnote-2\7f268112
+Node: 0 8 Apr 9 2013\7f268168
+Ref: guide/releases/index apr-9-2013\7f268280
+Ref: 1ef\7f268280
+Ref: 0 8 Apr 9 2013-Footnote-1\7f269408
+Ref: 0 8 Apr 9 2013-Footnote-2\7f269463
+Ref: 0 8 Apr 9 2013-Footnote-3\7f269519
+Ref: 0 8 Apr 9 2013-Footnote-4\7f269574
+Ref: 0 8 Apr 9 2013-Footnote-5\7f269629
+Ref: 0 8 Apr 9 2013-Footnote-6\7f269684
+Ref: 0 8 Apr 9 2013-Footnote-7\7f269739
+Ref: 0 8 Apr 9 2013-Footnote-8\7f269794
+Node: 0 7 1 Feb 23 2013\7f269850
+Ref: guide/releases/index feb-23-2013\7f269962
+Ref: 1f0\7f269962
+Ref: 0 7 1 Feb 23 2013-Footnote-1\7f270589
+Ref: 0 7 1 Feb 23 2013-Footnote-2\7f270644
+Node: 0 7 Feb 14 2013\7f270699
+Ref: guide/releases/index feb-14-2013\7f270814
+Ref: 1f1\7f270814
+Ref: 0 7 Feb 14 2013-Footnote-1\7f271572
+Ref: 0 7 Feb 14 2013-Footnote-2\7f271627
+Ref: 0 7 Feb 14 2013-Footnote-3\7f271682
+Ref: 0 7 Feb 14 2013-Footnote-4\7f271737
+Ref: 0 7 Feb 14 2013-Footnote-5\7f271792
+Node: 0 6 1 Jan 30 2013\7f271847
+Ref: guide/releases/index jan-30-2013\7f271960
+Ref: 1f2\7f271960
+Node: 0 6 Jan 29 2013\7f272048
+Ref: guide/releases/index jan-29-2013\7f272161
+Ref: 1f3\7f272161
+Ref: 0 6 Jan 29 2013-Footnote-1\7f274183
+Ref: 0 6 Jan 29 2013-Footnote-2\7f274238
+Ref: 0 6 Jan 29 2013-Footnote-3\7f274293
+Ref: 0 6 Jan 29 2013-Footnote-4\7f274348
+Ref: 0 6 Jan 29 2013-Footnote-5\7f274403
+Ref: 0 6 Jan 29 2013-Footnote-6\7f274458
+Ref: 0 6 Jan 29 2013-Footnote-7\7f274513
+Ref: 0 6 Jan 29 2013-Footnote-8\7f274568
+Ref: 0 6 Jan 29 2013-Footnote-9\7f274623
+Ref: 0 6 Jan 29 2013-Footnote-10\7f274678
+Ref: 0 6 Jan 29 2013-Footnote-11\7f274734
+Ref: 0 6 Jan 29 2013-Footnote-12\7f274790
+Ref: 0 6 Jan 29 2013-Footnote-13\7f274846
+Ref: 0 6 Jan 29 2013-Footnote-14\7f274902
+Ref: 0 6 Jan 29 2013-Footnote-15\7f274958
+Ref: 0 6 Jan 29 2013-Footnote-16\7f275014
+Ref: 0 6 Jan 29 2013-Footnote-17\7f275070
+Ref: 0 6 Jan 29 2013-Footnote-18\7f275126
+Ref: 0 6 Jan 29 2013-Footnote-19\7f275182
+Node: 0 5 Dec 28 2012\7f275238
+Ref: guide/releases/index dec-28-2012\7f275349
+Ref: 1f4\7f275349
+Ref: 0 5 Dec 28 2012-Footnote-1\7f276170
+Ref: 0 5 Dec 28 2012-Footnote-2\7f276225
+Ref: 0 5 Dec 28 2012-Footnote-3\7f276280
+Ref: 0 5 Dec 28 2012-Footnote-4\7f276335
+Ref: 0 5 Dec 28 2012-Footnote-5\7f276390
+Ref: 0 5 Dec 28 2012-Footnote-6\7f276445
+Ref: 0 5 Dec 28 2012-Footnote-7\7f276500
+Ref: 0 5 Dec 28 2012-Footnote-8\7f276555
+Ref: 0 5 Dec 28 2012-Footnote-9\7f276610
+Node: 0 4 Nov 21 2012\7f276665
+Ref: guide/releases/index nov-21-2012\7f276776
+Ref: 1f5\7f276776
+Ref: guide/releases/index flymake-cursor\7f276776
+Ref: 1f6\7f276776
+Ref: 0 4 Nov 21 2012-Footnote-1\7f277240
+Ref: 0 4 Nov 21 2012-Footnote-2\7f277294
+Ref: 0 4 Nov 21 2012-Footnote-3\7f277348
+Ref: 0 4 Nov 21 2012-Footnote-4\7f277402
+Ref: 0 4 Nov 21 2012-Footnote-5\7f277456
+Ref: 0 4 Nov 21 2012-Footnote-6\7f277511
+Ref: 0 4 Nov 21 2012-Footnote-7\7f277566
+Node: 0 3 Nov 21 2012\7f277621
+Ref: guide/releases/index id2\7f277732
+Ref: 1f7\7f277732
+Ref: 0 3 Nov 21 2012-Footnote-1\7f277910
+Node: 0 2 Oct 25 2012\7f277964
+Ref: guide/releases/index oct-25-2012\7f278075
+Ref: 1f8\7f278075
+Ref: 0 2 Oct 25 2012-Footnote-1\7f278283
+Node: 0 1 Oct 11 2012\7f278337
+Ref: guide/releases/index oct-11-2012\7f278424
+Ref: 1f9\7f278424
+Node: Extending Flycheck\7f278667
+Ref: dev/extending doc\7f278774
+Ref: 1fa\7f278774
+Ref: dev/extending extending-flycheck\7f278774
+Ref: 1fb\7f278774
+Node: Defining new syntax checkers\7f279655
+Ref: dev/extending defining-new-syntax-checkers\7f279784
+Ref: a\7f279784
+Ref: dev/extending id1\7f279784
+Ref: 1ff\7f279784
+Ref: Defining new syntax checkers-Footnote-1\7f284145
+Node: Finding the right error patterns\7f284176
+Ref: dev/extending pylint\7f284311
+Ref: 202\7f284311
+Ref: dev/extending finding-the-right-error-patterns\7f284311
+Ref: 203\7f284311
+Ref: dev/extending el function flycheck-compile\7f284896
+Ref: 19c\7f284896
+Node: Trying a new syntax checker\7f285541
+Ref: dev/extending trying-a-new-syntax-checker\7f285716
+Ref: 205\7f285716
+Node: Registering new syntax checkers\7f286254
+Ref: dev/extending registering-new-syntax-checkers\7f286388
+Ref: 206\7f286388
+Ref: dev/extending id2\7f286388
+Ref: 207\7f286388
+Node: Advanced syntax checker definitions\7f287888
+Ref: dev/extending advanced-syntax-checker-definitions\7f288055
+Ref: 208\7f288055
+Node: Parsing structured output format\7f288336
+Ref: dev/extending id3\7f288509
+Ref: 209\7f288509
+Ref: dev/extending parsing-structured-output-format\7f288509
+Ref: 204\7f288509
+Ref: Parsing structured output format-Footnote-1\7f289643
+Node: Passing options and configuration files to syntax checkers\7f289674
+Ref: dev/extending passing-options-and-configuration-files-to-syntax-checkers\7f289895
+Ref: 20b\7f289895
+Ref: dev/extending jshint\7f289895
+Ref: 20c\7f289895
+Ref: Passing options and configuration files to syntax checkers-Footnote-1\7f293139
+Ref: Passing options and configuration files to syntax checkers-Footnote-2\7f293182
+Node: Controlling the use of a syntax checker\7f293213
+Ref: dev/extending rubocop\7f293439
+Ref: 20f\7f293439
+Ref: dev/extending controlling-the-use-of-a-syntax-checker\7f293439
+Ref: 210\7f293439
+Node: Applying more than one syntax checker\7f294370
+Ref: dev/extending applying-more-than-one-syntax-checker\7f294529
+Ref: 211\7f294529
+Ref: Applying more than one syntax checker-Footnote-1\7f297837
+Node: Other ways to extend Flycheck\7f297885
+Ref: dev/extending shellcheck\7f298015
+Ref: 213\7f298015
+Ref: dev/extending other-ways-to-extend-flycheck\7f298015
+Ref: 214\7f298015
+Node: Use arbitrary functions to check buffers\7f298167
+Ref: dev/extending use-arbitrary-functions-to-check-buffers\7f298305
+Ref: 215\7f298305
+Node: Hooking into Flycheck\7f298528
+Ref: dev/extending hooking-into-flycheck\7f298666
+Ref: 216\7f298666
+Node: Status changes\7f298873
+Ref: dev/extending status-changes\7f298972
+Ref: 217\7f298972
+Ref: Status changes-Footnote-1\7f299573
+Node: Error processing\7f299634
+Ref: dev/extending error-processing\7f299755
+Ref: 219\7f299755
+Node: Error display\7f301299
+Ref: dev/extending error-display\7f301397
+Ref: 21c\7f301397
+Ref: Error display-Footnote-1\7f301683
+Node: Flycheck API\7f301736
+Ref: dev/api flycheck-pos-tip\7f301842
+Ref: 21d\7f301842
+Ref: dev/api doc\7f301842
+Ref: 21e\7f301842
+Ref: dev/api flycheck-api\7f301842
+Ref: 1fc\7f301842
+Ref: dev/api id1\7f301842
+Ref: 21f\7f301842
+Node: Syntax checks\7f302379
+Ref: dev/api syntax-checks\7f302478
+Ref: 220\7f302478
+Ref: dev/api api-syntax-checks\7f302478
+Ref: 221\7f302478
+Ref: dev/api el variable flycheck-after-syntax-check-hook\7f303216
+Ref: 222\7f303216
+Ref: dev/api el variable flycheck-before-syntax-check-hook\7f304001
+Ref: 218\7f304001
+Ref: dev/api el variable flycheck-syntax-check-failed-hook\7f304588
+Ref: 223\7f304588
+Node: Generic syntax checkers<2>\7f305111
+Ref: dev/api generic-syntax-checkers\7f305242
+Ref: 224\7f305242
+Ref: dev/api api-generic-syntax-checkers\7f305242
+Ref: 225\7f305242
+Ref: dev/api el function flycheck-define-generic-checker\7f305452
+Ref: 1b\7f305452
+Ref: dev/api el function flycheck-registered-checker-p\7f313293
+Ref: 66\7f313293
+Ref: dev/api el function flycheck-add-mode\7f313577
+Ref: 18c\7f313577
+Ref: dev/api el function flycheck-add-next-checker\7f313874
+Ref: 212\7f313874
+Node: Status callback protocol\7f314717
+Ref: dev/api status-callback-protocol\7f314845
+Ref: 227\7f314845
+Ref: dev/api api-status-callback-protocol\7f314845
+Ref: 226\7f314845
+Ref: dev/api el function status-callback\7f315080
+Ref: 228\7f315080
+Node: Predicates for syntax checkers\7f316299
+Ref: dev/api predicates-for-syntax-checkers\7f316449
+Ref: 229\7f316449
+Ref: dev/api el function flycheck-buffer-saved-p\7f316596
+Ref: 22a\7f316596
+Node: Error filters\7f316897
+Ref: dev/api error-filters\7f317014
+Ref: 22b\7f317014
+Ref: dev/api el function flycheck-sanitize-errors\7f317135
+Ref: 22c\7f317135
+Ref: dev/api el function flycheck-increment-error-columns\7f317399
+Ref: 22d\7f317399
+Ref: dev/api el function flycheck-collapse-error-message-whitespace\7f317611
+Ref: 22e\7f317611
+Ref: dev/api el function flycheck-dedent-error-messages\7f317751
+Ref: 22f\7f317751
+Ref: dev/api el function flycheck-fold-include-levels\7f318056
+Ref: 230\7f318056
+Ref: dev/api el function flycheck-dequalify-error-ids\7f318536
+Ref: 17b\7f318536
+Ref: dev/api el function flycheck-remove-error-ids\7f319008
+Ref: 17c\7f319008
+Node: Command syntax checkers\7f319097
+Ref: dev/api api-command-syntax-checkers\7f319221
+Ref: 231\7f319221
+Ref: dev/api command-syntax-checkers\7f319221
+Ref: 232\7f319221
+Ref: dev/api el function flycheck-define-command-checker\7f319523
+Ref: 177\7f319523
+Ref: dev/api el function flycheck-def-executable-var\7f322997
+Ref: 233\7f322997
+Ref: dev/api el function flycheck-define-checker\7f323796
+Ref: 19\7f323796
+Node: Command arguments\7f324351
+Ref: dev/api command-arguments\7f324474
+Ref: 235\7f324474
+Ref: dev/api el function flycheck-substitute-argument\7f324768
+Ref: 201\7f324768
+Node: Options for command syntax checkers\7f329816
+Ref: dev/api options-for-command-syntax-checkers\7f329995
+Ref: 237\7f329995
+Ref: dev/api el function flycheck-def-option-var\7f330183
+Ref: 20d\7f330183
+Ref: dev/api el function flycheck-def-args-var\7f330810
+Ref: 238\7f330810
+Ref: dev/api el function flycheck-option-int\7f331315
+Ref: 239\7f331315
+Ref: dev/api el function flycheck-option-comma-separated-list\7f331496
+Ref: 23a\7f331496
+Node: Configuration files for command syntax checkers\7f332102
+Ref: dev/api configuration-files-for-command-syntax-checkers\7f332302
+Ref: 23b\7f332302
+Ref: dev/api api-configuration-files\7f332302
+Ref: 20e\7f332302
+Ref: dev/api el function flycheck-def-config-file-var\7f332503
+Ref: 23c\7f332503
+Ref: dev/api el function flycheck-locate-config-file\7f333287
+Ref: 236\7f333287
+Node: Error parsing with regular expressions\7f333614
+Ref: dev/api error-parsing-with-regular-expressions\7f333792
+Ref: 23d\7f333792
+Ref: dev/api el function flycheck-rx-to-string\7f334189
+Ref: 200\7f334189
+Ref: dev/api el function flycheck-parse-with-patterns\7f335060
+Ref: 234\7f335060
+Node: Error parsers\7f335568
+Ref: dev/api error-parsers\7f335690
+Ref: 23e\7f335690
+Ref: dev/api api-error-parsers\7f335690
+Ref: 20a\7f335690
+Ref: dev/api el function flycheck-parse-checkstyle\7f335915
+Ref: 17a\7f335915
+Ref: dev/api el function flycheck-error-parser\7f336358
+Ref: 23f\7f336358
+Ref: dev/api el function flycheck-parse-xml-string\7f336666
+Ref: 240\7f336666
+Ref: Error parsers-Footnote-1\7f337126
+Node: Errors\7f337169
+Ref: dev/api errors\7f337289
+Ref: 241\7f337289
+Ref: dev/api api-errors\7f337289
+Ref: 242\7f337289
+Ref: dev/api el variable flycheck-current-errors\7f337414
+Ref: 91\7f337414
+Ref: dev/api el struct flycheck-error\7f337754
+Ref: 169\7f337754
+Ref: dev/api el function flycheck-error-buffer\7f337879
+Ref: 167\7f337879
+Ref: dev/api el function flycheck-error-checker\7f337988
+Ref: 168\7f337988
+Ref: dev/api el function flycheck-error-filename\7f338068
+Ref: 243\7f338068
+Ref: dev/api el function flycheck-error-line\7f338158
+Ref: 244\7f338158
+Ref: dev/api el function flycheck-error-column\7f338241
+Ref: 245\7f338241
+Ref: dev/api el function flycheck-error-message\7f339101
+Ref: 246\7f339101
+Ref: dev/api el function flycheck-error-level\7f339180
+Ref: 247\7f339180
+Ref: dev/api el function flycheck-error-id\7f339341
+Ref: 179\7f339341
+Ref: dev/api el function flycheck-error-new-at\7f339618
+Ref: 248\7f339618
+Ref: dev/api el function flycheck-error-new\7f340644
+Ref: 249\7f340644
+Ref: dev/api el function flycheck-error-with-buffer\7f341106
+Ref: 24a\7f341106
+Ref: dev/api el function flycheck-error-line-region\7f341296
+Ref: 24b\7f341296
+Ref: dev/api el function flycheck-error-column-region\7f341615
+Ref: 24c\7f341615
+Ref: dev/api el function flycheck-error-thing-region\7f341954
+Ref: 24d\7f341954
+Ref: dev/api el function flycheck-error-pos\7f342437
+Ref: 24e\7f342437
+Ref: dev/api el function flycheck-error-format\7f342728
+Ref: 24f\7f342728
+Ref: dev/api el function flycheck-error-<\7f342938
+Ref: 250\7f342938
+Ref: dev/api el function flycheck-error-level-<\7f343113
+Ref: 251\7f343113
+Node: Error processing<2>\7f343496
+Ref: dev/api error-processing\7f343583
+Ref: 252\7f343583
+Ref: dev/api el variable flycheck-process-error-functions\7f343632
+Ref: 21a\7f343632
+Ref: dev/api el function flycheck-add-overlay\7f343677
+Ref: 21b\7f343677
+Node: Error analysis\7f343714
+Ref: dev/api error-analysis\7f343825
+Ref: 253\7f343825
+Ref: dev/api el function flycheck-count-errors\7f343936
+Ref: 92\7f343936
+Ref: dev/api el function flycheck-has-errors-p\7f344196
+Ref: 254\7f344196
+Ref: dev/api el function flycheck-has-max-errors-p\7f344299
+Ref: 255\7f344299
+Ref: dev/api el function auto\7f344340
+Ref: 256\7f344340
+Node: Error levels<2>\7f344361
+Ref: dev/api error-levels\7f344444
+Ref: 257\7f344444
+Ref: dev/api el function flycheck-define-error-level\7f344771
+Ref: 27\7f344771
+Ref: dev/api el function flycheck-error-level-p\7f346548
+Ref: 8b\7f346548
+Node: Flycheck buffer status\7f346650
+Ref: dev/api api-flycheck-buffer-status\7f346756
+Ref: 258\7f346756
+Ref: dev/api flycheck-buffer-status\7f346756
+Ref: 259\7f346756
+Ref: dev/api el variable flycheck-status-changed-functions\7f346813
+Ref: 19e\7f346813
+Ref: dev/api el function flycheck-report-status\7f347413
+Ref: 25a\7f347413
+Ref: dev/api el variable flycheck-last-status-change\7f348297
+Ref: 90\7f348297
+Ref: dev/api el function flycheck-mode-line-status-text\7f348480
+Ref: 8f\7f348480
+Node: Utilities\7f348699
+Ref: dev/api utilities\7f348790
+Ref: 25b\7f348790
+Ref: dev/api api-utilities\7f348790
+Ref: 25c\7f348790
+Ref: dev/api el function flycheck-string-list-p\7f348821
+Ref: 99\7f348821
+Ref: dev/api el function flycheck-symbol-list-p\7f348909
+Ref: 61\7f348909
+Node: Flycheck ERT API\7f348997
+Ref: dev/test-api flycheck-ert-api\7f349108
+Ref: 25d\7f349108
+Ref: dev/test-api doc\7f349108
+Ref: 25e\7f349108
+Ref: dev/test-api flycheck-ert\7f349108
+Ref: 17e\7f349108
+Node: Compatibility\7f349432
+Ref: dev/test-api compatibility\7f349533
+Ref: 25f\7f349533
+Node: Loading and initializing\7f350003
+Ref: dev/test-api loading-and-initializing\7f350125
+Ref: 260\7f350125
+Ref: dev/test-api el function flycheck-ert-initialize\7f350691
+Ref: 262\7f350691
+Node: Utilities<2>\7f350921
+Ref: dev/test-api utilities\7f351049
+Ref: 264\7f351049
+Node: Creating temporary buffers\7f351230
+Ref: dev/test-api creating-temporary-buffers\7f351339
+Ref: 265\7f351339
+Ref: dev/test-api el function flycheck-ert-with-temp-buffer\7f351408
+Ref: 266\7f351408
+Ref: dev/test-api el function flycheck-ert-with-file-buffer\7f351697
+Ref: 267\7f351697
+Node: Scoping resource access\7f351914
+Ref: dev/test-api scoping-resource-access\7f352056
+Ref: 268\7f352056
+Ref: dev/test-api el function flycheck-ert-with-help-buffer\7f352119
+Ref: 269\7f352119
+Ref: dev/test-api el function flycheck-ert-with-env\7f352295
+Ref: 26a\7f352295
+Ref: dev/test-api el function flycheck-ert-with-global-mode\7f352661
+Ref: 26b\7f352661
+Node: Accessing test resources\7f352834
+Ref: dev/test-api test-resources\7f352993
+Ref: 261\7f352993
+Ref: dev/test-api accessing-test-resources\7f352993
+Ref: 26c\7f352993
+Ref: dev/test-api el function flycheck-ert-resource-filename\7f353173
+Ref: 263\7f353173
+Ref: dev/test-api el function flycheck-ert-with-resource-buffer\7f353387
+Ref: 26d\7f353387
+Ref: dev/test-api el function flycheck-ert-locate-config-file\7f353644
+Ref: 26e\7f353644
+Node: Obtaining information about the environment\7f353792
+Ref: dev/test-api obtaining-information-about-the-environment\7f353919
+Ref: 26f\7f353919
+Ref: dev/test-api el variable flycheck-ert-user-error-type\7f354022
+Ref: 270\7f354022
+Ref: dev/test-api el function flycheck-ert-travis-ci-p\7f354119
+Ref: 271\7f354119
+Ref: dev/test-api el function flycheck-ert-check-gpg\7f354213
+Ref: 272\7f354213
+Ref: dev/test-api el function flycheck-ert-extract-version-command\7f354290
+Ref: 273\7f354290
+Node: Defining test cases\7f354659
+Ref: dev/test-api defining-test-cases\7f354754
+Ref: 274\7f354754
+Ref: dev/test-api el function flycheck-ert-def-checker-test\7f354930
+Ref: 275\7f354930
+Node: Checking results of test cases\7f356149
+Ref: dev/test-api checking-results-of-test-cases\7f356284
+Ref: 276\7f356284
+Ref: dev/test-api el function flycheck-ert-syntax-check-timed-out-p\7f356484
+Ref: 277\7f356484
+Node: Invoking syntax checkers in test cases\7f356635
+Ref: dev/test-api invoking-syntax-checkers-in-test-cases\7f356797
+Ref: 278\7f356797
+Ref: dev/test-api el function flycheck-ert-buffer-sync\7f356890
+Ref: 279\7f356890
+Ref: dev/test-api el function flycheck-ert-ensure-clear\7f356994
+Ref: 27a\7f356994
+Node: Writing assertions\7f357138
+Ref: dev/test-api writing-assertions\7f357261
+Ref: 27b\7f357261
+Ref: dev/test-api el function flycheck-ert-should-overlay\7f357314
+Ref: 27c\7f357314
+Ref: dev/test-api el function flycheck-ert-should-errors\7f357470
+Ref: 27d\7f357470
+Ref: dev/test-api el function flycheck-ert-should-syntax-check\7f358111
+Ref: 27e\7f358111
+Ref: dev/test-api el function flycheck-ert-at-nth-error\7f359291
+Ref: 27f\7f359291
+Node: Contribution guidelines\7f359515
+Ref: contrib/guidelines doc\7f359630
+Ref: 280\7f359630
+Ref: contrib/guidelines contribution-guidelines\7f359630
+Ref: 281\7f359630
+Ref: Contribution guidelines-Footnote-1\7f360017
+Node: Reporting issues\7f360069
+Ref: contrib/guidelines id1\7f360173
+Ref: 282\7f360173
+Ref: contrib/guidelines reporting-issues\7f360173
+Ref: 8d\7f360173
+Ref: Reporting issues-Footnote-1\7f360780
+Node: Contributing code\7f360832
+Ref: contrib/guidelines id2\7f360936
+Ref: 283\7f360936
+Ref: contrib/guidelines contributing-code\7f360936
+Ref: 1fd\7f360936
+Node: General\7f361224
+Ref: contrib/guidelines general\7f361306
+Ref: 284\7f361306
+Node: Code style\7f361431
+Ref: contrib/guidelines code-style\7f361537
+Ref: 285\7f361537
+Node: Commit messages\7f361964
+Ref: contrib/guidelines commit-messages\7f362091
+Ref: 286\7f362091
+Ref: Commit messages-Footnote-1\7f363883
+Ref: Commit messages-Footnote-2\7f363961
+Ref: Commit messages-Footnote-3\7f364005
+Node: Contributing syntax checkers\7f364045
+Ref: contrib/guidelines contributing-syntax-checkers\7f364175
+Ref: 1fe\7f364175
+Ref: contrib/guidelines id3\7f364175
+Ref: 287\7f364175
+Node: Pull requests\7f364959
+Ref: contrib/guidelines id4\7f365065
+Ref: 288\7f365065
+Ref: contrib/guidelines pull-requests\7f365065
+Ref: 289\7f365065
+Ref: Pull requests-Footnote-1\7f365660
+Node: Testing Flycheck\7f365721
+Ref: contrib/testing testing-flycheck\7f365841
+Ref: 28a\7f365841
+Ref: contrib/testing doc\7f365841
+Ref: 28b\7f365841
+Ref: contrib/testing pull-request\7f365841
+Ref: 28c\7f365841
+Node: Test suite layout\7f366176
+Ref: contrib/testing test-suite-layout\7f366269
+Ref: 28d\7f366269
+Node: Test running\7f367121
+Ref: contrib/testing test-running\7f367247
+Ref: 28e\7f367247
+Ref: contrib/testing id1\7f367247
+Ref: 28f\7f367247
+Ref: Test running-Footnote-1\7f368403
+Node: Virtual test environment\7f368439
+Ref: contrib/testing id2\7f368557
+Ref: 291\7f368557
+Ref: contrib/testing virtual-test-environment\7f368557
+Ref: 290\7f368557
+Ref: Virtual test environment-Footnote-1\7f370662
+Ref: Virtual test environment-Footnote-2\7f370698
+Ref: Virtual test environment-Footnote-3\7f370734
+Ref: Virtual test environment-Footnote-4\7f370769
+Ref: Virtual test environment-Footnote-5\7f370805
+Node: Travis CI\7f370829
+Ref: contrib/testing homebrew\7f370926
+Ref: 292\7f370926
+Ref: contrib/testing travis-ci\7f370926
+Ref: 293\7f370926
+Node: Writing documentation\7f371451
+Ref: contrib/docs writing-documentation\7f371565
+Ref: 294\7f371565
+Ref: contrib/docs doc\7f371565
+Ref: 295\7f371565
+Node: Build environment setup\7f371792
+Ref: contrib/docs doc-build-env\7f371909
+Ref: 296\7f371909
+Ref: contrib/docs build-environment-setup\7f371909
+Ref: 297\7f371909
+Ref: Build environment setup-Footnote-1\7f373056
+Ref: Build environment setup-Footnote-2\7f373086
+Ref: Build environment setup-Footnote-3\7f373148
+Ref: Build environment setup-Footnote-4\7f373201
+Ref: Build environment setup-Footnote-5\7f373230
+Node: Building HTML and Texinfo\7f373284
+Ref: contrib/docs building-docs\7f373430
+Ref: 298\7f373430
+Ref: contrib/docs building-html-and-texinfo\7f373430
+Ref: 299\7f373430
+Ref: Building HTML and Texinfo-Footnote-1\7f374171
+Node: Verifying references\7f374197
+Ref: contrib/docs verifying-references\7f374311
+Ref: 29a\7f374311
+Node: Maintenance tasks\7f374671
+Ref: contrib/maintenance maintenance-tasks\7f374795
+Ref: 29b\7f374795
+Ref: contrib/maintenance doc\7f374795
+Ref: 29c\7f374795
+Node: Rebuilding the Texinfo\7f375031
+Ref: contrib/maintenance rebuilding-the-texinfo\7f375139
+Ref: 29d\7f375139
+Ref: Rebuilding the Texinfo-Footnote-1\7f375642
+Node: Rasterized logo files\7f375668
+Ref: contrib/maintenance rasterized-logo-files\7f375776
+Ref: 29e\7f375776
+Ref: contrib/maintenance melpa\7f375776
+Ref: 29f\7f375776
+Ref: Rasterized logo files-Footnote-1\7f376552
+Ref: Rasterized logo files-Footnote-2\7f376588
+Node: GNU General Public License\7f376622
+Ref: gpl gnu-general-public-license\7f376755
+Ref: 2a0\7f376755
+Ref: gpl doc\7f376755
+Ref: 2a1\7f376755
+Ref: gpl inkscape\7f376755
+Ref: 2a2\7f376755
+Node: GNU Free Documentation License\7f414729
+Ref: fdl doc\7f414850
+Ref: 2a3\7f414850
+Ref: fdl gnu-free-documentation-license\7f414850
+Ref: 2a4\7f414850
+Node: Index\7f439738
+\1f
+End Tag Table
+
+\1f
+Local Variables:
+coding: utf-8
+End:
--- /dev/null
+This is flycheck.info, produced by makeinfo version 5.2 from
+flycheck.texi.
+
+This manual is for Flycheck version 0.23-cvs.
+
+Copyright © 2014-2015 Sebastian Wiesner
+
+ Permission is granted to copy, distribute and/or modify this
+ documentation under the terms of the GNU Free Documentation
+ License, Version 1.3 or any later version published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is included
+ in the section entitled “GNU Free Documentation License.”.
+
+ Alternatively, you may copy, distribute and/or modify this
+ documentation under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License. A copy of
+ the license can be obtained at
+ <https://creativecommons.org/licenses/by-sa/4.0/legalcode>.
+
+INFO-DIR-SECTION Emacs
+START-INFO-DIR-ENTRY
+* flycheck: (flycheck.info). On the fly syntax checking for GNU Emacs
+END-INFO-DIR-ENTRY
+
+
+ Generated by Sphinx 1.2.3.
+
+\1f
+File: flycheck.info, Node: Top, Next: Introduction, Up: (dir)
+
+Flycheck
+********
+
+This manual is for Flycheck version 0.23-cvs.
+
+Copyright © 2014-2015 Sebastian Wiesner
+
+ Permission is granted to copy, distribute and/or modify this
+ documentation under the terms of the GNU Free Documentation
+ License, Version 1.3 or any later version published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is included
+ in the section entitled “GNU Free Documentation License.”.
+
+ Alternatively, you may copy, distribute and/or modify this
+ documentation under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License. A copy of
+ the license can be obtained at
+ <https://creativecommons.org/licenses/by-sa/4.0/legalcode>.
+
+* Menu:
+
+* Introduction::
+* Flycheck versus Flymake::
+* Installation::
+* Quickstart::
+* Usage::
+* Supported languages::
+* Glossary::
+* Flycheck releases::
+* Extending Flycheck::
+* Flycheck API::
+* Flycheck ERT API::
+* Contribution guidelines::
+* Testing Flycheck::
+* Writing documentation::
+* Maintenance tasks::
+* GNU General Public License::
+* GNU Free Documentation License::
+* Index::
+
+ — The Detailed Node Listing —
+
+Introduction
+
+* Features::
+* 3rd party extensions::
+
+Flycheck versus Flymake
+
+* Overview::
+* Detailed review::
+
+Detailed review
+
+* Relation to Emacs::
+* Enabling syntax checking::
+* Syntax checkers::
+* Functions as syntax checkers::
+* Customization of syntax checkers::
+* Syntax checker selection::
+* Error levels::
+* Error identifiers::
+* Error parsing::
+* Error message display::
+* Error list::
+* Resource consumption::
+* Unit tests::
+
+Syntax checkers
+
+* Built-in syntax checkers::
+* Definition of new syntax checkers::
+
+Customization of syntax checkers
+
+* Executables of syntax checkers::
+
+Syntax checker selection
+
+* Custom predicates::
+* Manual selection::
+* Multiple syntax checkers per buffer::
+
+Resource consumption
+
+* Syntax checking::
+* Checking for changes::
+
+Installation
+
+* Prerequisites::
+* Package installation::
+* Setup::
+
+Prerequisites
+
+* Emacs::
+* Operating system::
+* Syntax checking tools::
+
+Package installation
+
+* Manual::
+* Cask::
+
+Quickstart
+
+* Enable Flycheck::
+* Install some syntax checker tools::
+* Check syntax in a buffer::
+* Navigate and list errors::
+* Explore the menu::
+* Further reading::
+
+Usage
+
+* Enabling syntax checking: Enabling syntax checking<2>.
+* Checking buffers::
+* Selecting syntax checkers::
+* Configuring syntax checkers::
+* Error reporting::
+* Listing errors::
+* Copying (killing) errors: Copying killing errors.
+* Navigating and jumping to errors::
+* Mode line reporting::
+
+Configuring syntax checkers
+
+* Syntax checker executables::
+* Syntax checker options::
+* Syntax checker configuration files::
+
+Supported languages
+
+* Ada::
+* AsciiDoc::
+* C/C++::
+* CFEngine::
+* Chef::
+* Coffeescript::
+* Coq::
+* CSS::
+* D::
+* Elixir::
+* Emacs Lisp::
+* Erlang::
+* ERuby::
+* Fortran::
+* Go::
+* Haml::
+* Handlebars::
+* Haskell::
+* HTML::
+* Javascript::
+* JSON::
+* LESS::
+* Lua::
+* Make::
+* Perl::
+* PHP::
+* Puppet::
+* Python::
+* R::
+* Racket::
+* RPM SPEC::
+* ReStructuredText::
+* Ruby::
+* Rust::
+* Sass::
+* Scala::
+* Scss::
+* Shell script languages::
+* Slim::
+* TeX/LaTeX::
+* Texinfo::
+* Verilog::
+* XML::
+* YAML::
+
+Flycheck releases
+
+* Release announcements::
+* Changelog::
+
+Release announcements
+
+* Flycheck 0.22: Flycheck 0 22.
+* Flycheck 0.21: Flycheck 0 21.
+* Flycheck 0.20: Flycheck 0 20.
+* Flycheck 0.19: Flycheck 0 19.
+* Flycheck 0.18: Flycheck 0 18.
+* Flycheck 0.17: Flycheck 0 17.
+* Flycheck 0.16: Flycheck 0 16.
+* Flycheck 0.15: Flycheck 0 15.
+
+Flycheck 0.22
+
+* Breaking changes::
+* Setup: Setup<2>.
+* Language support::
+* Syntax checking improvements::
+* Error list improvements::
+* Generic syntax checkers::
+* Error IDs::
+* Unit test library for Flycheck::
+
+Language support
+
+* Ada: Ada<2>.
+* C/C++: C/C++<2>.
+* Emacs Lisp: Emacs Lisp<2>.
+* Haskell: Haskell<2>.
+* Fortran: Fortran<2>.
+* Python: Python<2>.
+* Rust: Rust<2>.
+* TeX/LaTeX: TeX/LaTeX<2>.
+
+Flycheck 0.21
+
+* Breaking changes: Breaking changes<2>.
+* Language support: Language support<2>.
+* Error list changes::
+* Error navigation and display::
+* Syntax checker definition and extension::
+* Obtaining the new release::
+
+Language support
+
+* C/C++: C/C++<3>.
+* D: D<2>.
+* Go: Go<2>.
+* HTML: HTML<2>.
+* Less::
+* Shell scripts::
+
+Flycheck 0.20
+
+* Breaking changes: Breaking changes<3>.
+* Language support: Language support<3>.
+* Error list improvements: Error list improvements<2>.
+* User interface improvements::
+* Miscellaneous new features::
+* Miscellaneous fixes::
+* Get it::
+
+Language support
+
+* C/C++: C/C++<4>.
+* Rust: Rust<3>.
+* Scala: Scala<2>.
+* Sass/SCSS::
+* Javascript: Javascript<2>.
+* Ruby: Ruby<2>.
+
+Flycheck 0.19
+
+* Breaking changes: Breaking changes<4>.
+* Languages::
+* New features::
+* Bug fixes::
+* Misc changes::
+* Get it: Get it<2>.
+
+Languages
+
+* C/C++: C/C++<5>.
+* Emacs Lisp: Emacs Lisp<3>.
+* Go: Go<3>.
+* Haskell: Haskell<3>.
+* Rust: Rust<4>.
+
+Flycheck 0.18
+
+* Breaking changes: Breaking changes<5>.
+* Syntax checkers: Syntax checkers<2>.
+* Bug fixes: Bug fixes<2>.
+* Get it: Get it<3>.
+
+Flycheck 0.17
+
+* Breaking changes: Breaking changes<6>.
+* New online manual::
+* Syntax checkers: Syntax checkers<3>.
+* Extending syntax checkers::
+* Other bug fixes and improvements::
+
+Flycheck 0.16
+
+* Breaking changes: Breaking changes<7>.
+* Syntax checkers: Syntax checkers<4>.
+* New features: New features<2>.
+* Improved error list::
+* Get it: Get it<4>.
+
+Syntax checkers
+
+* New languages and checkers::
+* Better Haskell support::
+* Miscellaneous new options::
+
+New features
+
+* Syntax checker executables: Syntax checker executables<2>.
+* Disable syntax checkers easily::
+
+Flycheck 0.15
+
+* Breaking changes: Breaking changes<8>.
+* New syntax checkers::
+* New error list::
+* C/C++ support::
+* New info level messages::
+* Custom error levels::
+* Other improvements::
+* Get it: Get it<5>.
+
+Changelog
+
+* master (in development): master in development.
+* 0.22 (Dec 23, 2014): 0 22 Dec 23 2014.
+* 0.21 (Oct 26, 2014): 0 21 Oct 26 2014.
+* 0.20 (Aug 12, 2014): 0 20 Aug 12 2014.
+* 0.19 (Jun 12, 2014): 0 19 Jun 12 2014.
+* 0.18 (Mar 24, 2014): 0 18 Mar 24 2014.
+* 0.17 (Feb 1, 2014): 0 17 Feb 1 2014.
+* 0.16 (Jan 11, 2014): 0 16 Jan 11 2014.
+* 0.15 (Nov 15, 2013): 0 15 Nov 15 2013.
+* 0.14.1 (Aug 16, 2013): 0 14 1 Aug 16 2013.
+* 0.14 (Aug 15, 2013): 0 14 Aug 15 2013.
+* 0.13 (Jun 28, 2013): 0 13 Jun 28 2013.
+* 0.12 (May 18, 2013): 0 12 May 18 2013.
+* 0.11 (May 01, 2013): 0 11 May 01 2013.
+* 0.10 (Apr 21, 2013): 0 10 Apr 21 2013.
+* 0.9 (Apr 13, 2013): 0 9 Apr 13 2013.
+* 0.8 (Apr 9, 2013): 0 8 Apr 9 2013.
+* 0.7.1 (Feb 23, 2013): 0 7 1 Feb 23 2013.
+* 0.7 (Feb 14, 2013): 0 7 Feb 14 2013.
+* 0.6.1 (Jan 30, 2013): 0 6 1 Jan 30 2013.
+* 0.6 (Jan 29, 2013): 0 6 Jan 29 2013.
+* 0.5 (Dec 28, 2012): 0 5 Dec 28 2012.
+* 0.4 (Nov 21, 2012): 0 4 Nov 21 2012.
+* 0.3 (Nov 21, 2012): 0 3 Nov 21 2012.
+* 0.2 (Oct 25, 2012): 0 2 Oct 25 2012.
+* 0.1 (Oct 11, 2012): 0 1 Oct 11 2012.
+
+Extending Flycheck
+
+* Defining new syntax checkers::
+* Advanced syntax checker definitions::
+* Other ways to extend Flycheck::
+
+Defining new syntax checkers
+
+* Finding the right error patterns::
+* Trying a new syntax checker::
+* Registering new syntax checkers::
+
+Advanced syntax checker definitions
+
+* Parsing structured output format::
+* Passing options and configuration files to syntax checkers::
+* Controlling the use of a syntax checker::
+* Applying more than one syntax checker::
+
+Other ways to extend Flycheck
+
+* Use arbitrary functions to check buffers::
+* Hooking into Flycheck::
+
+Hooking into Flycheck
+
+* Status changes::
+* Error processing::
+* Error display::
+
+Flycheck API
+
+* Syntax checks::
+* Generic syntax checkers: Generic syntax checkers<2>.
+* Command syntax checkers::
+* Errors::
+* Flycheck buffer status::
+* Utilities::
+
+Generic syntax checkers
+
+* Status callback protocol::
+* Predicates for syntax checkers::
+* Error filters::
+
+Command syntax checkers
+
+* Command arguments::
+* Options for command syntax checkers::
+* Configuration files for command syntax checkers::
+* Error parsing with regular expressions::
+* Error parsers::
+
+Errors
+
+* Error processing: Error processing<2>.
+* Error analysis::
+* Error levels: Error levels<2>.
+
+Flycheck ERT API
+
+* Compatibility::
+* Loading and initializing::
+* Utilities: Utilities<2>.
+* Defining test cases::
+
+Utilities
+
+* Creating temporary buffers::
+* Scoping resource access::
+* Accessing test resources::
+* Obtaining information about the environment::
+
+Defining test cases
+
+* Checking results of test cases::
+* Invoking syntax checkers in test cases::
+* Writing assertions::
+
+Contribution guidelines
+
+* Reporting issues::
+* Contributing code::
+
+Contributing code
+
+* General::
+* Code style::
+* Commit messages::
+* Contributing syntax checkers::
+* Pull requests::
+
+Testing Flycheck
+
+* Test suite layout::
+* Test running::
+* Virtual test environment::
+* Travis CI::
+
+Writing documentation
+
+* Build environment setup::
+* Building HTML and Texinfo::
+* Verifying references::
+
+Maintenance tasks
+
+* Rebuilding the Texinfo::
+* Rasterized logo files::
+
+
+\1f
+File: flycheck.info, Node: Introduction, Next: Flycheck versus Flymake, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+Flycheck is a modern on-the-fly syntax checking extension for GNU Emacs
+24, intended as replacement for the older Flymake extension which is
+part of GNU Emacs.
+
+It uses various syntax checking and linting tools to automatically check
+the contents of buffers while you type, and reports warnings and errors
+directly in the buffer, or in an optional error list.
+
+* Menu:
+
+* Features::
+* 3rd party extensions::
+
+\1f
+File: flycheck.info, Node: Features, Next: 3rd party extensions, Up: Introduction
+
+1.1 Features
+============
+
+ - 44 languages with 74 syntax checkers, see *note Supported
+ languages: 5.
+
+ - *note Fully automatic, fail-safe, on-the-fly syntax checking in
+ background: 6.
+
+ - *note Nice error indication and highlighting: 7.
+
+ - Optional error list popup
+
+ - *note Many customization options: 8.
+
+ - *note A comprehensive manual: 9.
+
+ - *note A simple API to define new syntax checkers: a.
+
+ - A “doesn’t get in your way” guarantee
+
+\1f
+File: flycheck.info, Node: 3rd party extensions, Prev: Features, Up: Introduction
+
+1.2 3rd party extensions
+========================
+
+The following extensions provide additional cool features for Flycheck:
+
+ - flycheck-cask(1) makes Flycheck use Cask packages in Cask(2)
+ projects.
+
+ - flycheck-color-mode-line(3) colors the mode line according to the
+ Flycheck status.
+
+ - flycheck-d-unittest(4) adds a Flycheck checker to run unit tests
+ for D programs on the fly.
+
+ - flycheck-google-cpplint(5) adds a syntax checker for Google’s C++
+ style checker.
+
+ - flycheck-haskell(6) improves Haskell support in Flycheck, by
+ configuring Flycheck according to the current Cabal project, and
+ using Cabal sandbox packages.
+
+ - flycheck-hdevtools(7) adds a Flycheck syntax checker for Haskell
+ based on hdevtools(8).
+
+ - flycheck-irony(9) adds a Flycheck syntax checker for C, C++ and
+ Objective C using Irony Mode(10).
+
+ - flycheck-ledger(11) adds a syntax checker for the Ledger(12)
+ accounting tool.
+
+ - flycheck-mercury(13) adds a Flycheck syntax checker for the Mercury
+ Language(14).
+
+ - flycheck-ocaml(15) adds a syntax checker for OCaml.
+
+ - flycheck-pos-tip(16) shows Flycheck error messages in a popup.
+
+ - flycheck-pyflakes(17) adds a Python syntax checker using Pyflakes.
+
+ - flycheck-rust(18) improves Rust support in Flycheck, by configuring
+ Flycheck according to Cargo settings and layouts.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-cask
+
+ (2) https://github.com/cask/cask
+
+ (3) https://github.com/flycheck/flycheck-color-mode-line
+
+ (4) https://github.com/flycheck/flycheck-d-unittest
+
+ (5) https://github.com/flycheck/flycheck-google-cpplint
+
+ (6) https://github.com/flycheck/flycheck-haskell
+
+ (7) https://github.com/flycheck/flycheck-hdevtools
+
+ (8) https://github.com/bitc/hdevtools/
+
+ (9) https://github.com/Sarcasm/flycheck-irony
+
+ (10) https://github.com/Sarcasm/irony-mode
+
+ (11) https://github.com/purcell/flycheck-ledger
+
+ (12) http://ledger-cli.org/
+
+ (13) https://github.com/flycheck/flycheck-mercury
+
+ (14) http://mercurylang.org/
+
+ (15) https://github.com/flycheck/flycheck-ocaml
+
+ (16) https://github.com/flycheck/flycheck-pos-tip
+
+ (17) https://github.com/Wilfred/flycheck-pyflakes
+
+ (18) https://github.com/flycheck/flycheck-rust
+
+\1f
+File: flycheck.info, Node: Flycheck versus Flymake, Next: Installation, Prev: Introduction, Up: Top
+
+2 Flycheck versus Flymake
+*************************
+
+This article provides information about Flycheck compares to the
+_built-in_ Flymake mode. It does not consider the improved Flymake
+fork(1) or third-party extensions such as flymake-easy(2) or
+flymake-cursor(3), but references them at appropriate places.
+
+We aim for this comparison to be neutral and complete, but do not
+provide any guarantee for completeness or correctness of the following
+information. Moreover, we consider Flycheck superior to Flymake in all
+aspects. As such, you may find this page biased towards Flycheck.
+Please excuse this as well as any factual mistake or lack of
+information. Please suggest improvements.
+
+* Menu:
+
+* Overview::
+* Detailed review::
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/illusori/emacs-flymake
+
+ (2) https://github.com/purcell/flymake-easy
+
+ (3) http://www.emacswiki.org/emacs/flymake-cursor.el
+
+\1f
+File: flycheck.info, Node: Overview, Next: Detailed review, Up: Flycheck versus Flymake
+
+2.1 Overview
+============
+
+This table intends to give an overview about the differences and
+similarities between Flycheck and the default install of Flymake. It is
+not a direct comparision to third-party extensions such as flymake-easy,
+flymake-cursor, or forks of Flymake. For a more comprehensive look
+compared to those extensions, please read the details in the main
+article and the footnotes.
+
+Please do _not_ only use this table to make your personal judgment, but
+also read the detailed review in the following sections, at least with
+regards to the features you are interested in.
+
+ Flycheck Flymake
+
+
+Supported Emacs versions 24+ 22+
+
+
+Built-in no (1) yes
+
+
+Automatically enabled in supported yes no
+languages
+
+Checks after save, newline, change save, newline, change
+
+
+Checks in background yes yes
+
+
+Automatic syntax checker selection By major mode and By file name patterns
+ custom predicates (2)
+
+
+Manual syntax checker selection yes *no*
+
+
+Multiple syntax checkers per buffer yes *no* (3)
+
+
+Supported languages > 30 ~5 (4)
+
+
+Checking remote files via Tramp no partly?
+
+
+Definition of new syntax checkers Via a single By a function
+ declarative macro definition and various
+ variables (5)
+
+
+Functions as syntax checkers yes *no*
+
+
+Customization of syntax checkers yes no
+
+
+Error levels Errors, warnings, Errors and warnings (6)
+ information, and custom
+ levels
+
+
+Error identifiers yes no
+
+
+Error parsing Regular expressions, or Regular expressions
+ custom error parsers
+ (e.g. XML, JSON, etc.)
+
+
+Multiline error messages yes *no* (7)
+
+
+Error highlighting in the buffer yes yes
+
+
+Fringe icons for errors yes yes
+
+
+Error messages display Via tooltip and echo In tooltip (8)
+ area, fully
+ customizable
+
+
+List all errors in the buffer yes *no*
+
+
+Resource consumption low high (9)
+
+
+Unit tests all syntax checkers, *none?*
+ and large parts of the
+ underlying processing
+
+
+ ---------- Footnotes ----------
+
+ (1) Flycheck is *unlikely to ever become part of Emacs*.
+
+ (2) The 3rd party library flymake-easy
+(https://github.com/purcell/flymake-easy) allows to use syntax checkers
+per major mode.
+
+ (3) Various 3rd party packages thus use custom shell scripts to call
+multiple syntax checking tools at once.
+
+ (4) However, the Flymake page
+(http://www.emacswiki.org/emacs/FlyMake) in the EmacsWiki provides
+recipes for many other languages, although of varying quality.
+Furthermore, the popular ELPA archive MELPA provides many packages which
+add more languages to Flymake. There is also a Flymake fork
+(https://github.com/illusori/emacs-flymake), which supports more
+languages out of the box, among other fixes and improvements.
+
+ (5) flymake-easy (https://github.com/purcell/flymake-easy) provides a
+function to define a new syntax checker, which sets all required
+variables at once.
+
+ (6) The Flymake fork (https://github.com/illusori/emacs-flymake) adds
+support for info messages.
+
+ (7) flymake-easy (https://github.com/purcell/flymake-easy)
+_overrides_ internal functions of Flymake to add support for multiline
+error messages.
+
+ (8) The 3rd party library flymake-cursor
+(http://www.emacswiki.org/emacs/flymake-cursor.el) shows Flymake error
+messages at point in the echo area.
+
+ (9) A third-party Flymake fork
+(https://github.com/illusori/emacs-flymake) mostly fixes the performance
+and resource consumption issues in Flymake.
+
+\1f
+File: flycheck.info, Node: Detailed review, Prev: Overview, Up: Flycheck versus Flymake
+
+2.2 Detailed review
+===================
+
+* Menu:
+
+* Relation to Emacs::
+* Enabling syntax checking::
+* Syntax checkers::
+* Functions as syntax checkers::
+* Customization of syntax checkers::
+* Syntax checker selection::
+* Error levels::
+* Error identifiers::
+* Error parsing::
+* Error message display::
+* Error list::
+* Resource consumption::
+* Unit tests::
+
+\1f
+File: flycheck.info, Node: Relation to Emacs, Next: Enabling syntax checking, Up: Detailed review
+
+2.2.1 Relation to Emacs
+-----------------------
+
+*Flymake* is part of GNU Emacs since GNU Emacs 22. As such,
+contributions to Flymake are subject to the FSF policies on GNU
+projects. Most notably, contributors are required to assign their
+copyright to the FSF by signing a contributor agreement.
+
+*Flycheck* is not part of GNU Emacs, and is *unlikely to ever be*.
+However, it is free software as well, and publicly developed on the
+well-known code hosting platform Github(1). Contributing to Flycheck
+does not require a copyright assignments.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck
+
+\1f
+File: flycheck.info, Node: Enabling syntax checking, Next: Syntax checkers, Prev: Relation to Emacs, Up: Detailed review
+
+2.2.2 Enabling syntax checking
+------------------------------
+
+*Flymake* is not enabled automatically for supported languages. It must
+be be enabled for each mode individually and *carefully*, because it
+does not deal well with unavailable syntax checker tools. In a GUI
+frame, it signals errors in GUI dialogs. In a TTY frame, it does not
+signal any error at all, but instead silently hangs. The same occurs,
+when a syntax checker tool becomes unavailable after Flymake Mode is
+enabled, for instance, because the underlying tool was uninstalled.
+
+The third-party library flymake-easy(1) provides an alternate way to
+enable Flymake Mode, which gracefully handles unavailable syntax
+checkers. It does not check whether the tool still exists before a
+syntax check, though, and thus does still exposes above behavior, when a
+tool becomes unavailable after the mode was enabled.
+
+*Flycheck* provides a global mode (see *note global-flycheck-mode: 15.),
+which enables syntax checking in every supported language. If a syntax
+checking tool is not available, Flycheck fails gracefully, does not
+enable syntax checking, and just indicates the failure in the mode line.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/purcell/flymake-easy
+
+\1f
+File: flycheck.info, Node: Syntax checkers, Next: Functions as syntax checkers, Prev: Enabling syntax checking, Up: Detailed review
+
+2.2.3 Syntax checkers
+---------------------
+
+* Menu:
+
+* Built-in syntax checkers::
+* Definition of new syntax checkers::
+
+\1f
+File: flycheck.info, Node: Built-in syntax checkers, Next: Definition of new syntax checkers, Up: Syntax checkers
+
+2.2.3.1 Built-in syntax checkers
+................................
+
+*Flymake* supports Java, Makefiles, Perl, PHP, TeX/LaTeX and XML.
+Notably, it does _not_ support Emacs Lisp. A third-party Flymake
+fork(1) supports more languages, though. Furthermore there are many
+recipes for other languages on the Flymake page(2) in the EmacsWiki, and
+many extension packages for other languages in the popular ELPA archive
+MELPA(3).
+
+*Flycheck* provides support for 44 languages (see *note Supported
+languages: 5.) with 74 syntax checkers, most of them contributed by the
+community. Notably, Flycheck does _not_ support Java and Makefiles.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/illusori/emacs-flymake
+
+ (2) http://www.emacswiki.org/emacs/FlyMake
+
+ (3) http://melpa.org/
+
+\1f
+File: flycheck.info, Node: Definition of new syntax checkers, Prev: Built-in syntax checkers, Up: Syntax checkers
+
+2.2.3.2 Definition of new syntax checkers
+.........................................
+
+*Flymake* does not provide a single function to define a new syntax
+checker. Instead, one has to define an “init” function, which returns
+the command, and add this function to ‘flymake-allowed-file-name-masks’.
+Additionally, one has to add the error patterns to
+‘flymake-err-line-patterns’. As such, defining a syntax checker is
+difficult for users who are not familiar with Emacs Lisp.
+flymake-easy(1) provides an easier way to define new syntax checkers,
+though.
+
+*Flycheck* provides a single function *note flycheck-define-checker: 19.
+to define a new syntax checker. This function uses a declarative
+syntax, which is easy to understand even for users unfamiliar with Emacs
+Lisp. In fact, many syntax checkers in Flycheck were contributed by the
+community(2).
+
+For example, the Perl checker in Flymake is defined as follows.
+
+ (defun flymake-perl-init ()
+ (let* ((temp-file (flymake-init-create-temp-buffer-copy
+ 'flymake-create-temp-inplace))
+ (local-file (file-relative-name
+ temp-file
+ (file-name-directory buffer-file-name))))
+ (list "perl" (list "-wc " local-file))))
+
+ (defcustom flymake-allowed-file-name-masks
+ '(;; …
+ ("\\.p[ml]\\'" flymake-perl-init)
+ ;; …
+ ))
+
+ (defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text
+ (append
+ '(;; …
+ ;; perl
+ ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)
+ ;; …
+ )
+ ;; …
+ ))
+
+Whereas Flycheck’s definition of the same checker looks like this:
+
+ (flycheck-define-checker perl
+ "A Perl syntax checker using the Perl interpreter.
+
+ See URL `http://www.perl.org'."
+ :command ("perl" "-w" "-c" source)
+ :error-patterns
+ ((error line-start (minimal-match (message))
+ " at " (file-name) " line " line
+ (or "." (and ", " (zero-or-more not-newline))) line-end))
+ :modes (perl-mode cperl-mode))
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/purcell/flymake-easy
+
+ (2)
+https://github.com/flycheck/flycheck/issues?labels=checker&milestone=&page=1&state=closed
+
+\1f
+File: flycheck.info, Node: Functions as syntax checkers, Next: Customization of syntax checkers, Prev: Syntax checkers, Up: Detailed review
+
+2.2.4 Functions as syntax checkers
+----------------------------------
+
+*Flymake* cannot check a buffer with a custom Emacs Lisp function.
+
+*Flycheck* provides the *note flycheck-define-generic-checker: 1b.
+function to define a syntax checker based on an arbitrary Emacs Lisp
+function. Flycheck supports synchronous as well as asynchronous
+functions, and provides simple callback-based protocol to communicate
+the status of syntax checks. This allows Flycheck to use persistent
+background processes for syntax checking. For instance,
+flycheck-ocaml(1) uses a running Merlin(2) process to check OCaml
+buffers, which is much easier and faster than invoking the OCaml
+compiler.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-ocaml
+
+ (2) https://github.com/the-lambda-church/merlin
+
+\1f
+File: flycheck.info, Node: Customization of syntax checkers, Next: Syntax checker selection, Prev: Functions as syntax checkers, Up: Detailed review
+
+2.2.5 Customization of syntax checkers
+--------------------------------------
+
+*Flymake* does not provide built-in means to customize syntax checkers.
+Instead, when defining a new syntax checker, the user needs to declare
+customization variables explicitly and explicitly check their value in
+the init function.
+
+*Flycheck* provides built-in functions to add customization variables to
+syntax checkers and splice the value of these variables into the
+argument list of a syntax checking tool. Many syntax checkers in
+Flycheck provide customization variables. For instance, you can
+customize the enabled warnings for C with *note flycheck-clang-warnings:
+1d. Flycheck also tries to automatically find configuration files for
+syntax checkers.
+
+* Menu:
+
+* Executables of syntax checkers::
+
+\1f
+File: flycheck.info, Node: Executables of syntax checkers, Up: Customization of syntax checkers
+
+2.2.5.1 Executables of syntax checkers
+......................................
+
+*Flymake* does not provide built-in means to change the executable of a
+syntax checker.
+
+*Flycheck* implicitly defines a variable to set the path of a syntax
+checker tool for each defined syntax checker, and provides the
+interactive command *note flycheck-set-checker-executable: 1f. to change
+the executable used in a buffer.
+
+\1f
+File: flycheck.info, Node: Syntax checker selection, Next: Error levels, Prev: Customization of syntax checkers, Up: Detailed review
+
+2.2.6 Syntax checker selection
+------------------------------
+
+*Flymake* selects syntax checkers based on file name patterns in
+‘flymake-allowed-file-name-masks’. Effectively, this duplicates the
+existing logic Emacs uses to choose the right major mode, but lacks its
+flexibility and power. For instance, Flymake cannot pick a syntax
+checker based on the shebang of a file.
+
+*Flycheck* uses the major mode to select a syntax checker. This reuses
+the existing sophisticated logic Emcas uses to choose and configure
+major modes. Flycheck can easily select a Python syntax checker for a
+Python script without file extension, but with proper shebang, simply
+because Emacs correctly chooses Python Mode for such a file.
+
+* Menu:
+
+* Custom predicates::
+* Manual selection::
+* Multiple syntax checkers per buffer::
+
+\1f
+File: flycheck.info, Node: Custom predicates, Next: Manual selection, Up: Syntax checker selection
+
+2.2.6.1 Custom predicates
+.........................
+
+*Flymake* does not allow for custom predicates to implement more complex
+logic for syntax checker selection. For instance, Flymake cannot use
+different syntax checkers for buffer depending on the value of a local
+variable.
+
+However, flymake-easy(1) patches Flymake to allow for custom syntax
+checkers per buffer. This does not happen automatically though. The
+user still needs to explicitly register a syntax checker in a major mode
+hook.
+
+*Flycheck* supports custom predicate function. It uses these to
+implement the shell script syntax checkers, for instance. Emacs uses a
+single major mode for various shell script types (e.g. Bash, Zsh, POSIX
+Shell, etc.), so Flycheck additionally uses a custom predicate to look
+at the value of the variable ‘sh-shell’ in Sh Mode buffers, to determine
+which shell to use for syntax checking.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/purcell/flymake-easy
+
+\1f
+File: flycheck.info, Node: Manual selection, Next: Multiple syntax checkers per buffer, Prev: Custom predicates, Up: Syntax checker selection
+
+2.2.6.2 Manual selection
+........................
+
+*Flymake* does not provide means to manually select a specific syntax
+checker, either interactively, or via local variables.
+
+*Flycheck* provides the local variable *note flycheck-checker: 23. to
+explicitly use a specific syntax checker for a buffer, and the command
+*note flycheck-select-checker: 24. to set this variable interactively.
+
+\1f
+File: flycheck.info, Node: Multiple syntax checkers per buffer, Prev: Manual selection, Up: Syntax checker selection
+
+2.2.6.3 Multiple syntax checkers per buffer
+...........................................
+
+*Flymake* can only use a single syntax checker per buffer. Effectively,
+the user can only use a single tool to check a buffer, for instance
+either PHP Mess Detector or PHP CheckStyle. Third party extensions to
+Flycheck work around this limitation by supplying custom shell scripts
+to call multiple syntax checking tools at once.
+
+*Flycheck* can easily apply multiple syntax checkers per buffer. For
+instance, Flycheck will check PHP files with PHP CLI first to find
+syntax errors, then with PHP MessDetector to additionally find idiomatic
+and semantic errors, and eventually with PHP CheckStyle to find
+stylistic errors. The user will see all errors reported by all of these
+utilities in the buffer.
+
+\1f
+File: flycheck.info, Node: Error levels, Next: Error identifiers, Prev: Syntax checker selection, Up: Detailed review
+
+2.2.7 Error levels
+------------------
+
+*Flymake* supports error and warning messages. The pattern of warning
+messages is _hard-coded_ in Emacs 24.3, and only became customizable in
+upcoming Emacs 24.4. The patterns to parse messages are kept separate
+from the actual syntax checker.
+
+The third-party Flymake fork(1) also supports info messages, and makes
+the pattern of warning messages customizable as well.
+
+*Flycheck* supports error, warning and info messages. The patterns to
+parse messages of different levels are part of the syntax checker
+definition, and thus specific to each syntax checker. Flycheck allows
+to define new error levels for use in custom syntax checkers with *note
+flycheck-define-error-level: 27.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/illusori/emacs-flymake
+
+\1f
+File: flycheck.info, Node: Error identifiers, Next: Error parsing, Prev: Error levels, Up: Detailed review
+
+2.2.8 Error identifiers
+-----------------------
+
+*Flymake* does not support unique identifiers for different kinds of
+errors.
+
+*Flycheck* supports unique identifiers for different kinds of errors, if
+a syntax checker provides these. The identifiers appear in the error
+list and in error display, and can be copied independently, for instance
+for use in an inline suppression comment, or to search the web for a
+particular kind of error.
+
+\1f
+File: flycheck.info, Node: Error parsing, Next: Error message display, Prev: Error identifiers, Up: Detailed review
+
+2.2.9 Error parsing
+-------------------
+
+*Flymake* parses the output of syntax checker tools with regular
+expressions only. As it splits the output by lines regardless of the
+regular expressions, it does not support error messages spanning
+multiple lines (such as returned by the Emacs Lisp byte compiler or by
+the Glasgow Haskell Compiler).
+
+flymake-easy(1) overrides internal Flymake functions to support
+multiline error messages.
+
+*Flycheck* can use regular expressions as well as custom parsing
+functions. By means of such functions, it can parse JSON, XML or other
+structured output formats. Flycheck includes some ready-to-use parsing
+functions for well-known output formats, such as Checkstyle XML. By
+parsing structured output format, Flycheck can handle arbitrarily
+complex error messages. Also, with regular expressions it uses the
+error patterns to split the output into tokens, and thus handles
+multiline messages just as well.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/purcell/flymake-easy
+
+\1f
+File: flycheck.info, Node: Error message display, Next: Error list, Prev: Error parsing, Up: Detailed review
+
+2.2.10 Error message display
+----------------------------
+
+In GUI frames, *Flymake* shows error messages in a tool tip, if the user
+hovers the mouse over an error location. It does not provide means to
+show error messages in a TTY frame, or with the keyboard only.
+
+The third-party library flymake-cursor(1) shows Flymake error messages
+at point in the echo area, by overriding internal Flymake functions.
+
+*Flycheck* shows error message tool tips as well, but also displays
+error messages in the echo area, if the point is at an error location.
+This feature is fully customizable via *note
+flycheck-display-errors-function: 2b.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.emacswiki.org/emacs/flymake-cursor.el
+
+\1f
+File: flycheck.info, Node: Error list, Next: Resource consumption, Prev: Error message display, Up: Detailed review
+
+2.2.11 Error list
+-----------------
+
+*Flymake* does not provide means to list all errors in the current
+buffer.
+
+*Flycheck* can list all errors in the current buffer in a separate
+window. This error list is automatically updated after each syntax
+check, and follows the focus.
+
+\1f
+File: flycheck.info, Node: Resource consumption, Next: Unit tests, Prev: Error list, Up: Detailed review
+
+2.2.12 Resource consumption
+---------------------------
+
+* Menu:
+
+* Syntax checking::
+* Checking for changes::
+
+\1f
+File: flycheck.info, Node: Syntax checking, Next: Checking for changes, Up: Resource consumption
+
+2.2.12.1 Syntax checking
+........................
+
+*Flymake* starts a syntax check after every change, regardless of
+whether the buffer is visible in a window or not. It does not limit the
+number of concurrent syntax checks. As such, Flymake starts many
+concurrent syntax checks, if many buffers are changed at the same time
+(e.g. after a VCS revert), which is known to freeze Emacs temporarily.
+
+The third-party Flymake fork(1) limits the number of concurrent syntax
+checks. It does not take care to check visible buffers first, though.
+
+*Flycheck* does not conduct syntax checks in buffers which are not
+visible in any window. Instead it defers syntax checks in such buffers
+until after the buffer is visible again. Hence, Flycheck does only
+start as many concurrent syntax checks as there are visible windows in
+the current Emacs session.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/illusori/emacs-flymake
+
+\1f
+File: flycheck.info, Node: Checking for changes, Prev: Syntax checking, Up: Resource consumption
+
+2.2.12.2 Checking for changes
+.............................
+
+*Flymake* uses a _separate_ timer (in ‘flymake-timer’) to periodically
+check for changes in each buffer. These timers run even if the
+corresponding buffers do not change. This is known to cause
+considerable CPU load with many open buffers.
+
+The third-party Flymake fork(1) uses a single global timer to check for
+changes. This greatly reduces the CPU load, but still consumes some
+marginal CPU, even if Emacs is idle and not in use currently.
+
+*Flycheck* does not use timers at all to check for changes. Instead it
+registers a handler for Emacs’ built-in ‘after-change-functions’ hook,
+which is run after changes to the buffer. This handler is only invoked
+when the buffer actually changed, and starts a one-shot timer to delay
+the syntax check until the editing stopped for a short time, to save
+resources and avoid checking half-finished editing.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/illusori/emacs-flymake
+
+\1f
+File: flycheck.info, Node: Unit tests, Prev: Resource consumption, Up: Detailed review
+
+2.2.13 Unit tests
+-----------------
+
+*Flymake* does not have a test suite at all.
+
+*Flycheck* has unit tests for all built-in syntax checkers, and for
+large parts of the underlying machinery and API. Contributed syntax
+checkers are required to have test cases. The tests are continuously
+run on Travis CI(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://travis-ci.org/flycheck/flycheck
+
+\1f
+File: flycheck.info, Node: Installation, Next: Quickstart, Prev: Flycheck versus Flymake, Up: Top
+
+3 Installation
+**************
+
+* Menu:
+
+* Prerequisites::
+* Package installation::
+* Setup::
+
+\1f
+File: flycheck.info, Node: Prerequisites, Next: Package installation, Up: Installation
+
+3.1 Prerequisites
+=================
+
+* Menu:
+
+* Emacs::
+* Operating system::
+* Syntax checking tools::
+
+\1f
+File: flycheck.info, Node: Emacs, Next: Operating system, Up: Prerequisites
+
+3.1.1 Emacs
+-----------
+
+Flycheck supports Emacs 24. It is tested with Emacs 24.3, and Emacs
+snapshot builds. It should work with GNU Emacs 24.1 and 24.2 as well,
+but it is not tested against these versions. If it does not work with
+these versions, please report an issue.
+
+ Warning: Flycheck also does not support GNU Emacs 23 and other
+ flavors of Emacs (e.g. XEmacs, Aquamacs, etc.). Don’t try, it
+ will *not* work.
+
+\1f
+File: flycheck.info, Node: Operating system, Next: Syntax checking tools, Prev: Emacs, Up: Prerequisites
+
+3.1.2 Operating system
+----------------------
+
+Flycheck supports any Unix-like operating system. It is extensively
+tested on Linux and OS X.
+
+ Warning: Flycheck tries to maintain compatibility with Windows, and
+ generally works well on Windows. Pull requests which fix or
+ improve Windows compatibility are *very* welcome.
+
+ However, Flycheck does *not* explicitly support Windows. If there
+ are any issues or problems with Windows, *you are on your own*. We
+ can neither answer questions about Windows support, nor can we fix
+ Windows-specific issues.
+
+\1f
+File: flycheck.info, Node: Syntax checking tools, Prev: Operating system, Up: Prerequisites
+
+3.1.3 Syntax checking tools
+---------------------------
+
+For almost all supported languages, Flycheck also needs additional
+*external* checker programs. See *note Supported languages: 39. for a
+list of supported languages and the corresponding checkers programs, and
+use *note flycheck-describe-checker: 3a. to get help about specific
+checkers inside Emacs.
+
+For instance, for Python you need either Flake8(1) or Pylint(2), which
+can be installed with ‘pip install flake8’ and ‘pip install pylint’
+respectively.
+
+Generally you can install the required external checker programs with
+the standard package manager of the corresponding programming languages
+(e.g. Rubygems for Ruby, NPM for Javascript). Many checker programs
+are also available in the package repositories of popular Linux
+distributions, or as Formula for the OS X package manager Homebrew(3).
+
+ ---------- Footnotes ----------
+
+ (1) https://flake8.readthedocs.org/
+
+ (2) http://www.pylint.org/
+
+ (3) http://brew.sh/
+
+\1f
+File: flycheck.info, Node: Package installation, Next: Setup, Prev: Prerequisites, Up: Installation
+
+3.2 Package installation
+========================
+
+* Menu:
+
+* Manual::
+* Cask::
+
+\1f
+File: flycheck.info, Node: Manual, Next: Cask, Up: Package installation
+
+3.2.1 Manual
+------------
+
+Install the ELPA package from MELPA(1) or MELPA Stable(2) using ‘M-x
+package-install RET flycheck’.
+
+ Warning: Flycheck is available from Marmalade(3) as well, but this
+ repository is *not recommended*. Due to frequent outages the
+ package is not guaranteed to be updated regularly.
+
+Neither of these repositories is included in GNU Emacs by default. You
+need to enable these repositories explicitly. For instance, to add the
+MELPA repository, add the following code to ‘init.el’:
+
+ (require 'package)
+ (add-to-list 'package-archives
+ '("melpa" . "http://melpa.org/packages/") t)
+ (package-initialize)
+
+ ---------- Footnotes ----------
+
+ (1) http://melpa.org
+
+ (2) http://stable.melpa.org
+
+ (3) https://marmalade-repo.org/
+
+\1f
+File: flycheck.info, Node: Cask, Prev: Manual, Up: Package installation
+
+3.2.2 Cask
+----------
+
+If you use *note Cask: 3e, just add the following to your ‘Cask’ file,
+and run ‘cask install’:
+
+ (source gnu)
+ (source melpa)
+
+ (depends-on "flycheck")
+
+\1f
+File: flycheck.info, Node: Setup, Prev: Package installation, Up: Installation
+
+3.3 Setup
+=========
+
+Use ‘M-x flycheck-mode’ to enable Flycheck in the current buffer, and
+‘M-x global-flycheck-mode’ to enable Flycheck for the entire current
+Emacs session.
+
+To permanently enable Flycheck, add the following to your ‘init.el’:
+
+ (add-hook 'after-init-hook #'global-flycheck-mode)
+
+\1f
+File: flycheck.info, Node: Quickstart, Next: Usage, Prev: Installation, Up: Top
+
+4 Quickstart
+************
+
+* Menu:
+
+* Enable Flycheck::
+* Install some syntax checker tools::
+* Check syntax in a buffer::
+* Navigate and list errors::
+* Explore the menu::
+* Further reading::
+
+\1f
+File: flycheck.info, Node: Enable Flycheck, Next: Install some syntax checker tools, Up: Quickstart
+
+4.1 Enable Flycheck
+===================
+
+Enable Flycheck globally by adding the following to your ‘init.el’, and
+restart Emacs:
+
+ (add-hook 'after-init-hook #'global-flycheck-mode)
+
+\1f
+File: flycheck.info, Node: Install some syntax checker tools, Next: Check syntax in a buffer, Prev: Enable Flycheck, Up: Quickstart
+
+4.2 Install some syntax checker tools
+=====================================
+
+Install some syntax checking tools for the programming or markup
+language you are using. Take a look at the *note list of supported
+languages: 5. to check what languages and tools are supported.
+
+For Python:
+
+ $ pip install --user pylint
+
+Or for Ruby:
+
+ $ gem install rubocop ruby-lint
+
+Or for Haskell:
+
+ $ brew install haskell-platform
+ $ cabal install hlint
+
+The *note language list: 5. also lists the available options for each
+syntax checker. Take a look at these to tune the syntax checkers to
+your needs, and read *note how to use these options: 45.
+
+\1f
+File: flycheck.info, Node: Check syntax in a buffer, Next: Navigate and list errors, Prev: Install some syntax checker tools, Up: Quickstart
+
+4.3 Check syntax in a buffer
+============================
+
+Run ‘M-x flycheck-verify-setup’ in a buffer to check whether Flycheck is
+correctly setup to check the buffer.
+
+If everything is fine Flycheck will now check syntax using these tools,
+when you visit a buffer in any of these languages. Syntax checking
+happens *automatically* when you save the buffer or make any changes.
+Flycheck highlights errors and warnings in the buffer, indicates them in
+the fringe, and reports their numbers in the mode line.
+
+You can also manually check a buffer with ‘C-c ! c’ (*note
+flycheck-buffer: 47.).
+
+\1f
+File: flycheck.info, Node: Navigate and list errors, Next: Explore the menu, Prev: Check syntax in a buffer, Up: Quickstart
+
+4.4 Navigate and list errors
+============================
+
+Use ‘C-c ! n’ (*note flycheck-next-error: 49.) and ‘C-c ! p’ (*note
+flycheck-previous-error: 4a.) to navigate between error locations. If
+you keep the point at an error location, Flycheck will show the error
+message in the echo area after a short delay. You can also hover error
+locations with the mouse and see the error message in a tooltip.
+
+To get an overview of all errors and warnings in the current buffer,
+type ‘C-c ! l’ (*note flycheck-list-errors: 4b.) to pop up a list of all
+errors in your current buffer. The error list updates automatically
+when you fix errors or introduce new ones, or when you switch to another
+buffer.
+
+\1f
+File: flycheck.info, Node: Explore the menu, Next: Further reading, Prev: Navigate and list errors, Up: Quickstart
+
+4.5 Explore the menu
+====================
+
+All Flycheck commands are available in the Emacs menu at _Tools ‣ Syntax
+Checking_. Explore this menu to see what features Flycheck has to
+offer.
+
+The menu can also be opened by clicking on the mode line lighter of
+Flycheck.
+
+\1f
+File: flycheck.info, Node: Further reading, Prev: Explore the menu, Up: Quickstart
+
+4.6 Further reading
+===================
+
+ - *note Usage: 4e. describes all commands and options in detail.
+
+ - *note Supported languages: 39. has a list of all supported
+ languages, and the corresponding syntax checker tools and their
+ options.
+
+\1f
+File: flycheck.info, Node: Usage, Next: Supported languages, Prev: Quickstart, Up: Top
+
+5 Usage
+*******
+
+This chapter explains in-depth how to use Flycheck for your daily work.
+
+ Note: All commands in this chapter are documented with their
+ standard key prefix ‘C-c !’. If you do not like this prefix, you
+ can change it with *note flycheck-keymap-prefix: 50, but take care
+ to remember your custom prefix while reading this chapter.
+
+ -- User Option: flycheck -keymap-prefix
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Prefix for key bindings of Flycheck.
+
+ Changing this variable outside Customize does not have any
+ effect. To change the keymap prefix from Lisp, you need to
+ explicitly re-define the prefix key:
+
+ (define-key flycheck-mode-map flycheck-keymap-prefix nil)
+ (setq flycheck-keymap-prefix (kbd "C-c f"))
+ (define-key flycheck-mode-map flycheck-keymap-prefix
+ flycheck-command-map)
+
+ Please note that Flycheck’s manual documents the default
+ keybindings. Changing this variable is at your own risk.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.19 of the flycheck package.
+
+* Menu:
+
+* Enabling syntax checking: Enabling syntax checking<2>.
+* Checking buffers::
+* Selecting syntax checkers::
+* Configuring syntax checkers::
+* Error reporting::
+* Listing errors::
+* Copying (killing) errors: Copying killing errors.
+* Navigating and jumping to errors::
+* Mode line reporting::
+
+\1f
+File: flycheck.info, Node: Enabling syntax checking<2>, Next: Checking buffers, Up: Usage
+
+5.1 Enabling syntax checking
+============================
+
+*note global-flycheck-mode: 15. enables syntax checking in all buffers
+whenever possible:
+
+ -- Command: M -x global-flycheck-mode
+
+ Toggle Flycheck Mode for *all* live buffers, and for new buffers.
+
+ With Global Flycheck Mode, Flycheck Mode is automatically enabled
+ in all buffers, for which a *note suitable syntax checker: 53.
+ exists and is enabled.
+
+ Note: Flycheck Mode will *not* be enabled in buffers for
+ remote or encrypted files. The former is flaky and might be
+ very slow, and the latter might leak confidential data to
+ temporary directories.
+
+ You can still explicitly enable Flycheck Mode in such buffers
+ with *note flycheck-mode: 54. This is *not* recommended
+ though.
+
+ -- User Option: global -flycheck-mode
+
+ Whether Flycheck Mode is enabled globally.
+
+To permanently enable syntax checking, either customize *note
+global-flycheck-mode: 55. with ‘M-x customize-variable RET
+global-flycheck-mode’ and select _Save for Future Sessions_, or add the
+following code to your init file:
+
+ (add-hook 'after-init-hook #'global-flycheck-mode)
+
+You can also explicitly enable syntax checking just for the current
+buffer with the local minor mode *note flycheck-mode: 54.:
+
+ -- Command: M -x flycheck-mode
+
+ Toggle Flycheck Mode for the current buffer.
+
+ -- User Option: flycheck -mode
+
+ Whether Flycheck Mode is enabled in the current buffer.
+
+\1f
+File: flycheck.info, Node: Checking buffers, Next: Selecting syntax checkers, Prev: Enabling syntax checking<2>, Up: Usage
+
+5.2 Checking buffers
+====================
+
+When *note flycheck-mode: 54. is enabled, Flycheck automatically checks
+a buffer whenever
+
+ - the buffer is saved (e.g. ‘C-x C-s’),
+
+ - new lines are inserted,
+
+ - or a short time (see *note flycheck-idle-change-delay: 58.) after
+ the last change to the buffer.
+
+You can customize this behaviour with the option *note
+flycheck-check-syntax-automatically: 59.:
+
+ -- User Option: flycheck -check-syntax-automatically
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘symbolp’.
+
+ When Flycheck should check syntax automatically.
+
+ This variable is a list of events that may trigger syntax checks.
+ The following events are known:
+
+ ‘`save'’
+ Check syntax immediately after the buffer was saved.
+
+ ‘`idle-change'’
+ Check syntax a short time (see *note ‘flycheck-idle-change-delay’: 58.)
+ after the last change to the buffer.
+
+ ‘`new-line'’
+ Check syntax immediately after a new line was inserted into
+ the buffer.
+
+ ‘`mode-enabled'’
+ Check syntax immediately when *note ‘flycheck-mode’: 54. is enabled.
+
+ Flycheck performs a syntax checks only on events, which are
+ contained in this list. For instance, if the value of this
+ variable is ‘(mode-enabled save)’, Flycheck will only check if
+ the mode is enabled or the buffer was saved, but never after
+ changes to the buffer contents.
+
+ If nil, never check syntax automatically. In this case, use
+ *note ‘flycheck-buffer’: 47. to start a syntax check manually.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.12 of the flycheck package.
+
+ -- User Option: flycheck -idle-change-delay
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘numberp’.
+
+ How many seconds to wait before checking syntax automatically.
+
+ After the buffer was changed, Flycheck will wait as many seconds
+ as the value of this variable before starting a syntax check. If
+ the buffer is modified during this time, Flycheck will wait
+ again.
+
+ This variable has no effect, if ‘`idle-change'’ is not contained in
+ *note ‘flycheck-check-syntax-automatically’: 59.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.13 of the flycheck package.
+
+You can also always check the current buffer manually:
+
+ -- Command: C -c ! c
+ -- Command: M -x flycheck-buffer
+
+ Check syntax in the current buffer.
+
+ The syntax checker used for the syntax check is cached in
+ ‘`flycheck-last-checker'’ and re-used for the next check, if
+ possible.
+
+ Note: If syntax checking does not work, check your setup:
+
+ -- Command: C -c ! v
+ -- Command: M -x flycheck-verify-setup
+
+ Check whether Flycheck can be used in this buffer.
+
+ Display a new buffer listing all syntax checkers that could be
+ applicable in the current buffer. For each syntax checkers,
+ possible problems are shown.
+
+During syntax checks, Flycheck generates some temporary files for syntax
+checker input and output. Use *note flycheck-temp-prefix: 5b. to change
+the prefix of these temporary files:
+
+ -- User Option: flycheck -temp-prefix
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Prefix for temporary files created by Flycheck.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.19 of the flycheck package.
+
+\1f
+File: flycheck.info, Node: Selecting syntax checkers, Next: Configuring syntax checkers, Prev: Checking buffers, Up: Usage
+
+5.3 Selecting syntax checkers
+=============================
+
+Whenever it checks a buffer, Flycheck selects a *note suitable syntax
+checker: 53. from *note flycheck-checkers: 5e.:
+
+ -- User Option: flycheck -checkers
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Syntax checkers available for automatic selection.
+
+ A list of Flycheck syntax checkers to choose from when syntax
+ checking a buffer. Flycheck will automatically select a suitable
+ syntax checker from this list, unless *note ‘flycheck-checker’: 23. is set,
+ either directly or with *note ‘flycheck-select-checker’: 24.
+
+ You should not need to change this variable normally. In order
+ to disable syntax checkers, please use
+ *note ‘flycheck-disabled-checkers’: 5f. This variable is intended for 3rd
+ party extensions to tell Flycheck about new syntax checkers.
+
+ Syntax checkers in this list must be defined with
+ *note ‘flycheck-define-checker’: 19.
+
+ An item in this list is a *note registered syntax checker: 60.
+
+To disable a *note registered syntax checker: 60, add it to *note
+flycheck-disabled-checkers: 5f.:
+
+ -- User Option: flycheck -disabled-checkers
+
+ Variable properties: Automatically becomes buffer-local when
+ set. This variable is safe as a file local variable if its
+ value satisfies the predicate *note flycheck-symbol-list-p:
+ 61.
+
+ Syntax checkers excluded from automatic selection.
+
+ A list of Flycheck syntax checkers to exclude from automatic
+ selection. Flycheck will never automatically select a syntax
+ checker in this list, regardless of the value of
+ *note ‘flycheck-checkers’: 5e.
+
+ However, syntax checkers in this list are still available for
+ manual selection with *note ‘flycheck-select-checker’: 24.
+
+ Use this variable to disable syntax checkers, instead of removing
+ the syntax checkers from *note ‘flycheck-checkers’: 5e. You may also use
+ this option as a file or directory local variable to disable
+ specific checkers in individual files and directories
+ respectively.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.16 of the flycheck package.
+
+A syntax checker in *note flycheck-checkers: 5e. that is *not* in *note
+flycheck-disabled-checkers: 5f. is an *note enabled syntax checker: 62.
+
+Flycheck starts to check the current buffer with the first enabled and
+suitable syntax checker from *note flycheck-checkers: 5e. See
+‘Languages and syntax checkers’ for a list of all available syntax
+checkers. If there is no enabled and suitable checker for the current,
+Flycheck does not check this buffer. It does *not* signal an error.
+Instead a special mode line indicator informs about this state. See
+*note Mode line reporting: 63. for details.
+
+You can also force Flycheck to use a specific syntax checker for the
+current buffer with *note flycheck-select-checker: 24.:
+
+ -- Command: C -c ! s
+ -- Command: M -x flycheck-select-checker
+
+ Select the syntax checker for the current buffer by setting *note
+ flycheck-checker: 23, and run a syntax check with the new syntax
+ checker.
+
+ Prompt for a syntax checker and set *note flycheck-checker: 23.
+
+ Any *note syntax checker: 64. can be selected with this command,
+ regardless of whether it is enabled.
+
+ -- Command: C -u C-c ! s
+
+ -- Command: C -u M-x flycheck-select-checker
+
+ Deselect the current syntax checker, and run a syntax check with an
+ automatically selected syntax checker.
+
+ Set *note flycheck-checker: 23. to ‘nil’.
+
+ -- Function: flycheck -select-checker checker
+
+ Select CHECKER for the current buffer.
+
+ CHECKER is a syntax checker symbol (see *note ‘flycheck-checkers’: 5e.) or
+ nil. In the former case, use CHECKER for the current buffer,
+ otherwise deselect the current syntax checker (if any) and use
+ automatic checker selection via *note ‘flycheck-checkers’: 5e.
+
+ If called interactively prompt for CHECKER. With prefix arg
+ deselect the current syntax checker and enable automatic
+ selection again.
+
+ Set *note ‘flycheck-checker’: 23. to CHECKER and automatically start a new
+ syntax check if the syntax checker changed.
+
+ CHECKER will be used, even if it is not contained in
+ *note ‘flycheck-checkers’: 5e, or if it is disabled via
+ *note ‘flycheck-disabled-checkers’: 5f.
+
+You can change the completion system used by *note
+flycheck-select-checker: 24.:
+
+ -- User Option: flycheck -completion-system
+
+ The completion system to use.
+
+ ‘`ido'’
+ Use IDO.
+
+ IDO is a built-in alternative completion system, without
+ good flex matching and a powerful UI. You may want to
+ install flx-ido (see URL ‘https://github.com/lewang/flx’(1)) to
+ improve the flex matching in IDO.
+
+ ‘`grizzl'’
+ Use Grizzl.
+
+ Grizzl is an alternative completion system with powerful
+ flex matching, but a very limited UI. See URL
+ ‘https://github.com/d11wtq/grizzl’(2).
+
+ nil
+ Use the standard unfancy ‘`completing-read'’.
+
+ ‘`completing-read'’ has a very simple and primitive UI, and
+ does not offer flex matching. This is the default setting,
+ though, to match Emacs’ defaults. With this system, you may
+ want enable option ‘`icomplete-mode'’ to improve the display
+ of completion candidates at least.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.17 of the flycheck package.
+
+*note flycheck-select-checker: 24. sets the local variable *note
+flycheck-checker: 23. for the current buffer. You can also set this
+variable explicitly, via *note (emacs)File Variables:: or *note
+(emacs)Directory Variables::, to enforce a specific syntax checker per
+file or per directory:
+
+ -- Variable: flycheck -checker
+
+ Variable properties: Automatically becomes buffer-local when
+ set. This variable is safe as a file local variable if its
+ value satisfies the predicate *note
+ flycheck-registered-checker-p: 66.
+
+ Syntax checker to use for the current buffer.
+
+ If unset or nil, automatically select a suitable syntax checker
+ from *note ‘flycheck-checkers’: 5e. on every syntax check.
+
+ If set to a syntax checker only use this syntax checker and never
+ select one from *note ‘flycheck-checkers’: 5e. automatically. The syntax
+ checker is used regardless of whether it is contained in
+ *note ‘flycheck-checkers’: 5e. or *note ‘flycheck-disabled-checkers’: 5f. If the
+ syntax checker is unusable in the current buffer an error is
+ signaled.
+
+ A syntax checker assigned to this variable must be defined with
+ *note ‘flycheck-define-checker’: 19.
+
+ Use the command *note ‘flycheck-select-checker’: 24. to select a syntax
+ checker for the current buffer, or set this variable as file
+ local variable to always use a specific syntax checker for a
+ file. See Info Node *note (emacs)Specifying File Variables:: for more
+ information about file variables.
+
+Like everything else in Emacs, a syntax checker has online
+documentation, which you can via with *note flycheck-describe-checker:
+3a.:
+
+ -- Command: C -c ! ?
+ -- Command: M -x flycheck-describe-checker
+
+ Show the documentation of a syntax checker.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/lewang/flx
+
+ (2) https://github.com/d11wtq/grizzl
+
+\1f
+File: flycheck.info, Node: Configuring syntax checkers, Next: Error reporting, Prev: Selecting syntax checkers, Up: Usage
+
+5.4 Configuring syntax checkers
+===============================
+
+* Menu:
+
+* Syntax checker executables::
+* Syntax checker options::
+* Syntax checker configuration files::
+
+\1f
+File: flycheck.info, Node: Syntax checker executables, Next: Syntax checker options, Up: Configuring syntax checkers
+
+5.4.1 Syntax checker executables
+--------------------------------
+
+For each syntax checker, there is a buffer-local, customizable variable
+‘flycheck-CHECKER-executable’, where CHECKER is the name of the syntax
+checker.
+
+The value of this variable is either nil, or a string. In the former
+case, Flycheck uses the default executable from the syntax checker
+definition when executing the syntax checker. In the latter case, it
+uses the value of the variable as executable.
+
+Use these variables to override the executable from the definition per
+buffer. For instance, you could use a different Emacs version with the
+‘emacs-lisp’ or ‘emacs-lisp-checkdoc’.
+
+You can either set these variables directly in your ‘init.el’, or change
+them interactively:
+
+ -- Command: C -c ! e
+ -- Command: M -x flycheck-set-checker-executable
+
+ Set the executable of a syntax checker in the current buffer.
+
+ Prompt for a syntax checker and an executable file, and set the
+ executable variable of the syntax checker.
+
+ -- Command: C -u C-c ! e
+
+ -- Command: C -u M-x flycheck-set-checker-executable
+
+ Reset the executable of a syntax checker in the current buffer.
+
+ Prompt for a syntax checker and reset its executable to the
+ default.
+
+\1f
+File: flycheck.info, Node: Syntax checker options, Next: Syntax checker configuration files, Prev: Syntax checker executables, Up: Configuring syntax checkers
+
+5.4.2 Syntax checker options
+----------------------------
+
+Some syntax checkers can be configured via options. See *note Supported
+languages: 39. for a complete list of options for each syntax checkers.
+
+All options are customizable via ‘M-x customize-group RET
+flycheck-options’, and automatically buffer-local to easily set them in
+hooks.
+
+Options are mainly intended to be used by *note extensions: b, and via
+File or Directory Local variables. See *note (emacs)File Variables::
+and *note (emacs)Directory Variables:: respectively.
+
+\1f
+File: flycheck.info, Node: Syntax checker configuration files, Prev: Syntax checker options, Up: Configuring syntax checkers
+
+5.4.3 Syntax checker configuration files
+----------------------------------------
+
+Some syntax checkers also read configuration files, denoted by
+associated _configuration file variables_. See *note Supported
+languages: 39. of these variables.
+
+All options are customizable via ‘M-x customize-group RET
+flycheck-config-files’, and automatically buffer-local to easily set
+them in hooks. You may also set them via File or Directory Local
+variables. See *note (emacs)File Variables:: and *note (emacs)Directory
+Variables:: respectively.
+
+When set to a string, Flycheck tries to locate the configuration file
+using the functions in *note flycheck-locate-config-file-functions: 6d.
+and passes the name of the file to the syntax checker:
+
+ -- User Option: flycheck -locate-config-file-functions
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to locate syntax checker configuration files.
+
+ Each function in this hook must accept two arguments: The value
+ of the configuration file variable, and the syntax checker
+ symbol. It must return either a string with an absolute path to
+ the configuration file, or nil, if it cannot locate the
+ configuration file.
+
+ The functions in this hook are called in order of appearance, until a
+ function returns non-nil. The configuration file returned by that
+ function is then given to the syntax checker if it exists.
+
+ This variable is an abnormal hook. See Info
+ node *note (elisp)Hooks::.
+
+With the default value of this variable, configuration files are located
+by the following algorithm:
+
+ 1. If the configuration file variable contains a path a directory
+ separator, expand the path against the buffer’s default directory
+ and use the resulting path as configuration file.
+
+ 2. If the buffer has a file name, search the buffer’s directory and
+ any ancestors thereof for the configuration file.
+
+ 3. Eventually attempt to locate the configuration file in the user’s
+ home directory.
+
+If any of these steps succeeds, the subsequent steps are not executed.
+
+\1f
+File: flycheck.info, Node: Error reporting, Next: Listing errors, Prev: Configuring syntax checkers, Up: Usage
+
+5.5 Error reporting
+===================
+
+When a syntax check in the current buffer has finished, Flycheck
+highlights the locations of errors and warnings in the buffer according
+to *note flycheck-highlighting-mode: 6f, and indicates these locations
+in the fringe according to *note flycheck-indication-mode: 70.
+Additionally it shows the number of errors and warnings in the mode
+line.
+
+ Note: To avoid flooding the buffer with excessive errors, Flycheck
+ discards errors and warnings and *disables* the corresponding
+ syntax checker subsequently, if the total number of reported errors
+ of any level exceeds *note flycheck-checker-error-threshold: 71.:
+
+ -- User Option: flycheck -checker-error-threshold
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Maximum errors allowed per syntax checker.
+
+ The value of this variable is either an integer denoting the
+ maximum number of errors per syntax checker and buffer, or nil to
+ not limit the errors reported from a syntax checker.
+
+ If this variable is a number and a syntax checker reports more
+ errors than the value of this variable, its errors are not
+ discarded, and not highlighted in the buffer or available in the
+ error list. The affected syntax checker is also disabled for
+ future syntax checks of the buffer.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -highlighting-mode
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘symbolp’.
+
+ The highlighting mode for Flycheck errors and warnings.
+
+ The highlighting mode controls how Flycheck highlights errors in
+ buffers. The following modes are known:
+
+ ‘`columns'’
+ Highlight the error column. If the error does not have a column,
+ highlight the whole line.
+
+ ‘`symbols'’
+ Highlight the symbol at the error column, if there is any,
+ otherwise behave like ‘`columns'’. This is the default.
+
+ ‘`sexps'’
+ Highlight the expression at the error column, if there is
+ any, otherwise behave like ‘`columns'’. Note that this mode
+ can be *very* slow in some major modes.
+
+ ‘`lines'’
+ Highlight the whole line.
+
+ nil
+ Do not highlight errors at all. However, errors will still
+ be reported in the mode line and in error message popups,
+ and indicated according to *note ‘flycheck-indication-mode’: 70.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.14 of the flycheck package.
+
+ -- Face: flycheck -error
+ -- Face: flycheck -warning
+ -- Face: flycheck -info
+
+ The faces to use to highlight errors, warnings and info messages
+ respectively.
+
+ Note: The default faces provided by GNU Emacs are ill-suited
+ to highlight errors because these are relatively pale and do
+ not specify a background color or underline. Hence highlights
+ are easy to overlook and even *invisible* for white space.
+
+ For best error highlighting customize these faces, or choose a
+ color theme that has reasonable Flycheck faces. The popular
+ Solarized(1) and Zenburn(2) themes are known to have good Flycheck
+ faces.
+
+ -- User Option: flycheck -indication-mode
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘symbolp’.
+
+ The indication mode for Flycheck errors and warnings.
+
+ This variable controls how Flycheck indicates errors in buffers.
+ May either be ‘`left-fringe'’, ‘`right-fringe'’, or nil.
+
+ If set to ‘`left-fringe'’ or ‘`right-fringe'’, indicate errors and
+ warnings via icons in the left and right fringe respectively.
+
+ If set to nil, do not indicate errors and warnings, but just
+ highlight them according to *note ‘flycheck-highlighting-mode’: 6f.
+
+ -- Face: flycheck -fringe-error
+ -- Face: flycheck -fringe-warning
+ -- Face: flycheck -fringe-info
+
+ The faces of fringe indicators for errors, warnings and info
+ messages respectively.
+
+If you hover a highlighted error with the mouse, a tooltip with the
+top-most error message is shown. Alternatively, you can move the point
+onto an error location to see the error message. Flycheck displays
+errors at point after a short delay:
+
+ -- User Option: flycheck -display-errors-delay
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘numberp’.
+
+ Delay in seconds before displaying errors at point.
+
+ Use floating point numbers to express fractions of seconds.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.15 of the flycheck package.
+
+By default, Flycheck shows the messages and IDs of the errors at point
+in the minibuffer, but this behaviour is entirely customizable via the
+*note flycheck-display-errors-function: 2b. option:
+
+ -- User Option: flycheck -display-errors-function
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Function to display error messages.
+
+ If set to a function, call the function with the list of errors
+ to display as single argument. Each error is an instance of the
+ ‘`flycheck-error'’ struct.
+
+ If set to nil, do not display errors at all.
+
+ Flycheck provides two built-in functions for this option:
+
+ -- Function: flycheck -display-error-messages errors
+
+ Display the messages of ERRORS.
+
+ Concatenate all non-nil messages of ERRORS separated by empty
+ lines, and display them with ‘`display-message-or-buffer'’, which
+ shows the messages either in the echo area or in a separate
+ buffer, depending on the number of lines. See Info
+ node *note (elisp)Displaying Messages:: for more information.
+
+ In the latter case, show messages in
+ ‘`flycheck-error-message-buffer'’.
+
+ -- Function: flycheck -display-error-messages-unless-error-list
+ errors
+
+ Show messages of ERRORS unless the error list is visible.
+
+ Like *note ‘flycheck-display-error-messages’: 79, but only if the error
+ list (see *note ‘flycheck-list-errors’: 4b.) is not visible in any window in
+ the current frame.
+
+ See also
+..................
+
+ *note Listing errors: 7b.
+
+ See also
+.............
+
+ The flycheck-pos-tip(3) extension provides a display function to
+ show errors at point in a graphical popup.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.13 of the flycheck package.
+
+You can clear all errors in the current buffer with *note
+flycheck-clear: 7c.:
+
+ -- Command: C -c ! C
+ -- Command: M -x flycheck-clear
+
+ Clear all Flycheck errors and warnings in the current buffer.
+
+ You should not normally need this command, because Flycheck checks
+ the buffer periodically anyway.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/bbatsov/solarized-emacs
+
+ (2) https://github.com/bbatsov/zenburn-emacs
+
+ (3) https://github.com/flycheck/flycheck-pos-tip
+
+\1f
+File: flycheck.info, Node: Listing errors, Next: Copying killing errors, Prev: Error reporting, Up: Usage
+
+5.6 Listing errors
+==================
+
+To view all errors in the current buffer, pop up the error list with
+*note flycheck-list-errors: 4b.:
+
+ -- Command: C -c ! l
+ -- Command: M -x flycheck-list-errors
+
+ List all errors in the current buffer in a separate buffer.
+
+ The error list automatically refreshes after a syntax check, and
+ follows the current buffer and window, that is, if you switch to
+ another buffer or window, the error list is updated to show the
+ errors of the new buffer or window.
+
+Every time the error list refreshes, *note
+flycheck-error-list-after-refresh-hook: 7e. is run:
+
+ -- Hook: flycheck -error-list-after-refresh-hook
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to run after the error list was refreshed.
+
+ This hook is run whenever the error list is refreshed.
+
+ This variable is a normal hook. See Info node *note (elisp)Hooks::.
+
+ This hook was introduced, or its default value was changed, in
+ version 0.21 of the flycheck package.
+
+When you move the point in the current buffer while the error list is
+visible, all errors on the current line are highlighted in the error
+list with *note flycheck-error-list-highlight: 7f.:
+
+ -- Face: flycheck -error-list-highlight
+
+ Flycheck face to highlight errors in the error list.
+
+ This face was introduced, or its default value was changed, in
+ version 0.15 of the flycheck package.
+
+You can customize the appearance of the line and column numbers and of
+the syntax checker name:
+
+ -- Face: flycheck -error-list-line-number
+
+ Face for line numbers in the error list.
+
+ This face was introduced, or its default value was changed, in
+ version 0.16 of the flycheck package.
+
+ -- Face: flycheck -error-list-column-number
+
+ Face for line numbers in the error list.
+
+ This face was introduced, or its default value was changed, in
+ version 0.16 of the flycheck package.
+
+ -- Face: flycheck -error-list-checker-name
+
+ Face for the syntax checker name in the error list.
+
+ This face was introduced, or its default value was changed, in
+ version 0.21 of the flycheck package.
+
+\1f
+File: flycheck.info, Node: Copying killing errors, Next: Navigating and jumping to errors, Prev: Listing errors, Up: Usage
+
+5.7 Copying (killing) errors
+============================
+
+Frequently, it’s convenient to not only see the error messages, but to
+also copy them into the kill ring:
+
+ -- Command: C -c ! C-w
+ -- Command: M -x flycheck-copy-errors-as-kill
+
+ Copy all Flycheck error messages at the current point into kill
+ ring.
+
+ Each error message is killed separately, so you can use ‘M-y’ to
+ cycle among the killed messages after yanking the first one with
+ ‘C-y’.
+
+ -- Command: C -u C-c ! C-w
+
+ -- Command: C -u M-x flycheck-copy-errors-as-kill
+
+ Copy all Flycheck error messages *and their IDs* at the current
+ point into kill ring.
+
+ -- Command: M -0 C-c ! C-w
+
+ -- Command: M -0 M-x flycheck-copy-errors-as-kill
+
+ Copy all Flycheck error *IDs* at the current point into kill ring.
+ This command is particularly handy to copy an ID in order to add an
+ inline suppression comment.
+
+\1f
+File: flycheck.info, Node: Navigating and jumping to errors, Next: Mode line reporting, Prev: Copying killing errors, Up: Usage
+
+5.8 Navigating and jumping to errors
+====================================
+
+By default, Flycheck integrates into standard error navigation commands
+of Emacs: ‘M-g n’ (‘next-error’) and ‘M-g p’ (‘previous-error’) will
+navigate between Flycheck warnings and errors in the current buffer.
+See *note (emacs)Compilation Mode:: for more information about these
+commands.
+
+ Note: *Visible* compilation buffers (e.g. from ‘M-x compile’, ‘M-x
+ grep’, ‘M-x occur’, etc.) take precedence over Flycheck’s error
+ navigation.
+
+If you find this integration annoying and would rather keep ‘M-g n’
+confined to compilation buffers, you may disable it by setting *note
+flycheck-standard-error-navigation: 88. to nil and re-enabling *note
+flycheck-mode: 54. afterwards:
+
+ -- User Option: flycheck -standard-error-navigation
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate ‘booleanp’.
+
+ Whether to support error navigation with ‘`next-error'’.
+
+ If non-nil, enable navigation of Flycheck errors with
+ ‘`next-error'’, ‘`previous-error'’ and ‘`first-error'’. Otherwise,
+ these functions just navigate errors from compilation modes.
+
+ Flycheck error navigation with *note ‘flycheck-next-error’: 49,
+ *note ‘flycheck-previous-error’: 4a. and *note ‘flycheck-first-error’: 89. is always
+ enabled, regardless of the value of this variable.
+
+ Note that this setting only takes effect when *note ‘flycheck-mode’: 54. is
+ enabled. Changing it will not affect buffers which already have
+ *note ‘flycheck-mode’: 54. enabled.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.15 of the flycheck package.
+
+Since compilation buffers take precedence, Flycheck provides an
+independent set of navigation commands which always navigate Flycheck
+errors regardless of compilation buffers or *note
+flycheck-standard-error-navigation: 88.:
+
+ -- Command: C -c ! n
+ -- Command: M -x flycheck-next-error
+
+ Jump to the next Flycheck error.
+
+ With prefix argument, jump forwards by as many errors as specified
+ by the prefix argument, e.g. ‘M-3 C-c ! n’ will move to the 3rd
+ error from the current point.
+
+ -- Command: C -c ! p
+ -- Command: M -x flycheck-previous-error
+
+ Jump to the previous Flycheck error.
+
+ With prefix argument, jump backwards by as many errors as specified
+ by the prefix argument, e.g. ‘M-3 C-c ! p’ will move to the 3rd
+ previous error from the current point.
+
+ -- Command: M -x flycheck-first-error
+
+ Jump to the first Flycheck error.
+
+ With prefix argument, jump forwards to by as many errors as
+ specified by the prefix argument, e.g. ‘M-3 M-x
+ flycheck-first-error’ moves to the 3rd error from the beginning of
+ the buffer.
+
+If *note flycheck-standard-error-navigation: 88. is ‘nil’, these
+commands are the only way to navigate Flycheck errors.
+
+By default, Flycheck’s error navigation considers all error levels. You
+can specify a threshold for navigation with *note
+flycheck-navigation-minimum-level: 8a.:
+
+ -- User Option: flycheck -navigation-minimum-level
+
+ Variable properties: This variable is safe as a file local
+ variable if its value satisfies the predicate *note
+ flycheck-error-level-p: 8b.
+
+ The minimum level of errors to navigate.
+
+ If set to an error level, only navigate errors whose error level
+ is at least as severe as this one. If nil, navigate all errors.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.21 of the flycheck package.
+
+\1f
+File: flycheck.info, Node: Mode line reporting, Prev: Navigating and jumping to errors, Up: Usage
+
+5.9 Mode line reporting
+=======================
+
+Flycheck always indicates its state in the mode line:
+
+‘FlyC’
+
+ There are no errors in the current buffer.
+
+‘FlyC*’
+
+ A syntax check is being performed currently.
+
+‘FlyC:3/4’
+
+ There are three errors and four warnings in the current buffer.
+
+‘FlyC-’
+
+ Automatic syntax checker selection did not find a suitable syntax
+ checker. See *note Selecting syntax checkers: 5d. for more
+ information.
+
+‘FlyC!’
+
+ The syntax check failed. Inspect the ‘*Messages*’ buffer for
+ details.
+
+‘FlyC?’
+
+ The syntax check had a dubious result. The definition of the
+ syntax checker may be flawed. Inspect the ‘*Messages*’ buffer for
+ details.
+
+ This indicator should *never* be displayed for built-in syntax
+ checkers. If it is, please report an issue to the Flycheck
+ developers, as by *note Reporting issues: 8d.
+
+Change *note flycheck-mode-line: 8e. to customize the mode line
+reporting:
+
+ -- User Option: flycheck -mode-line
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Mode line lighter for Flycheck.
+
+ The value of this variable is a mode line template as in
+ ‘`mode-line-format'’. See Info Node *note (elisp)Mode Line Format:: for
+ more information. Note that it should contain a _single_ mode
+ line construct only.
+
+ Customize this variable to change how Flycheck reports its status
+ in the mode line. You may use *note ‘flycheck-mode-line-status-text’: 8f.
+ to obtain a human-readable status text, including an
+ error/warning count.
+
+ You may also assemble your own status text. The current status
+ of Flycheck is available in *note ‘flycheck-last-status-change’: 90. The
+ errors in the current buffer are stored in
+ *note ‘flycheck-current-errors’: 91, and the function
+ *note ‘flycheck-count-errors’: 92. may be used to obtain the number of
+ errors grouped by error level.
+
+ Set this variable to nil to disable the mode line completely.
+
+ This user option was introduced, or its default value was changed,
+ in version 0.20 of the flycheck package.
+
+See also
+........
+
+The flycheck-color-mode-line(1) extension changes the background colour
+of the mode line according to the result of the last syntax check.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-color-mode-line
+
+\1f
+File: flycheck.info, Node: Supported languages, Next: Glossary, Prev: Usage, Up: Top
+
+6 Supported languages
+*********************
+
+Flycheck supports the following 44 languages with 74 syntax checkers.
+
+Each language has one or more syntax checkers, whose names follow a
+‘LANGUAGE-TOOL’ convention, where LANGUAGE is the programming language
+supported by this syntax checker, and TOOL the specific syntax checker
+tool.
+
+There are some 3rd party extensions which add support for more
+languages:
+
+ - flycheck-ledger(1) adds a syntax checker for the Ledger(2)
+ accounting tool.
+
+ - flycheck-mercury(3) adds a syntax checker for the Mercury(4)
+ language.
+
+ - flycheck-ocaml(5) adds a syntax checker for OCaml, using the
+ Merlin(6) tool.
+
+* Menu:
+
+* Ada::
+* AsciiDoc::
+* C/C++::
+* CFEngine::
+* Chef::
+* Coffeescript::
+* Coq::
+* CSS::
+* D::
+* Elixir::
+* Emacs Lisp::
+* Erlang::
+* ERuby::
+* Fortran::
+* Go::
+* Haml::
+* Handlebars::
+* Haskell::
+* HTML::
+* Javascript::
+* JSON::
+* LESS::
+* Lua::
+* Make::
+* Perl::
+* PHP::
+* Puppet::
+* Python::
+* R::
+* Racket::
+* RPM SPEC::
+* ReStructuredText::
+* Ruby::
+* Rust::
+* Sass::
+* Scala::
+* Scss::
+* Shell script languages::
+* Slim::
+* TeX/LaTeX::
+* Texinfo::
+* Verilog::
+* XML::
+* YAML::
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/purcell/flycheck-ledger
+
+ (2) http://ledger-cli.org/
+
+ (3) https://github.com/flycheck/flycheck-mercury
+
+ (4) http://mercurylang.org/
+
+ (5) https://github.com/flycheck/flycheck-ocaml
+
+ (6) https://github.com/the-lambda-church/merlin
+
+\1f
+File: flycheck.info, Node: Ada, Next: AsciiDoc, Up: Supported languages
+
+6.1 Ada
+=======
+
+ -- Flycheck Syntax Checker: ada -gnat
+
+ An Ada syntax checker using GNAT.
+
+ Uses the GNAT compiler from GCC. See URL
+ ‘https://gcc.gnu.org/onlinedocs/gnat_ugn_unw/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -gnat-args
+
+ A list of additional arguments for Symbol(’ada-gnat’).
+
+ The value of this variable is a list of strings with additional
+ command line arguments.
+
+ This variable is an option for the syntax checker ‘`ada-gnat'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gnat-include-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of include directories for GNAT.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the include path of gcc.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`ada-gnat'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gnat-language-standard
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The language standard to use in GNAT.
+
+ The value of this variable is either a string denoting a language
+ standard, or nil, to use the default standard. When non-nil, pass
+ the language standard via the ‘`-std'’ option.
+
+ This variable is an option for the syntax checker ‘`ada-gnat'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gnat-warnings
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of additional Ada warnings to enable in GNAT.
+
+ The value of this variable is a list of strings, where each
+ string is the name of a warning category to enable. By default,
+ most optional warnings are recommended, as in ‘`-gnata'’.
+
+ Refer to Info Node *note (gnat_ugn_unw)Warning Message Control:: for
+ more information about GNAT warnings.
+
+ This variable is an option for the syntax checker ‘`ada-gnat'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) https://gcc.gnu.org/onlinedocs/gnat_ugn_unw/
+
+\1f
+File: flycheck.info, Node: AsciiDoc, Next: C/C++, Prev: Ada, Up: Supported languages
+
+6.2 AsciiDoc
+============
+
+ -- Flycheck Syntax Checker: asciidoc
+
+ A AsciiDoc syntax checker using the AsciiDoc compiler.
+
+ See URL ‘http://www.methods.co.nz/asciidoc’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.methods.co.nz/asciidoc
+
+\1f
+File: flycheck.info, Node: C/C++, Next: CFEngine, Prev: AsciiDoc, Up: Supported languages
+
+6.3 C/C++
+=========
+
+ -- Flycheck Syntax Checker: c/c++ -clang
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note c/c++-cppcheck: a1, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A C/C++ syntax checker using Clang.
+
+ See URL ‘http://clang.llvm.org/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -clang-args
+
+ A list of additional arguments for Symbol(’c/c++-clang’).
+
+ The value of this variable is a list of strings with additional
+ command line arguments.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -clang-blocks
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Enable blocks in Clang.
+
+ When non-nil, enable blocks in Clang with ‘`-fblocks'’. See URL
+ ‘http://clang.llvm.org/docs/BlockLanguageSpec.html’(2) for more
+ information about blocks.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -clang-definitions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Additional preprocessor definitions for Clang.
+
+ The value of this variable is a list of strings, where each
+ string is an additional definition to pass to Clang, via the ‘`-D'’
+ option.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.15 of the flycheck package.
+
+ -- User Option: flycheck -clang-include-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of include directories for Clang.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the include path of Clang.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ -- User Option: flycheck -clang-includes
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of additional include files for Clang.
+
+ The value of this variable is a list of strings, where each
+ string is a file to include before syntax checking. Relative
+ paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.15 of the flycheck package.
+
+ -- User Option: flycheck -clang-language-standard
+
+ Variable properties: Automatically becomes buffer-local
+ when set. This variable is safe as a file local variable
+ if its value satisfies the predicate ‘stringp’.
+
+ The language standard to use in Clang.
+
+ The value of this variable is either a string denoting a language
+ standard, or nil, to use the default standard. When non-nil,
+ pass the language standard via the ‘`-std'’ option.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.15 of the flycheck package.
+
+ -- User Option: flycheck -clang-ms-extensions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable Microsoft extensions to C/C++ in Clang.
+
+ When non-nil, enable Microsoft extensions to C/C++ via
+ ‘`-fms-extensions'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ -- User Option: flycheck -clang-no-exceptions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to disable exceptions in Clang.
+
+ When non-nil, disable exceptions for syntax checks, via
+ ‘`-fno-exceptions'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -clang-no-rtti
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to disable RTTI in Clang.
+
+ When non-nil, disable RTTI for syntax checks, via ‘`-fno-rtti'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.15 of the flycheck package.
+
+ -- User Option: flycheck -clang-standard-library
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The standard library to use for Clang.
+
+ The value of this variable is the name of a standard library as
+ string, or nil to use the default standard library.
+
+ Refer to the Clang manual at URL
+ ‘http://clang.llvm.org/docs/UsersManual.html’(3) for more
+ information about the standard library.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.15 of the flycheck package.
+
+ -- User Option: flycheck -clang-warnings
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of additional warnings to enable in Clang.
+
+ The value of this variable is a list of strings, where each string
+ is the name of a warning category to enable. By default, all
+ recommended warnings and some extra warnings are enabled (as by
+ ‘`-Wall'’ and ‘`-Wextra'’ respectively).
+
+ Refer to the Clang manual at URL
+ ‘http://clang.llvm.org/docs/UsersManual.html’(4) for more
+ information about warnings.
+
+ This variable is an option for the syntax checker ‘`c/c++-clang'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ -- Flycheck Syntax Checker: c/c++ -gcc
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note c/c++-cppcheck: a1, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A C/C++ syntax checker using GCC.
+
+ Requires GCC 4.8 or newer. See URL ‘https://gcc.gnu.org/’(5).
+
+ Options
+............
+
+ -- User Option: flycheck -gcc-args
+
+ A list of additional arguments for Symbol(’c/c++-gcc’).
+
+ The value of this variable is a list of strings with additional
+ command line arguments.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -gcc-definitions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Additional preprocessor definitions for GCC.
+
+ The value of this variable is a list of strings, where each
+ string is an additional definition to pass to GCC, via the ‘`-D'’
+ option.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-include-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of include directories for GCC.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the include path of gcc.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-includes
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of additional include files for GCC.
+
+ The value of this variable is a list of strings, where each
+ string is a file to include before syntax checking. Relative
+ paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-language-standard
+
+ Variable properties: Automatically becomes buffer-local
+ when set. This variable is safe as a file local variable
+ if its value satisfies the predicate ‘stringp’.
+
+ The language standard to use in GCC.
+
+ The value of this variable is either a string denoting a language
+ standard, or nil, to use the default standard. When non-nil,
+ pass the language standard via the ‘`-std'’ option.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-no-exceptions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to disable exceptions in GCC.
+
+ When non-nil, disable exceptions for syntax checks, via
+ ‘`-fno-exceptions'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-no-rtti
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to disable RTTI in GCC.
+
+ When non-nil, disable RTTI for syntax checks, via ‘`-fno-rtti'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gcc-openmp
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable OpenMP in GCC.
+
+ When non-nil, enable OpenMP for syntax checkers, via
+ ‘`-fopenmp'’.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.21 of the flycheck package.
+
+ -- User Option: flycheck -gcc-warnings
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of additional warnings to enable in GCC.
+
+ The value of this variable is a list of strings, where each string
+ is the name of a warning category to enable. By default, all
+ recommended warnings and some extra warnings are enabled (as by
+ ‘`-Wall'’ and ‘`-Wextra'’ respectively).
+
+ Refer to the gcc manual at URL
+ ‘https://gcc.gnu.org/onlinedocs/gcc/’(6) for more information about
+ warnings.
+
+ This variable is an option for the syntax checker ‘`c/c++-gcc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- Flycheck Syntax Checker: c/c++ -cppcheck
+
+ A C/C++ checker using cppcheck.
+
+ See URL ‘http://cppcheck.sourceforge.net/’(7).
+
+ Options
+............
+
+ -- User Option: flycheck -cppcheck-checks
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Enabled checks for Cppcheck.
+
+ The value of this variable is a list of strings, where each
+ string is the name of an additional check to enable. By default,
+ all coding style checks are enabled.
+
+ See section "Enable message" in the Cppcheck manual at URL
+ ‘http://cppcheck.sourceforge.net/manual.pdf’(8), and the
+ documentation of the ‘`--enable'’ option for more information,
+ including a list of supported checks.
+
+ This variable is an option for the syntax checker ‘`c/c++-cppcheck'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ -- User Option: flycheck -cppcheck-inconclusive
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable Cppcheck inconclusive checks.
+
+ When non-nil, enable Cppcheck inconclusive checks. This allows Cppcheck to
+ report warnings it’s not certain of, but it may result in false positives.
+
+ This will have no effect when using Cppcheck 1.53 and older.
+
+ This variable is an option for the syntax checker ‘`c/c++-cppcheck'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.19 of the flycheck package.
+
+See also
+........
+
+flycheck-irony(9) adds an alternative syntax checker for C, C++ and
+Objective C which uses Irony Mode(10) server to check buffers.
+
+The flycheck-google-cpplint(11) extension adds a syntax checker using
+Google’s C++ style checker.
+
+ ---------- Footnotes ----------
+
+ (1) http://clang.llvm.org/
+
+ (2) http://clang.llvm.org/docs/BlockLanguageSpec.html
+
+ (3) http://clang.llvm.org/docs/UsersManual.html
+
+ (4) http://clang.llvm.org/docs/UsersManual.html
+
+ (5) https://gcc.gnu.org/
+
+ (6) https://gcc.gnu.org/onlinedocs/gcc/
+
+ (7) http://cppcheck.sourceforge.net/
+
+ (8) http://cppcheck.sourceforge.net/manual.pdf
+
+ (9) https://github.com/Sarcasm/flycheck-irony
+
+ (10) https://github.com/Sarcasm/irony-mode
+
+ (11) https://github.com/flycheck/flycheck-google-cpplint
+
+\1f
+File: flycheck.info, Node: CFEngine, Next: Chef, Prev: C/C++, Up: Supported languages
+
+6.4 CFEngine
+============
+
+ -- Flycheck Syntax Checker: cfengine
+
+ A CFEngine syntax checker using cf-promises.
+
+ See URL ‘http://cfengine.com/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://cfengine.com/
+
+\1f
+File: flycheck.info, Node: Chef, Next: Coffeescript, Prev: CFEngine, Up: Supported languages
+
+6.5 Chef
+========
+
+See also
+........
+
+Chef(1)
+
+ -- Flycheck Syntax Checker: chef -foodcritic
+
+ A Chef cookbooks syntax checker using Foodcritic.
+
+ See URL ‘http://acrmp.github.io/foodcritic/’(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://www.getchef.com/chef/
+
+ (2) http://acrmp.github.io/foodcritic/
+
+\1f
+File: flycheck.info, Node: Coffeescript, Next: Coq, Prev: Chef, Up: Supported languages
+
+6.6 Coffeescript
+================
+
+ -- Flycheck Syntax Checker: coffee
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note coffee-coffeelint: c0, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A CoffeeScript syntax checker using coffee.
+
+ See URL ‘http://coffeescript.org/’(1).
+
+ -- Flycheck Syntax Checker: coffee -coffeelint
+
+ A CoffeeScript style checker using coffeelint.
+
+ This syntax checker requires coffeelint 1.0 or newer.
+
+ See URL ‘http://www.coffeelint.org/’(2).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -coffeelintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`coffee-coffeelint'’.
+
+ ---------- Footnotes ----------
+
+ (1) http://coffeescript.org/
+
+ (2) http://www.coffeelint.org/
+
+\1f
+File: flycheck.info, Node: Coq, Next: CSS, Prev: Coffeescript, Up: Supported languages
+
+6.7 Coq
+=======
+
+ -- Flycheck Syntax Checker: coq
+
+ A Coq syntax checker using the Coq compiler.
+
+ See URL ‘http://coq.inria.fr/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://coq.inria.fr/
+
+\1f
+File: flycheck.info, Node: CSS, Next: D, Prev: Coq, Up: Supported languages
+
+6.8 CSS
+=======
+
+ -- Flycheck Syntax Checker: css -csslint
+
+ A CSS syntax and style checker using csslint.
+
+ See URL ‘https://github.com/CSSLint/csslint’(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/CSSLint/csslint
+
+\1f
+File: flycheck.info, Node: D, Next: Elixir, Prev: CSS, Up: Supported languages
+
+6.9 D
+=====
+
+ -- Flycheck Syntax Checker: d -dmd
+
+ A D syntax checker using the DMD compiler.
+
+ Requires DMD 2.066 or newer. See URL ‘http://dlang.org/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -dmd-include-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of include directories for dmd.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the include path of dmd.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`d-dmd'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.18 of the flycheck package.
+
+See also
+........
+
+The flycheck-d-unittest(2) extension adds a syntax checker that runs D
+unit tests on the fly.
+
+ ---------- Footnotes ----------
+
+ (1) http://dlang.org/
+
+ (2) https://github.com/flycheck/flycheck-d-unittest
+
+\1f
+File: flycheck.info, Node: Elixir, Next: Emacs Lisp, Prev: D, Up: Supported languages
+
+6.10 Elixir
+===========
+
+ -- Flycheck Syntax Checker: elixir
+
+ An Elixir syntax checker using the Elixir interpreter.
+
+ See URL ‘http://elixir-lang.org/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://elixir-lang.org/
+
+\1f
+File: flycheck.info, Node: Emacs Lisp, Next: Erlang, Prev: Elixir, Up: Supported languages
+
+6.11 Emacs Lisp
+===============
+
+See also
+........
+
+Emacs(1), Emacs Lisp reference(2)
+
+ -- Flycheck Syntax Checker: emacs -lisp
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note emacs-lisp-checkdoc: ce.
+
+ The *first* suitable syntax checker is used.
+
+ An Emacs Lisp syntax checker using the Emacs Lisp Byte compiler.
+
+ See Info Node *note (elisp)Byte Compilation::.
+
+ Options
+............
+
+ -- User Option: flycheck -emacs-lisp-initialize-packages
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Whether to initialize packages in the Emacs Lisp syntax checker.
+
+ To initialize packages, call ‘`package-initialize'’ before
+ byte-compiling the file to check.
+
+ When nil, never initialize packages. When ‘`auto'’, initialize
+ packages only when checking files from ‘`user-emacs-directory'’.
+ For any other non-nil value, always initialize packages.
+
+ This variable is an option for the syntax checker ‘`emacs-lisp'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ -- User Option: flycheck -emacs-lisp-load-path
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Load path to use in the Emacs Lisp syntax checker.
+
+ When set to ‘`inherit'’, use the ‘`load-path'’ of the current Emacs
+ session during syntax checking.
+
+ When set to a list of strings, add each directory in this list to
+ the ‘`load-path'’ before invoking the byte compiler. Relative
+ paths in this list are expanded against the ‘`default-directory'’
+ of the buffer to check.
+
+ When nil, do not explicitly set the ‘`load-path'’ during syntax
+ checking. The syntax check only uses the built-in ‘`load-path'’ of
+ Emacs in this case.
+
+ Note that changing this variable can lead to wrong results of the
+ syntax check, e.g. if an unexpected version of a required library
+ is used.
+
+ This variable is an option for the syntax checker ‘`emacs-lisp'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ -- User Option: flycheck -emacs-lisp-package-user-dir
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Package directory for the Emacs Lisp syntax checker.
+
+ When set to a string, set ‘`package-user-dir'’ to the value of this
+ variable before initializing packages.
+
+ This variable has no effect, if
+ *note ‘flycheck-emacs-lisp-initialize-packages’: cf. is nil.
+
+ This variable is an option for the syntax checker ‘`emacs-lisp'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.14 of the flycheck package.
+
+ See also
+.............
+
+ With the flycheck-cask(3) extension this syntax checker
+ automatically uses packages from Cask(4) projects.
+
+ -- Flycheck Syntax Checker: emacs -lisp-checkdoc
+
+ An Emacs Lisp style checker using CheckDoc.
+
+ The checker runs ‘`checkdoc-current-buffer'’.
+
+ See also
+.............
+
+ *note (elisp)Documentation Tips::
+
+ ---------- Footnotes ----------
+
+ (1) http://www.gnu.org/software/emacs/
+
+ (2)
+http://www.gnu.org/software/emacs/manual/html_node/elisp/index.html
+
+ (3) https://github.com/flycheck/flycheck-cask
+
+ (4) https://github.com/cask/cask
+
+\1f
+File: flycheck.info, Node: Erlang, Next: ERuby, Prev: Emacs Lisp, Up: Supported languages
+
+6.12 Erlang
+===========
+
+ -- Flycheck Syntax Checker: erlang
+
+ An Erlang syntax checker using the Erlang interpreter.
+
+ See URL ‘http://www.erlang.org/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.erlang.org/
+
+\1f
+File: flycheck.info, Node: ERuby, Next: Fortran, Prev: Erlang, Up: Supported languages
+
+6.13 ERuby
+==========
+
+ -- Flycheck Syntax Checker: eruby -erubis
+
+ A eRuby syntax checker using the ‘`erubis'’ command.
+
+ See URL ‘http://www.kuwata-lab.com/erubis/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.kuwata-lab.com/erubis/
+
+\1f
+File: flycheck.info, Node: Fortran, Next: Go, Prev: ERuby, Up: Supported languages
+
+6.14 Fortran
+============
+
+ -- Flycheck Syntax Checker: fortran -gfortran
+
+ An Fortran syntax checker using GCC.
+
+ Uses GCC’s Fortran compiler gfortran. See URL
+ ‘https://gcc.gnu.org/onlinedocs/gfortran/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -gfortran-args
+
+ A list of additional arguments for Symbol(’fortran-gfortran’).
+
+ The value of this variable is a list of strings with additional
+ command line arguments.
+
+ This variable is an option for the syntax checker ‘`fortran-gfortran'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -gfortran-include-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of include directories for GCC Fortran.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the include path of gcc.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`fortran-gfortran'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gfortran-language-standard
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The language standard to use in GFortran.
+
+ The value of this variable is either a string denoting a language
+ standard, or nil, to use the default standard. When non-nil,
+ pass the language standard via the ‘`-std'’ option.
+
+ This variable is an option for the syntax checker ‘`fortran-gfortran'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -gfortran-layout
+
+ The source code layout to use in GFortran.
+
+ The value of this variable is one of the following symbols:
+
+ nil
+ Let gfortran determine the layout from the extension
+
+ ‘`free'’
+ Use free form layout
+
+
+ ‘`fixed'’
+ Use fixed form layout
+
+ In any other case, an error is signaled.
+
+ This variable is an option for the syntax checker ‘`fortran-gfortran'’.
+
+ -- User Option: flycheck -gfortran-warnings
+
+ A list of warnings for GCC Fortran.
+
+ The value of this variable is a list of strings, where each string
+ is the name of a warning category to enable. By default, all
+ recommended warnings and some extra warnings are enabled (as by
+ ‘`-Wall'’ and ‘`-Wextra'’ respectively).
+
+ Refer to the gfortran manual at URL
+ ‘https://gcc.gnu.org/onlinedocs/gfortran/’(2) for more information
+ about warnings
+
+ This variable is an option for the syntax checker ‘`fortran-gfortran'’.
+
+ ---------- Footnotes ----------
+
+ (1) https://gcc.gnu.org/onlinedocs/gfortran/
+
+ (2) https://gcc.gnu.org/onlinedocs/gfortran/
+
+\1f
+File: flycheck.info, Node: Go, Next: Haml, Prev: Fortran, Up: Supported languages
+
+6.15 Go
+=======
+
+ -- Flycheck Syntax Checker: go -gofmt
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note go-golint: e0, if there are no errors above level
+ ‘warning’
+
+ 2. *note go-vet: e1, if there are no errors above level
+ ‘warning’
+
+ 3. *note go-build: e2, if there are no errors above level
+ ‘warning’
+
+ 4. *note go-test: e3, if there are no errors above level
+ ‘warning’
+
+ 5. *note go-errcheck: e4, if there are no errors above level
+ ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Go syntax and style checker using the gofmt utility.
+
+ See URL ‘http://golang.org/cmd/gofmt/’(1).
+
+ -- Flycheck Syntax Checker: go -golint
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note go-vet: e1.
+
+ 2. *note go-build: e2.
+
+ 3. *note go-test: e3.
+
+ 4. *note go-errcheck: e4.
+
+ The *first* suitable syntax checker is used.
+
+ A Go style checker using Golint.
+
+ See URL ‘https://github.com/golang/lint’(2).
+
+ -- Flycheck Syntax Checker: go -vet
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note go-build: e2.
+
+ 2. *note go-test: e3.
+
+ 3. *note go-errcheck: e4.
+
+ The *first* suitable syntax checker is used.
+
+ A Go syntax checker using the ‘go tool vet’ command.
+
+ See URL ‘http://golang.org/cmd/go/’(3) and URL
+ ‘http://godoc.org/code.google.com/p/go.tools/cmd/vet’(4).
+
+ Options
+............
+
+ -- User Option: flycheck -go-vet-print-functions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A comma-separated list of print-like functions for ‘go tool vet’.
+
+ Go vet will check these functions for format string problems and
+ issues, such as a mismatch between the number of formats used,
+ and the number of arguments given.
+
+ Each entry is in the form Name:N where N is the zero-based
+ argument position of the first argument involved in the print:
+ either the format or the first print argument for non-formatted
+ prints. For example, if you have Warn and Warnf functions that
+ take an io.Writer as their first argument, like Fprintf,
+ -printfuncs=Warn:1,Warnf:1
+
+ This variable is an option for the syntax checker ‘`go-vet'’.
+
+ -- Flycheck Syntax Checker: go -build
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note go-errcheck: e4, if there are no errors above level
+ ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Go syntax and type checker using the ‘go build’ command.
+
+ See URL ‘http://golang.org/cmd/go’(5).
+
+ -- Flycheck Syntax Checker: go -test
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note go-errcheck: e4, if there are no errors above level
+ ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Go syntax and type checker using the ‘go test’ command.
+
+ See URL ‘http://golang.org/cmd/go’(6).
+
+ -- Flycheck Syntax Checker: go -errcheck
+
+ A Go checker for unchecked errors.
+
+ See URL ‘https://github.com/kisielk/errcheck’(7).
+
+ ---------- Footnotes ----------
+
+ (1) http://golang.org/cmd/gofmt/
+
+ (2) https://github.com/golang/lint
+
+ (3) http://golang.org/cmd/go/
+
+ (4) http://godoc.org/code.google.com/p/go.tools/cmd/vet
+
+ (5) http://golang.org/cmd/go
+
+ (6) http://golang.org/cmd/go
+
+ (7) https://github.com/kisielk/errcheck
+
+\1f
+File: flycheck.info, Node: Haml, Next: Handlebars, Prev: Go, Up: Supported languages
+
+6.16 Haml
+=========
+
+ -- Flycheck Syntax Checker: haml
+
+ A Haml syntax checker using the Haml compiler.
+
+ See URL ‘http://haml.info’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://haml.info
+
+\1f
+File: flycheck.info, Node: Handlebars, Next: Haskell, Prev: Haml, Up: Supported languages
+
+6.17 Handlebars
+===============
+
+ -- Flycheck Syntax Checker: handlebars
+
+ A Handlebars syntax checker using the Handlebars compiler.
+
+ See URL ‘http://handlebarsjs.com/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://handlebarsjs.com/
+
+\1f
+File: flycheck.info, Node: Haskell, Next: HTML, Prev: Handlebars, Up: Supported languages
+
+6.18 Haskell
+============
+
+ -- Flycheck Syntax Checker: haskell -ghc
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note haskell-hlint: ec, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Haskell syntax and type checker using ghc.
+
+ See URL ‘http://www.haskell.org/ghc/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -ghc-args
+
+ A list of additional arguments for Symbol(’haskell-ghc’).
+
+ The value of this variable is a list of strings with additional
+ command line arguments.
+
+ This variable is an option for the syntax checker ‘`haskell-ghc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -ghc-language-extensions
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Language extensions for GHC.
+
+ The value of this variable is a list of strings, where each
+ string is a Haskell language extension, as in the LANGUAGE
+ pragma. Each extension is enabled via ‘`-X'’.
+
+ This variable is an option for the syntax checker ‘`haskell-ghc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.19 of the flycheck package.
+
+ -- User Option: flycheck -ghc-no-user-package-database
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to disable the user package database in GHC.
+
+ When non-nil, disable the user package database in GHC, via
+ ‘`-no-user-package-db'’.
+
+ This variable is an option for the syntax checker ‘`haskell-ghc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ -- User Option: flycheck -ghc-package-databases
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Additional module databases for GHC.
+
+ The value of this variable is a list of strings, where each
+ string is a directory of a package database. Each package
+ database is given to GHC via ‘`-package-db'’.
+
+ This variable is an option for the syntax checker ‘`haskell-ghc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ -- User Option: flycheck -ghc-search-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ Module search path for GHC.
+
+ The value of this variable is a list of strings, where each
+ string is a directory containing Haskell modules. Each directory
+ is added to the GHC search path via ‘`-i'’.
+
+ This variable is an option for the syntax checker ‘`haskell-ghc'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ See also
+.............
+
+ The flycheck-haskell(2) extension configures this syntax checker
+ according to the corresponding Cabal project, and adds Cabal
+ sandboxes.
+
+ -- Flycheck Syntax Checker: haskell -hlint
+
+ A Haskell style checker using hlint.
+
+ See URL ‘https://github.com/ndmitchell/hlint’(3).
+
+See also
+........
+
+The flycheck-hdevtools(4) extension adds a Haskell syntax checker using
+hdevtools(5).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.haskell.org/ghc/
+
+ (2) https://github.com/flycheck/flycheck-haskell
+
+ (3) https://github.com/ndmitchell/hlint
+
+ (4) https://github.com/flycheck/flycheck-hdevtools
+
+ (5) https://github.com/bitc/hdevtools/
+
+\1f
+File: flycheck.info, Node: HTML, Next: Javascript, Prev: Haskell, Up: Supported languages
+
+6.19 HTML
+=========
+
+ -- Flycheck Syntax Checker: html -tidy
+
+ A HTML syntax and style checker using Tidy.
+
+ See URL ‘https://github.com/w3c/tidy-html5’(1).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -tidyrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`html-tidy'’.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/w3c/tidy-html5
+
+\1f
+File: flycheck.info, Node: Javascript, Next: JSON, Prev: HTML, Up: Supported languages
+
+6.20 Javascript
+===============
+
+ -- Flycheck Syntax Checker: javascript -jshint
+
+ A JavaScript syntax and style checker using jshint.
+
+ See URL ‘http://www.jshint.com’(1).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -jshintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`javascript-jshint'’.
+
+ -- Flycheck Syntax Checker: javascript -eslint
+
+ A JavaScript syntax and style checker using eslint.
+
+ See URL ‘https://github.com/eslint/eslint’(2).
+
+ Options
+............
+
+ -- User Option: flycheck -eslint-rulesdir
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The directory of custom rules for ESLint.
+
+ The value of this variable is either a string containing the path
+ to a directory with custom rules, or nil, to not give any custom
+ rules to ESLint.
+
+ Refer to the ESLint manual at URL
+ ‘https://github.com/eslint/eslint/tree/master/docs/command-line-interface#–rulesdir’(3)
+ for more information about the custom directory.
+
+ This variable is an option for the syntax checker ‘`javascript-eslint'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -eslintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`javascript-eslint'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- Flycheck Syntax Checker: javascript -gjslint
+
+ A JavaScript syntax and style checker using Closure Linter.
+
+ See URL ‘https://developers.google.com/closure/utilities’(4).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -gjslintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`javascript-gjslint'’.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.jshint.com
+
+ (2) https://github.com/eslint/eslint
+
+ (3)
+https://github.com/eslint/eslint/tree/master/docs/command-line-interface#–rulesdir
+
+ (4) https://developers.google.com/closure/utilities
+
+\1f
+File: flycheck.info, Node: JSON, Next: LESS, Prev: Javascript, Up: Supported languages
+
+6.21 JSON
+=========
+
+ -- Flycheck Syntax Checker: json -jsonlint
+
+ A JSON syntax and style checker using jsonlint.
+
+ See URL ‘https://github.com/zaach/jsonlint’(1).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/zaach/jsonlint
+
+\1f
+File: flycheck.info, Node: LESS, Next: Lua, Prev: JSON, Up: Supported languages
+
+6.22 LESS
+=========
+
+ -- Flycheck Syntax Checker: less
+
+ A LESS syntax checker using lessc.
+
+ At least version 1.4 of lessc is required.
+
+ See URL ‘http://lesscss.org’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://lesscss.org
+
+\1f
+File: flycheck.info, Node: Lua, Next: Make, Prev: LESS, Up: Supported languages
+
+6.23 Lua
+========
+
+ -- Flycheck Syntax Checker: lua
+
+ A Lua syntax checker using the Lua compiler.
+
+ See URL ‘http://www.lua.org/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.lua.org/
+
+\1f
+File: flycheck.info, Node: Make, Next: Perl, Prev: Lua, Up: Supported languages
+
+6.24 Make
+=========
+
+ -- Flycheck Syntax Checker: make
+
+ A Makefile syntax checker using the POSIX compatible Make command.
+
+ See URL ‘http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html’(1).
+
+ See also
+.............
+
+ GNU Make(2), NetBSD Make(3), FreeBSD Make(4), OpenBSD Make(5)
+
+ ---------- Footnotes ----------
+
+ (1)
+http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html
+
+ (2) http://www.gnu.org/software/make/
+
+ (3) http://netbsd.gw.com/cgi-bin/man-cgi?make++NetBSD-current
+
+ (4) http://www.freebsd.org/cgi/man.cgi?query=make&sektion=1
+
+ (5) http://www.openbsd.org/cgi-bin/man.cgi?query=make
+
+\1f
+File: flycheck.info, Node: Perl, Next: PHP, Prev: Make, Up: Supported languages
+
+6.25 Perl
+=========
+
+ -- Flycheck Syntax Checker: perl
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note perl-perlcritic: 109.
+
+ The *first* suitable syntax checker is used.
+
+ A Perl syntax checker using the Perl interpreter.
+
+ See URL ‘http://www.perl.org’(1).
+
+ -- Flycheck Syntax Checker: perl -perlcritic
+
+ A Perl syntax checker using Perl::Critic.
+
+ See URL ‘https://metacpan.org/pod/Perl::Critic’(2).
+
+ Options
+............
+
+ -- User Option: flycheck -perlcritic-severity
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘integerp’.
+
+ The message severity for Perl Critic.
+
+ The value of this variable is a severity level as integer, for
+ the ‘`--severity'’ option to Perl Critic.
+
+ This variable is an option for the syntax checker ‘`perl-perlcritic'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.18 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.perl.org
+
+ (2) https://metacpan.org/pod/Perl::Critic
+
+\1f
+File: flycheck.info, Node: PHP, Next: Puppet, Prev: Perl, Up: Supported languages
+
+6.26 PHP
+========
+
+ -- Flycheck Syntax Checker: php
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note php-phpmd: 10d, if there are no errors above level
+ ‘warning’
+
+ 2. *note php-phpcs: 10e, if there are no errors above level
+ ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A PHP syntax checker using the PHP command line interpreter.
+
+ See URL ‘http://php.net/manual/en/features.commandline.php’(1).
+
+ -- Flycheck Syntax Checker: php -phpmd
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note php-phpcs: 10e.
+
+ The *first* suitable syntax checker is used.
+
+ A PHP style checker using PHP Mess Detector.
+
+ See URL ‘http://phpmd.org/’(2).
+
+ Options
+............
+
+ -- User Option: flycheck -phpmd-rulesets
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ The rule sets for PHP Mess Detector.
+
+ Set default rule sets and custom rule set files.
+
+ See section "Using multiple rule sets" in the PHP Mess Detector
+ manual at URL ‘http://phpmd.org/documentation/index.html’(3).
+
+ This variable is an option for the syntax checker ‘`php-phpmd'’.
+
+ -- Flycheck Syntax Checker: php -phpcs
+
+ A PHP style checker using PHP_CodeSniffer.
+
+ See URL ‘http://pear.php.net/package/PHP_CodeSniffer/’(4).
+
+ Options
+............
+
+ -- User Option: flycheck -phpcs-standard
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The coding standard for PHP CodeSniffer.
+
+ When nil, use the default standard from the global PHP
+ CodeSniffer configuration. When set to a string, pass the string
+ to PHP CodeSniffer which will interpret it as name as a standard,
+ or as path to a standard specification.
+
+ This variable is an option for the syntax checker ‘`php-phpcs'’.
+
+ ---------- Footnotes ----------
+
+ (1) http://php.net/manual/en/features.commandline.php
+
+ (2) http://phpmd.org/
+
+ (3) http://phpmd.org/documentation/index.html
+
+ (4) http://pear.php.net/package/PHP_CodeSniffer/
+
+\1f
+File: flycheck.info, Node: Puppet, Next: Python, Prev: PHP, Up: Supported languages
+
+6.27 Puppet
+===========
+
+ -- Flycheck Syntax Checker: puppet -parser
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note puppet-lint: 113, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Puppet DSL syntax checker using puppet’s own parser.
+
+ See URL ‘http://puppetlabs.com/’(1).
+
+ -- Flycheck Syntax Checker: puppet -lint
+
+ A Puppet DSL style checker using puppet-lint.
+
+ See URL ‘http://puppet-lint.com/’(2).
+
+ ---------- Footnotes ----------
+
+ (1) http://puppetlabs.com/
+
+ (2) http://puppet-lint.com/
+
+\1f
+File: flycheck.info, Node: Python, Next: R, Prev: Puppet, Up: Supported languages
+
+6.28 Python
+===========
+
+ -- Flycheck Syntax Checker: python -flake8
+
+ A Python syntax and style checker using Flake8.
+
+ Requires Flake8 2.0 or newer. See URL
+ ‘https://pypi.python.org/pypi/flake8’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -flake8-error-level-alist
+
+ An alist mapping flake8 error IDs to Flycheck error levels.
+
+ Each item in this list is a cons cell ‘(PATTERN . LEVEL)’ where
+ PATTERN is a regular expression matched against the error ID, and
+ LEVEL is a Flycheck error level symbol.
+
+ Each PATTERN is matched in the order of appearance in this list
+ against the error ID. If it matches the ID, the level of the
+ corresponding error is set to LEVEL. An error that is not
+ matched by any PATTERN defaults to warning level.
+
+ This option exists because flake8 categorises errors by the
+ underlying tool that produced them (e.g. F for pyflakes messages,
+ E for pep8 messages, etc.). These categorisations do not map
+ directly to Flycheck error levels. Hence, this option exists to
+ allow for a custom mapping. The default value handles all of the
+ built-in tools of flake8, and naming errors from pep8-naming.
+
+ This variable is an option for the syntax checker ‘`python-flake8'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.22 of the flycheck package.
+
+ -- User Option: flycheck -flake8-maximum-complexity
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘integerp’.
+
+ The maximum McCabe complexity of methods.
+
+ If nil, do not check the complexity of methods. If set to an
+ integer, report any complexity greater than the value of this
+ variable as warning.
+
+ If set to an integer, this variable overrules any similar setting
+ in the configuration file denoted by *note ‘flycheck-flake8rc’: 118.
+
+ This variable is an option for the syntax checker ‘`python-flake8'’.
+
+ -- User Option: flycheck -flake8-maximum-line-length
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘integerp’.
+
+ The maximum length of lines.
+
+ If set to an integer, the value of this variable denotes the
+ maximum length of lines, overruling any similar setting in the
+ configuration file denoted by *note ‘flycheck-flake8rc’: 118. An error will
+ be reported for any line longer than the value of this variable.
+
+ If set to nil, use the maximum line length from the configuration
+ file denoted by *note ‘flycheck-flake8rc’: 118, or the PEP 8 recommendation
+ of 79 characters if there is no configuration with this setting.
+
+ This variable is an option for the syntax checker ‘`python-flake8'’.
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -flake8rc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`python-flake8'’.
+
+ -- Flycheck Syntax Checker: python -pylint
+
+ A Python syntax and style checker using Pylint.
+
+ This syntax checker requires Pylint 1.0 or newer.
+
+ See URL ‘http://www.pylint.org/’(2).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -pylintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`python-pylint'’.
+
+ -- Flycheck Syntax Checker: python -pycompile
+
+ A Python syntax checker using Python’s builtin compiler.
+
+ See URL ‘https://docs.python.org/3.4/library/py_compile.html’(3).
+
+See also
+........
+
+flycheck-pyflakes(4) adds a Python syntax checker using Pyflakes.
+
+ ---------- Footnotes ----------
+
+ (1) https://pypi.python.org/pypi/flake8
+
+ (2) http://www.pylint.org/
+
+ (3) https://docs.python.org/3.4/library/py_compile.html
+
+ (4) https://github.com/Wilfred/flycheck-pyflakes
+
+\1f
+File: flycheck.info, Node: R, Next: Racket, Prev: Python, Up: Supported languages
+
+6.29 R
+======
+
+ -- Flycheck Syntax Checker: r -lintr
+
+ An R style and syntax checker using the lintr package.
+
+ See URL ‘https://github.com/jimhester/lintr’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -lintr-caching
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable caching in lintr.
+
+ By default, lintr caches all expressions in a file and re-checks
+ only those that have changed. Setting this option to nil
+ disables caching in case there are problems.
+
+ This variable is an option for the syntax checker ‘`r-lintr'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.23 of the flycheck package.
+
+ -- User Option: flycheck -lintr-linters
+
+ Variable properties: This variable may be risky if used
+ as a file-local variable.
+
+ Linters to use with lintr.
+
+ The value of this variable is a string containing an R
+ expression, which selects linters for lintr.
+
+ This variable is an option for the syntax checker ‘`r-lintr'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.23 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/jimhester/lintr
+
+\1f
+File: flycheck.info, Node: Racket, Next: RPM SPEC, Prev: R, Up: Supported languages
+
+6.30 Racket
+===========
+
+ -- Flycheck Syntax Checker: racket
+
+ A Racket syntax checker using the Racket compiler.
+
+ See URL ‘http://racket-lang.org/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://racket-lang.org/
+
+\1f
+File: flycheck.info, Node: RPM SPEC, Next: ReStructuredText, Prev: Racket, Up: Supported languages
+
+6.31 RPM SPEC
+=============
+
+ -- Flycheck Syntax Checker: rpm -rpmlint
+
+ A RPM SPEC file syntax checker using rpmlint.
+
+ See URL ‘http://sourceforge.net/projects/rpmlint/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://sourceforge.net/projects/rpmlint/
+
+\1f
+File: flycheck.info, Node: ReStructuredText, Next: Ruby, Prev: RPM SPEC, Up: Supported languages
+
+6.32 ReStructuredText
+=====================
+
+ -- Flycheck Syntax Checker: rst
+
+ A ReStructuredText (RST) syntax checker using Docutils.
+
+ See URL ‘http://docutils.sourceforge.net/’(1).
+
+ -- Flycheck Syntax Checker: rst -sphinx
+
+ A ReStructuredText (RST) syntax checker using Sphinx.
+
+ Requires Sphinx 1.2 or newer. See URL ‘http://sphinx-doc.org’(2).
+
+ Options
+............
+
+ -- User Option: flycheck -sphinx-warn-on-missing-references
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to warn about missing references in Sphinx.
+
+ When non-nil (the default), warn about all missing references in
+ Sphinx via ‘`-n'’.
+
+ This variable is an option for the syntax checker ‘`rst-sphinx'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.17 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://docutils.sourceforge.net/
+
+ (2) http://sphinx-doc.org
+
+\1f
+File: flycheck.info, Node: Ruby, Next: Rust, Prev: ReStructuredText, Up: Supported languages
+
+6.33 Ruby
+=========
+
+ -- Flycheck Syntax Checker: ruby -rubocop
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note ruby-rubylint: 12c, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Ruby syntax and style checker using the RuboCop tool.
+
+ See URL ‘http://batsov.com/rubocop/’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -rubocop-lint-only
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to only report code issues in Rubocop.
+
+ When non-nil, only report code issues in Rubocop, via ‘`--lint'’.
+ Otherwise report style issues as well.
+
+ This variable is an option for the syntax checker ‘`ruby-rubocop'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -rubocoprc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`ruby-rubocop'’.
+
+ -- Flycheck Syntax Checker: ruby -rubylint
+
+ A Ruby syntax and code analysis checker using ruby-lint.
+
+ Requires ruby-lint 2.0 or newer. To use *note ‘flycheck-rubylintrc’: 12f,
+ ruby-lint 2.0.2 or newer is required. See URL
+ ‘https://github.com/YorickPeterse/ruby-lint’(2).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -rubylintrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`ruby-rubylint'’.
+
+ Warning: You need ruby-lint version 2.0.2 or newer to use
+ this variable.
+
+ -- Flycheck Syntax Checker: ruby
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note ruby-rubylint: 12c, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Ruby syntax checker using the standard Ruby interpreter.
+
+ Please note that the output of different Ruby versions and
+ implementations varies wildly. This syntax checker supports
+ current versions of MRI and JRuby, but may break when used with
+ other implementations or future versions of these
+ implementations.
+
+ Please consider using ‘`ruby-rubocop'’ or ‘`ruby-rubylint'’ instead.
+
+ See URL ‘https://www.ruby-lang.org/’(3).
+
+ -- Flycheck Syntax Checker: ruby -jruby
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note ruby-rubylint: 12c, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Ruby syntax checker using the JRuby interpreter.
+
+ This syntax checker is very primitive, and may break on future
+ versions of JRuby.
+
+ Please consider using ‘`ruby-rubocop'’ or ‘`ruby-rubylint'’ instead.
+
+ See URL ‘http://jruby.org/’(4).
+
+ ---------- Footnotes ----------
+
+ (1) http://batsov.com/rubocop/
+
+ (2) https://github.com/YorickPeterse/ruby-lint
+
+ (3) https://www.ruby-lang.org/
+
+ (4) http://jruby.org/
+
+\1f
+File: flycheck.info, Node: Rust, Next: Sass, Prev: Ruby, Up: Supported languages
+
+6.34 Rust
+=========
+
+ -- Flycheck Syntax Checker: rust
+
+ A Rust syntax checker using Rust compiler.
+
+ This syntax checker needs Rust 0.10 or newer.
+
+ See URL ‘http://www.rust-lang.org’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -rust-check-tests
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to check test code in Rust.
+
+ When non-nil, ‘`rustc'’ is passed the ‘`--test'’ flag, which will
+ check any code marked with the ‘#[cfg(test)]’ attribute and any
+ functions marked with ‘#[test]’. Otherwise, ‘`rustc'’ is not passed
+ ‘`--test'’ and test code will not be checked. Skipping ‘`--test'’ is
+ necessary when using ‘#![no_std]’, because compiling the test
+ runner requires ‘`std'’.
+
+ This variable is an option for the syntax checker ‘`rust'’.
+
+ -- User Option: flycheck -rust-crate-root
+
+ Variable properties: Automatically becomes buffer-local
+ when set. This variable is safe as a file local variable
+ if its value satisfies the predicate ‘stringp’.
+
+ A path to the crate root for the current buffer.
+
+ The value of this variable is either a string with the path to
+ the crate root for the current buffer, or nil if the current buffer
+ is a crate. A relative path is relative to the current buffer.
+
+ If this variable is non nil the current buffer will only be checked
+ if it is not modified, i.e. after it has been saved.
+
+ This variable is an option for the syntax checker ‘`rust'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ -- User Option: flycheck -rust-crate-type
+
+ Variable properties: Automatically becomes buffer-local
+ when set. This variable is safe as a file local variable
+ if its value satisfies the predicate ‘stringp’.
+
+ The type of the Rust Crate to check.
+
+ The value of this variable is a string denoting the crate type,
+ for the ‘`--crate-type'’ flag.
+
+ This variable is an option for the syntax checker ‘`rust'’.
+
+ -- User Option: flycheck -rust-library-path
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of library directories for Rust.
+
+ The value of this variable is a list of strings, where each
+ string is a directory to add to the library path of Rust.
+ Relative paths are relative to the file being checked.
+
+ This variable is an option for the syntax checker ‘`rust'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.18 of the flycheck package.
+
+ See also
+.............
+
+ The flycheck-rust(2) extension customizes this syntax checker
+ according to the Cargo project layout and settings.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.rust-lang.org
+
+ (2) https://github.com/flycheck/flycheck-rust
+
+\1f
+File: flycheck.info, Node: Sass, Next: Scala, Prev: Rust, Up: Supported languages
+
+6.35 Sass
+=========
+
+ -- Flycheck Syntax Checker: sass
+
+ A Sass syntax checker using the Sass compiler.
+
+ See URL ‘http://sass-lang.com’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -sass-compass
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable the Compass CSS framework.
+
+ When non-nil, enable the Compass CSS framework, via ‘`--compass'’.
+
+ This variable is an option for the syntax checker ‘`sass'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://sass-lang.com
+
+\1f
+File: flycheck.info, Node: Scala, Next: Scss, Prev: Sass, Up: Supported languages
+
+6.36 Scala
+==========
+
+ -- Flycheck Syntax Checker: scala
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note scala-scalastyle: 13e, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Scala syntax checker using the Scala compiler.
+
+ See URL ‘http://www.scala-lang.org/’(1).
+
+ -- Flycheck Syntax Checker: scala -scalastyle
+
+ A Scala style checker using scalastyle.
+
+ Note that this syntax checker is not used if
+ *note ‘flycheck-scalastyle-jar’: 13f. or *note ‘flycheck-scalastylerc’: 140. are nil or
+ point to non-existing files.
+
+ See URL ‘http://www.scalastyle.org’(2).
+
+ Options
+............
+
+ -- User Option: flycheck -scalastyle-jar
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ The path to the main JAR file of Scalastyle.
+
+ If this option is nil, or points to a non-existing file,
+ ‘`scala-scalastyle'’ can not be used.
+
+ This variable is an option for the syntax checker ‘`scala-scalastyle'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -scalastylerc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`scala-scalastyle'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.20 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.scala-lang.org/
+
+ (2) http://www.scalastyle.org
+
+\1f
+File: flycheck.info, Node: Scss, Next: Shell script languages, Prev: Scala, Up: Supported languages
+
+6.37 Scss
+=========
+
+ -- Flycheck Syntax Checker: scss
+
+ A SCSS syntax checker using the SCSS compiler.
+
+ See URL ‘http://sass-lang.com’(1).
+
+ Options
+............
+
+ -- User Option: flycheck -scss-compass
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘booleanp’.
+
+ Whether to enable the Compass CSS framework.
+
+ When non-nil, enable the Compass CSS framework, via ‘`--compass'’.
+
+ This variable is an option for the syntax checker ‘`scss'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.16 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://sass-lang.com
+
+\1f
+File: flycheck.info, Node: Shell script languages, Next: Slim, Prev: Scss, Up: Supported languages
+
+6.38 Shell script languages
+===========================
+
+ -- Flycheck Syntax Checker: sh -bash
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note sh-shellcheck: 146, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Bash syntax checker using the Bash shell.
+
+ See URL ‘http://www.gnu.org/software/bash/’(1).
+
+ -- Flycheck Syntax Checker: sh -posix-dash
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note sh-shellcheck: 146, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A POSIX Shell syntax checker using the Dash shell.
+
+ See URL ‘http://gondor.apana.org.au/~herbert/dash/’(2).
+
+ See also
+.............
+
+ POSIX Shell Command Language(3)
+
+ -- Flycheck Syntax Checker: sh -posix-bash
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note sh-shellcheck: 146, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A POSIX Shell syntax checker using the Bash shell.
+
+ See URL ‘http://www.gnu.org/software/bash/’(4).
+
+ See also
+.............
+
+ GNU Bash POSIX Mode(5), POSIX Shell Command Language(6)
+
+ -- Flycheck Syntax Checker: sh -zsh
+
+ Chained syntax checkers: The following syntax checkers are
+ *note chained: a0. after this syntax checker:
+
+ 1. *note sh-shellcheck: 146, if there are no errors above
+ level ‘warning’
+
+ The *first* suitable syntax checker is used.
+
+ A Zsh syntax checker using the Zsh shell.
+
+ See URL ‘http://www.zsh.org/’(7).
+
+ -- Flycheck Syntax Checker: sh -shellcheck
+
+ A shell script syntax and style checker using Shellcheck.
+
+ See URL ‘https://github.com/koalaman/shellcheck/’(8).
+
+ Options
+............
+
+ -- User Option: flycheck -shellcheck-excluded-warnings
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate *note
+ flycheck-string-list-p: 99.
+
+ A list of excluded warnings for ShellCheck.
+
+ The value of this variable is a list of strings, where each
+ string is a warning code to be excluded from ShellCheck reports.
+ By default, no warnings are excluded.
+
+ This variable is an option for the syntax checker ‘`sh-shellcheck'’.
+
+ This user option was introduced, or its default value was
+ changed, in version 0.21 of the flycheck package.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.gnu.org/software/bash/
+
+ (2) http://gondor.apana.org.au/~herbert/dash/
+
+ (3)
+http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
+
+ (4) http://www.gnu.org/software/bash/
+
+ (5)
+http://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html#Bash-POSIX-Mode
+
+ (6)
+http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
+
+ (7) http://www.zsh.org/
+
+ (8) https://github.com/koalaman/shellcheck/
+
+\1f
+File: flycheck.info, Node: Slim, Next: TeX/LaTeX, Prev: Shell script languages, Up: Supported languages
+
+6.39 Slim
+=========
+
+ -- Flycheck Syntax Checker: slim
+
+ A Slim syntax checker using the Slim compiler.
+
+ See URL ‘http://slim-lang.com’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://slim-lang.com
+
+\1f
+File: flycheck.info, Node: TeX/LaTeX, Next: Texinfo, Prev: Slim, Up: Supported languages
+
+6.40 TeX/LaTeX
+==============
+
+See also
+........
+
+LaTeX(1), TeX Live(2)
+
+ -- Flycheck Syntax Checker: tex -chktex
+
+ A TeX and LaTeX syntax and style checker using chktex.
+
+ See URL ‘http://www.nongnu.org/chktex/’(3).
+
+ Configuration file
+.......................
+
+ -- User Option: flycheck -chktexrc
+
+ Variable properties: This variable is safe as a file
+ local variable if its value satisfies the predicate
+ ‘stringp’.
+
+ Configuration file for ‘`tex-chktex'’.
+
+ -- Flycheck Syntax Checker: tex -lacheck
+
+ A LaTeX syntax and style checker using lacheck.
+
+ See URL ‘http://www.ctan.org/pkg/lacheck’(4).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.latex-project.org/
+
+ (2) http://www.tug.org/texlive/
+
+ (3) http://www.nongnu.org/chktex/
+
+ (4) http://www.ctan.org/pkg/lacheck
+
+\1f
+File: flycheck.info, Node: Texinfo, Next: Verilog, Prev: TeX/LaTeX, Up: Supported languages
+
+6.41 Texinfo
+============
+
+ -- Flycheck Syntax Checker: texinfo
+
+ A Texinfo syntax checker using makeinfo.
+
+ See URL ‘http://www.gnu.org/software/texinfo/’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.gnu.org/software/texinfo/
+
+\1f
+File: flycheck.info, Node: Verilog, Next: XML, Prev: Texinfo, Up: Supported languages
+
+6.42 Verilog
+============
+
+ -- Flycheck Syntax Checker: verilog -verilator
+
+ A Verilog syntax checker using the Verilator Verilog HDL simulator.
+
+ See URL ‘http://www.veripool.org/wiki/verilator’(1).
+
+ ---------- Footnotes ----------
+
+ (1) http://www.veripool.org/wiki/verilator
+
+\1f
+File: flycheck.info, Node: XML, Next: YAML, Prev: Verilog, Up: Supported languages
+
+6.43 XML
+========
+
+ -- Flycheck Syntax Checker: xml -xmlstarlet
+
+ A XML syntax checker and validator using the xmlstarlet utility.
+
+ See URL ‘http://xmlstar.sourceforge.net/’(1).
+
+ -- Flycheck Syntax Checker: xml -xmllint
+
+ A XML syntax checker and validator using the xmllint utility.
+
+ The xmllint is part of libxml2, see URL
+ ‘http://www.xmlsoft.org/’(2).
+
+ ---------- Footnotes ----------
+
+ (1) http://xmlstar.sourceforge.net/
+
+ (2) http://www.xmlsoft.org/
+
+\1f
+File: flycheck.info, Node: YAML, Prev: XML, Up: Supported languages
+
+6.44 YAML
+=========
+
+ -- Flycheck Syntax Checker: yaml -jsyaml
+
+ A YAML syntax checker using JS-YAML.
+
+ See URL ‘https://github.com/nodeca/js-yaml’(1).
+
+ -- Flycheck Syntax Checker: yaml -ruby
+
+ A YAML syntax checker using Ruby’s YAML parser.
+
+ This syntax checker uses the YAML parser from Ruby’s standard
+ library.
+
+ See URL ‘http://www.ruby-doc.org/stdlib-2.0.0/libdoc/yaml/rdoc/YAML.html’(2).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/nodeca/js-yaml
+
+ (2) http://www.ruby-doc.org/stdlib-2.0.0/libdoc/yaml/rdoc/YAML.html
+
+\1f
+File: flycheck.info, Node: Glossary, Next: Flycheck releases, Prev: Supported languages, Up: Top
+
+7 Glossary
+**********
+
+syntax checker
+
+ A symbol which is defined as syntax checker with *note
+ flycheck-define-checker: 19.
+
+registered syntax checker
+
+ A *note syntax checker: 64. available for automatic selection, i.e.
+ that is contained in *note flycheck-checkers: 5e.
+
+disabled syntax checker
+
+ A *note syntax checker: 64. explicitly excluded from available
+ selection, i.e. that is contained in *note
+ flycheck-disabled-checkers: 5f.
+
+enabled syntax checker
+
+ A *note registered syntax checker: 60. which is not a *note
+ disabled syntax checker: 15f.
+
+suitable syntax checker
+
+ A *note syntax checker: 64. which can be used to check the current
+ buffer. Precisely, a syntax checker which
+
+ - which can be used for the current major mode,
+
+ - and whose predicate succeeds,
+
+ - and whose syntax checker tool exists.
+
+chaining
+
+ In some languages, multiple *note syntax checkers: 64. can be
+ applied to a buffer. In such a case, each syntax checker specifies
+ which checkers are to be used after it and when. The result is a
+ “syntax checker chain”, specifying all syntax checkers to be
+ applied to the buffer.
+
+ For instance, Haskell buffers are first checked with GHC for syntax
+ and type errors, and then with ‘hlint’ for idiomatic and semantic
+ mistakes. Hence, the syntax checker chain consists of *note
+ haskell-ghc: eb. and *note haskell-hlint: ec.
+
+\1f
+File: flycheck.info, Node: Flycheck releases, Next: Extending Flycheck, Prev: Glossary, Up: Top
+
+8 Flycheck releases
+*******************
+
+This document contains the release announcements for Flycheck, and the
+complete changelog.
+
+* Menu:
+
+* Release announcements::
+* Changelog::
+
+\1f
+File: flycheck.info, Node: Release announcements, Next: Changelog, Up: Flycheck releases
+
+8.1 Release announcements
+=========================
+
+* Menu:
+
+* Flycheck 0.22: Flycheck 0 22.
+* Flycheck 0.21: Flycheck 0 21.
+* Flycheck 0.20: Flycheck 0 20.
+* Flycheck 0.19: Flycheck 0 19.
+* Flycheck 0.18: Flycheck 0 18.
+* Flycheck 0.17: Flycheck 0 17.
+* Flycheck 0.16: Flycheck 0 16.
+* Flycheck 0.15: Flycheck 0 15.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 22, Next: Flycheck 0 21, Up: Release announcements
+
+8.1.1 Flycheck 0.22
+-------------------
+
+
+date: Dec 23, 2014
+
+
+version: 0.22
+
+Flycheck 0.22 comes with some major new features, most notably generic
+syntax checkers and many improvements and bug fixes. Unfortunately,
+some of these changes break backwards compatibility.
+
+This announcement covers the most important changes. For details,
+please refer to the *note Changelog: 165.
+
+* Menu:
+
+* Breaking changes::
+* Setup: Setup<2>.
+* Language support::
+* Syntax checking improvements::
+* Error list improvements::
+* Generic syntax checkers::
+* Error IDs::
+* Unit test library for Flycheck::
+
+\1f
+File: flycheck.info, Node: Breaking changes, Next: Setup<2>, Up: Flycheck 0 22
+
+8.1.1.1 Breaking changes
+........................
+
+ Warning: The addition of generic syntax checkers lead to some
+ breaking changes to the internals of syntax checker definitions.
+ Due to the way macros work in Emacs Lisp *all packages depending on
+ Flycheck* must be recompiled after upgrading to Flycheck 0.22!
+
+ We hope that this will be the last breaking change of this kind,
+ since the definition of syntax checkers is now wrapped into
+ functions, and the *note flycheck-define-checker: 19. macro just
+ provides some syntactic sugar for definitions.
+
+Error parsers must explicitly set *note flycheck-error buffer: 167. and
+*note flycheck-error checker: 168. of new *note flycheck-error: 169.
+objects now. This is another consequence of generic syntax checkers.
+
+‘flycheck-perlcritic-verbosity’ and ‘flycheck-copy-messages-as-kill’ are
+obsolete now, in favour of *note flycheck-perlcritic-severity: 10a. and
+*note flycheck-copy-errors-as-kill: 85. respectively.
+‘flycheck-google-messages’ has been removed completely.
+
+*note flycheck-select-checker: 24. cannot select disabled syntax
+checkers anymore.
+
+Syntax checker options and configuration file variables are not
+buffer-local anymore, with some exceptions. Consequently you can now
+use ‘setq’ to set their global value, and you *must* use ‘setq-local’ to
+set them locally. Variables set via file or directory variables are not
+affected by this change.
+
+\1f
+File: flycheck.info, Node: Setup<2>, Next: Language support, Prev: Breaking changes, Up: Flycheck 0 22
+
+8.1.1.2 Setup
+.............
+
+The new *note flycheck-verify-setup: 5a. command provides information
+about all applicable syntax checkers, and lists potential problems. It
+is intended to help you uncover issues in your Flycheck setup.
+
+\1f
+File: flycheck.info, Node: Language support, Next: Syntax checking improvements, Prev: Setup<2>, Up: Flycheck 0 22
+
+8.1.1.3 Language support
+........................
+
+* Menu:
+
+* Ada: Ada<2>.
+* C/C++: C/C++<2>.
+* Emacs Lisp: Emacs Lisp<2>.
+* Haskell: Haskell<2>.
+* Fortran: Fortran<2>.
+* Python: Python<2>.
+* Rust: Rust<2>.
+* TeX/LaTeX: TeX/LaTeX<2>.
+
+\1f
+File: flycheck.info, Node: Ada<2>, Next: C/C++<2>, Up: Language support
+
+8.1.1.4 Ada
+...........
+
+The new option *note flycheck-gnat-args: 97. allows to pass arbitrary
+arguments to *note ada-gnat: 96.
+
+\1f
+File: flycheck.info, Node: C/C++<2>, Next: Emacs Lisp<2>, Prev: Ada<2>, Up: Language support
+
+8.1.1.5 C/C++
+.............
+
+Flycheck now correctly computes the error level from errors in included
+files. Messages of errors in included files are now discarded to reduce
+the verbosity of error reporting.
+
+The new options *note flycheck-clang-args: a2. and *note
+flycheck-gcc-args: ad. allow to pass arbitrary arguments to *note
+c/c++-clang: 9f. and *note c/c++-gcc: ac. respectively.
+
+\1f
+File: flycheck.info, Node: Emacs Lisp<2>, Next: Haskell<2>, Prev: C/C++<2>, Up: Language support
+
+8.1.1.6 Emacs Lisp
+..................
+
+The new ‘inherit’ value for *note flycheck-emacs-lisp-load-path: d0.
+automates ‘load-path’ inheritance for the *note emacs-lisp: cd. syntax
+checker. If you have the following in your init file
+
+ (setq-default flycheck-emacs-lisp-load-path load-path)
+
+please replace it with:
+
+ (setq flycheck-emacs-lisp-load-path 'inherit)
+
+As a consequence of this change you can now enable ‘load-path’
+inheritance via customize.
+
+\1f
+File: flycheck.info, Node: Haskell<2>, Next: Fortran<2>, Prev: Emacs Lisp<2>, Up: Language support
+
+8.1.1.7 Haskell
+...............
+
+The *note haskell-ghc: eb. syntax checker supports literate Haskell now.
+
+The new option *note flycheck-ghc-args: ed. allows to pass arbitrary
+arguments to *note haskell-ghc: eb.
+
+\1f
+File: flycheck.info, Node: Fortran<2>, Next: Python<2>, Prev: Haskell<2>, Up: Language support
+
+8.1.1.8 Fortran
+...............
+
+The new option *note flycheck-gfortran-args: d9. allows to pass
+arbitrary arguments to *note fortran-gfortran: d8.
+
+\1f
+File: flycheck.info, Node: Python<2>, Next: Rust<2>, Prev: Fortran<2>, Up: Language support
+
+8.1.1.9 Python
+..............
+
+The new syntax checker *note python-pycompile: 11c. uses the built-in
+byte compiler of Python to check a buffer for syntax errors. It is
+provided as a last resort for basic syntax checking of Python code, if
+neither pylint nor flake8 are installed.
+
+The error levels of *note python-flake8: 115. can now be customized via
+*note flycheck-flake8-error-level-alist: 116. The default value handles
+the standard plugins of flake8, and the 3rd party pep8-naming plugin.
+You can add custom patterns to this option to add support for other
+flake8 plugins.
+
+*note python-pylint: 11a. now has correct error columns.
+
+\1f
+File: flycheck.info, Node: Rust<2>, Next: TeX/LaTeX<2>, Prev: Python<2>, Up: Language support
+
+8.1.1.10 Rust
+.............
+
+The *note rust: 133. parses help messages to ‘info’-level errors now.
+
+\1f
+File: flycheck.info, Node: TeX/LaTeX<2>, Prev: Rust<2>, Up: Language support
+
+8.1.1.11 TeX/LaTeX
+..................
+
+*note tex-chktex: 14f. now has correct error columns as well.
+
+\1f
+File: flycheck.info, Node: Syntax checking improvements, Next: Error list improvements, Prev: Language support, Up: Flycheck 0 22
+
+8.1.1.12 Syntax checking improvements
+.....................................
+
+Flycheck now parses errors faster, because it does not longer access the
+file system to check the file of each parsed errors, and it protects
+against excessive error reporting by automatically disabling syntax
+checkers that try to report too many errors. The threshold is
+customizable via the new *note flycheck-checker-error-threshold: 71.
+option.
+
+\1f
+File: flycheck.info, Node: Error list improvements, Next: Generic syntax checkers, Prev: Syntax checking improvements, Up: Flycheck 0 22
+
+8.1.1.13 Error list improvements
+................................
+
+The error list now shows errors IDs for syntax checkers that emit these.
+
+Typing ‘g’ in the error list will re-check the source buffer, and
+refresh the error list afterwards.
+
+\1f
+File: flycheck.info, Node: Generic syntax checkers, Next: Error IDs, Prev: Error list improvements, Up: Flycheck 0 22
+
+8.1.1.14 Generic syntax checkers
+................................
+
+Flycheck now supports “generic” syntax checkers, which call arbitrary
+synchronous or asynchronous Emacs Lisp functions to check a buffer. The
+new function *note flycheck-define-generic-checker: 1b. defines a new
+generic syntax checker which calls a given function to conduct a syntax
+check.
+
+Syntax checkers for external commands are now called “command syntax
+checkers”, and implemented as a special kind of generic syntax checkers.
+*note flycheck-define-checker: 19. still defines a command syntax
+checker. The new function *note flycheck-define-command-checker: 177.
+is a non-macro variant of *note flycheck-define-generic-checker: 1b.
+
+\1f
+File: flycheck.info, Node: Error IDs, Next: Unit test library for Flycheck, Prev: Generic syntax checkers, Up: Flycheck 0 22
+
+8.1.1.15 Error IDs
+..................
+
+Syntax checkers can now add “IDs” to errors, which shall uniquely
+identify a particular kind of error. These IDs are used by Flycheck and
+Flycheck extensions to identify errors, particularly in future
+extensions such as error fixers.
+
+The new ‘id’ form for error patterns allows to parse IDs. Error parsers
+and generic syntax checkers can set the *note flycheck-error id: 179.
+slot to add IDs. The *note flycheck-parse-checkstyle: 17a. parser
+automatically adds IDs from the ‘source’ attribute of errors.
+
+The new error filters *note flycheck-dequalify-error-ids: 17b. and *note
+flycheck-remove-error-ids: 17c. manipulate IDs of parsed errors. The
+former removes qualifications from error IDs, turning ‘Foo.Bar.E1’ into
+‘E1’. The latter completely removes error IDs from parsed errors, for
+use in cases where the syntax checker only outputs bogus IDs.
+
+All built-in syntax checkers were updated to parse IDs, if possible.
+
+The error list now shows these IDs, and *note
+flycheck-copy-errors-as-kill: 85. can put them into the kill ring.
+
+\1f
+File: flycheck.info, Node: Unit test library for Flycheck, Prev: Error IDs, Up: Flycheck 0 22
+
+8.1.1.16 Unit test library for Flycheck
+.......................................
+
+The new library ‘flycheck-ert’ provides assertions and utilities to
+write unit tests for Flycheck syntax checkers. The library is part of
+all Flycheck packages.
+
+3rd party extensions may use this library to write test cases for their
+syntax checkers. *note Flycheck ERT API: 17e. documents the interface
+of this library.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 21, Next: Flycheck 0 20, Prev: Flycheck 0 22, Up: Release announcements
+
+8.1.2 Flycheck 0.21
+-------------------
+
+
+date: Oct 26, 2014
+
+
+version: 0.21
+
+Flycheck 0.21 is out, with new syntax checkers, many new options,
+improvements and bug fixes, and some important breaking changes.
+
+This announcement covers the most important changes. For details,
+please refer to the *note Changelog: 165.
+
+* Menu:
+
+* Breaking changes: Breaking changes<2>.
+* Language support: Language support<2>.
+* Error list changes::
+* Error navigation and display::
+* Syntax checker definition and extension::
+* Obtaining the new release::
+
+\1f
+File: flycheck.info, Node: Breaking changes<2>, Next: Language support<2>, Up: Flycheck 0 21
+
+8.1.2.1 Breaking changes
+........................
+
+ Warning: The value of the ‘:next-checkers’ property changed in a
+ backwards-incompatible way. The custom symbols ‘no-errors’ and
+ ‘warnings-only’ are gone. Instead the first item of each cons cell
+ is the _maximum permissible error level_ now. For instance,
+ ‘:next-checkers ((no-errors . foo))’ now becomes ‘:next-checkers
+ ((warning . foo))’. Please update all your syntax checker
+ definitions accordingly.
+
+The *note html-tidy: f4. syntax checker does not check Web Mode buffers
+anymore, because will frequently contain strictly invalid HTML.
+
+The *note d-dmd: c7. syntax checker requires DMD 2.066 or newer now, to
+add columns to error locations.
+
+The error list highlights all errors at the current line now.
+Highlighting of errors at point, i.e. the
+‘flycheck-error-list-highlight-at-point’ face and related functionality,
+was removed, because it would frequently cause odd and confusing
+highlighting.
+
+\1f
+File: flycheck.info, Node: Language support<2>, Next: Error list changes, Prev: Breaking changes<2>, Up: Flycheck 0 21
+
+8.1.2.2 Language support
+........................
+
+Flycheck now supports the Coq proof language and RPM spec files with the
+new syntax checkers *note coq: c3. and *note rpm-rpmlint: 125.
+respectively.
+
+* Menu:
+
+* C/C++: C/C++<3>.
+* D: D<2>.
+* Go: Go<2>.
+* HTML: HTML<2>.
+* Less::
+* Shell scripts::
+
+\1f
+File: flycheck.info, Node: C/C++<3>, Next: D<2>, Up: Language support<2>
+
+8.1.2.3 C/C++
+.............
+
+The new *note flycheck-gcc-openmp: b4. enables OpenMP for the *note
+c/c++-gcc: ac. checker to suppress warnings about OpenMP pragmas.
+
+The *note c/c++-gcc: ac. expands templates during syntax checks now.
+
+The *note c/c++-clang: 9f. syntax checker now handles empty messages
+from ‘#error’ and ‘#warning’ pragmas correctly.
+
+\1f
+File: flycheck.info, Node: D<2>, Next: Go<2>, Prev: C/C++<3>, Up: Language support<2>
+
+8.1.2.4 D
+.........
+
+The *note d-dmd: c7. syntax checker reports columns now, making error
+locations more precise. This requires DMD 2.066. Support for earlier
+DMD versions was dropped.
+
+\1f
+File: flycheck.info, Node: Go<2>, Next: HTML<2>, Prev: D<2>, Up: Language support<2>
+
+8.1.2.5 Go
+..........
+
+*note go-errcheck: e4. now handles packages correctly, fixing many
+faulty warnings.
+
+\1f
+File: flycheck.info, Node: HTML<2>, Next: Less, Prev: Go<2>, Up: Language support<2>
+
+8.1.2.6 HTML
+............
+
+*note html-tidy: f4. does not check Web Mode buffers anymore.
+
+\1f
+File: flycheck.info, Node: Less, Next: Shell scripts, Prev: HTML<2>, Up: Language support<2>
+
+8.1.2.7 Less
+............
+
+*note less: 101. now correctly resolves relative paths in ‘data-uri’.
+
+\1f
+File: flycheck.info, Node: Shell scripts, Prev: Less, Up: Language support<2>
+
+8.1.2.8 Shell scripts
+.....................
+
+The new *note flycheck-shellcheck-excluded-warnings: 14a. allows to
+exclude specific warnings from reports of the *note sh-shellcheck: 146.
+checker.
+
+In a related change, *note sh-shellcheck: 146. now includes the warning
+code into all reported errors, which makes it easier to set *note
+flycheck-shellcheck-excluded-warnings: 14a. accordingly.
+
+\1f
+File: flycheck.info, Node: Error list changes, Next: Error navigation and display, Prev: Language support<2>, Up: Flycheck 0 21
+
+8.1.2.9 Error list changes
+..........................
+
+The error list at *note flycheck-list-errors: 4b. was refined and fixed:
+
+ - Mouse support is restored: You can now click onto error messages
+ again, to navigate to the error source.
+
+ - When navigating inside the error list with ‘n’ or ‘p’, the error
+ list does not randomly alter the point position anymore.
+
+ - The syntax checker name now appears in a separate column. The
+ appearance of this column can be customized with new face :face:
+ ‘flycheck-error-list-checker-name’.
+
+ - Errors can be sorted by syntax checker name and message now.
+
+ - The new hook *note flycheck-error-list-after-refresh-hook: 7e. now
+ runs every time the error list was refreshed.
+
+ - The error list does not highlight errors at point separately
+ anymore, to avoid confusing highlighting.
+
+\1f
+File: flycheck.info, Node: Error navigation and display, Next: Syntax checker definition and extension, Prev: Error list changes, Up: Flycheck 0 21
+
+8.1.2.10 Error navigation and display
+.....................................
+
+The new option *note flycheck-navigation-minimum-level: 8a. allows to
+skip errors of specific error levels in error navigation, i.e. ‘M-g n’
+or ‘C-c ! n’. Errors of levels below the value of this new option are
+still shown in the buffer and in the error list, but they are skipped in
+any of the navigation commands.
+
+The new function *note
+flycheck-display-error-messages-unless-error-list: 7a. shows messages of
+the errors at point in the echo area, but only if the error list is
+_not_ visible. Use this function for *note
+flycheck-display-errors-function: 2b. to make use of this feature.
+
+\1f
+File: flycheck.info, Node: Syntax checker definition and extension, Next: Obtaining the new release, Prev: Error navigation and display, Up: Flycheck 0 21
+
+8.1.2.11 Syntax checker definition and extension
+................................................
+
+The ‘:next-checkers’ property requires a maximum permissible error level
+now. The custom predicates ‘no-errors’ and ‘warnings-only’ are gone.
+
+Syntax checker definitions can use the new ‘null-device’ symbol to add
+the name of the system null device (e.g. ‘/dev/null’ on Unix, ‘NUL’ on
+Windows) to the syntax checker arguments. Typically, this would be used
+to ignore files generated by the syntax checker. See the definition of
+the *note c/c++-gcc: ac. syntax checker for an example.
+
+The new function *note flycheck-add-mode: 18c. adds major modes to
+existing syntax checkers, by extending the ‘:modes’ property.
+
+\1f
+File: flycheck.info, Node: Obtaining the new release, Prev: Syntax checker definition and extension, Up: Flycheck 0 21
+
+8.1.2.12 Obtaining the new release
+..................................
+
+Follow the *note installation instructions: 33. If you already have
+Flycheck installed, just update it from ‘M-x list-packages’.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 20, Next: Flycheck 0 19, Prev: Flycheck 0 21, Up: Release announcements
+
+8.1.3 Flycheck 0.20
+-------------------
+
+
+date: Aug 12, 2014
+
+
+version: 0.20
+
+Flycheck 0.20 is out, with new syntax checkers, many new options,
+improvements and bug fixes, and some important breaking changes.
+
+This announcement covers the most important changes. For details,
+please refer to the *note Changelog: 165.
+
+* Menu:
+
+* Breaking changes: Breaking changes<3>.
+* Language support: Language support<3>.
+* Error list improvements: Error list improvements<2>.
+* User interface improvements::
+* Miscellaneous new features::
+* Miscellaneous fixes::
+* Get it::
+
+\1f
+File: flycheck.info, Node: Breaking changes<3>, Next: Language support<3>, Up: Flycheck 0 20
+
+8.1.3.1 Breaking changes
+........................
+
+ Warning: The internals of syntax checker definitions changed in a
+ backwards-incompatible way. Due to the way macros work in Emacs
+ Lisp *all packages depending on Flycheck* must be recompiled after
+ upgrading to Flycheck 0.20!
+
+Furthermore, the special meaning of a trailing equals sign in ‘(config
+…)’ and ‘(config-file …)’ is removed. Syntax checker definitions now
+need to explicitly specify a function to concatenate the option and its
+arguments. ‘(option "--foo=" foo)’ now becomes ‘(option "--foo=" foo
+concat)’.
+
+As a consequence of this change, the position of the ‘filter’ in
+‘(option …)’ changed. The ‘filter’ is now in the *forth* element.
+Hence, ‘(option "--foo" foo flycheck-option-int)’ now becomes ‘(option
+"--foo" foo nil flycheck-option-int)’.
+
+\1f
+File: flycheck.info, Node: Language support<3>, Next: Error list improvements<2>, Prev: Breaking changes<3>, Up: Flycheck 0 20
+
+8.1.3.2 Language support
+........................
+
+Flycheck now supports Ada and Fortran with *note ada-gnat: 96. and *note
+fortran-gfortran: d8. respectively.
+
+* Menu:
+
+* C/C++: C/C++<4>.
+* Rust: Rust<3>.
+* Scala: Scala<2>.
+* Sass/SCSS::
+* Javascript: Javascript<2>.
+* Ruby: Ruby<2>.
+
+\1f
+File: flycheck.info, Node: C/C++<4>, Next: Rust<3>, Up: Language support<3>
+
+8.1.3.3 C/C++
+.............
+
+C/C++ can now be checked with GCC (*note c/c++-gcc: ac.) as an
+alternative to Clang. GCC supports the same options as Clang, with the
+exception of *note flycheck-clang-blocks: a3.
+
+The Clang syntax checker now supports the Clang block syntax with the
+new option *note flycheck-clang-blocks: a3, and allows to disable
+exceptions with *note flycheck-clang-no-exceptions: a9.
+
+Furthermore, temporary files for the Clang syntax checker are now
+created in the system temporary directory.
+
+\1f
+File: flycheck.info, Node: Rust<3>, Next: Scala<2>, Prev: C/C++<4>, Up: Language support<3>
+
+8.1.3.4 Rust
+............
+
+Support for Rust creates is greatly improved. You can now specify the
+type of crate to check with ‘flycheck-rust-crate-type’, and the root
+file of the crate with ‘flycheck-rust-crate-root’. The former avoids
+redundant warnings due to unused code, and the latter helps to resolve
+relative module references.
+
+Flycheck also parses info messages from Rust now.
+
+\1f
+File: flycheck.info, Node: Scala<2>, Next: Sass/SCSS, Prev: Rust<3>, Up: Language support<3>
+
+8.1.3.5 Scala
+.............
+
+Flycheck now supports Scalastyle(1) with *note scala-scalastyle: 13e.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.scalastyle.org/
+
+\1f
+File: flycheck.info, Node: Sass/SCSS, Next: Javascript<2>, Prev: Scala<2>, Up: Language support<3>
+
+8.1.3.6 Sass/SCSS
+.................
+
+*note sass: 13a. and *note scss: 142. now use a temporary directory for
+their cache and do not clutter the source directory anymore.
+
+\1f
+File: flycheck.info, Node: Javascript<2>, Next: Ruby<2>, Prev: Sass/SCSS, Up: Language support<3>
+
+8.1.3.7 Javascript
+..................
+
+*note flycheck-eslintrc: fb. is now ‘nil’ by default. ESLint(1) will
+now find its configuration file by itself, which enables configuration
+cascading. See Configuring ESLint(2) for more information.
+
+ ---------- Footnotes ----------
+
+ (1) http://eslint.org/
+
+ (2) http://eslint.org/docs/configuring/
+
+\1f
+File: flycheck.info, Node: Ruby<2>, Prev: Javascript<2>, Up: Language support<3>
+
+8.1.3.8 Ruby
+............
+
+*note ruby-rubylint: 12c. now supports configuration files with *note
+flycheck-rubylintrc: 12f. This requires ruby-lint 2.0.2 or newer.
+
+\1f
+File: flycheck.info, Node: Error list improvements<2>, Next: User interface improvements, Prev: Language support<3>, Up: Flycheck 0 20
+
+8.1.3.9 Error list improvements
+...............................
+
+The error list (*note flycheck-list-errors: 4b.) got a bunch of
+improvements:
+
+ - Errors can now be sorted by error level and by error location,
+ either by clicking on the headers of ‘line’ and ‘level’
+ respectively, or by pressing ‘S’ when the point is on the text of
+ the corresponding column.
+
+ - Pressing ‘RET’ on any error in the error list now jumps immediately
+ to the error location.
+
+ - ‘n’ and ‘p’ now move by errors instead by lines, even with
+ multi-line error messages, and display the error location in
+ another window while navigating.
+
+\1f
+File: flycheck.info, Node: User interface improvements, Next: Miscellaneous new features, Prev: Error list improvements<2>, Up: Flycheck 0 20
+
+8.1.3.10 User interface improvements
+....................................
+
+The mode line indicator of Flycheck is now customizable with *note
+flycheck-mode-line: 8e, which is a mode line template (see *note
+(elisp)Mode Line Format::). The mode line of the error list buffer is
+customizable as well, with ‘flycheck-error-list-mode-line’.
+
+The Flycheck menu at _Tools -> Syntax Checking_ was improved. It now
+provides an item to toggle Flycheck Mode in the current buffer. Items
+that are not available currently are now disabled. The menu is also
+shown on the mode line indicator now.
+
+*note flycheck-compile: 19c. now prompts for a syntax checker to use,
+defaulting to the last used for the current buffer.
+
+When Flycheck asks for a syntax checker in the minibuffer, it now
+presents a reasonable default.
+
+\1f
+File: flycheck.info, Node: Miscellaneous new features, Next: Miscellaneous fixes, Prev: User interface improvements, Up: Flycheck 0 20
+
+8.1.3.11 Miscellaneous new features
+...................................
+
+The new hook *note flycheck-status-changed-functions: 19e. lets
+extensions and customization react on any status change in Flycheck.
+
+Error levels defined with ‘flycheck-define-error-level’ can now have a
+numeric severity used for sorting, with ‘:severity’.
+
+\1f
+File: flycheck.info, Node: Miscellaneous fixes, Next: Get it, Prev: Miscellaneous new features, Up: Flycheck 0 20
+
+8.1.3.12 Miscellaneous fixes
+............................
+
+Flycheck now properly unloads with ‘unload-feature’.
+
+The *note emacs-lisp: cd. checker does not longer choke when
+‘package-initialize’ signals an error.
+
+\1f
+File: flycheck.info, Node: Get it, Prev: Miscellaneous fixes, Up: Flycheck 0 20
+
+8.1.3.13 Get it
+...............
+
+Follow the *note installation instructions: 33. If you already have
+Flycheck installed, just update it from ‘M-x list-packages’.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 19, Next: Flycheck 0 18, Prev: Flycheck 0 20, Up: Release announcements
+
+8.1.4 Flycheck 0.19
+-------------------
+
+
+date: Jun 12, 2014
+
+
+version: 0.19
+
+We are pleased to announce the release of Flycheck 0.19.
+
+* Menu:
+
+* Breaking changes: Breaking changes<4>.
+* Languages::
+* New features::
+* Bug fixes::
+* Misc changes::
+* Get it: Get it<2>.
+
+\1f
+File: flycheck.info, Node: Breaking changes<4>, Next: Languages, Up: Flycheck 0 19
+
+8.1.4.1 Breaking changes
+........................
+
+*note ruby-rubylint: 12c. requires Ruby Lint 2.0 or newer, due to some
+breaking changes in the command line interface of Ruby Lint.
+
+\1f
+File: flycheck.info, Node: Languages, Next: New features, Prev: Breaking changes<4>, Up: Flycheck 0 19
+
+8.1.4.2 Languages
+.................
+
+* Menu:
+
+* C/C++: C/C++<5>.
+* Emacs Lisp: Emacs Lisp<3>.
+* Go: Go<3>.
+* Haskell: Haskell<3>.
+* Rust: Rust<4>.
+
+\1f
+File: flycheck.info, Node: C/C++<5>, Next: Emacs Lisp<3>, Up: Languages
+
+8.1.4.3 C/C++
+.............
+
+The new *note flycheck-cppcheck-inconclusive: b7. enables *note
+c/c++-cppcheck: a1. tests that might yield false positives.
+
+When reporting errors in included files, *note c/c++-clang: 9f. now
+includes the error messages in the faulty include file in the error
+message on the affected ‘#include’ statement.
+
+\1f
+File: flycheck.info, Node: Emacs Lisp<3>, Next: Go<3>, Prev: C/C++<5>, Up: Languages
+
+8.1.4.4 Emacs Lisp
+..................
+
+Flycheck now removes redundant whitespace in the error messages reported
+by the *note emacs-lisp: cd. syntax checker.
+
+\1f
+File: flycheck.info, Node: Go<3>, Next: Haskell<3>, Prev: Emacs Lisp<3>, Up: Languages
+
+8.1.4.5 Go
+..........
+
+Go code is now checked for unhandled error return values with the new
+*note go-errcheck: e4. syntax checker.
+
+Flycheck does not longer signal errors in Go Mode, when the ‘go’
+executable is not available.
+
+\1f
+File: flycheck.info, Node: Haskell<3>, Next: Rust<4>, Prev: Go<3>, Up: Languages
+
+8.1.4.6 Haskell
+...............
+
+Flycheck now dedents the error messages reported by *note haskell-ghc:
+eb, and properly checks Haskell files without extensions.
+
+\1f
+File: flycheck.info, Node: Rust<4>, Prev: Haskell<3>, Up: Languages
+
+8.1.4.7 Rust
+............
+
+*note rust: 133. has a new *note flycheck-rust-check-tests: 134. option,
+to disable syntax checking of test code.
+
+\1f
+File: flycheck.info, Node: New features, Next: Bug fixes, Prev: Languages, Up: Flycheck 0 19
+
+8.1.4.8 New features
+....................
+
+Syntax checkers may now use the ‘:error-filter’ argument to *note
+flycheck-define-checker: 19. to apply a function to all errors after
+parsing. The function is given the list of parsed errors, and shall
+return the list of errors that Flycheck is to use as the result of the
+syntax checker. It may modify the list and all error objects therein
+in-place.
+
+The new option *note flycheck-keymap-prefix: 50. lets you change the
+prefix key used by Flycheck. The default is still ‘C-c !’.
+
+ Warning: The Flycheck manual assumes that you are using the default
+ prefix key. You are encouraged to leave the prefix key unchanged,
+ and instead add your own custom bindings to the Flycheck key map:
+
+ (eval-after-load 'flycheck
+ '(define-key flycheck-mode-map (kbd "<f8>") #'flycheck-list-errors))
+
+Likewise, you now can configure the prefix of in-place temporary files
+created by Flycheck with *note flycheck-temp-prefix: 5b.
+
+ Warning: Changing the prefix may break syntax checkers. In doubt,
+ stick to the default prefix.
+
+\1f
+File: flycheck.info, Node: Bug fixes, Next: Misc changes, Prev: New features, Up: Flycheck 0 19
+
+8.1.4.9 Bug fixes
+.................
+
+Flycheck now correctly kills running process and removes the temporary
+files when stopping a syntax check or killing the buffer.
+
+Also, Flycheck does not long warn if a syntax checker only reports
+errors for other files.
+
+\1f
+File: flycheck.info, Node: Misc changes, Next: Get it<2>, Prev: Bug fixes, Up: Flycheck 0 19
+
+8.1.4.10 Misc changes
+.....................
+
+Flycheck now has an official logo, and its own mail address. You can
+see both on the Github profile(1) of the Flycheck project.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/
+
+\1f
+File: flycheck.info, Node: Get it<2>, Prev: Misc changes, Up: Flycheck 0 19
+
+8.1.4.11 Get it
+...............
+
+See *note Installation: 31.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 18, Next: Flycheck 0 17, Prev: Flycheck 0 19, Up: Release announcements
+
+8.1.5 Flycheck 0.18
+-------------------
+
+
+date: Mar 24, 2014
+
+
+version: 0.18
+
+Today, we release Flycheck 0.18.
+
+It’s quite some time since the last release, but there are not many big
+changes, as Flycheck becomes more and more mature, and slowly approaches
+a 1.0 release.
+
+* Menu:
+
+* Breaking changes: Breaking changes<5>.
+* Syntax checkers: Syntax checkers<2>.
+* Bug fixes: Bug fixes<2>.
+* Get it: Get it<3>.
+
+\1f
+File: flycheck.info, Node: Breaking changes<5>, Next: Syntax checkers<2>, Up: Flycheck 0 18
+
+8.1.5.1 Breaking changes
+........................
+
+There are some small breaking changes. Most notably, the naming
+conventions of various shell script syntax checkers were changed. All
+of them now use the prefix ‘sh-’, and the former ‘sh-’ checkers now have
+the prefix ‘sh-posix-’. This affects their executable variables as
+well.
+
+Furthermore, the version requirements for some syntax checker tools
+changed:
+
+ - *note rust: 133. needs upcoming Rust 0.10 now, because Flycheck
+ followed backwards-incompatible upstream changes in the ‘rustc’
+ options.
+
+ - *note rst-sphinx: 128. needs Sphinx 1.2 now, because Flycheck uses
+ a special writer now, which is not present in previous releases.
+
+\1f
+File: flycheck.info, Node: Syntax checkers<2>, Next: Bug fixes<2>, Prev: Breaking changes<5>, Up: Flycheck 0 18
+
+8.1.5.2 Syntax checkers
+.......................
+
+Flycheck can now check BSD Makefile with BSD Make as well. The *note
+make: 105. syntax checker does not use GNU Make specific options
+anymore, and will work with any POSIX compatible variant of Make.
+
+Go syntax checking got a major update with new syntax checkers based on
+Golint(1) (*note go-golint: e0.) and ‘go tool vet’ (*note go-vet: e1.).
+Go now has one of the most complete and powerful syntax checker chains
+in Flycheck.
+
+Support for Perl and for shell scripts was greatly improved by
+introducing two new syntax checkers:
+
+ - *note perl-perlcritic: 109. checks Perl with the powerful
+ Perl-Critic(2) tool.
+
+ - *note sh-shellcheck: 146. checks Shell scripts with the awesome
+ Shellcheck(3) tool, which finds all sorts of idiomatic and
+ semantics mistakes in shell scripts of various shell languages, and
+ will greatly improve your shell scripting.
+
+D users can now tell *note d-dmd: c7. about include directories with the
+new option *note flycheck-dmd-include-path: c8. Likewise, Rust users
+can use *note flycheck-rust-library-path: 137. now.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/golang/lint
+
+ (2) https://metacpan.org/pod/Perl::Critic
+
+ (3) https://github.com/koalaman/shellcheck
+
+\1f
+File: flycheck.info, Node: Bug fixes<2>, Next: Get it<3>, Prev: Syntax checkers<2>, Up: Flycheck 0 18
+
+8.1.5.3 Bug fixes
+.................
+
+As always, a good deal of bugs and issues was fixed:
+
+ - *note puppet-lint: 113. includes the name of the corresponding
+ check in the error message now.
+
+ - *note rst: 127. handles ‘.. include::’ directives with relative
+ file names now.
+
+ - *note rst-sphinx: 128. will no longer choke if the document being
+ checked contains custom nodes without ‘text’ writers.
+
+ - *note rust: 133. will not longer emit pointless warnings about
+ missing ‘main’ functions in library creates.
+
+ - Various error parsing problems were corrected in *note c/c++-clang:
+ 9f, *note go-build: e2. and *note go-test: e3.
+
+\1f
+File: flycheck.info, Node: Get it<3>, Prev: Bug fixes<2>, Up: Flycheck 0 18
+
+8.1.5.4 Get it
+..............
+
+See *note Installation: 31.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 17, Next: Flycheck 0 16, Prev: Flycheck 0 18, Up: Release announcements
+
+8.1.6 Flycheck 0.17
+-------------------
+
+
+date: Feb 1, 2014
+
+
+version: 0.17
+
+Flycheck 0.17 was released today. Though it’s just about two weeks
+since the last release, there are quite some changes.
+
+* Menu:
+
+* Breaking changes: Breaking changes<6>.
+* New online manual::
+* Syntax checkers: Syntax checkers<3>.
+* Extending syntax checkers::
+* Other bug fixes and improvements::
+
+\1f
+File: flycheck.info, Node: Breaking changes<6>, Next: New online manual, Up: Flycheck 0 17
+
+8.1.6.1 Breaking changes
+........................
+
+The default value of *note flycheck-completion-system: 65. was changed
+to ‘nil’, i.e. Flycheck now uses plain ‘completing-read’ as default
+completion system. To restore the previous default (i.e. IDO),
+customize it with ‘M-x customize-variable RET
+flycheck-completion-system’ or add the following to your ‘init.el’:
+
+ (eval-after-load 'flycheck '(setq flycheck-completion-system 'ido))
+
+Also, *note flycheck-count-errors: 92. was changed to count errors of
+all levels. It returns an alist mapping error levels to the amount of
+errors of that level.
+
+\1f
+File: flycheck.info, Node: New online manual, Next: Syntax checkers<3>, Prev: Breaking changes<6>, Up: Flycheck 0 17
+
+8.1.6.2 New online manual
+.........................
+
+The most notable change is the new online documentation at
+‘http://flycheck.readthedocs.org’, which replaces the old online manual
+at ‘http://flycheck.github.io’. The latter now redirects to the former.
+
+The new manual is written with Sphinx(1) instead of Texinfo(2). The
+underlying markup is ReStructuredText(3), which is simpler, less
+cluttered, and more powerful than the TeX dialect of Texinfo(4). It is
+also more popular, as nowadays Sphinx has become a standard tool among
+Python developers, and is also increasingly used with other languages as
+well. For instance, the LLVM documentation(5) is written in Sphinx.
+
+Besides providing a better HTML documentation, we hope that the new
+manual lowers the barrier to external contributors and increases the
+amount of contributions to the documentation.
+
+The documentation is now automatically re-build after each push to the
+Github repository, so that ‘http://flycheck.readthedocs.org/en/latest’
+now always hosts the up to date documentation. Besides, there are
+separate sites for each versioned release of Flycheck. For instance,
+‘http://flycheck.readthedocs.org/en/0.17’ now hosts the documentation of
+Flycheck 0.17 now.
+
+Beyond the manual itself, the new documentation now also includes the
+release notes, which were previously hosted at
+‘http://www.lunaryorn.com’, and the *note comparison with Flymake: d,
+which was previously hosted at the Github Wiki of Flycheck. The Github
+Wiki is disabled now, to make all documentation available from a single
+place.
+
+Unfortunately, the Info manual included in the Flycheck ELPA packages is
+somewhat inferior now, because there is some idiomatic gap between
+Sphinx and Texinfo. It’s still usable, though, and we hope to overcome
+the most striking shortcomings over the time.
+
+ ---------- Footnotes ----------
+
+ (1) http://sphinx-doc.org
+
+ (2) http://www.gnu.org/software/texinfo/
+
+ (3) http://docutils.sourceforge.net/rst.html
+
+ (4) http://www.gnu.org/software/texinfo/
+
+ (5) http://llvm.org/docs/
+
+\1f
+File: flycheck.info, Node: Syntax checkers<3>, Next: Extending syntax checkers, Prev: New online manual, Up: Flycheck 0 17
+
+8.1.6.3 Syntax checkers
+.......................
+
+Flycheck can now check GNU Makefiles (see [GH-321](1)) with the new
+‘make-gmake’ syntax checker.
+
+The *note rust: 133. syntax checker now uses ‘--no-trans’ to check for
+more than just syntax errors. For instance, it will report unused
+variables now.
+
+As part of the transition to the new manual, Flycheck now provides a
+syntax checker for Sphinx documents (*note rst-sphinx: 128.). The *note
+rst: 127. syntax checker does not check documents within a Sphinx
+project anymore, do avoid false positives from Sphinx-specific markup.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/321
+
+\1f
+File: flycheck.info, Node: Extending syntax checkers, Next: Other bug fixes and improvements, Prev: Syntax checkers<3>, Up: Flycheck 0 17
+
+8.1.6.4 Extending syntax checkers
+.................................
+
+\1f
+File: flycheck.info, Node: Other bug fixes and improvements, Prev: Extending syntax checkers, Up: Flycheck 0 17
+
+8.1.6.5 Other bug fixes and improvements
+........................................
+
+ - Flycheck does not longer attach syntax checker processes to the
+ buffer anymore, improving compatibility with Tabbar Mode
+ ([GH-298](1)).
+
+ - The *note emacs-lisp: cd. and *note emacs-lisp-checkdoc: ce. syntax
+ checkers do not visit the file being checked anymore, to avoid
+ unintended side effects from unsafe local variables, etc.
+ ([GH-319](2))
+
+ - When a buffer changes while being checked, Flycheck immediately
+ re-checks the buffer after the check finished, to avoid outdated
+ errors ([GH-301](3)).
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/298
+
+ (2) https://github.com/flycheck/flycheck/issues/319
+
+ (3) https://github.com/flycheck/flycheck/issues/301
+
+\1f
+File: flycheck.info, Node: Flycheck 0 16, Next: Flycheck 0 15, Prev: Flycheck 0 17, Up: Release announcements
+
+8.1.7 Flycheck 0.16
+-------------------
+
+
+date: Jan 12, 2014
+
+
+version: 0.16
+
+Time for a new release of Flycheck, the modern syntax-checking extension
+for Emacs:
+
+In two months since the last release, Flycheck got a bunch of new syntax
+checkers, a brand-new error list, and the ability to override the
+executables of syntax checkers.
+
+Let’s go through the list of important changes. For a detailed list,
+please read the *note Changelog: 165.
+
+* Menu:
+
+* Breaking changes: Breaking changes<7>.
+* Syntax checkers: Syntax checkers<4>.
+* New features: New features<2>.
+* Improved error list::
+* Get it: Get it<4>.
+
+\1f
+File: flycheck.info, Node: Breaking changes<7>, Next: Syntax checkers<4>, Up: Flycheck 0 16
+
+8.1.7.1 Breaking changes
+........................
+
+ - The Hdevtools syntax checker was removed from Flycheck into a
+ separate package flycheck-hdevtools(1) due to various issues
+ ([GH-275](2)).
+
+ - Support for coffeelint 0.x is dropped.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-hdevtools
+
+ (2) https://github.com/flycheck/flycheck/issues/275
+
+\1f
+File: flycheck.info, Node: Syntax checkers<4>, Next: New features<2>, Prev: Breaking changes<7>, Up: Flycheck 0 16
+
+8.1.7.2 Syntax checkers
+.......................
+
+* Menu:
+
+* New languages and checkers::
+* Better Haskell support::
+* Miscellaneous new options::
+
+\1f
+File: flycheck.info, Node: New languages and checkers, Next: Better Haskell support, Up: Syntax checkers<4>
+
+8.1.7.3 New languages and checkers
+..................................
+
+Flycheck supports _eight_ new languages: AsciiDoc(1), Cfengine(2),
+Chef(3) recipes, ERuby(4), Handlebars(5), Racket(6), Texinfo(7), and
+Verilog(8). Additionally, there are a new syntax checker for Javascript
+(eslint(9)), Ruby (ruby-lint(10)), and YAML (js-yaml(11)).
+
+ ---------- Footnotes ----------
+
+ (1) http://asciidoc.org/
+
+ (2) http://cfengine.com/
+
+ (3) https://www.getchef.com/
+
+ (4) http://www.kuwata-lab.com/erubis/
+
+ (5) http://handlebarsjs.com/
+
+ (6) http://racket-lang.org/
+
+ (7) https://www.gnu.org/software/texinfo
+
+ (8) https://en.wikipedia.org/wiki/Verilog
+
+ (9) https://github.com/eslint/eslint
+
+ (10) https://github.com/YorickPeterse/ruby-lint
+
+ (11) https://github.com/nodeca/js-yaml
+
+\1f
+File: flycheck.info, Node: Better Haskell support, Next: Miscellaneous new options, Prev: New languages and checkers, Up: Syntax checkers<4>
+
+8.1.7.4 Better Haskell support
+..............................
+
+Despite the aforementioned removal of Hdevtools, Haskell support made a
+leap forward. The GHC syntax checker resolves local imports properly
+now, and has new options to change the search path and the package
+databases.
+
+The brand-new flycheck-haskell(1) extension makes use of these variables
+to configure the syntax checker properly in Cabal projects. The
+extensions adds all source directories of a Cabal project to the GHC
+search path, and enables the package database of the project’s Cabal
+sandbox.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-haskell
+
+\1f
+File: flycheck.info, Node: Miscellaneous new options, Prev: Better Haskell support, Up: Syntax checkers<4>
+
+8.1.7.5 Miscellaneous new options
+.................................
+
+ - The SASS and SCSS syntax checkers support the Compass framework
+ now, via *note flycheck-sass-compass: 13b. and *note
+ flycheck-scss-compass: 143. respectively.
+
+ - Clang can enable Microsoft C/C++ extensions now, via *note
+ flycheck-clang-ms-extensions: a8.
+
+ - Rubocop can inhibit all style hints via the new *note
+ flycheck-rubocop-lint-only: 12d.
+
+\1f
+File: flycheck.info, Node: New features<2>, Next: Improved error list, Prev: Syntax checkers<4>, Up: Flycheck 0 16
+
+8.1.7.6 New features
+....................
+
+* Menu:
+
+* Syntax checker executables: Syntax checker executables<2>.
+* Disable syntax checkers easily::
+
+\1f
+File: flycheck.info, Node: Syntax checker executables<2>, Next: Disable syntax checkers easily, Up: New features<2>
+
+8.1.7.7 Syntax checker executables
+..................................
+
+You can now override the executables of syntax checkers. See *note
+Syntax checker executables: 69. for details.
+
+\1f
+File: flycheck.info, Node: Disable syntax checkers easily, Prev: Syntax checker executables<2>, Up: New features<2>
+
+8.1.7.8 Disable syntax checkers easily
+......................................
+
+Flycheck as a new customization options *note
+flycheck-disabled-checkers: 5f, to easily disable syntax checkers.
+
+Previously, you needed to remove syntax checkers from *note
+flycheck-checkers: 5e. to disable them, either via the Customization
+interface, or by custom Emacs Lisp:
+
+ (setq flycheck-checkers (delq 'emacs-lisp-checkdoc flycheck-checkers))
+
+With the new variable, there is no need for this convoluted code
+anymore. Instead, just set the variable:
+
+ (setq flycheck-disabled-checkers '(emacs-lisp-checkdoc))
+
+Even better, you can easily use this variable in file or directory
+variables. For instance, you can use ‘M-x add-file-local-variable RET
+flycheck-disabled-checkers RET (emacs-lisp-checkdoc)’ in your ‘init.el’
+to disable Checkdoc warnings while editing your ‘init.el’.
+
+\1f
+File: flycheck.info, Node: Improved error list, Next: Get it<4>, Prev: New features<2>, Up: Flycheck 0 16
+
+8.1.7.9 Improved error list
+...........................
+
+This release continues the improvements to the error list started in the
+last release. The error list is now based on Tabulated List Mode (see
+[GH-230](1)), to address a number of issues in the old Compile
+Mode-based error list (e.g. misleading commands and menu items such as
+“Recompile”).
+
+The new error list, which you can see in the screenshot above, fixes
+these issues, and has an improved visual appearance. The columns are
+aligned now, and the superfluous file name is omitted.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/230
+
+\1f
+File: flycheck.info, Node: Get it<4>, Prev: Improved error list, Up: Flycheck 0 16
+
+8.1.7.10 Get it
+...............
+
+See *note Installation: 31.
+
+\1f
+File: flycheck.info, Node: Flycheck 0 15, Prev: Flycheck 0 16, Up: Release announcements
+
+8.1.8 Flycheck 0.15
+-------------------
+
+
+date: Nov 15, 2013
+
+
+version: 0.15
+
+I have the honour and pleasure to announce a new release of Flycheck,
+the modern syntax-checking extension for Emacs.
+
+It is three months since the last release, so this release brings quite
+a lot of changes. For a complete list of all changes, please read the
+complete list of *note Changelog: 165. This article will just cover the
+most important changes.
+
+* Menu:
+
+* Breaking changes: Breaking changes<8>.
+* New syntax checkers::
+* New error list::
+* C/C++ support::
+* New info level messages::
+* Custom error levels::
+* Other improvements::
+* Get it: Get it<5>.
+
+\1f
+File: flycheck.info, Node: Breaking changes<8>, Next: New syntax checkers, Up: Flycheck 0 15
+
+8.1.8.1 Breaking changes
+........................
+
+This release introduces three breaking changes. Two of these are
+related to the *note new-error-list: 1d0.:
+
+ Warning: ‘flycheck-display-errors-in-list’ is gone. If you had
+ previously set *note flycheck-display-errors-function: 2b. to this
+ function, *remove* this setting from your configuration.
+
+Besides, ‘flycheck-list-errors’ does not take a prefix argument anymore.
+It cannot list errors at point any longer.
+
+The third breaking change is the removal of ‘flycheck-declare-checker’,
+which was obsolete already since the last release. Unless you have
+custom syntax checkers not yet ported to *note flycheck-define-checker:
+19, this won’t affect you in any way. I am not aware of any 3rd party
+extension which still uses ‘flycheck-declare-checker’.
+
+\1f
+File: flycheck.info, Node: New syntax checkers, Next: New error list, Prev: Breaking changes<8>, Up: Flycheck 0 15
+
+8.1.8.2 New syntax checkers
+...........................
+
+Two new languages made it into this release: YAML (using the YAML parser
+from the Ruby standard library) and Slim(1).
+
+Additionally there are new syntax checkers for Javascript and PHP.
+Flycheck can check Javascript with Google’s Closure Linter(2), in place
+of Jshint. For PHP, Flycheck now uses the PHP Mess Detector(3) to check
+for semantic errors, in _addition_ to a syntax checks with PHP CLI and a
+style checks with PHP CodeSniffer.
+
+ ---------- Footnotes ----------
+
+ (1) http://slim-lang.com
+
+ (2) https://code.google.com/p/closure-linter/
+
+ (3) http://phpmd.org/
+
+\1f
+File: flycheck.info, Node: New error list, Next: C/C++ support, Prev: New syntax checkers, Up: Flycheck 0 15
+
+8.1.8.3 New error list
+......................
+
+The error list at ‘C-c ! l’ has been redesigned.
+
+It is no longer a static list filled once by ‘C-c ! l’. Instead, it
+automatically updates after each syntax check, and follows the current
+window, i.e. if you switch to another window, the error list is updated
+to show the errors of the corresponding buffer.
+
+Furthermore, the error list highlights the errors at point and at the
+current line. If you move the point to an error location, the error
+list automatically scrolls to the corresponding error, and highlights it
+with the new ‘flycheck-error-list-highlight-at-point’ face.
+Additionally, it highlights all other errors at the current line with
+the new *note flycheck-error-list-highlight: 7f. face.
+
+\1f
+File: flycheck.info, Node: C/C++ support, Next: New info level messages, Prev: New error list, Up: Flycheck 0 15
+
+8.1.8.4 C/C++ support
+.....................
+
+The *note c/c++-clang: 9f. syntax checker for C and C++ got a bunch of
+new options:
+
+ - Set additional preprocessor definitions for syntax checking with
+ *note flycheck-clang-definitions: a4, corresponding to the ‘-D’
+ option for ‘clang’.
+
+ - Include additional headers or files during syntax checking with
+ *note flycheck-clang-includes: a6, corresponding to the ‘-include’
+ option for ‘clang’.
+
+ - Choose the language standard, e.g. C++98 or C++11, with *note
+ flycheck-clang-language-standard: a7, corresponding to the ‘-std’
+ option for ‘clang’.
+
+ - Disable RTTI during syntax checking with *note
+ flycheck-clang-no-rtti: aa, corresponding to the ‘-fno-rtti’ option
+ for ‘clang’. In current Clang versions, however, this does not
+ cause errors or warnings when using RTTI.
+
+ - Choose the standard library for syntax checking with *note
+ flycheck-clang-standard-library: ab, corresponding to the ‘-stdlib’
+ option for ‘clang’. Currently, Clang supports ‘libstdc++’ for the
+ good old GNU standard library, and ‘libc++’ for the modern Libc++
+ from the LLVM project.
+
+Besides, the Clang syntax checker was changed to correctly handle local
+include files, e.g. ‘#include "foo.h"’.
+
+\1f
+File: flycheck.info, Node: New info level messages, Next: Custom error levels, Prev: C/C++ support, Up: Flycheck 0 15
+
+8.1.8.5 New ‘info’ level messages
+.................................
+
+In addition to the ‘warning’ and ‘error’ levels, Flycheck now has a new
+‘info’ level, which is intended for informational messages which provide
+additional information about a specific location in the source code.
+With this new level, the semantics of error levels is as follows:
+
+‘error’
+
+ Definite errors which must be fixed for the source code to work
+ correctly
+
+‘warning’
+
+ Potential errors and issues, which can be ignored, but still
+ deserve to be fixed
+
+‘info’
+
+ Additional information about a specific source code location, which
+ does not indicate an error or issue, but is still worth noting
+
+Some syntax checkers were changed to use this new level for messages,
+which do not really fit into the ‘warning’ level:
+
+ - *note c/c++-clang: 9f. for ‘note:’ messages
+
+ - *note python-flake8: 115. for PEP8 naming issues emitted by the
+ ‘pep8-naming’ plugin
+
+ - *note python-pylint: 11a. for convention level messages, e.g.
+ naming issues, etc.
+
+The new level is already supported by the popular Solarized(1) and
+Zenburn(2) themes.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/bbatsov/solarized-emacs
+
+ (2) https://github.com/bbatsov/zenburn-emacs
+
+\1f
+File: flycheck.info, Node: Custom error levels, Next: Other improvements, Prev: New info level messages, Up: Flycheck 0 15
+
+8.1.8.6 Custom error levels
+...........................
+
+The new ‘info’ level is backed by a generic mechanism to define new
+error levels, using the new function *note flycheck-define-error-level:
+27. For instance, the ‘warning’ level is now defined as follows:
+
+ (flycheck-define-error-level 'warning
+ :overlay-category 'flycheck-warning-overlay
+ :fringe-bitmap 'question-mark
+ :fringe-face 'flycheck-fringe-warning)
+
+A error level consists of a category for overlays, which defines the
+appearance and priority of overlays for this level, and bitmap and face
+for fringe indicators.
+
+After defining an error level, you can use it the error patterns of a
+syntax checker as usual.
+
+\1f
+File: flycheck.info, Node: Other improvements, Next: Get it<5>, Prev: Custom error levels, Up: Flycheck 0 15
+
+8.1.8.7 Other improvements
+..........................
+
+Beside these important changes, there are also a number of smaller
+improvements:
+
+ - Flycheck does not longer check encrypted files for obvious reasons.
+
+ - The *note emacs-lisp-checkdoc: ce. syntax checker does not check
+ ‘.dir-locals.el’ anymore.
+
+ - *note python-pylint: 11a. now parses error columns from the output
+ of ‘pylint’.
+
+ - Spurious “flawed definition” warnings in *note lua: 103, *note rst:
+ 127. and *note go-build: e2. were fixed.
+
+ - *note c/c++-cppcheck: a1. output now parses correctly when using
+ the pure Emacs Lisp XML parser in ‘xml.el’.
+
+ Note: Nonetheless, you are advised to use Emacs with ‘libxml’
+ support. Most Linux distributions ship Emacs packages with
+ ‘libxml’ support, but if you are building your own, or use a
+ source-based distribution such as Gentoo, take care to enable
+ ‘libxml’ for Emacs.
+
+\1f
+File: flycheck.info, Node: Get it<5>, Prev: Other improvements, Up: Flycheck 0 15
+
+8.1.8.8 Get it
+..............
+
+See *note Installation: 31.
+
+\1f
+File: flycheck.info, Node: Changelog, Prev: Release announcements, Up: Flycheck releases
+
+8.2 Changelog
+=============
+
+* Menu:
+
+* master (in development): master in development.
+* 0.22 (Dec 23, 2014): 0 22 Dec 23 2014.
+* 0.21 (Oct 26, 2014): 0 21 Oct 26 2014.
+* 0.20 (Aug 12, 2014): 0 20 Aug 12 2014.
+* 0.19 (Jun 12, 2014): 0 19 Jun 12 2014.
+* 0.18 (Mar 24, 2014): 0 18 Mar 24 2014.
+* 0.17 (Feb 1, 2014): 0 17 Feb 1 2014.
+* 0.16 (Jan 11, 2014): 0 16 Jan 11 2014.
+* 0.15 (Nov 15, 2013): 0 15 Nov 15 2013.
+* 0.14.1 (Aug 16, 2013): 0 14 1 Aug 16 2013.
+* 0.14 (Aug 15, 2013): 0 14 Aug 15 2013.
+* 0.13 (Jun 28, 2013): 0 13 Jun 28 2013.
+* 0.12 (May 18, 2013): 0 12 May 18 2013.
+* 0.11 (May 01, 2013): 0 11 May 01 2013.
+* 0.10 (Apr 21, 2013): 0 10 Apr 21 2013.
+* 0.9 (Apr 13, 2013): 0 9 Apr 13 2013.
+* 0.8 (Apr 9, 2013): 0 8 Apr 9 2013.
+* 0.7.1 (Feb 23, 2013): 0 7 1 Feb 23 2013.
+* 0.7 (Feb 14, 2013): 0 7 Feb 14 2013.
+* 0.6.1 (Jan 30, 2013): 0 6 1 Jan 30 2013.
+* 0.6 (Jan 29, 2013): 0 6 Jan 29 2013.
+* 0.5 (Dec 28, 2012): 0 5 Dec 28 2012.
+* 0.4 (Nov 21, 2012): 0 4 Nov 21 2012.
+* 0.3 (Nov 21, 2012): 0 3 Nov 21 2012.
+* 0.2 (Oct 25, 2012): 0 2 Oct 25 2012.
+* 0.1 (Oct 11, 2012): 0 1 Oct 11 2012.
+
+\1f
+File: flycheck.info, Node: master in development, Next: 0 22 Dec 23 2014, Up: Changelog
+
+8.2.1 master (in development)
+-----------------------------
+
+ - New syntax checkers:
+
+ - R with ‘lintr’ [GH-512](1)
+
+ - Improvements:
+
+ - ‘chef-foodcritic’ handles relative paths correctly now
+ [GH-556](2)
+
+ - Bug fixes:
+
+ - Cache last used syntax checker only when actually checking the
+ buffer [GH-559](3)
+
+ - Fix void variable error when trying to use ‘flycheck-compile’
+ with a non-command checker [GH-563](4)
+
+ - Fix faulty mode line reporting [GH-564](5)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/512
+
+ (2) https://github.com/flycheck/flycheck/issues/556
+
+ (3) https://github.com/flycheck/flycheck/issues/559
+
+ (4) https://github.com/flycheck/flycheck/issues/563
+
+ (5) https://github.com/flycheck/flycheck/issues/564
+
+\1f
+File: flycheck.info, Node: 0 22 Dec 23 2014, Next: 0 21 Oct 26 2014, Prev: master in development, Up: Changelog
+
+8.2.2 0.22 (Dec 23, 2014)
+-------------------------
+
+ - *Breaking changes*:
+
+ - Never allow use of disabled checkers anymore, even with
+ ‘flycheck-select-checker’
+
+ - Error parsers *must* set the ‘:buffer’ and ‘:checker’ slots of
+ ‘flycheck-error’ now
+
+ - The internals of syntax checker definitions have changed
+ again. *All packages depending on Flycheck must be
+ recompiled!* [GH-524](1)
+
+ - ‘flycheck-error-list-refresh’ is not an interactive command
+ anymore
+
+ - Replace ‘flycheck-perlcritic-verbosity’ with
+ ‘flycheck-perlcritic-severity’
+
+ - Replace ‘flycheck-copy-messages-as-kill’ with
+ ‘flycheck-copy-errors-as-kill’ [GH-529](2)
+
+ - Remove ‘flycheck-google-messages’ command
+
+ - Options and config file variables are not buffer-local anymore
+ [GH-546](3)
+
+ - New syntax checkers:
+
+ - Python with ‘py_compile’ [GH-484](4)
+
+ - New features:
+
+ - ‘flycheck-ert.el’ library to write unit tests for Flycheck
+ extensions
+
+ - Add ‘flycheck-define-generic-checker’ to define syntax
+ checkers over arbitrary Emacs Lisp functions [GH-169](5)
+ [GH-524](6)
+
+ - Add ‘flycheck-define-command-checker’ as non-macro variant of
+ ‘flycheck-define-checker’ [GH-524](7)
+
+ - Add support for IDs of errors [GH-529](8)
+
+ - Add special ‘id’ sexp to parse error ids with
+ ‘:error-patterns’ [GH-529](9)
+
+ - Parse error IDs from Checkstyle XML [GH-259](10)
+
+ - ‘flycheck-copy-errors-as-kill’ can put error ids into kill
+ ring now [GH-529](11)
+
+ - Parse error IDs from many error checkers [GH-259](12)
+
+ - Verify Flycheck setup in a buffer with ‘flycheck-verify-setup’
+ [GH-338](13)
+
+ - Add options for arbitrary arguments to some syntax checkers
+ [GH-542](14)
+
+ - Add ‘flycheck-flake8-error-level-alist’ to customize error
+ levels from flake8 [GH-454](15)
+
+ - Improvements:
+
+ - Automatically disable syntax checkers that report too many
+ errors [GH-476](16)
+
+ - Reduce filesystem access when parsing errors to improve
+ parsing speed
+
+ - Add explicit ‘load-path’ inheritance to
+ ‘flycheck-emacs-lisp-load-path’, via new ‘inherit’ value
+ [GH-511](17)
+
+ - Parse help messages from ‘rustc’ [GH-517](18)
+
+ - ‘g’ in the error list checks the source buffer again
+ [GH-532](19)
+
+ - ‘haskell-ghc’ supports literate Haskell now [GH-535](20)
+
+ - Bug fixes:
+
+ - Properly parse notes in ‘sh-shellcheck’ [GH-508](21)
+
+ - Fix shell quoting in ‘flycheck-compile’ [GH-522](22)
+ [GH-523](23)
+
+ - Fix faulty properties of customize options which broke
+ ‘customize-changed’ and related functions
+
+ - Fix use deprecated option in ‘coffee-coffeelint’
+
+ - Fix error columns of ‘python-pylint’ and ‘tex-chktex’
+ [GH-536](24)
+
+ - Correctly compute error level of errors on included files in
+ ‘c/c++-clang’ and ‘c/c++-gcc’ [GH-451](25)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/524
+
+ (2) https://github.com/flycheck/flycheck/issues/529
+
+ (3) https://github.com/flycheck/flycheck/issues/546
+
+ (4) https://github.com/flycheck/flycheck/issues/484
+
+ (5) https://github.com/flycheck/flycheck/issues/169
+
+ (6) https://github.com/flycheck/flycheck/issues/524
+
+ (7) https://github.com/flycheck/flycheck/issues/524
+
+ (8) https://github.com/flycheck/flycheck/issues/529
+
+ (9) https://github.com/flycheck/flycheck/issues/529
+
+ (10) https://github.com/flycheck/flycheck/issues/259
+
+ (11) https://github.com/flycheck/flycheck/issues/529
+
+ (12) https://github.com/flycheck/flycheck/issues/259
+
+ (13) https://github.com/flycheck/flycheck/issues/338
+
+ (14) https://github.com/flycheck/flycheck/issues/542
+
+ (15) https://github.com/flycheck/flycheck/issues/454
+
+ (16) https://github.com/flycheck/flycheck/issues/476
+
+ (17) https://github.com/flycheck/flycheck/issues/511
+
+ (18) https://github.com/flycheck/flycheck/issues/517
+
+ (19) https://github.com/flycheck/flycheck/issues/532
+
+ (20) https://github.com/flycheck/flycheck/issues/535
+
+ (21) https://github.com/flycheck/flycheck/issues/508
+
+ (22) https://github.com/flycheck/flycheck/issues/522
+
+ (23) https://github.com/flycheck/flycheck/issues/523
+
+ (24) https://github.com/flycheck/flycheck/issues/536
+
+ (25) https://github.com/flycheck/flycheck/issues/451
+
+\1f
+File: flycheck.info, Node: 0 21 Oct 26 2014, Next: 0 20 Aug 12 2014, Prev: 0 22 Dec 23 2014, Up: Changelog
+
+8.2.3 0.21 (Oct 26, 2014)
+-------------------------
+
+ - *Breaking changes*:
+
+ - ‘html-tidy’ is not enabled in Web Mode anymore [GH-464](1)
+
+ - ‘d-dmd’ now requires DMD 2.066 or newer [GH-460](2)
+
+ - ‘:next-checkers’ now requires the maximum permissible level
+ instead of a custom predicate [GH-472](3)
+
+ - Remove ‘flycheck-error-list-highlight-at-point’ face and
+ related functionality [GH-490](4)
+
+ - New syntax checkers:
+
+ - Coq
+
+ - RPM spec files with ‘rpmlint’ [GH-480](5) [GH-481](6)
+
+ - New features:
+
+ - Add ‘null-device’ symbol for syntax checker commands
+
+ - Add ‘flycheck-display-error-messages-unless-error-list’ for
+ ‘flycheck-error-display-function’
+
+ - Add ‘flycheck-error-list-after-refresh-hook’ to run after the
+ error list refreshes
+
+ - Add ‘flycheck-navigation-minimum-level’ to restrict error
+ levels available for navigation [GH-398](7) [GH-485](8)
+
+ - The error list can be sorted by message and syntax checker
+ name now [GH-500](9)
+
+ - Add ‘flycheck-error-list-checker-name’ face to customize the
+ appearance of the syntax checker name in the error list
+ [GH-500](10)
+
+ - Add ‘flycheck-shellcheck-excluded-warnings’ to exclude
+ warnings from ShellCheck reports [GH-499](11)
+
+ - Add ‘flycheck-add-mode’ to add a new major mode to a syntax
+ checker [GH-506](12)
+
+ - Add ‘flycheck-gcc-openmp’ to enable OpenMP for GCC in C/C++
+ [GH-507](13)
+
+ - Improvements:
+
+ - Improve GCC syntax checking by expanding templates
+ [GH-459](14)
+
+ - ‘d-dmd’ reports errors with columns now [GH-460](15)
+
+ - Remove Projectile-based config file search [GH-461](16)
+
+ - Do not change point when navigating in the error list
+ [GH-487](17)
+
+ - ShellCheck warnings now include the corresponding warning code
+
+ - Bug fixes:
+
+ - Expand ‘default-directory’ before using it, to handle
+ abbreviated paths gracefully [GH-434](18)
+
+ - Restore mouse support in the error list [GH-468](19)
+
+ - ‘less’ now correctly resolves relative paths in ‘data-uri’
+ [GH-471](20)
+
+ - ‘go-errcheck’ now properly uses package names as syntax
+ checker arguments
+
+ - ‘c/c++-clang’ now handles empty error messages [GH-497](21)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/464
+
+ (2) https://github.com/flycheck/flycheck/issues/460
+
+ (3) https://github.com/flycheck/flycheck/issues/472
+
+ (4) https://github.com/flycheck/flycheck/issues/490
+
+ (5) https://github.com/flycheck/flycheck/issues/480
+
+ (6) https://github.com/flycheck/flycheck/issues/481
+
+ (7) https://github.com/flycheck/flycheck/issues/398
+
+ (8) https://github.com/flycheck/flycheck/issues/485
+
+ (9) https://github.com/flycheck/flycheck/issues/500
+
+ (10) https://github.com/flycheck/flycheck/issues/500
+
+ (11) https://github.com/flycheck/flycheck/issues/499
+
+ (12) https://github.com/flycheck/flycheck/issues/506
+
+ (13) https://github.com/flycheck/flycheck/issues/507
+
+ (14) https://github.com/flycheck/flycheck/issues/459
+
+ (15) https://github.com/flycheck/flycheck/issues/460
+
+ (16) https://github.com/flycheck/flycheck/issues/461
+
+ (17) https://github.com/flycheck/flycheck/issues/487
+
+ (18) https://github.com/flycheck/flycheck/issues/434
+
+ (19) https://github.com/flycheck/flycheck/issues/468
+
+ (20) https://github.com/flycheck/flycheck/issues/471
+
+ (21) https://github.com/flycheck/flycheck/issues/497
+
+\1f
+File: flycheck.info, Node: 0 20 Aug 12 2014, Next: 0 19 Jun 12 2014, Prev: 0 21 Oct 26 2014, Up: Changelog
+
+8.2.4 0.20 (Aug 12, 2014)
+-------------------------
+
+ - *Breaking changes*:
+
+ - The internal names of syntax checker properties changed. *All
+ packages depending on Flycheck must be recompiled!*
+
+ - ‘flycheck-substitute-argument’ always returns a list now
+
+ - The special meaning of a trailing ‘=’ in ‘(option …)’ and
+ ‘(config-file …)’ is removed. Both arguments must now
+ explicitly specify ‘concat’ to prepend the option as string.
+
+ - New syntax checkers:
+
+ - C/C++ with GCC [GH-408](1)
+
+ - Scala with scalastyle [GH-425](2)
+
+ - Fortran with GFortran [GH-414](3) [GH-450](4)
+
+ - Ada with GNAT [GH-414](5) [GH-457](6)
+
+ - New features:
+
+ - Add ‘flycheck-clang-no-exceptions’ and
+ ‘flycheck-gcc-no-exceptions’ to flag exceptions as errors in
+ C++ [GH-412](7)
+
+ - Add ‘flycheck-rust-crate-root’ to resolve inter-crate
+ references in ‘rust’ [GH-417](8)
+
+ - Add ‘flycheck-clang-blocks’ to enable the block syntax in
+ Clang [GH-420](9)
+
+ - ‘read-flycheck-checker’ now accepts a default value
+
+ - Add ‘flycheck-status-changed-functions’ to react on status
+ changes
+
+ - Make the mode line lighter of Flycheck customizable with
+ ‘flycheck-mode-line’
+
+ - Add ‘flycheck-rubylintrc’ to support configuration files for
+ ‘ruby-rubylint’ [GH-424](10)
+
+ - Add ‘flycheck-rust-crate-type’ to make the Crate type
+ customizable [GH-446](11)
+
+ - The mode line of the error list is now customizable with
+ ‘flycheck-error-list-mode-line’ [GH-454](12)
+
+ - Pressing ‘n’ or ‘p’ in the error list now shows the error at
+ point in a separate window [GH-452](13) [GH-454](14)
+
+ - Pressing ‘RET’ in the error list now jumps to the error at
+ point [GH-454](15)
+
+ - The error list can now be sorted by error level by clicking on
+ the corresponding list header, or by pressing ‘S’ with point
+ on the column text [GH-454](16)
+
+ - Error levels defined with ‘flycheck-define-error-level’ can
+ now have a numeric severity used for sorting [GH-454](17)
+
+ - Improvements:
+
+ - Use proper temporary files in ‘python-flake8’ [GH-421](18)
+
+ - Demote errors from ‘package-initialize’ in the ‘emacs-lisp’
+ checker [GH-423](19)
+
+ - ‘flycheck-select-checker’ now uses the last used syntax
+ checker as default when reading from minibuffer
+
+ - ‘flycheck-compile’ now prompts for the syntax checker to run
+ as ‘compile’ command [GH-428](20)
+
+ - The ‘rust’ syntax checker shows info messages now [GH-439](21)
+
+ - The ‘sass’ and ‘scss’ syntax checkers now use a temporary
+ directory for their cache [GH-443](22) [GH-454](23)
+
+ - Change the default of ‘flycheck-eslintrc’ to ‘nil’
+ [GH-447](24)
+
+ - Show the menu on the mode line lighter [GH-365](25)
+
+ - Greatly improve Flycheck’s menu
+
+ - ‘n’ and ‘p’ now navigate the error list by errors, not by
+ lines [GH-452](26) [GH-444](27)
+
+ - ‘c/c++-clang’ does not use in-place temporary files anymore
+ [GH-456](28)
+
+ - Bug fixes:
+
+ - Properly support ‘unload-feature’ now
+
+ - Other changes:
+
+ - Remove dependencies on f.el and s.el
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/408
+
+ (2) https://github.com/flycheck/flycheck/issues/425
+
+ (3) https://github.com/flycheck/flycheck/issues/414
+
+ (4) https://github.com/flycheck/flycheck/issues/450
+
+ (5) https://github.com/flycheck/flycheck/issues/414
+
+ (6) https://github.com/flycheck/flycheck/issues/457
+
+ (7) https://github.com/flycheck/flycheck/issues/412
+
+ (8) https://github.com/flycheck/flycheck/issues/417
+
+ (9) https://github.com/flycheck/flycheck/issues/420
+
+ (10) https://github.com/flycheck/flycheck/issues/424
+
+ (11) https://github.com/flycheck/flycheck/issues/446
+
+ (12) https://github.com/flycheck/flycheck/issues/454
+
+ (13) https://github.com/flycheck/flycheck/issues/452
+
+ (14) https://github.com/flycheck/flycheck/issues/454
+
+ (15) https://github.com/flycheck/flycheck/issues/454
+
+ (16) https://github.com/flycheck/flycheck/issues/454
+
+ (17) https://github.com/flycheck/flycheck/issues/454
+
+ (18) https://github.com/flycheck/flycheck/issues/421
+
+ (19) https://github.com/flycheck/flycheck/issues/423
+
+ (20) https://github.com/flycheck/flycheck/issues/428
+
+ (21) https://github.com/flycheck/flycheck/issues/439
+
+ (22) https://github.com/flycheck/flycheck/issues/443
+
+ (23) https://github.com/flycheck/flycheck/issues/454
+
+ (24) https://github.com/flycheck/flycheck/issues/447
+
+ (25) https://github.com/flycheck/flycheck/issues/365
+
+ (26) https://github.com/flycheck/flycheck/issues/452
+
+ (27) https://github.com/flycheck/flycheck/issues/444
+
+ (28) https://github.com/flycheck/flycheck/issues/456
+
+\1f
+File: flycheck.info, Node: 0 19 Jun 12 2014, Next: 0 18 Mar 24 2014, Prev: 0 20 Aug 12 2014, Up: Changelog
+
+8.2.5 0.19 (Jun 12, 2014)
+-------------------------
+
+ - Flycheck now has an official logo [GH-331](1)
+
+ - *Breaking changes*:
+
+ - The ‘ruby-rubylint’ syntax checker now requires Ruby Lint 2.0
+ or newer. [GH-405](2)
+
+ - New syntax checkers:
+
+ - Go with ‘errcheck’ [GH-393](3)
+
+ - New features:
+
+ - Add ‘flycheck-keymap-prefix’ to change the prefix key for
+ Flycheck keybindings [GH-381](4)
+
+ - Make the prefix of Flycheck’s temporary files customizable
+ with ‘flycheck-temp-prefix’ [GH-387](5)
+
+ - Add ‘:error-filter’ property for syntax checkers to apply a
+ custom function to modify or filter errors after parsing
+ [GH-397](6)
+
+ - Add ‘flycheck-rust-check-tests’ to disable syntax checking of
+ test code in Rust [GH-406](7)
+
+ - Add ‘flycheck-cppcheck-inconclusive’ to enable cppcheck tests
+ that might give false positives [GH-407](8)
+
+ - Improvements:
+
+ - Collapse redundant whitespace in messages from ‘emacs-lisp’
+ [GH-397](9)
+
+ - Dedent messages from ‘haskell-ghc’ [GH-397](10)
+
+ - Fold errors in included files into the error messages of the
+ corresponding include in ‘c/c++-clang’ [GH-397](11)
+
+ - The ‘ruby-rubylint’ syntax checker now supports ruby-lint 2.0
+ and newer [GH-405](12)
+
+ - Bug fixes:
+
+ - When stopping Flycheck, correctly kill running processes and
+ cleanup their temporary files [GH-334](13)
+
+ - Do not choke on files without extensions in ‘haskell-ghc’
+
+ - Fix spurious warning when a syntax checker reports errors, but
+ not for the file being checked [GH-391](14)
+
+ - Do not signal errors in Go Mode, when ‘go’ is not available
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/331
+
+ (2) https://github.com/flycheck/flycheck/issues/405
+
+ (3) https://github.com/flycheck/flycheck/issues/393
+
+ (4) https://github.com/flycheck/flycheck/issues/381
+
+ (5) https://github.com/flycheck/flycheck/issues/387
+
+ (6) https://github.com/flycheck/flycheck/issues/397
+
+ (7) https://github.com/flycheck/flycheck/issues/406
+
+ (8) https://github.com/flycheck/flycheck/issues/407
+
+ (9) https://github.com/flycheck/flycheck/issues/397
+
+ (10) https://github.com/flycheck/flycheck/issues/397
+
+ (11) https://github.com/flycheck/flycheck/issues/397
+
+ (12) https://github.com/flycheck/flycheck/issues/405
+
+ (13) https://github.com/flycheck/flycheck/issues/334
+
+ (14) https://github.com/flycheck/flycheck/issues/391
+
+\1f
+File: flycheck.info, Node: 0 18 Mar 24 2014, Next: 0 17 Feb 1 2014, Prev: 0 19 Jun 12 2014, Up: Changelog
+
+8.2.6 0.18 (Mar 24, 2014)
+-------------------------
+
+ - *Breaking changes*:
+
+ - The POSIX script syntax checkers ‘sh-bash’ and ‘sh-dash’ were
+ renamed to ‘sh-posix-bash’ and ‘sh-posix-dash’ respectively.
+ The ‘bash’ and ‘zsh’ syntax checkers were renamed to ‘sh-bash’
+ and ‘sh-zsh’ respectively. Thus, all shell script syntax
+ checkers now live in the ‘sh-’ prefix.
+
+ - ‘rst-sphinx’ requires Sphinx 1.2 or newer now.
+
+ - ‘rustc’ requires Rust 0.10 (not yet released at the time of
+ writing) or newer now [GH-353](1)
+
+ - New syntax checkers:
+
+ - Perl with Perl Critic [GH-88](2)
+
+ - Replace GNU Make with POSIX Make [GH-322](3)
+
+ - Shellcheck [GH-267](4)
+
+ - Go with ‘golint’ [GH-328](5)
+
+ - Go with ‘go tool vet’ [GH-329](6)
+
+ - New features:
+
+ - Add ‘flycheck-rust-library-path’ to specify library locations
+ for ‘rust’
+
+ - Add ‘flycheck-dmd-include-path’ to change the include path of
+ ‘d-dmd’ [GH-344](7)
+
+ - Improvements:
+
+ - ‘flycheck-parse-checkstyle’ supports ‘info’ level messages now
+
+ - Correctly parse multiline error messages of ‘go-build’ and
+ ‘go-test’
+
+ - ‘rst-sphinx’ supports custom nodes without explicit writer
+ support now, by using the ‘pseudoxml’ builder.
+
+ - Avoid warnings about missing main functions in ‘rust’
+
+ - Properly resolve relative filenames in ‘.. include::’
+ directives in ‘rst’
+
+ - Use ‘--unix_mode’ option in ‘javascript-gjslint’ to get the
+ file name [GH-348](8)
+
+ - Puppet Lint messages now include the name of the corresponding
+ check
+
+ - ‘rustc’ supports upcoming Rust 0.10 now [GH-353](9)
+
+ - Flycheck now handles Clang errors from included files
+ [GH-367](10)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/353
+
+ (2) https://github.com/flycheck/flycheck/issues/88
+
+ (3) https://github.com/flycheck/flycheck/issues/322
+
+ (4) https://github.com/flycheck/flycheck/issues/267
+
+ (5) https://github.com/flycheck/flycheck/issues/328
+
+ (6) https://github.com/flycheck/flycheck/issues/329
+
+ (7) https://github.com/flycheck/flycheck/issues/344
+
+ (8) https://github.com/flycheck/flycheck/issues/348
+
+ (9) https://github.com/flycheck/flycheck/issues/353
+
+ (10) https://github.com/flycheck/flycheck/issues/367
+
+\1f
+File: flycheck.info, Node: 0 17 Feb 1 2014, Next: 0 16 Jan 11 2014, Prev: 0 18 Mar 24 2014, Up: Changelog
+
+8.2.7 0.17 (Feb 1, 2014)
+------------------------
+
+ - The manual was ported to Sphinx(1) and is now located at
+ ‘http://flycheck.readthedocs.org’ [GH-274](2)
+
+ - *Breaking changes*:
+
+ - The default ‘flycheck-completion-system’ was changed to nil,
+ i.e. the built-in ‘completing-read’, for compliance with
+ Emacs’ defaults. To restore the previous behaviour, add
+ ‘(eval-after-load 'flycheck '(setq flycheck-completion-system
+ 'ido))’ to your ‘init.el’.
+
+ - ‘flycheck-count-errors’ counts errors of all levels now, and
+ returns an alist mapping error symbols to error counts.
+
+ - New syntax checkers:
+
+ - RST (ReStructuredText) using Sphinx
+
+ - GNU Make [GH-321](3)
+
+ - New features:
+
+ - Extend syntax checkers with ‘flycheck-add-next-checkers’
+ [GH-266](4)
+
+ - Improvements:
+
+ - Immediately re-check the buffer when it was changed during a
+ syntax check [GH-301](5)
+
+ - Do not defer syntax checker after idle change timeout
+ [GH-305](6)
+
+ - Do not use the generic ‘rst’ syntax checker in Sphinx projects
+ anymore, to avoid false positives by Sphinx-only markup
+
+ - Check for more than just syntax errors in ‘rust’ [GH-314](7)
+
+ - ‘chef-foodcritic’ supports ‘enh-ruby-mode’ now
+
+ - Bug fixes
+
+ - Do not attach syntax checker processes to the buffer anymore
+ [GH-298](8)
+
+ - Do not visit the file to check in ‘emacs-lisp’ and
+ ‘emacs-lisp-checkdoc’ to avoid unintended side effects
+ [GH-319](9)
+
+ ---------- Footnotes ----------
+
+ (1) http://sphinx-doc.org
+
+ (2) https://github.com/flycheck/flycheck/issues/274
+
+ (3) https://github.com/flycheck/flycheck/issues/321
+
+ (4) https://github.com/flycheck/flycheck/issues/266
+
+ (5) https://github.com/flycheck/flycheck/issues/301
+
+ (6) https://github.com/flycheck/flycheck/issues/305
+
+ (7) https://github.com/flycheck/flycheck/issues/314
+
+ (8) https://github.com/flycheck/flycheck/issues/298
+
+ (9) https://github.com/flycheck/flycheck/issues/319
+
+\1f
+File: flycheck.info, Node: 0 16 Jan 11 2014, Next: 0 15 Nov 15 2013, Prev: 0 17 Feb 1 2014, Up: Changelog
+
+8.2.8 0.16 (Jan 11, 2014)
+-------------------------
+
+ - *Breaking changes*:
+
+ - Argument substitution is no longer performed on syntax checker
+ executables. The executable must be a string.
+
+ - Split out ‘haskell-hdevtools’ into a separate package. See
+ flycheck-hdevtools(1) [GH-275](2)
+
+ - Drop support for coffeelint 0.x
+
+ - The error list is reimplemented on top of Tabulated List Mode.
+ This greatly changes the appearance and behaviour of the error
+ list [GH-230](3)
+
+ - New syntax checkers:
+
+ - Ruby with ‘ruby-lint’ [GH-250](4)
+
+ - Handlebars [GH-270](5)
+
+ - YAML with ‘yaml-jsyaml’ [GH-253](6)
+
+ - Chef recipes with ‘foodcritic’ [GH-255](7)
+
+ - AsciiDoc [GH-276](8)
+
+ - CFEngine [GH-271](9)
+
+ - Racket [GH-277](10)
+
+ - Texinfo
+
+ - Verilog [GH-296](11)
+
+ - Javascript with ‘eslint’ [GH-291](12)
+
+ - ERuby [GH-285](13)
+
+ - New features:
+
+ - Define variables to override the executables of syntax
+ checkers [GH-272](14)
+
+ - Interactively set the executable of a syntax checker with
+ ‘flycheck-set-checker-executable’ [GH-272](15)
+
+ - Disable syntax checkers easily with
+ ‘flycheck-disabled-checkers’ [GH-269](16)
+
+ - Add support for the Compass CSS framework in the ‘sass’ and
+ ‘scss’ checkers, with ‘flycheck-sass-compass’ and
+ ‘flycheck-scss-compass’ respectively [GH-268](17)
+
+ - Disable style checks in ‘ruby-rubocop’ with
+ ‘flycheck-rubocop-lint-only’ [GH-287](18)
+
+ - Add support for Microsoft extensions in ‘c/c++-clang’ via
+ ‘flycheck-clang-ms-extensions’ [GH-283](19)
+
+ - New faces ‘flycheck-error-list-info’,
+ ‘flycheck-error-list-warning’, ‘flycheck-error-list-error’,
+ ‘flycheck-error-list-line-number’ and
+ ‘flycheck-error-list-column-number’ [GH-230](20)
+
+ - Add ‘flycheck-ghc-no-user-package-database’ to disable the
+ user package database for ‘haskell-ghc’
+
+ - Add ‘flycheck-ghc-package-databases’ to add additional package
+ databases to ‘haskell-ghc’
+
+ - Add ‘flycheck-ghc-search-path’ to add additional directories
+ to the search path of ‘haskell-ghc’
+
+ - Improvements:
+
+ - Demote Rubocop convention messages to ‘info’ level
+
+ - Stop Flycheck before the buffer is reverted [GH-282](21)
+
+ - Properly resolve local module imports in ‘haskell-ghc’
+
+ - Bug fixes:
+
+ - Make relative imports work with ‘python-pylint’ [GH-280](22)
+
+ - Fix parsing of errors in ‘scss’ and ‘sass’
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-hdevtools
+
+ (2) https://github.com/flycheck/flycheck/issues/275
+
+ (3) https://github.com/flycheck/flycheck/issues/230
+
+ (4) https://github.com/flycheck/flycheck/issues/250
+
+ (5) https://github.com/flycheck/flycheck/issues/270
+
+ (6) https://github.com/flycheck/flycheck/issues/253
+
+ (7) https://github.com/flycheck/flycheck/issues/255
+
+ (8) https://github.com/flycheck/flycheck/issues/276
+
+ (9) https://github.com/flycheck/flycheck/issues/271
+
+ (10) https://github.com/flycheck/flycheck/issues/277
+
+ (11) https://github.com/flycheck/flycheck/issues/296
+
+ (12) https://github.com/flycheck/flycheck/issues/291
+
+ (13) https://github.com/flycheck/flycheck/issues/285
+
+ (14) https://github.com/flycheck/flycheck/issues/272
+
+ (15) https://github.com/flycheck/flycheck/issues/272
+
+ (16) https://github.com/flycheck/flycheck/issues/269
+
+ (17) https://github.com/flycheck/flycheck/issues/268
+
+ (18) https://github.com/flycheck/flycheck/issues/287
+
+ (19) https://github.com/flycheck/flycheck/issues/283
+
+ (20) https://github.com/flycheck/flycheck/issues/230
+
+ (21) https://github.com/flycheck/flycheck/issues/282
+
+ (22) https://github.com/flycheck/flycheck/issues/280
+
+\1f
+File: flycheck.info, Node: 0 15 Nov 15 2013, Next: 0 14 1 Aug 16 2013, Prev: 0 16 Jan 11 2014, Up: Changelog
+
+8.2.9 0.15 (Nov 15, 2013)
+-------------------------
+
+ - Flycheck has a new home at ‘https://github.com/flycheck/flycheck’,
+ the online manual moved to ‘http://flycheck.github.io’.
+
+ - *Breaking changes*:
+
+ - Do not add the current directory to the ‘emacs-lisp’ syntax
+ checker load path
+
+ - ‘flycheck-list-errors’ cannot list errors at point anymore.
+ It does not accept a prefix argument anymore, and takes zero
+ arguments now [GH-214](1)
+
+ - ‘flycheck-display-errors-in-list’ is gone. The error list
+ automatically highlights the error at point now [GH-214](2)
+
+ - Remove obsolete ‘flycheck-declare-checker’
+
+ - New syntax checkers:
+
+ - YAML [GH-236](3)
+
+ - Javascript with ‘gjslint’ [GH-245](4)
+
+ - Slim [GH-246](5)
+
+ - PHP using ‘phpmd’ [GH-249](6)
+
+ - New features:
+
+ - Support IDO or Grizzl(7) as completion systems for
+ ‘flycheck-select-checker’ at ‘C-c ! s’
+
+ - Disable standard error navigation with
+ ‘flycheck-standard-error-navigation’ [GH-202](8)
+
+ - Add ‘flycheck-clang-language-standard’ to choose the language
+ standard for C/C++ syntax checking [GH-207](9)
+
+ - Add ‘flycheck-clang-definitions’ to set additional definitions
+ for C/C++ syntax checking [GH-207](10)
+
+ - Add ‘flycheck-clang-no-rtti’ to disable RTTI for C/C++ syntax
+ checking [GH-207](11)
+
+ - Add new option cell ‘option-flag’ for boolean flags in syntax
+ checker commands
+
+ - Add ‘flycheck-clang-includes’ to include additional files for
+ C/C++ syntax checking [GH-207](12)
+
+ - Add configuration file variable ‘flycheck-pylintrc’ for Pylint
+
+ - New faces ‘flycheck-error-list-highlight-at-point’ and
+ ‘flycheck-error-list-highlight’ to highlight the errors at
+ point and at the current line respectively in the error list
+ [GH-214](13)
+
+ - The error list now automatically updates to show the errors of
+ the current buffer [GH-214](14)
+
+ - Define new error levels with ‘flycheck-define-error-level’
+ [GH-212](15)
+
+ - Add ‘flycheck-clang-standard-library’ to choose the standard
+ library for C/C++ syntax checking [GH-234](16)
+
+ - Customize the delay for displaying errors via
+ ‘flycheck-display-errors-delay’ [GH-243](17)
+
+ - Add ‘info’ level for informational annotations by syntax
+ checkers [GH-215](18)
+
+ - Add a new symbol ‘temporary-file-name’ to pass temporary file
+ names to syntax checkers [GH-259](19)
+
+ - Improvements:
+
+ - The error list now refreshes automatically after each syntax
+ check [GH-214](20)
+
+ - The errors at point are now automatically highlighted in the
+ error list [GH-214](21)
+
+ - ‘emacs-lisp-checkdoc’ does not longer check ‘.dir-locals.el’
+ files
+
+ - Do not automatically check syntax in encrypted files
+ [GH-222](22)
+
+ - Parse notes from ‘c/c++-clang’ into info level messages
+ [GH-215](23)
+
+ - Parse convention warnings from ‘pylint’ to info level
+ [GH-204](24)
+
+ - Demote naming warnings from ‘python-flake8’ to info level
+ [GH-215](25)
+
+ - Support ‘enh-ruby-mode’ in Ruby syntax checkers [GH-256](26)
+
+ - Parse columns from ‘python-pylint’ errors
+
+ - Do not compress temporary files for syntax checks if the
+ original file was compressed
+
+ - Bug fixes:
+
+ - Find local includes in the Clang syntax checker [GH-225](27)
+
+ - Do not emit spurious flawed definition warning in the ‘rst’
+ syntax checker
+
+ - Handle abbreviated file names in ‘luac’ output, by simply
+ ignoring them [GH-251](28)
+
+ - Correctly redirect the output binary of the ‘go-build’ syntax
+ checker [GH-259](29)
+
+ - Fix Cppcheck parsing with the built-in Emacs XML parser
+ [GH-263](30)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/214
+
+ (2) https://github.com/flycheck/flycheck/issues/214
+
+ (3) https://github.com/flycheck/flycheck/issues/236
+
+ (4) https://github.com/flycheck/flycheck/issues/245
+
+ (5) https://github.com/flycheck/flycheck/issues/246
+
+ (6) https://github.com/flycheck/flycheck/issues/249
+
+ (7) https://github.com/d11wtq/grizzl
+
+ (8) https://github.com/flycheck/flycheck/issues/202
+
+ (9) https://github.com/flycheck/flycheck/issues/207
+
+ (10) https://github.com/flycheck/flycheck/issues/207
+
+ (11) https://github.com/flycheck/flycheck/issues/207
+
+ (12) https://github.com/flycheck/flycheck/issues/207
+
+ (13) https://github.com/flycheck/flycheck/issues/214
+
+ (14) https://github.com/flycheck/flycheck/issues/214
+
+ (15) https://github.com/flycheck/flycheck/issues/212
+
+ (16) https://github.com/flycheck/flycheck/issues/234
+
+ (17) https://github.com/flycheck/flycheck/issues/243
+
+ (18) https://github.com/flycheck/flycheck/issues/215
+
+ (19) https://github.com/flycheck/flycheck/issues/259
+
+ (20) https://github.com/flycheck/flycheck/issues/214
+
+ (21) https://github.com/flycheck/flycheck/issues/214
+
+ (22) https://github.com/flycheck/flycheck/issues/222
+
+ (23) https://github.com/flycheck/flycheck/issues/215
+
+ (24) https://github.com/flycheck/flycheck/issues/204
+
+ (25) https://github.com/flycheck/flycheck/issues/215
+
+ (26) https://github.com/flycheck/flycheck/issues/256
+
+ (27) https://github.com/flycheck/flycheck/issues/225
+
+ (28) https://github.com/flycheck/flycheck/issues/251
+
+ (29) https://github.com/flycheck/flycheck/issues/259
+
+ (30) https://github.com/flycheck/flycheck/issues/263
+
+\1f
+File: flycheck.info, Node: 0 14 1 Aug 16 2013, Next: 0 14 Aug 15 2013, Prev: 0 15 Nov 15 2013, Up: Changelog
+
+8.2.10 0.14.1 (Aug 16, 2013)
+----------------------------
+
+ - Bug fixes:
+
+ - Add a missing dependency [GH-194](1)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/194
+
+\1f
+File: flycheck.info, Node: 0 14 Aug 15 2013, Next: 0 13 Jun 28 2013, Prev: 0 14 1 Aug 16 2013, Up: Changelog
+
+8.2.11 0.14 (Aug 15, 2013)
+--------------------------
+
+ - *Breaking changes*:
+
+ - Introduce ‘flycheck-define-checker’ and obsolete
+ ‘flycheck-declare-checker’ [GH-163](1)
+
+ - Remove the obsolete ‘flycheck-error-face’ and
+ ‘flycheck-warning-face’
+
+ - Do not initialize packages by default in ‘emacs-lisp’ syntax
+ checker for non-configuration files [GH-176](2)
+
+ - Change the default ‘flycheck-highlighting-mode’ to ‘symbols’
+ [GH-179](3)
+
+ - Drop support for Pylint 0.x in ‘python-pylint’ [GH-184](4)
+
+ - New features:
+
+ - List errors at point only with prefix arg to
+ ‘flycheck-list-errors’ [GH-166](5)
+
+ - Add new display function ‘flycheck-display-errors-in-list’ to
+ display errors at point in the error list [GH-166](6)
+
+ - New ‘option-list’ argument cell to pass option lists to a
+ syntax checker
+
+ - New ‘flycheck-emacs-lisp-load-path’ option to customize the
+ ‘load-path’ used by the ‘emacs-lisp’ syntax checker
+ [GH-174](7)
+
+ - New ‘flycheck-emacs-lisp-initialize-packages’ option to
+ initialize packages in the ‘emacs-lisp’ syntax checker
+ [GH-176](8)
+
+ - New ‘flycheck-emacs-lisp-package-user-dir’ option to configure
+ the package directory for the ‘emacs-lisp’ syntax checker
+ [GH-176](9)
+
+ - New option filter ‘flycheck-option-comma-separated-list’ for
+ options with comma separated lists as values
+
+ - New highlighting mode ‘symbols’ to highlight the symbol
+ pointed to by an error [GH-179](10)
+
+ - New syntax checkers:
+
+ - LESS [GH-160](11)
+
+ - Haskell with ‘ghc’, ‘hdevtools’ and ‘hlint’ [GH-162](12)
+
+ - C/C++ with ‘cppcheck’ [GH-170](13)
+
+ - C/C++ with ‘clang’ [GH-172](14)
+
+ - CoffeeScript with ‘coffee’
+
+ - XML with ‘xmllint’ [GH-180](15)
+
+ - D with ‘dmd’ [GH-167](16)
+
+ - Improvements:
+
+ - Support Web Mode in ‘html-tidy’ syntax checker [GH-157](17)
+
+ - Support Rubocop 0.9 and drop support for older Rubocop
+ releases [GH-159](18)
+
+ - Include the message ID in error messages from ‘python-pylint’
+
+ - Bug fixes:
+
+ - Fix warnings about flawed definitions in ‘emacs-lisp’ and
+ ‘emacs-lisp-checkdoc’, caused by faulty formatting of sexps
+
+ - Refresh error lists when pressing ‘g’ [GH-166](19)
+
+ - Do not obscure active minibuffer input when displaying errors
+ in the echo area [GH-175](20)
+
+ - Fix universal prefix argument for ‘flycheck-next-error’ at
+ ‘C-c ! n’
+
+ - Correctly parse output of ‘coffeelint’ 0.5.7 [GH-192](21)
+
+ - Correctly parse output of ‘pylint’ 1.0 [GH-184](22)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/163
+
+ (2) https://github.com/flycheck/flycheck/issues/176
+
+ (3) https://github.com/flycheck/flycheck/issues/179
+
+ (4) https://github.com/flycheck/flycheck/issues/184
+
+ (5) https://github.com/flycheck/flycheck/issues/166
+
+ (6) https://github.com/flycheck/flycheck/issues/166
+
+ (7) https://github.com/flycheck/flycheck/issues/174
+
+ (8) https://github.com/flycheck/flycheck/issues/176
+
+ (9) https://github.com/flycheck/flycheck/issues/176
+
+ (10) https://github.com/flycheck/flycheck/issues/179
+
+ (11) https://github.com/flycheck/flycheck/issues/160
+
+ (12) https://github.com/flycheck/flycheck/issues/162
+
+ (13) https://github.com/flycheck/flycheck/issues/170
+
+ (14) https://github.com/flycheck/flycheck/issues/172
+
+ (15) https://github.com/flycheck/flycheck/issues/180
+
+ (16) https://github.com/flycheck/flycheck/issues/167
+
+ (17) https://github.com/flycheck/flycheck/issues/157
+
+ (18) https://github.com/flycheck/flycheck/issues/159
+
+ (19) https://github.com/flycheck/flycheck/issues/166
+
+ (20) https://github.com/flycheck/flycheck/issues/175
+
+ (21) https://github.com/flycheck/flycheck/issues/192
+
+ (22) https://github.com/flycheck/flycheck/issues/184
+
+\1f
+File: flycheck.info, Node: 0 13 Jun 28 2013, Next: 0 12 May 18 2013, Prev: 0 14 Aug 15 2013, Up: Changelog
+
+8.2.12 0.13 (Jun 28, 2013)
+--------------------------
+
+ - *Breaking changes*:
+
+ - Obsolete ‘flycheck-warning-face’ and ‘flycheck-error-face’ in
+ favor ‘flycheck-warning’ and ‘flycheck-error’ respectively
+
+ - Obsolete ‘:predicate’ forms in favor of ‘:predicate’ functions
+
+ - ‘flycheck-def-config-file-var’ does not automatically mark
+ variables as safe anymore
+
+ - New features:
+
+ - Make fringe indicator faces customizable independently with
+ ‘flycheck-fringe-error’ and ‘flycheck-fringe-warning’
+
+ - Improve the default faces by using underlines instead of
+ foreground colors, if possible
+
+ - Customizable error processing with
+ ‘flycheck-process-error-functions’ [GH-141](1)
+
+ - Make the delay before starting a syntax check customizable via
+ ‘flycheck-idle-change-delay’ [GH-144](2)
+
+ - Make display of errors under point customizable via
+ ‘flycheck-display-errors-function’ [GH-156](3)
+
+ - Improvements
+
+ - Always highlight errors on top of warnings now
+
+ - Do not trigger syntax checks in the middle of commands
+ [GH-141](4)
+
+ - Add the current directory to load path in the ‘emacs-lisp’
+ syntax checker
+
+ - Do not longer use the ‘emacs-lisp-checkdoc’ syntax checker in
+ Scratch buffers
+
+ - Do not flush temporary files onto disk [GH-149](5)
+
+ - Syntax checkers may have error patterns and error parser now
+
+ - Predicate forms are now wrapped into functions and compiled
+ into functions during byte compilation
+
+ - Copy each message separately in
+ ‘flycheck-copy-messages-as-kill’
+
+ - Mark some customizable variables as safe for file variable
+ usage, most notably ‘flycheck-indication-mode’,
+ ‘flycheck-highlighting-mode’ and ‘flycheck-idle-change-delay’.
+
+ - Bug fixes:
+
+ - Fix error when searching for a configuration file outside a
+ Projectile project
+
+ - Do not start a syntax check before the ‘flycheck-mode-hook’
+ was run
+
+ - Do not start automatic syntax checks if Flycheck Mode is
+ disabled
+
+ - Defer the initial syntax check until after the current
+ interactive command [GH-143](6)
+
+ - Correctly clean up information about running processes
+
+ - Fix compatibility with Emacs 24.2 and earlier [GH-150](7)
+
+ - Fix version information on Emacs trunk builds
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/141
+
+ (2) https://github.com/flycheck/flycheck/issues/144
+
+ (3) https://github.com/flycheck/flycheck/issues/156
+
+ (4) https://github.com/flycheck/flycheck/issues/141
+
+ (5) https://github.com/flycheck/flycheck/issues/149
+
+ (6) https://github.com/flycheck/flycheck/issues/143
+
+ (7) https://github.com/flycheck/flycheck/issues/150
+
+\1f
+File: flycheck.info, Node: 0 12 May 18 2013, Next: 0 11 May 01 2013, Prev: 0 13 Jun 28 2013, Up: Changelog
+
+8.2.13 0.12 (May 18, 2013)
+--------------------------
+
+ - New syntax checkers:
+
+ - Ruby using ‘jruby’ [GH-136](1)
+
+ - Puppet [GH-138](2)
+
+ - New features:
+
+ - Highlight error expressions by default, with the new ‘sexps’
+ highlighting mode
+
+ - Automatically check syntax some time after the last change in
+ the buffer [GH-140](3)
+
+ - Add ‘flycheck-version’ to determine the installed Flycheck
+ version
+
+ - Add ‘flycheck-list-errors’, mapped to ‘C-c ! l’, to list all
+ errors in a separate buffer
+
+ - Improvements:
+
+ - Defer syntax checks while a buffer is reverted, to avoid race
+ conditions
+
+ - Bug fixes:
+
+ - Correctly parse syntax errors from JRuby [GH-136](4)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/136
+
+ (2) https://github.com/flycheck/flycheck/issues/138
+
+ (3) https://github.com/flycheck/flycheck/issues/140
+
+ (4) https://github.com/flycheck/flycheck/issues/136
+
+\1f
+File: flycheck.info, Node: 0 11 May 01 2013, Next: 0 10 Apr 21 2013, Prev: 0 12 May 18 2013, Up: Changelog
+
+8.2.14 0.11 (May 01, 2013)
+--------------------------
+
+ - New syntax checkers:
+
+ - Scala [GH-124](1)
+
+ - New features:
+
+ - Customizable error indication with control of the fringe side,
+ via ‘flycheck-indication-mode’
+
+ - Customizable automatic syntax checking, via
+ ‘flycheck-check-syntax-automatically’ [GH-128](2)
+
+ - Customizable configuration file search, via
+ ‘flycheck-locate-config-file-functions’ [GH-133](3)
+
+ - Find configuration files in Projectile(4) projects
+
+ - Add ‘flycheck-before-syntax-check-hook’ and
+ ‘flycheck-syntax-check-failed-hook’
+
+ - Improvements:
+
+ - The ‘ruby’ syntax checker now differentiates warnings from
+ errors [GH-123](5)
+
+ - Faces are now in a separate customization group
+
+ - Bug fixes:
+
+ - Add missing customization group for syntax checker options
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/124
+
+ (2) https://github.com/flycheck/flycheck/issues/128
+
+ (3) https://github.com/flycheck/flycheck/issues/133
+
+ (4) https://github.com/bbatsov/projectile
+
+ (5) https://github.com/flycheck/flycheck/issues/123
+
+\1f
+File: flycheck.info, Node: 0 10 Apr 21 2013, Next: 0 9 Apr 13 2013, Prev: 0 11 May 01 2013, Up: Changelog
+
+8.2.15 0.10 (Apr 21, 2013)
+--------------------------
+
+ - Flycheck uses ‘cl-lib’ now. This library is built-in as of GNU
+ Emacs 24.3. For earlier releases of GNU Emacs 24 an additional
+ compatibility library will be installed from GNU ELPA.
+
+ - New syntax checkers:
+
+ - POSIX Shell script using ‘bash’ [GH-112](1)
+
+ - Ruby using ‘rubocop’ [GH-113](2)
+
+ - Elixir [GH-108](3)
+
+ - Erlang [GH-122](4)
+
+ - Removed syntax checkers:
+
+ - Python using Pyflakes. Use the superior Flake8 syntax checker
+ [GH-115](5)
+
+ - New features:
+
+ - Add ‘flycheck-copy-messages-as-kill’, mapped to ‘C-c ! C-w’,
+ to copy all error messages under point into kill ring
+
+ - Add ‘flycheck-google-messages’, mapped to ‘C-c ! /’, to google
+ for error messages under point. Needs the Google This(6)
+ library
+
+ - Syntax checkers can redirect output to a temporary directory
+ now using the ‘temporary-directory’ argument symbol
+
+ - Improvements:
+
+ - Call option filters for ‘nil’ values, too
+
+ - Improve error parsing in Bash syntax checker [GH-112](7)
+
+ - Error navigation does not cross restrictions in narrowed
+ buffers anymore
+
+ - Try to preserve the non-directory part of the buffer’s file
+ name when substituting the ‘source’ symbol [GH-99](8)
+
+ - Bug fixes:
+
+ - Fix error highlighting and navigation in narrowed buffers
+
+ - Use a hopefully more reliable way to parse output of PHP
+ CodeSniffer [GH-118](9)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/112
+
+ (2) https://github.com/flycheck/flycheck/issues/113
+
+ (3) https://github.com/flycheck/flycheck/issues/108
+
+ (4) https://github.com/flycheck/flycheck/issues/122
+
+ (5) https://github.com/flycheck/flycheck/issues/115
+
+ (6) https://github.com/Bruce-Connor/emacs-google-this
+
+ (7) https://github.com/flycheck/flycheck/issues/112
+
+ (8) https://github.com/flycheck/flycheck/issues/99
+
+ (9) https://github.com/flycheck/flycheck/issues/118
+
+\1f
+File: flycheck.info, Node: 0 9 Apr 13 2013, Next: 0 8 Apr 9 2013, Prev: 0 10 Apr 21 2013, Up: Changelog
+
+8.2.16 0.9 (Apr 13, 2013)
+-------------------------
+
+ - New syntax checkers:
+
+ - SCSS using ‘scss’ [GH-103](1)
+
+ - RST (ReStructuredText) using Docutils
+
+ - Go using ‘go build’ and ‘go test’ [GH-107](2)
+
+ - Improvements:
+
+ - Quit the error message window when navigating away from error
+ locations
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/103
+
+ (2) https://github.com/flycheck/flycheck/issues/107
+
+\1f
+File: flycheck.info, Node: 0 8 Apr 9 2013, Next: 0 7 1 Feb 23 2013, Prev: 0 9 Apr 13 2013, Up: Changelog
+
+8.2.17 0.8 (Apr 9, 2013)
+------------------------
+
+ - New syntax checkers:
+
+ - Go using ‘gofmt’ [GH-91](1)
+
+ - Rust using ‘rustc’ [GH-101](2)
+
+ - New features:
+
+ - Add a global Flycheck mode. ‘(global-flycheck-mode)’ is now
+ the recommended way to enable Flycheck [GH-29](3)
+
+ - Add support for syntax checker options [GH-72](4)
+
+ - Add option for the coding standard used by the ‘php-phpcs’
+ syntax checker
+
+ - Add options for the maximum McCabe complexity and the maximum
+ line length to ‘python-flake8’
+
+ - Improvements:
+
+ - Support McCabe warnings in ‘python-flake8’
+
+ - Support warnings from ‘flake8’ 2
+
+ - Show long error messages in a popup buffer [GH-94](5)
+
+ - Show all error messages at point [GH-96](6)
+
+ - Add support for naming warings from ‘flake8’ 2 [GH-98](7)
+
+ - Flycheck mode is not longer enabled for buffers whose names
+ start with a space
+
+ - Improve highlighting to reduce screen flickering [GH-100](8)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/91
+
+ (2) https://github.com/flycheck/flycheck/issues/101
+
+ (3) https://github.com/flycheck/flycheck/issues/29
+
+ (4) https://github.com/flycheck/flycheck/issues/72
+
+ (5) https://github.com/flycheck/flycheck/issues/94
+
+ (6) https://github.com/flycheck/flycheck/issues/96
+
+ (7) https://github.com/flycheck/flycheck/issues/98
+
+ (8) https://github.com/flycheck/flycheck/issues/100
+
+\1f
+File: flycheck.info, Node: 0 7 1 Feb 23 2013, Next: 0 7 Feb 14 2013, Prev: 0 8 Apr 9 2013, Up: Changelog
+
+8.2.18 0.7.1 (Feb 23, 2013)
+---------------------------
+
+ - Bug fixes:
+
+ - Do not signal errors from ‘flycheck-mode’ [GH-87](1)
+
+ - Correctly fall back to ‘$HOME’ when searching configuration
+ files
+
+ - Correctly ascend to parent directory when searching
+ configuration files
+
+ - API changes:
+
+ - Rename ‘config’ cell to ‘config-file’
+
+ - Allow to pass the result of ‘config-file’ cells as single
+ argument
+
+ - Add support for evaluating Lisp forms in syntax checker
+ commands [GH-86](2)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/87
+
+ (2) https://github.com/flycheck/flycheck/issues/86
+
+\1f
+File: flycheck.info, Node: 0 7 Feb 14 2013, Next: 0 6 1 Jan 30 2013, Prev: 0 7 1 Feb 23 2013, Up: Changelog
+
+8.2.19 0.7 (Feb 14, 2013)
+-------------------------
+
+ - New features:
+
+ - Navigate to source of syntax checker declarations from syntax
+ checker help
+
+ - Add online Info manual [GH-60](1)
+
+ - Improvements:
+
+ - Use pipes instead of TTYs to read output from syntax checkers
+
+ - Defer syntax checks for invisible buffers [GH-80](2)
+
+ - Immediately display error messages after error navigation
+ [GH-62](3)
+
+ - Bug fixes:
+
+ - Never select deleted buffers
+
+ - Do not let the debugger interfere with necessary cleanup
+ actions
+
+ - Do not attempt to parse empty XML trees [GH-78](4)
+
+ - Fix infinite recursion on Windows [GH-81](5)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/60
+
+ (2) https://github.com/flycheck/flycheck/issues/80
+
+ (3) https://github.com/flycheck/flycheck/issues/62
+
+ (4) https://github.com/flycheck/flycheck/issues/78
+
+ (5) https://github.com/flycheck/flycheck/issues/81
+
+\1f
+File: flycheck.info, Node: 0 6 1 Jan 30 2013, Next: 0 6 Jan 29 2013, Prev: 0 7 Feb 14 2013, Up: Changelog
+
+8.2.20 0.6.1 (Jan 30, 2013)
+---------------------------
+
+ - Fix package dependencies
+
+\1f
+File: flycheck.info, Node: 0 6 Jan 29 2013, Next: 0 5 Dec 28 2012, Prev: 0 6 1 Jan 30 2013, Up: Changelog
+
+8.2.21 0.6 (Jan 29, 2013)
+-------------------------
+
+ - New syntax checkers:
+
+ - Emacs Lisp with ‘checkdoc-current-buffer’ [GH-53](1)
+
+ - PHP with PHP CodeSniffer [GH-72](2)
+
+ - Removed syntax checkers:
+
+ - Javascript with ‘jsl’
+
+ - New features:
+
+ - Error navigation with ‘next-error’ and ‘previous-error’
+ [GH-26](3)
+
+ - Fringe icons instead of error indicators [GH-33](4)
+
+ - Menu entry for Flycheck [GH-59](5)
+
+ - Customizable error highlighting, taking the column number into
+ account [GH-35](6)
+
+ - Configuration files for syntax checkers
+
+ - Add configuration file support to the syntax checkers
+ ‘coffee-coffeelint’, ‘html-tidy’, ‘javascript-jshint’,
+ ‘pyton-flake8’ and ‘tex-chktex’
+
+ - Allow to compile a buffer with a syntax checker for testing
+ purposes [GH-58](7)
+
+ - Use multiple syntax checkers during a syntax check [GH-31](8)
+
+ - Add dedicated help for syntax checkers [GH-52](9)
+
+ - Improvements:
+
+ - Match error patterns in order of declaration [GH-55](10)
+
+ - Bug fixes:
+
+ - Inherit highlighting faces from built-in faces [GH-24](11)
+
+ - Correct error patterns of the HTML syntax checker [GH-36](12)
+
+ - Detect syntax errors in the ‘python-flake8’ syntax checker
+ [GH-42](13)
+
+ - Fix various regressions after introducing unit tests
+
+ - Inhibit syntax checking during package installation
+ [GH-45](14)
+
+ - Disable syntax checking in Tramp buffers [GH-54](15)
+
+ - Preserve whitespace in error messages [GH-65](16)
+
+ - API changes:
+
+ - Replace syntax checker variables with syntax checker
+ declarations [GH-41](17)
+
+ - Support parsing errors with arbitrary functions instead of
+ error patterns [GH-38](18)
+
+ - Add an error parser for Checkstyle-like XML output [GH-38](19)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/53
+
+ (2) https://github.com/flycheck/flycheck/issues/72
+
+ (3) https://github.com/flycheck/flycheck/issues/26
+
+ (4) https://github.com/flycheck/flycheck/issues/33
+
+ (5) https://github.com/flycheck/flycheck/issues/59
+
+ (6) https://github.com/flycheck/flycheck/issues/35
+
+ (7) https://github.com/flycheck/flycheck/issues/58
+
+ (8) https://github.com/flycheck/flycheck/issues/31
+
+ (9) https://github.com/flycheck/flycheck/issues/52
+
+ (10) https://github.com/flycheck/flycheck/issues/55
+
+ (11) https://github.com/flycheck/flycheck/issues/24
+
+ (12) https://github.com/flycheck/flycheck/issues/36
+
+ (13) https://github.com/flycheck/flycheck/issues/42
+
+ (14) https://github.com/flycheck/flycheck/issues/45
+
+ (15) https://github.com/flycheck/flycheck/issues/54
+
+ (16) https://github.com/flycheck/flycheck/issues/65
+
+ (17) https://github.com/flycheck/flycheck/issues/41
+
+ (18) https://github.com/flycheck/flycheck/issues/38
+
+ (19) https://github.com/flycheck/flycheck/issues/38
+
+\1f
+File: flycheck.info, Node: 0 5 Dec 28 2012, Next: 0 4 Nov 21 2012, Prev: 0 6 Jan 29 2013, Up: Changelog
+
+8.2.22 0.5 (Dec 28, 2012)
+-------------------------
+
+ - New syntax checkers:
+
+ - SASS [GH-15](1)
+
+ - Perl [GH-21](2)
+
+ - XML
+
+ - Lua [GH-30](3)
+
+ - New features:
+
+ - Support manual buffer-local selection of syntax checker
+ [GH-25](4)
+
+ - Add customizable error indicators [GH-28](5)
+
+ - Echo error messages at point without 3rd-party libraries like
+ flymake-cursor [GH-27](6)
+
+ - Improvements:
+
+ - Remember the last automatically selected syntax checker
+ [GH-24](7)
+
+ - Bug fixes:
+
+ - Fix syntax checking of buffers without backing files
+ [GH-19](8)
+
+ - API changes:
+
+ - Replace underlying Flymake API with a custom syntax checking
+ implementation [GH-15](9)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/15
+
+ (2) https://github.com/flycheck/flycheck/issues/21
+
+ (3) https://github.com/flycheck/flycheck/issues/30
+
+ (4) https://github.com/flycheck/flycheck/issues/25
+
+ (5) https://github.com/flycheck/flycheck/issues/28
+
+ (6) https://github.com/flycheck/flycheck/issues/27
+
+ (7) https://github.com/flycheck/flycheck/issues/24
+
+ (8) https://github.com/flycheck/flycheck/issues/19
+
+ (9) https://github.com/flycheck/flycheck/issues/15
+
+\1f
+File: flycheck.info, Node: 0 4 Nov 21 2012, Next: 0 3 Nov 21 2012, Prev: 0 5 Dec 28 2012, Up: Changelog
+
+8.2.23 0.4 (Nov 21, 2012)
+-------------------------
+
+ - Rename the project to Flycheck [GH-5](1)
+
+ - New syntax checkers
+
+ - HAML [GH-9](2)
+
+ - CSS [GH-9](3)
+
+ - Javascript with ‘jsl’ [GH-9](4)
+
+ - Javascript with ‘jshint’ [GH-16](5)
+
+ - JSON [GH-12](6)
+
+ - LaTeX with ‘lacheck’
+
+ - Bug fixes:
+
+ - Fix type error when checking compressed Emacs Lisp [GH-10](7)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/5
+
+ (2) https://github.com/flycheck/flycheck/issues/9
+
+ (3) https://github.com/flycheck/flycheck/issues/9
+
+ (4) https://github.com/flycheck/flycheck/issues/9
+
+ (5) https://github.com/flycheck/flycheck/issues/16
+
+ (6) https://github.com/flycheck/flycheck/issues/12
+
+ (7) https://github.com/flycheck/flycheck/issues/10
+
+\1f
+File: flycheck.info, Node: 0 3 Nov 21 2012, Next: 0 2 Oct 25 2012, Prev: 0 4 Nov 21 2012, Up: Changelog
+
+8.2.24 0.3 (Nov 21, 2012)
+-------------------------
+
+ - Replace ‘flymake-mode’ with a custom syntax checking minor mode
+ [GH-4](1)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/4
+
+\1f
+File: flycheck.info, Node: 0 2 Oct 25 2012, Next: 0 1 Oct 11 2012, Prev: 0 3 Nov 21 2012, Up: Changelog
+
+8.2.25 0.2 (Oct 25, 2012)
+-------------------------
+
+ - New syntax checkers:
+
+ - PHP
+
+ - API changes:
+
+ - Simplify syntax checker declarations [GH-2](1)
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues/2
+
+\1f
+File: flycheck.info, Node: 0 1 Oct 11 2012, Prev: 0 2 Oct 25 2012, Up: Changelog
+
+8.2.26 0.1 (Oct 11, 2012)
+-------------------------
+
+Initial release as flymake-checkers
+
+ - New syntax checkers:
+
+ - TeX/LaTeX
+
+ - Shell scripts
+
+ - Python
+
+ - Ruby
+
+ - Coffeescript
+
+ - Emacs Lisp
+
+\1f
+File: flycheck.info, Node: Extending Flycheck, Next: Flycheck API, Prev: Flycheck releases, Up: Top
+
+9 Extending Flycheck
+********************
+
+This chapter explains how to add new syntax checkers and how to extend
+built-in syntax checkers, by example. For a detailed reference on the
+involved types, functions and macros, please refer to the *note Flycheck
+API: 1fc.
+
+ Note: If you define a new syntax checker or have an extension to a
+ built-in syntax checker, please report it to Flycheck (see *note
+ Reporting issues: 8d.), so that we can consider it for inclusion to
+ make it available to all other users of Flycheck.
+
+ If you would like to contribute your extension or your new syntax
+ checker to Flycheck as a patch or pull request, please see *note
+ Contributing code: 1fd. and *note Contributing syntax checkers:
+ 1fe.
+
+* Menu:
+
+* Defining new syntax checkers::
+* Advanced syntax checker definitions::
+* Other ways to extend Flycheck::
+
+\1f
+File: flycheck.info, Node: Defining new syntax checkers, Next: Advanced syntax checker definitions, Up: Extending Flycheck
+
+9.1 Defining new syntax checkers
+================================
+
+Flycheck provides the macro *note flycheck-define-checker: 19. to define
+a new syntax checker. The following example defines a simple syntax
+checker for the popular Pylint(1) tool for Python:
+
+ (flycheck-define-checker python-pylint
+ "A Python syntax and style checker using Pylint.
+
+ See URL `http://www.pylint.org/'."
+ :command ("pylint"
+ "--msg-template" "{path}:{line}:{column}:{C}:{msg} ({msg_id})"
+ source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ":" column ":"
+ (or "E" "F") ":" (message) line-end)
+ (warning line-start (file-name) ":" line ":" column ":"
+ (or "W" "R") ":" (message) line-end)
+ (info line-start (file-name) ":" line ":" column ":"
+ "C:" (message) line-end))
+ :modes python-mode)
+
+The first argument to *note flycheck-define-checker: 19. is the _name_
+of a syntax checker, by which we can refer to this particular syntax
+checker.
+
+Next comes the _docstring_, which should provide a bit of information
+about the syntax checker. It’s a good idea to provide a link to the
+homepage of the syntax checker tool here. You can view this docstring
+in Emacs with *note flycheck-describe-checker: 3a. or ‘C-c ! ?’, e.g.
+‘C-c ! ? texinfo’.
+
+Eventually we specify the _properties_ of the new syntax checker. These
+properties tell Flycheck when to use your new syntax checker, how to run
+it, and how to parse its output:
+
+ - The ‘:command’ specifies the command Flycheck should run to check
+ the buffer. It’s a simple list containing the executable and its
+ arguments.
+
+ In our example we first the ‘--msg-template’ option to Pylint to
+ configure a comprehensive and parseable output format.
+
+ Then we use the “special” ‘source’ argument to pass the contents of
+ the buffer as input file to ‘pylint’. Whenever it sees the
+ ‘source’ argument, Flycheck creates a temporary file, fills it with
+ the current contents of the buffer and passes that file to the
+ syntax checker. This allows to check the real contents of a buffer
+ even if the buffer is not saved to disk.
+
+ - The ‘:error-patterns’ tell Flycheck how to parse the output of the
+ command in order to obtain error locations. Each pattern has a
+ _level_, followed by ‘rx’ forms which specify a regular expression
+ to find an error in the output of the command.
+
+ Flycheck understands three error levels by default: ‘error’ is for
+ critical errors that absolutely require the user’s attention (e.g.
+ syntax errors), ‘warning’ is for issues that can be ignored, but
+ should not (e.g. unused variables), and ‘info’ is for other
+ messages that provide information about the buffer, but do not
+ immediately require action from the user.
+
+ See also
+.............
+
+ *note flycheck-define-error-level: 27.; to define custom error
+ levels
+
+ Flycheck provides special ‘rx’ forms to extract the relevant
+ information from each error:
+
+ - The ‘(file-name)’ and ‘(message)’ forms match a sequence of
+ any character save new line as file name and message of the
+ error. Both optionally accept further ‘rx’ forms, to specify
+ an alternative regular expression to match the file name or
+ the message, for instance to parse multi-line error messages.
+
+ - The ‘line’ and ‘column’ forms match a sequence of one or more
+ digits as line and column respectively of the error.
+
+ See also
+.............
+
+ *note flycheck-rx-to-string: 200.; for a list of all special ‘rx’
+ forms provided by Flycheck and their reference
+
+ - The ‘:modes’ property denotes the major modes, in which Flycheck
+ may use this syntax checker. JSHint checks Javascript, so the
+ ‘:modes’ of our example specifies Emacs’ builtin Javascript Mode,
+ and the popular 3rd-party JS2 Mode.
+
+See also
+........
+
+*note flycheck-substitute-argument: 201.; for a complete list of all
+special arguments
+
+* Menu:
+
+* Finding the right error patterns::
+* Trying a new syntax checker::
+* Registering new syntax checkers::
+
+ ---------- Footnotes ----------
+
+ (1) http://www.pylint.org/
+
+\1f
+File: flycheck.info, Node: Finding the right error patterns, Next: Trying a new syntax checker, Up: Defining new syntax checkers
+
+9.1.1 Finding the right error patterns
+--------------------------------------
+
+Finding the right error patterns is the hardest part of a syntax checker
+definition. For a first version, you just run the tool on a file, look
+at its output and write a regular expression to match it. ‘M-x shell’
+comes handy here.
+
+However, as you start to debug and refine your patterns, this quickly
+becomes cumbersome. Flycheck provides an easier way to test a syntax
+checker: Evaluate the syntax checker definition with ‘C-M-x’ and run
+*note flycheck-compile: 19c.
+
+ -- Command: C -c ! C-c
+ -- Command: M -x flycheck-compile
+
+ Run a syntax checker on the current buffer in a fresh Compilation
+ Mode buffer. Prompt for a syntax checker to run.
+
+This command runs the command like a normal syntax check would do, but
+instead of highlighting errors within the buffer it shows a new buffer
+in Compilation Mode, which contains the entire output of the command and
+highlights everything that matches a pattern.
+
+Sometimes however an output format doesn’t lend itself to error
+patterns. In this case, you need to write a more sophisticated parser
+yourself. See *note Parsing structured output format: 204. for more
+information.
+
+\1f
+File: flycheck.info, Node: Trying a new syntax checker, Next: Registering new syntax checkers, Prev: Finding the right error patterns, Up: Defining new syntax checkers
+
+9.1.2 Trying a new syntax checker
+---------------------------------
+
+After evaluating a syntax checker definition you can try whether it
+works for normal syntax checks by selecting it manually with ‘C-c ! s’
+(*note flycheck-select-checker: 24.). If anything breaks, you can
+unselect the syntax checker again with ‘C-u C-c ! s’ and fix the error
+without further affecting Flycheck.
+
+Once you have confirmed that your new syntax checker works flawlessly,
+you can make it available for automatic syntax checking by registering
+it.
+
+\1f
+File: flycheck.info, Node: Registering new syntax checkers, Prev: Trying a new syntax checker, Up: Defining new syntax checkers
+
+9.1.3 Registering new syntax checkers
+-------------------------------------
+
+To register a new syntax checker for automatic syntax checking, just add
+it to *note flycheck-checkers: 5e.:
+
+ (add-to-list 'flycheck-checkers 'flycheck-jshint)
+
+Flycheck will try all syntax checkers in this variable when checking a
+buffer automatically, and check the buffer with the first syntax checker
+in this list whose ‘:modes’ contains the current major mode.
+
+ Note: Do *not* use *note flycheck-checker: 23. and *note
+ flycheck-select-checker: 24. to enable your own syntax checker in
+ Flycheck extensions. They are reserved for *user customization*.
+
+ Specifically, please do *not* provide a hook function which selects
+ the syntax checker explicitly by assigning to *note
+ flycheck-checker: 23. or by calling *note flycheck-select-checker:
+ 24. In other words, this is *bad*:
+
+ (defun enable-my-new-syntax-checker ()
+ (setq flycheck-checker 'my-new-syntax-checker)
+ (flycheck-buffer))
+
+ (add-hook 'my-major-mode-hook #'enable-my-new-syntax-checker)
+
+ This circumvents the entire automatic selection of Flycheck, and
+ prevents the user from effectively customizing Flycheck.
+
+ Instead, just register your syntax checker in *note
+ flycheck-checkers: 5e. and let Flycheck automatically pick the best
+ syntax checker. In other words, this is *good*:
+
+ (add-to-list 'flycheck-checkers 'my-new-syntax-checker)
+
+\1f
+File: flycheck.info, Node: Advanced syntax checker definitions, Next: Other ways to extend Flycheck, Prev: Defining new syntax checkers, Up: Extending Flycheck
+
+9.2 Advanced syntax checker definitions
+=======================================
+
+* Menu:
+
+* Parsing structured output format::
+* Passing options and configuration files to syntax checkers::
+* Controlling the use of a syntax checker::
+* Applying more than one syntax checker::
+
+\1f
+File: flycheck.info, Node: Parsing structured output format, Next: Passing options and configuration files to syntax checkers, Up: Advanced syntax checker definitions
+
+9.2.1 Parsing structured output format
+--------------------------------------
+
+If your syntax checker tool offers some structured output format as
+alternative to human-readable free text, you can use an ‘:error-parser’
+function instead of writing an error pattern. For instance, JSHint(1)
+offers the widely spread Checkstyle XML output format which Flycheck
+supports out of the box:
+
+ (flycheck-define-checker javascript-jshint
+ "A JavaScript syntax and style checker using jshint.
+
+ See URL `http://www.jshint.com'."
+ :command ("jshint" "--checkstyle-reporter" source)
+ :error-parser flycheck-parse-checkstyle
+ :modes (js-mode js2-mode js3-mode))
+
+As you can see, there are no patterns in this definition. Instead
+Flycheck calls the function *note flycheck-parse-checkstyle: 17a. to
+parse the output. This function parses the XML to extract the errors.
+It’s built-in into Flycheck, so if your tool supports Checkstyle XML,
+error parsing comes *for free* in Flycheck.
+
+See also
+........
+
+*note Error parsers: 20a.; for more information about error parsers
+
+ ---------- Footnotes ----------
+
+ (1) http://www.jshint.com/
+
+\1f
+File: flycheck.info, Node: Passing options and configuration files to syntax checkers, Next: Controlling the use of a syntax checker, Prev: Parsing structured output format, Up: Advanced syntax checker definitions
+
+9.2.2 Passing options and configuration files to syntax checkers
+----------------------------------------------------------------
+
+Many linting tools provide a rich set of options to configure their
+analysis. Flycheck makes it to define proper Emacs options and map them
+to options of commands.
+
+For instance, the Rubocop(1) tool checks Ruby for semantic and stylistic
+issues. Since style is mainly a matter of taste, it has a special
+linting mode in which all stylistic checks are disabled (error patterns
+omitted for readability):
+
+ (flycheck-define-checker ruby-rubocop
+ "A Ruby syntax and style checker using the RuboCop tool.
+
+ See URL `http://batsov.com/rubocop/'."
+ :command ("rubocop" "--format" "emacs"
+ (option-flag "--lint" flycheck-rubocop-lint-only)
+ source)
+ :error-patterns ...
+ :modes (ruby-mode))
+
+Note the special ‘option-flag’ argument, which splices the value of the
+boolean Emacs option ‘flycheck-rubocop-lint-only’ into the command: If
+the variable is non-nil, Flycheck adds the ‘--lint’ option to the final
+command line, other Flycheck omits the entire argument.
+
+Flycheck also supports other special ‘option-’ arguments for plain
+values or lists of values.
+
+See also
+........
+
+flycheck-substitute-argument; for a list of all special ‘option-’
+arguments
+
+Flycheck also provides a convenience macro *note
+flycheck-def-option-var: 20d. to declare these options:
+
+ (flycheck-def-option-var flycheck-rubocop-lint-only nil ruby-rubocop
+ "Whether to only report code issues in Rubocop.
+
+ When non-nil, only report code issues in Rubocop, via `--lint'.
+ Otherwise report style issues as well."
+ :safe #'booleanp
+ :type 'boolean)
+
+Essentially, this macro is just a wrapper around the built-in
+‘defcustom’, which additionally keeps track of the syntax checker the
+option belongs to, and adds the option to the appropriate custom group.
+You can pass arbitrary custom keywords to this macro as we did in this
+example: ‘:type’ marks this option as boolean flag, and ‘:safe’ allows
+the use as file-local variable, if the value is boolean.
+
+By a similar mechanism you can also pass paths to configuration files to
+a syntax checker tool. The aforementioned Pylint(2) reads a
+configuration file for instance:
+
+ (flycheck-define-checker python-pylint
+ "A Python syntax and style checker using Pylint.
+
+ This syntax checker requires Pylint 1.0 or newer.
+
+ See URL `http://www.pylint.org/'."
+ ;; -r n disables the scoring report
+ :command ("pylint" "-r" "n"
+ "--msg-template" "{path}:{line}:{column}:{C}:{msg} ({msg_id})"
+ (config-file "--rcfile" flycheck-pylintrc)
+ source)
+ :error-patterns ...
+ :modes python-mode)
+
+The special ‘config-file’ argument passes a configuration file from
+‘flycheck-pylintrc’ to ‘pylint’, if the value of the variable is
+non-nil.
+
+Flycheck provides a sophisticated logic to find an appropriate
+configuration file. See *note Syntax checker configuration files: 6b.
+and *note Configuration files for command syntax checkers: 20e. for
+details.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/bbatsov/rubocop
+
+ (2) http://www.pylint.org/
+
+\1f
+File: flycheck.info, Node: Controlling the use of a syntax checker, Next: Applying more than one syntax checker, Prev: Passing options and configuration files to syntax checkers, Up: Advanced syntax checker definitions
+
+9.2.3 Controlling the use of a syntax checker
+---------------------------------------------
+
+If you need more control about when a syntax checker is used for syntax
+checking, you can supply a custom ‘:predicate’ function. Consider the
+following syntax checker for Zsh scripts in Sh Mode:
+
+ (flycheck-define-checker sh-zsh
+ "A Zsh syntax checker using the Zsh shell.
+
+ See URL `http://www.zsh.org/'."
+ :command ("zsh" "-n" "-d" "-f" source)
+ :error-patterns
+ ((error line-start (file-name) ":" line ": " (message) line-end))
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'zsh)))
+
+Sh Mode also supports Bash and other shells besides Zsh, so we
+additionally provide a ‘:predicate’ that checks whether the current
+buffer has the right shell.
+
+You can even omit ‘:modes’ and only use a predicate to determine whether
+a syntax checker is applicable for the current buffer.
+
+\1f
+File: flycheck.info, Node: Applying more than one syntax checker, Prev: Controlling the use of a syntax checker, Up: Advanced syntax checker definitions
+
+9.2.4 Applying more than one syntax checker
+-------------------------------------------
+
+Frequently, we would like to use multiple syntax checkers in a buffer.
+For instance, we might want to check the syntax of a script with
+‘sh-zsh’ from the previous section, and then use Shellcheck(1) to check
+for questionable code such as unquoted variable expansions, if there are
+no syntax errors. Flycheck supports this scenario by _chaining_ syntax
+checkers.
+
+Suppose we defined a syntax checker for Shellcheck called
+‘sh-shellcheck’ as follows:
+
+ (flycheck-define-checker sh-shellcheck
+ "A shell script syntax and style checker using Shellcheck.
+
+ See URL `https://github.com/koalaman/shellcheck/'."
+ :command ("shellcheck" "-f" "checkstyle"
+ "-s" (eval (symbol-name sh-shell))
+ source)
+ :modes sh-mode
+ :error-parser flycheck-parse-checkstyle)
+
+ Note: Note how we use the special ‘eval’ argument to put the result
+ of an arbitrary Emacs Lisp expression into the command line of
+ ‘shellcheck’, in order to tell Shellcheck what shell the script is
+ written for.
+
+We can now arrange for this syntax checker to be used after ‘sh-zsh’
+with *note flycheck-add-next-checker: 212.:
+
+ (flycheck-add-next-checker 'sh-zsh '(warning . sh-shellcheck))
+
+The first item of the cons cell in the second argument is the _maximum
+error level_ in the buffer, for which ‘sh-shellcheck’ is still
+applicable. With ‘warning’ Flycheck will run ‘sh-shellcheck’ after
+‘sh-zsh’ if there are ‘warning’ or ‘info’ level errors from ‘sh-zsh’,
+but not if there are any errors with level ‘error’, such as syntax
+errors.
+
+Flycheck will only use a chained syntax checker if it is registered in
+*note flycheck-checkers: 5e, so we need to *note register our new syntax
+checker: 206.:
+
+ (add-to-list 'flycheck-checkers 'sh-shellcheck 'append)
+
+Note that unlike before we *append* the new syntax checker at the end of
+‘flycheck-checkers’. This ensures that Flycheck does not try
+‘sh-shellcheck’ _before_ ‘sh-zsh’.
+
+ Warning: Make sure to append chained syntax checkers to *note
+ flycheck-checkers: 5e.
+
+ Flycheck tries all syntax checkers in this list in *order of
+ appearance*, so if you add your new chained syntax checker at the
+ beginning, it will likely be used right away, before any prior
+ syntax checkers.
+
+You also can specify chained syntax checkers directly in *note
+flycheck-define-checker: 19. with the ‘:next-checkers’ property.
+Instead of calling *note flycheck-add-next-checker: 212, we could also
+have added this property to the definition of ‘sh-zsh’:
+
+ (flycheck-define-checker sh-zsh
+ "A Zsh syntax checker using the Zsh shell.
+
+ See URL `http://www.zsh.org/'."
+ :command ("zsh" "-n" "-d" "-f" source)
+ :error-patterns ...
+ :modes sh-mode
+ :predicate (lambda () (eq sh-shell 'zsh))
+ :next-checkers ((warning . sh-shellcheck)))
+
+ Note: If you control the definition of both syntax checkers, this
+ style is *preferable* to *note flycheck-add-next-checker: 212. Use
+ this function only if you cannot change the definition of the prior
+ syntax checker.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/koalaman/shellcheck/
+
+\1f
+File: flycheck.info, Node: Other ways to extend Flycheck, Prev: Advanced syntax checker definitions, Up: Extending Flycheck
+
+9.3 Other ways to extend Flycheck
+=================================
+
+* Menu:
+
+* Use arbitrary functions to check buffers::
+* Hooking into Flycheck::
+
+\1f
+File: flycheck.info, Node: Use arbitrary functions to check buffers, Next: Hooking into Flycheck, Up: Other ways to extend Flycheck
+
+9.3.1 Use arbitrary functions to check buffers
+----------------------------------------------
+
+Beyond commands, Flycheck also supports arbitrary functions as syntax
+checkers with *note flycheck-define-generic-checker: 1b.
+
+\1f
+File: flycheck.info, Node: Hooking into Flycheck, Prev: Use arbitrary functions to check buffers, Up: Other ways to extend Flycheck
+
+9.3.2 Hooking into Flycheck
+---------------------------
+
+Flycheck has a rich hook interface which you can use for your own
+extensions.
+
+* Menu:
+
+* Status changes::
+* Error processing::
+* Error display::
+
+\1f
+File: flycheck.info, Node: Status changes, Next: Error processing, Up: Hooking into Flycheck
+
+9.3.2.1 Status changes
+......................
+
+*note flycheck-before-syntax-check-hook: 218. and
+‘flycheck-after-syntax-check-hook’ run before and after syntax checks,
+and let you update your Emacs instance according to Flycheck’s state.
+For instance, flycheck-color-mode-line(1) uses these hooks to colour
+your mode-line according to the result of the last syntax check.
+Additionally, *note flycheck-status-changed-functions: 19e. runs on
+every single status change of Flycheck, and provides a fine-grained
+reporting about what Flycheck is currently doing.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-color-mode-line
+
+\1f
+File: flycheck.info, Node: Error processing, Next: Error display, Prev: Status changes, Up: Hooking into Flycheck
+
+9.3.2.2 Error processing
+........................
+
+The functions in *note flycheck-process-error-functions: 21a. are used
+to process new errors reported by a Flycheck syntax checker. Add to
+this hook to get informed about each error reported in a Flycheck
+buffer. In fact, Flycheck uses this hook itself: The standard value
+*note flycheck-add-overlay: 21b. is responsible for adding error
+highlighting to the buffer. As a consequence, you can *entirely opt
+out* from highlighting with a custom hook.
+
--- /dev/null
+This is flycheck.info, produced by makeinfo version 5.2 from
+flycheck.texi.
+
+This manual is for Flycheck version 0.23-cvs.
+
+Copyright © 2014-2015 Sebastian Wiesner
+
+ Permission is granted to copy, distribute and/or modify this
+ documentation under the terms of the GNU Free Documentation
+ License, Version 1.3 or any later version published by the Free
+ Software Foundation; with no Invariant Sections, no Front-Cover
+ Texts, and no Back-Cover Texts. A copy of the license is included
+ in the section entitled “GNU Free Documentation License.”.
+
+ Alternatively, you may copy, distribute and/or modify this
+ documentation under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License. A copy of
+ the license can be obtained at
+ <https://creativecommons.org/licenses/by-sa/4.0/legalcode>.
+
+INFO-DIR-SECTION Emacs
+START-INFO-DIR-ENTRY
+* flycheck: (flycheck.info). On the fly syntax checking for GNU Emacs
+END-INFO-DIR-ENTRY
+
+
+ Generated by Sphinx 1.2.3.
+
+\1f
+File: flycheck.info, Node: Error display, Prev: Error processing, Up: Hooking into Flycheck
+
+9.3.2.3 Error display
+.....................
+
+The function *note flycheck-display-errors-function: 2b. is called to
+display an error at point. The flycheck-pos-tip(1) extension uses this
+hook to show errors in a GUI popup like conventional IDEs do.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck-pos-tip
+
+\1f
+File: flycheck.info, Node: Flycheck API, Next: Flycheck ERT API, Prev: Extending Flycheck, Up: Top
+
+10 Flycheck API
+***************
+
+This chapter defines and documents the public API of Flycheck. You can
+use this API to define your own syntax checkers, or extend existing
+syntax checkers, or by extending Flycheck in entirely new ways, e.g. to
+add some sophisticated error analysis.
+
+You will also find this document helpful if you want to develop Flycheck
+itself.
+
+* Menu:
+
+* Syntax checks::
+* Generic syntax checkers: Generic syntax checkers<2>.
+* Command syntax checkers::
+* Errors::
+* Flycheck buffer status::
+* Utilities::
+
+\1f
+File: flycheck.info, Node: Syntax checks, Next: Generic syntax checkers<2>, Up: Flycheck API
+
+10.1 Syntax checks
+==================
+
+A syntax check performs the following steps:
+
+ 1. Run hooks in *note flycheck-before-syntax-check-hook: 218.
+
+ 2. Clear error information from previous syntax checks.
+
+ 3. Select a *note suitable syntax checker: 53.
+
+ 4. Copy the contents of the buffer to be checked to a temporary file.
+
+ 5. Run the syntax checker.
+
+ 6. Parse the output of the tool, and report all errors and warnings,
+ via *note flycheck-process-error-functions: 21a.
+
+ 7. If the buffer can be checked with another syntax checker, continue
+ from step 4, but with the next syntax checker. This is called
+ *note chaining: a0. of syntax checkers.
+
+ 8. Run hooks in *note flycheck-after-syntax-check-hook: 222.
+
+ -- Hook: flycheck -after-syntax-check-hook
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to run after each syntax check.
+
+ This hook is run after a syntax check was finished.
+
+ At this point, *all* chained checkers were run, and all errors
+ were parsed, highlighted and reported. The variable
+ *note ‘flycheck-current-errors’: 91. contains all errors from all syntax
+ checkers run during the syntax check, so you can apply any error
+ analysis functions.
+
+ Note that this hook does *not* run after each individual syntax
+ checker in the syntax checker chain, but only after the *last
+ checker*.
+
+ This variable is a normal hook. See Info node *note (elisp)Hooks::.
+
+ -- Hook: flycheck -before-syntax-check-hook
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to run before each syntax check.
+
+ This hook is run right before a syntax check starts.
+
+ Error information from the previous syntax check is *not*
+ cleared before this hook runs.
+
+ Note that this hook does *not* run before each individual syntax
+ checker in the syntax checker chain, but only before the *first
+ checker*.
+
+ This variable is a normal hook. See Info node *note (elisp)Hooks::.
+
+ -- Hook: flycheck -syntax-check-failed-hook
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to run if a syntax check failed.
+
+ This hook is run whenever an error occurs during Flycheck’s
+ internal processing. No information about the error is given to
+ this hook.
+
+ You should use this hook to conduct additional cleanup actions
+ when Flycheck failed.
+
+ This variable is a normal hook. See Info node *note (elisp)Hooks::.
+
+\1f
+File: flycheck.info, Node: Generic syntax checkers<2>, Next: Command syntax checkers, Prev: Syntax checks, Up: Flycheck API
+
+10.2 Generic syntax checkers
+============================
+
+Generic syntax checkers are the most basic syntax checkers in Flycheck.
+These syntax checkers use an Emacs Lisp function to check the current
+buffer.
+
+ -- Function: flycheck -define-generic-checker symbol docstring &rest
+ properties
+
+ Define SYMBOL as generic syntax checker.
+
+ Any syntax checker defined with this macro is eligible for manual
+ syntax checker selection with *note ‘flycheck-select-checker’: 24. To make
+ the new syntax checker available for automatic selection, it must
+ be registered in *note ‘flycheck-checkers’: 5e.
+
+ DOCSTRING is the documentation of the syntax checker, for
+ *note ‘flycheck-describe-checker’: 3a. The following PROPERTIES constitute
+ a generic syntax checker. Unless otherwise noted, all properties
+ are mandatory.
+
+ ‘:start FUNCTION’
+ A function to start the syntax checker.
+
+ FUNCTION shall take two arguments and return a context
+ object if the checker is started successfully. Otherwise it
+ shall signal an error.
+
+ The first argument is the syntax checker being started. The
+ second is a callback function to report state changes to
+ Flycheck. The callback takes two arguments STATUS DATA,
+ where STATUS is a symbol denoting the syntax checker status
+ and DATA an optional argument with additional data for the
+ status report. See ‘`flycheck-report-buffer-checker-status'’
+ for more information about STATUS and DATA.
+
+ FUNCTION may be synchronous or asynchronous, i.e. it may
+ call the given callback either immediately, or at some later
+ point (e.g. from a process sentinel).
+
+ A syntax checker _must_ call CALLBACK at least once with a
+ STATUS that finishes the current syntax checker. Otherwise
+ Flycheck gets stuck at the current syntax check with this
+ syntax checker.
+
+ The context object returned by FUNCTION is passed to
+ ‘`:interrupt'’.
+
+ ‘:interrupt FUNCTION’
+ A function to interrupt the syntax check.
+
+ FUNCTION is called with the syntax checker and the context
+ object returned by the ‘`:start'’ function and shall try to
+ interrupt the syntax check. The context may be nil, if the
+ syntax check is interrupted before actually started.
+ FUNCTION should handle this situation.
+
+ If it cannot interrupt the syntax check, it may either
+ signal an error or silently ignore the attempt to interrupt
+ the syntax checker, depending on the severity of the
+ situation.
+
+ If interrupting the syntax check failed, Flycheck will let
+ the syntax check continue, but ignore any status reports.
+ Notably, it won’t highlight any errors reported by the
+ syntax check in the buffer.
+
+ This property is optional. If omitted, Flycheck won’t
+ attempt to interrupt syntax checks wit this syntax checker,
+ and simply ignore their results.
+
+ ‘:print-doc FUNCTION’
+ A function to print additional documentation into the Help
+ buffer of this checker.
+
+ FUNCTION is called when creating the Help buffer for the
+ syntax checker, with the syntax checker as single argument,
+ after printing the name of the syntax checker and its modes
+ and predicate, but before printing DOCSTRING. It may insert
+ additional documentation into the current buffer.
+
+ The call occurs within ‘`with-help-window'’. Hence
+ ‘`standard-output'’ points to the current buffer, so you may
+ use ‘`princ'’ and friends to add content. Also, the current
+ buffer is put into Help mode afterwards, which automatically
+ turns symbols into references, if possible.
+
+ This property is optional. If omitted, no additional
+ documentation is printed for this syntax checker.
+
+ :verify FUNCTION
+ A function to verify the checker for the current buffer.
+
+ FUNCTION is called with the syntax checker as single
+ argument, and shall return a list of
+ ‘`flycheck-verification-result'’ objects indicating whether
+ the syntax checker could be used in the current buffer, and
+ highlighting potential setup problems.
+
+ This property is optional. If omitted, no additional
+ verification occurs for this syntax checker. It is however
+ absolutely recommended that you add a ‘`:verify'’ function to
+ your syntax checker, because it will help users to spot
+ potential setup problems.
+
+ ‘:modes MODES’
+ A major mode symbol or a list thereof, denoting major modes
+ to use this syntax checker in.
+
+ If given this syntax checker is only used in buffers whose
+ ‘`major-mode'’ is ‘`eq'’ to any mode in MODES.
+
+ If ‘`:predicate'’ is also given, the syntax checker will only
+ be used in buffers for which the ‘`:predicate'’ returns
+ non-nil.
+
+ This property is optional, however at least one of ‘`:modes'’
+ or ‘`:predicate'’ must be given.
+
+ ‘:predicate FUNCTION’
+ A function to determine whether to use the syntax checker in
+ the current buffer.
+
+ FUNCTION is called without arguments and shall return
+ non-nil if this syntax checker shall be used to check the
+ current buffer. Otherwise it shall return nil.
+
+ If ‘`:modes'’ is also given, FUNCTION is only called in
+ matching major modes.
+
+ This property is optional, however at least one of ‘`:modes'’
+ or ‘`:predicate'’ must be given.
+
+ ‘:error-filter FUNCTION’
+ A function to filter the errors returned by this checker.
+
+ FUNCTION is called with the list of ‘`flycheck-error'’ objects
+ returned by the syntax checker and shall return another list
+ of ‘`flycheck-error'’ objects, which is considered the final
+ result of this syntax checker.
+
+ FUNCTION is free to add, remove or modify errors, whether in
+ place or by copying.
+
+ This property is optional. The default filter is
+ ‘`identity'’.
+
+ ‘:next-checkers NEXT-CHECKERS’
+ A list denoting syntax checkers to apply after this syntax
+ checker, in what we call "chaining" of syntax checkers.
+
+ Each ITEM is a cons cell ‘(LEVEL . CHECKER)’. CHECKER is a
+ syntax checker to run after this syntax checker. LEVEL is
+ an error level. CHECKER will only be used if there are no
+ current errors of at least LEVEL. LEVEL may also be t, in
+ which case CHECKER is used regardless of the current errors.
+
+ ITEM may also be a syntax checker symbol, which is
+ equivalent to ‘(t . ITEM)’.
+
+ Flycheck tries all items in order of declaration, and uses
+ the first whose LEVEL matches and whose CHECKER is
+ registered and can be used for the current buffer.
+
+ This feature is typically used to apply more than one syntax
+ checker to a buffer. For instance, you might first use a
+ compiler to check a buffer for syntax and type errors, and
+ then run a linting tool that checks for insecure code, or
+ questionable style.
+
+ This property is optional. If omitted, it defaults to the
+ nil, i.e. no other syntax checkers are applied after this
+ syntax checker.
+
+ Signal an error, if any property has an invalid value.
+
+ See also
+.............
+
+ *note Status callback protocol: 226.
+
+To make new syntax checkers available for automatic selection you need
+to register them by adding them to *note flycheck-checkers: 5e.
+
+ -- Function: flycheck -registered-checker-p checker
+
+ Determine whether CHECKER is registered.
+
+ A checker is registered if it is contained in
+ *note ‘flycheck-checkers’: 5e.
+
+You can extend generic syntax checkers to add new modes or chain further
+syntax checkers:
+
+ -- Function: flycheck -add-mode checker mode
+
+ Add a new major MODE to CHECKER.
+
+ CHECKER and MODE are symbols denoting a syntax checker and a
+ major mode respectively.
+
+ Add MODE to the ‘`:modes'’ property of CHECKER, so that CHECKER
+ will be used in buffers with MODE.
+
+ -- Function: flycheck -add-next-checker checker next &optional append
+
+ Add a NEXT checker after CHECKER.
+
+ CHECKER is a syntax checker symbol, to which to add NEXT checker.
+
+ NEXT is a cons cell ‘(LEVEL . NEXT-CHECKER)’. NEXT-CHECKER is a
+ symbol denoting the syntax checker to run after CHECKER. LEVEL
+ is an error level. NEXT-CHECKER will only be used if there is no
+ current error whose level is more severe than LEVEL. LEVEL may
+ also be t, in which case NEXT-CHECKER is used regardless of the
+ current errors.
+
+ NEXT can also be a syntax checker symbol only, which is
+ equivalent to ‘(t . NEXT)’.
+
+ NEXT-CHECKER is prepended before other next checkers, unless
+ APPEND is non-nil.
+
+* Menu:
+
+* Status callback protocol::
+* Predicates for syntax checkers::
+* Error filters::
+
+\1f
+File: flycheck.info, Node: Status callback protocol, Next: Predicates for syntax checkers, Up: Generic syntax checkers<2>
+
+10.2.1 Status callback protocol
+-------------------------------
+
+The ‘callback’ argument to the ‘:start’ function of a syntax checker
+defined with *note flycheck-define-generic-checker: 1b. is a function
+taking two arguments:
+
+ -- Function: status -callback status &optional data
+
+ ‘status’ is one of the following symbols, denoting the status being
+ reported:
+
+ ‘errored’ (_finishing_)
+
+ The syntax checker has errored. ‘data’ is an optional error
+ message as string.
+
+ ‘interrupted’ (_finishing_)
+
+ The syntax checker was interrupted. ‘data’ is ignored in this
+ case.
+
+ ‘finished’ (_finishing_)
+
+ The syntax checker has finished to check the buffer and
+ reported some errors. DATA is the list of *note
+ flycheck-error: 169. objects reported by the syntax check.
+
+ ‘suspicious’
+
+ The syntax checker encountered some suspicious state (like a
+ potential fault in the syntax checker definition), which the
+ user needs to be informed about.
+
+ A _finishing_ ‘status’ symbol finishes the current syntax check,
+ and allows Flycheck to conduct further syntax checks. A syntax
+ checker *must* call the callback at least once with a _finishing_
+ ‘status’ symbol.
+
+ Warning: Failure to call the callback will cause Flycheck to
+ get stuck at the current syntax check.
+
+\1f
+File: flycheck.info, Node: Predicates for syntax checkers, Next: Error filters, Prev: Status callback protocol, Up: Generic syntax checkers<2>
+
+10.2.2 Predicates for syntax checkers
+-------------------------------------
+
+Flycheck provides some ready-to-use predicates for generic checkers:
+
+ -- Function: flycheck -buffer-saved-p &optional buffer
+
+ Determine whether BUFFER is saved to a file.
+
+ BUFFER is the buffer to check. If omitted or nil, use the
+ current buffer as BUFFER.
+
+ Return non-nil if the BUFFER is backed by a file, and not
+ modified, or nil otherwise.
+
+\1f
+File: flycheck.info, Node: Error filters, Prev: Predicates for syntax checkers, Up: Generic syntax checkers<2>
+
+10.2.3 Error filters
+--------------------
+
+Additionally, Flycheck has some built-in error filters for generic
+checkers:
+
+ -- Function: flycheck -sanitize-errors errors
+
+ Sanitize ERRORS.
+
+ Sanitize ERRORS by trimming leading and trailing whitespace in
+ all error messages, and by replacing 0 columns and empty error
+ messages with nil.
+
+ Returns sanitized ERRORS.
+
+ -- Function: flycheck -increment-error-columns errors &optional offset
+
+ Increment all columns of ERRORS by OFFSET.
+
+ Use this as ‘`:error-filter'’ if a syntax checker outputs 0-based
+ columns.
+
+ -- Function: flycheck -collapse-error-message-whitespace errors
+
+ Collapse whitespace in all messages of ERRORS.
+
+ Return ERRORS.
+
+ -- Function: flycheck -dedent-error-messages errors
+
+ Dedent all messages of ERRORS.
+
+ For each error in ERRORS, determine the indentation offset from
+ the leading whitespace of the first line, and dedent all further
+ lines accordingly.
+
+ Return ERRORS, with in-place modifications.
+
+ -- Function: flycheck -fold-include-levels errors sentinel-message
+
+ Fold levels of ERRORS from included files.
+
+ ERRORS is a list of ‘`flycheck-error'’ objects. SENTINEL-MESSAGE
+ is a regular expression matched against the error message to
+ determine whether the errror denotes errors from an included
+ file. Alternatively, it is a function that is given an error and
+ shall return non-nil, if the error denotes errors from an
+ included file.
+
+ -- Function: flycheck -dequalify-error-ids errors
+
+ De-qualify error ids in ERRORS.
+
+ Remove all qualifications from error ids in ERRORS, by stripping
+ all leading dotted components from error IDs. For instance, if
+ the error ID is com.foo.E100, replace it with E100.
+
+ This error filter is mainly useful to simplify error IDs obtained
+ from parsing Checkstyle XML, which frequently has very verbose
+ IDs, that include the name of the tool.
+
+ -- Function: flycheck -remove-error-ids errors
+
+ Remove all error ids from ERRORS.
+
+\1f
+File: flycheck.info, Node: Command syntax checkers, Next: Errors, Prev: Generic syntax checkers<2>, Up: Flycheck API
+
+10.3 Command syntax checkers
+============================
+
+Command syntax checkers are a specialised variant of generic syntax
+checkers which use an external command to check the contents of the
+current buffer. To define a new command syntax checker, use *note
+flycheck-define-command-checker: 177.:
+
+ -- Function: flycheck -define-command-checker symbol docstring &rest
+ properties
+
+ Define SYMBOL as syntax checker which runs a command.
+
+ Define SYMBOL as generic syntax checker via
+ *note ‘flycheck-define-generic-checker’: 1b, which uses an external command
+ to check the buffer. SYMBOL and DOCSTRING are the same as for
+ *note ‘flycheck-define-generic-checker’: 1b.
+
+ In addition to the properties understood by
+ *note ‘flycheck-define-generic-checker’: 1b, the following PROPERTIES
+ constitute a command syntax checker. Unless otherwise noted, all
+ properties are mandatory. Note that the default ‘`:error-filter'’
+ of command checkers is *note ‘flycheck-sanitize-errors’: 22c.
+
+ ‘:command COMMAND’
+ The command to run for syntax checking.
+
+ COMMAND is a list of the form ‘(EXECUTABLE [ARG ...])’.
+
+ EXECUTABLE is a string with the executable of this syntax
+ checker. It can be overridden with the variable
+ ‘`flycheck-SYMBOL-executable'’. Note that this variable is
+ NOT implicitly defined by this function. Use
+ *note ‘flycheck-def-executable-var’: 233. to define this variable.
+
+ Each ARG is an argument to the executable, either as string,
+ or as special symbol or form for
+ *note ‘flycheck-substitute-argument’: 201, which see.
+
+ ‘:error-patterns PATTERNS’
+ A list of patterns to parse the output of the ‘`:command'’.
+
+ Each ITEM in PATTERNS is a list ‘(LEVEL SEXP ...)’, where
+ LEVEL is a Flycheck error level (see
+ *note ‘flycheck-define-error-level’: 27.), followed by one or more RX
+ ‘`SEXP'’s which parse an error of that level and extract line,
+ column, file name and the message.
+
+ See ‘`rx'’ for general information about RX, and
+ *note ‘flycheck-rx-to-string’: 200. for some special RX forms provided
+ by Flycheck.
+
+ All patterns are applied in the order of declaration to the
+ whole output of the syntax checker. Output already matched
+ by a pattern will not be matched by subsequent patterns. In
+ other words, the first pattern wins.
+
+ This property is optional. If omitted, however, an
+ ‘`:error-parser'’ is mandatory.
+
+ ‘:error-parser FUNCTION’
+ A function to parse errors with.
+
+ The function shall accept three arguments OUTPUT CHECKER
+ BUFFER. OUTPUT is the syntax checker output as string,
+ CHECKER the syntax checker that was used, and BUFFER a
+ buffer object representing the checked buffer. The function
+ must return a list of ‘`flycheck-error'’ objects parsed from
+ OUTPUT.
+
+ This property is optional. If omitted, it defaults to
+ *note ‘flycheck-parse-with-patterns’: 234. In this case,
+ ‘`:error-patterns'’ is mandatory.
+
+ Note that you may not give ‘`:start'’, ‘`:interrupt'’, and
+ ‘`:print-doc'’ for a command checker. You can give a custom
+ ‘`:verify'’ function, but you should take care to call
+ ‘`flycheck-verify-command-checker'’ in a custom ‘`:verify'’
+ function.
+
+Each command checker uses an accompanying variable to override the
+executable, which you can define with *note flycheck-def-executable-var:
+233.:
+
+ -- Macro: flycheck -def-executable-var checker default-executable
+
+ Define the executable variable for CHECKER.
+
+ DEFAULT-EXECUTABLE is the default executable. It is only used in
+ the docstring of the variable.
+
+ The variable is defined with ‘`defcustom'’ in the
+ ‘`flycheck-executables'’ group. It’s also defined to be risky as
+ file-local variable, to avoid arbitrary executables being used
+ for syntax checking.
+
+Since command syntax checkers are by far the most common kind of syntax
+checkers, Flycheck provides a convenience macro *note
+flycheck-define-checker: 19. which wraps up *note
+flycheck-define-command-checker: 177. and *note
+flycheck-def-executable-var: 233. into a single macro, and reduces
+syntactic clutter by allowing unquoted arguments:
+
+ -- Macro: flycheck -define-checker symbol docstring &rest properties
+
+ Define SYMBOL as command syntax checker with DOCSTRING and PROPERTIES.
+
+ Like *note ‘flycheck-define-command-checker’: 177, but PROPERTIES must not
+ be quoted. Also, implicitly define the executable variable for
+ SYMBOL with *note ‘flycheck-def-executable-var’: 233.
+
+* Menu:
+
+* Command arguments::
+* Options for command syntax checkers::
+* Configuration files for command syntax checkers::
+* Error parsing with regular expressions::
+* Error parsers::
+
+\1f
+File: flycheck.info, Node: Command arguments, Next: Options for command syntax checkers, Up: Command syntax checkers
+
+10.3.1 Command arguments
+------------------------
+
+The arguments passed to the external command of a command syntax checker
+are subject to substitution with *note flycheck-substitute-argument:
+201, which replaces special symbols and forms with strings for
+consumption by the external command:
+
+ -- Function: flycheck -substitute-argument arg checker
+
+ Substitute ARG for CHECKER.
+
+ Return a list of real arguments for the executable of CHECKER,
+ substituted for the symbolic argument ARG. Single arguments,
+ e.g. if ARG is a literal strings, are wrapped in a list.
+
+ ARG may be one of the following forms:
+
+ STRING
+ Return ARG unchanged.
+
+ ‘`source'’, ‘`source-inplace'’
+ Create a temporary file to check and return its path. With
+ ‘`source-inplace'’ create the temporary file in the same
+ directory as the original file. The value of
+ *note ‘flycheck-temp-prefix’: 5b. is used as prefix of the file name.
+
+ With ‘`source'’, try to retain the non-directory component of
+ the buffer’s file name in the temporary file.
+
+ ‘`source'’ is the preferred way to pass the input file to a
+ syntax checker. ‘`source-inplace'’ should only be used if the
+ syntax checker needs other files from the source directory,
+ such as include files in C.
+
+ ‘`source-original'’
+ Return the path of the actual file to check, or an empty
+ string if the buffer has no file name.
+
+ Note that the contents of the file may not be up to date
+ with the contents of the buffer to check. Do not use this
+ as primary input to a checker, unless absolutely necessary.
+
+ When using this symbol as primary input to the syntax
+ checker, add *note ‘flycheck-buffer-saved-p’: 22a. to the ‘`:predicate'’.
+
+ ‘`temporary-directory'’
+ Create a unique temporary directory and return its path.
+
+ ‘`temporary-file-name'’
+ Return a unique temporary filename. The file is *not*
+ created.
+
+ To ignore the output of syntax checkers, try ‘`null-device'’
+ first.
+
+ ‘`null-device'’
+ Return the value of ‘`null-device'’, i.e the system null
+ device.
+
+ Use this option to ignore the output of a syntax checker.
+ If the syntax checker cannot handle the null device, or
+ won’t write to an existing file, try ‘`temporary-file-name'’
+ instead.
+
+ ‘(config-file OPTION VARIABLE [PREPEND-FN])’
+ Search the configuration file bound to VARIABLE with
+ *note ‘flycheck-locate-config-file’: 236. and return a list of arguments
+ that pass this configuration file to the syntax checker, or
+ nil if the configuration file was not found.
+
+ PREPEND-FN is called with the OPTION and the located
+ configuration file, and should return OPTION prepended
+ before the file, either a string or as list. If omitted,
+ PREPEND-FN defaults to ‘`list'’.
+
+ ‘(option OPTION VARIABLE [PREPEND-FN [FILTER]])’
+ Retrieve the value of VARIABLE and return a list of
+ arguments that pass this value as value for OPTION to the
+ syntax checker.
+
+ PREPEND-FN is called with the OPTION and the value of
+ VARIABLE, and should return OPTION prepended before the
+ file, either a string or as list. If omitted, PREPEND-FN
+ defaults to ‘`list'’.
+
+ FILTER is an optional function to be applied to the value of
+ VARIABLE before prepending. This function must return nil
+ or a string. In the former case, return nil. In the latter
+ case, return a list of arguments as described above.
+
+ ‘(option-list OPTION VARIABLE [PREPEND-FN [FILTER]])’
+ Retrieve the value of VARIABLE, which must be a list,
+ and prepend OPTION before each item in this list, using
+ PREPEND-FN.
+
+ PREPEND-FN is called with the OPTION and each item of the
+ list as second argument, and should return OPTION prepended
+ before the item, either as string or as list. If omitted,
+ PREPEND-FN defaults to ‘`list'’.
+
+ FILTER is an optional function to be applied to each item in
+ the list before prepending OPTION. It shall return the
+ option value for each item as string, or nil, if the item is
+ to be ignored.
+
+ ‘(option-flag OPTION VARIABLE)’
+ Retrieve the value of VARIABLE and return OPTION, if the
+ value is non-nil. Otherwise return nil.
+
+ ‘(eval FORM)’
+ Return the result of evaluating FORM in the buffer to be
+ checked. FORM must either return a string or a list of
+ strings, or nil to indicate that nothing should be
+ substituted for CELL. For all other return types, signal an
+ error
+
+ _No_ further substitutions are performed, neither in FORM
+ before it is evaluated, nor in the result of evaluating
+ FORM.
+
+ In all other cases, signal an error.
+
+ Note that substitution is *not* recursive. No symbols or cells
+ are substituted within the body of cells!
+
+\1f
+File: flycheck.info, Node: Options for command syntax checkers, Next: Configuration files for command syntax checkers, Prev: Command arguments, Up: Command syntax checkers
+
+10.3.2 Options for command syntax checkers
+------------------------------------------
+
+Command syntax checkers can define options, whose values are substituted
+into the external command.
+
+ -- Macro: flycheck -def-option-var symbol init-value checker docstring
+ &rest custom-args
+
+ Define SYMBOL as option variable with INIT-VALUE for CHECKER.
+
+ SYMBOL is declared as customizable variable using ‘`defcustom'’, to
+ provide an option for the given syntax CHECKER. INIT-VALUE is
+ the initial value of the variable, and DOCSTRING is its
+ docstring. CUSTOM-ARGS are forwarded to ‘`defcustom'’.
+
+ Use this together with the ‘`option'’, ‘`option-list'’ and
+ ‘`option-flag'’ forms in the ‘`:command'’ argument to
+ *note ‘flycheck-define-checker’: 19.
+
+ -- Macro: flycheck -def-args-var symbol checker &rest custom-args
+
+ Define SYMBOL as argument variable for CHECKER.
+
+ SYMBOL is declared as customizable, risky and buffer-local
+ variable using ‘`defcustom'’ to provide an option for arbitrary
+ arguments for the given syntax CHECKER. CUSTOM-ARGS is forwarded
+ to ‘`defcustom'’.
+
+ Use the ‘`eval'’ form to splice this variable into the
+ ‘`:command'’.
+
+Flycheck provides some built-in filters for such options:
+
+ -- Function: flycheck -option-int value
+
+ Convert an integral option VALUE to a string.
+
+ If VALUE is nil, return nil. Otherwise return VALUE converted to
+ a string.
+
+ -- Function: flycheck -option-comma-separated-list value &optional
+ separator filter
+
+ Convert VALUE into a list separated by SEPARATOR.
+
+ SEPARATOR is a string to separate items in VALUE, defaulting to
+ ",". FILTER is an optional function, which takes a single
+ argument and returns either a string or nil.
+
+ If VALUE is a list, apply FILTER to each item in VALUE, remove
+ all nil items, and return a single string of all remaining items
+ separated by SEPARATOR.
+
+ Otherwise, apply FILTER to VALUE and return the result.
+ SEPARATOR is ignored in this case.
+
+\1f
+File: flycheck.info, Node: Configuration files for command syntax checkers, Next: Error parsing with regular expressions, Prev: Options for command syntax checkers, Up: Command syntax checkers
+
+10.3.3 Configuration files for command syntax checkers
+------------------------------------------------------
+
+Additionally, command syntax checkers can pass configuration files to
+external commands.
+
+ -- Macro: flycheck -def-config-file-var symbol checker &optional
+ file-name &rest custom-args
+
+ Define SYMBOL as config file variable for CHECKER, with default FILE-NAME.
+
+ SYMBOL is declared as customizable variable using ‘`defcustom'’, to
+ provide a configuration file for the given syntax CHECKER.
+ CUSTOM-ARGS are forwarded to ‘`defcustom'’.
+
+ FILE-NAME is the initial value of the new variable. If omitted,
+ the default value is nil.
+
+ Use this together with the ‘`config-file'’ form in the ‘`:command'’
+ argument to *note ‘flycheck-define-checker’: 19.
+
+Flycheck tries to find an appropriate file based on the value of
+configuration file variables, and substitutes the path to that file into
+the external command.
+
+ -- Function: flycheck -locate-config-file filename checker
+
+ Locate the configuration file FILENAME for CHECKER.
+
+ Locate the configuration file using
+ *note ‘flycheck-locate-config-file-functions’: 6d.
+
+ Return the absolute path of the configuration file, or nil if no
+ configuration file was found.
+
+\1f
+File: flycheck.info, Node: Error parsing with regular expressions, Next: Error parsers, Prev: Configuration files for command syntax checkers, Up: Command syntax checkers
+
+10.3.4 Error parsing with regular expressions
+---------------------------------------------
+
+Normally, command syntax checkers use regular expressions to extract
+errors from the output. For simplicity and readability, Flycheck uses
+RX expressions instead of standard regular expressions, and provides
+some custom RX forms for frequent patterns, implemented by *note
+flycheck-rx-to-string: 200.:
+
+ -- Function: flycheck -rx-to-string form &optional no-group
+
+ Like ‘`rx-to-string'’ for FORM, but with special keywords:
+
+ ‘`line'’
+ matches the line number.
+
+ ‘`column'’
+ matches the column number.
+
+ ‘(file-name SEXP ...)’
+ matches the file name. SEXP describes the file name. If no
+ SEXP is given, use a default body of ‘(minimal-match
+ (one-or-more not-newline))’.
+
+ ‘(message SEXP ...)’
+ matches the message. SEXP constitutes the body of the message. If no SEXP
+ is given, use a default body of ‘(one-or-more not-newline)’.
+
+ ‘(id SEXP ...)’
+ matches an error ID. SEXP describes the ID.
+
+ NO-GROUP is passed to ‘`rx-to-string'’.
+
+Internally, error parsing with regular expressions is implemented with a
+special error parser:
+
+ -- Function: flycheck -parse-with-patterns output checker buffer
+
+ Parse OUTPUT from CHECKER with error patterns.
+
+ Uses the error patterns of CHECKER to tokenize the output and
+ tries to parse each error token with all patterns, in the order
+ of declaration. Hence an error is never matched twice by two
+ different patterns. The pattern declared first always wins.
+
+ _BUFFER is ignored.
+
+ Return a list of parsed errors and warnings (as ‘`flycheck-error'’
+ objects).
+
+\1f
+File: flycheck.info, Node: Error parsers, Prev: Error parsing with regular expressions, Up: Command syntax checkers
+
+10.3.5 Error parsers
+--------------------
+
+Alternatively, command syntax checkers can use custom functions to parse
+errors from the command output. Flycheck provides some built-in error
+parsers for standard output formats:
+
+ -- Function: flycheck -parse-checkstyle output checker buffer
+
+ Parse Checkstyle errors from OUTPUT.
+
+ Parse Checkstyle-like XML output. Use this error parser for
+ checkers that have an option to output errors in this format.
+
+ See URL ‘http://checkstyle.sourceforge.net/’(1) for information
+ about Checkstyle.
+
+You can also write your own error parsers. An error parser is a
+function with the following signature:
+
+ -- Function: flycheck -error-parser output checker buffer
+
+ ‘output’ is the output of the command as string. ‘checker’ is the
+ syntax checker from which the output comes, and ‘buffer’ is the
+ buffer that was checked.
+
+The following functions can aid you in writing custom parsers:
+
+ -- Function: flycheck -parse-xml-string xml
+
+ Parse an XML string.
+
+ Return the document tree parsed from XML in the form ‘(ROOT ATTRS
+ BODY...)’. ROOT is a symbol identifying the name of the root
+ element. ATTRS is an alist of the attributes of the root node.
+ BODY is zero or more body elements, either as strings (in case of
+ text nodes) or as XML nodes, in the same for as the root node.
+
+ ---------- Footnotes ----------
+
+ (1) http://checkstyle.sourceforge.net/
+
+\1f
+File: flycheck.info, Node: Errors, Next: Flycheck buffer status, Prev: Command syntax checkers, Up: Flycheck API
+
+10.4 Errors
+===========
+
+The list of errors in a buffer is stored in the local variable *note
+flycheck-current-errors: 91.:
+
+ -- Variable: flycheck -current-errors
+
+ Variable properties: Automatically becomes buffer-local when
+ set.
+
+ A list of all errors and warnings in the current buffer.
+
+Flycheck errors are represented by the CL structure *note
+flycheck-error: 169. See *note (cl)Structures:: for more information
+about CL structures.
+
+ -- CL Struct: flycheck -error
+
+ A Flycheck error with the following slots. Each of these slots may
+ be ‘nil’.
+
+ -- Slot: buffer
+
+ The buffer object referring to the buffer this error belongs
+ to.
+
+ -- Slot: checker
+
+ The syntax checker that reported this error.
+
+ -- Slot: filename
+
+ A string containing the filename the error refers to.
+
+ -- Slot: line
+
+ An integer providing the line the error refers to.
+
+ -- Slot: column
+
+ An _optional_ integer providing the column the error refers
+ to.
+
+ If this attribute is ‘nil’, Flycheck will assume that the
+ error refers to the whole line.
+
+ Warning: For compatibility with external programs and
+ *unlike* Emacs itself (e.g. in Compile Mode), Flycheck
+ uses 1-based columns, not 0-based: The first character on
+ a line is column 1.
+
+ This is the format used by most external programs, but
+ occasionally a program tries to proactively adapt to
+ Emacs’ convention, and outputs 0-based columns. In this
+ case, you need to adapt the column numbers for Flycheck,
+ via *note flycheck-increment-error-columns: 22d. as
+ ‘:error-filter’.
+
+ -- Slot: message
+
+ The human-readable error message as string.
+
+ -- Slot: level
+
+ The error level of the message, as symbol denoting an error
+ level defined with *note flycheck-define-error-level: 27.
+
+ -- Slot: id
+
+ An _optional_ unique identifier for this kind of error.
+
+ This field should identify the kind of an error, not the
+ individual error itself.
+
+ There are two constructors to create new *note flycheck-error: 169.
+ objects:
+
+ -- Function: flycheck -error-new-at line column &optional level
+ message &key checker id filename buffer
+
+ Create a new Flycheck error at the given LINE and COLUMN.
+
+ LINE and COLUMN refer to the *note line: 244. and *note
+ column: 245. of the new error. The optional LEVEL and MESSAGE
+ arguments fill the *note level: 247. and cl-slot:‘message’
+ slots respectively.
+
+ CHECKER, ID, FILENAME and BUFFER are keyword arguments, for
+ *note checker: 168, *note id: 179, *note filename: 243. and
+ *note buffer: 167. respectively. BUFFER defaults to the
+ current buffer and FILENAME to the file name of the current
+ buffer. The other keyword arguments default to ‘nil’.
+
+ Warning: Due to a limitation of Common Lisp functions in
+ Emacs Lisp, you must specify *all* optional arguments,
+ that is, *both* LEVEL *and* MESSAGE, to pass any keyword
+ arguments.
+
+ -- Function: flycheck -error-new &rest attributes
+
+ Create a new *note flycheck-error: 169. with the given
+ ATTRIBUTES.
+
+ ATTRIBUTES is a property list, where each property specifies
+ the value for the corresponding slot of *note flycheck-error:
+ 169, for instance:
+
+ (flycheck-error-new :line 10 :column 5 :message "Foo" :level 'warning)
+
+ The following functions and macros work on errors:
+
+ -- Macro: flycheck -error-with-buffer err &rest forms
+
+ Switch to the buffer of ERR and evaluate FORMS.
+
+ If the buffer of ERR is not live, FORMS are not evaluated.
+
+ -- Function: flycheck -error-line-region err
+
+ Get the line region of ERR.
+
+ ERR is a Flycheck error whose region to get.
+
+ Return a cons cell ‘(BEG . END)’ where BEG is the first
+ non-whitespace character on the line ERR refers to, and END the
+ end of the line.
+
+ -- Function: flycheck -error-column-region err
+
+ Get the error column region of ERR.
+
+ ERR is a Flycheck error whose region to get.
+
+ Return a cons cell ‘(BEG . END)’ where BEG is the character
+ before the error column, and END the actual error column, or nil
+ if ERR has no column.
+
+ -- Function: flycheck -error-thing-region thing err
+
+ Get the region of THING at the column of ERR.
+
+ ERR is a Flycheck error whose region to get. THING is a
+ understood by ‘`thing-at-point'’.
+
+ Return a cons cell ‘(BEG . END)’ where BEG is the beginning of
+ the THING at the error column, and END the end of the symbol. If
+ ERR has no error column, or if there is no THING at this column,
+ return nil.
+
+ -- Function: flycheck -error-pos err
+
+ Get the buffer position of ERR.
+
+ ERR is a Flycheck error whose position to get.
+
+ The error position is the error column, or the first
+ non-whitespace character of the error line, if ERR has no error column.
+
+ -- Function: flycheck -error-format err
+
+ Format ERR as human-readable string.
+
+ Return a string that represents the given ERR. This string does
+ _not_ include the file name.
+
+ -- Function: flycheck -error-< err1 err2
+
+ Determine whether ERR1 goes before ERR2 by location.
+
+ Compare by line numbers and then by column numbers.
+
+ -- Function: flycheck -error-level-< err1 err2
+
+ Determine whether ERR1 goes before ERR2 by error level.
+
+ Like *note ‘flycheck-error-<’: 250, but compares by error level severity
+ first. Levels of the same severity are compared by name.
+
+* Menu:
+
+* Error processing: Error processing<2>.
+* Error analysis::
+* Error levels: Error levels<2>.
+
+\1f
+File: flycheck.info, Node: Error processing<2>, Next: Error analysis, Up: Errors
+
+10.4.1 Error processing
+-----------------------
+
+ -- Hook: flycheck -process-error-functions
+
+ -- Function: flycheck -add-overlay
+
+\1f
+File: flycheck.info, Node: Error analysis, Next: Error levels<2>, Prev: Error processing<2>, Up: Errors
+
+10.4.2 Error analysis
+---------------------
+
+Flycheck provides some functions for rudimentary error analysis:
+
+ -- Function: flycheck -count-errors errors
+
+ Count the number of ERRORS, grouped by level..
+
+ Return an alist, where each ITEM is a cons cell whose ‘`car'’ is an
+ error level, and whose ‘`cdr'’ is the number of errors of that
+ level.
+
+ -- Function: flycheck -has-errors-p errors level
+
+ Determine if there are any ERRORS with LEVEL.
+
+ -- Function: flycheck -has-max-errors-p
+ -- Function: :auto
+
+\1f
+File: flycheck.info, Node: Error levels<2>, Prev: Error analysis, Up: Errors
+
+10.4.3 Error levels
+-------------------
+
+Flycheck provides three built-in error levels:
+
+‘error’
+
+ Severe errors which cannot be ignored
+
+‘warning’
+
+ Potential errors which can be ignored
+
+‘info’
+
+ Informational annotations
+
+You can define new error levels with *note flycheck-define-error-level:
+27.:
+
+ -- Function: flycheck -define-error-level level &rest properties
+
+ Define a new error LEVEL with PROPERTIES.
+
+ The following PROPERTIES constitute an error level:
+
+ ‘:severity SEVERITY’
+ A number denoting the severity of this level. The higher
+ the number, the more severe is this level compared to other
+ levels. Defaults to 0.
+
+ The severity is used by *note ‘flycheck-error-level-<’: 251. to
+ determine the ordering of errors according to their levels.
+
+ ‘:overlay-category CATEGORY’
+ A symbol denoting the overlay category to use for error
+ highlight overlays for this level. See Info
+ node *note (elisp)Overlay Properties:: for more information about
+ overlay categories.
+
+ A category for an error level overlay should at least define
+ the ‘`face'’ property, for error highlighting. Other useful
+ properties for error level categories are ‘`priority'’ to
+ influence the stacking of multiple error level overlays, and
+ ‘`help-echo'’ to define a default error messages for errors
+ without messages.
+
+ ‘:fringe-bitmap BITMAP’
+ A fringe bitmap symbol denoting the bitmap to use for fringe
+ indicators for this level. See Info node *note (elisp)Fringe Bitmaps:: for more information about fringe bitmaps,
+ including a list of built-in fringe bitmaps.
+
+ ‘:fringe-face FACE’
+ A face symbol denoting the face to use for fringe indicators
+ for this level.
+
+ ‘:error-list-face FACE’
+ A face symbol denoting the face to use for messages of this
+ level in the error list. See *note ‘flycheck-list-errors’: 4b.
+
+ -- Function: flycheck -error-level-p level
+
+ Determine whether LEVEL is a Flycheck error level.
+
+\1f
+File: flycheck.info, Node: Flycheck buffer status, Next: Utilities, Prev: Errors, Up: Flycheck API
+
+10.5 Flycheck buffer status
+===========================
+
+ -- Hook: flycheck -status-changed-functions
+
+ Variable properties: This variable may be risky if used as a
+ file-local variable.
+
+ Functions to run if the Flycheck status changed.
+
+ This hook is run whenever the status of Flycheck changes. Each
+ hook function takes the status symbol as sinlge argument, as
+ given to *note ‘flycheck-report-status’: 25a, which see.
+
+ This variable is a abnormal hook. See Info
+ node *note (elisp)Hooks::.
+
+ This hook was introduced, or its default value was changed, in
+ version 0.20 of the flycheck package.
+
+ -- Function: flycheck -report-status status
+
+ Report Flycheck STATUS.
+
+ STATUS is one of the following symbols:
+
+ ‘`not-checked'’
+ The current buffer was not checked.
+
+ ‘`no-checker'’
+ Automatic syntax checker selection did not find a suitable
+ syntax checker.
+
+ ‘`running'’
+ A syntax check is now running in the current buffer.
+
+ ‘`errored'’
+ The current syntax check has errored.
+
+ ‘`finished'’
+ The current syntax check was finished normally.
+
+ ‘`interrupted'’
+ The current syntax check was interrupted.
+
+ ‘`suspicious'’
+ The last syntax check had a suspicious result.
+
+ Set *note ‘flycheck-last-status-change’: 90. and call
+ *note ‘flycheck-status-changed-functions’: 19e. with STATUS. Afterwards
+ refresh the mode line.
+
+ -- Variable: flycheck -last-status-change
+
+ Variable properties: Automatically becomes buffer-local when
+ set.
+
+ The last status change in the current buffer.
+
+ -- Function: flycheck -mode-line-status-text &optional status
+
+ Get a text describing STATUS for use in the mode line.
+
+ STATUS defaults to *note ‘flycheck-last-status-change’: 90. if omitted or
+ nil.
+
+\1f
+File: flycheck.info, Node: Utilities, Prev: Flycheck buffer status, Up: Flycheck API
+
+10.6 Utilities
+==============
+
+ -- Function: flycheck -string-list-p obj
+
+ Determine if OBJ is a list of strings.
+
+ -- Function: flycheck -symbol-list-p obj
+
+ Determine if OBJ is a list of symbols.
+
+\1f
+File: flycheck.info, Node: Flycheck ERT API, Next: Contribution guidelines, Prev: Flycheck API, Up: Top
+
+11 Flycheck ERT API
+*******************
+
+This chapter documents the Flycheck ERT API, which is used throughout
+Flycheck’s own test suite, and available for use in test suites for your
+own Flycheck extensions.
+
+* Menu:
+
+* Compatibility::
+* Loading and initializing::
+* Utilities: Utilities<2>.
+* Defining test cases::
+
+\1f
+File: flycheck.info, Node: Compatibility, Next: Loading and initializing, Up: Flycheck ERT API
+
+11.1 Compatibility
+==================
+
+‘flycheck-ert’ is compatible with all ERT versions included in Emacs
+from 24.1 onwards.
+
+ Note: Test skipping
+
+ ERT in Emacs 24.3 and earlier does not support skipped tests. For
+ these versions, ‘flycheck-ert’ provides limited support for skipped
+ tests by marking them as expected to fail.
+
+ For this feature to work, you *must* call ‘flycheck-ert-initialize’
+ after defining all test cases.
+
+\1f
+File: flycheck.info, Node: Loading and initializing, Next: Utilities<2>, Prev: Compatibility, Up: Flycheck ERT API
+
+11.2 Loading and initializing
+=============================
+
+The ERT API is provided by the ‘flycheck-ert’ library, which is part of
+the Flycheck package. If the Flycheck package is installed (see *note
+Installation: 31.), you can load the ERT API with:
+
+ (require 'flycheck-ert)
+
+This will also load the ‘ert’ and ‘flycheck’ libraries.
+
+Flycheck ERT supports test resources (see *note Accessing test
+resources: 261.). For this feature, you need to initialize Flycheck ERT
+with a resource directory by calling *note flycheck-ert-initialize:
+262.:
+
+ -- Function: flycheck -ert-initialize resource-dir
+
+ Initialize a test suite with RESOURCE-DIR.
+
+ RESOURCE-DIR is the directory, *note ‘flycheck-ert-resource-filename’: 263.
+ should use to lookup resource files.
+
+\1f
+File: flycheck.info, Node: Utilities<2>, Next: Defining test cases, Prev: Loading and initializing, Up: Flycheck ERT API
+
+11.3 Utilities
+==============
+
+* Menu:
+
+* Creating temporary buffers::
+* Scoping resource access::
+* Accessing test resources::
+* Obtaining information about the environment::
+
+\1f
+File: flycheck.info, Node: Creating temporary buffers, Next: Scoping resource access, Up: Utilities<2>
+
+11.3.1 Creating temporary buffers
+---------------------------------
+
+ -- Macro: flycheck -ert-with-temp-buffer &rest body
+
+ Eval BODY within a temporary buffer.
+
+ Like ‘`with-temp-buffer'’, but resets the modification state of the
+ temporary buffer to make sure that it is properly killed even if
+ it has a backing file and is modified.
+
+ -- Macro: flycheck -ert-with-file-buffer file-name &rest body
+
+ Create a buffer from FILE-NAME and eval BODY.
+
+ BODY is evaluated with ‘`current-buffer'’ being a buffer with the
+ contents FILE-NAME.
+
+\1f
+File: flycheck.info, Node: Scoping resource access, Next: Accessing test resources, Prev: Creating temporary buffers, Up: Utilities<2>
+
+11.3.2 Scoping resource access
+------------------------------
+
+ -- Macro: flycheck -ert-with-help-buffer &rest body
+
+ Execute BODY and kill the help buffer afterwards.
+
+ Use this macro to test functions that create a Help buffer.
+
+ -- Macro: flycheck -ert-with-env env &rest body
+
+ Add ENV to ‘`process-environment'’ in BODY.
+
+ Execute BODY with a ‘`process-environment'’ with contains all
+ variables from ENV added.
+
+ ENV is an alist, where each cons cell ‘(VAR . VALUE)’ is a
+ environment variable VAR to be added to ‘`process-environment'’
+ with VALUE.
+
+ -- Macro: flycheck -ert-with-global-mode &rest body
+
+ Execute BODY with Global Flycheck Mode enabled.
+
+ After BODY, restore the old state of Global Flycheck Mode.
+
+\1f
+File: flycheck.info, Node: Accessing test resources, Next: Obtaining information about the environment, Prev: Scoping resource access, Up: Utilities<2>
+
+11.3.3 Accessing test resources
+-------------------------------
+
+The following functions and macros load resources from the directory
+given to *note flycheck-ert-initialize: 262.
+
+ -- Function: flycheck -ert-resource-filename resource-file
+
+ Determine the absolute file name of a RESOURCE-FILE.
+
+ Relative file names are expanded against
+ ‘`flycheck-ert-resources-directory'’.
+
+ -- Macro: flycheck -ert-with-resource-buffer resource-file &rest body
+
+ Create a temp buffer from a RESOURCE-FILE and execute BODY.
+
+ The absolute file name of RESOURCE-FILE is determined with
+ *note ‘flycheck-ert-resource-filename’: 263.
+
+ -- Function: flycheck -ert-locate-config-file filename _checker
+
+ Find a configuration FILENAME within unit tests.
+
+ _CHECKER is ignored.
+
+\1f
+File: flycheck.info, Node: Obtaining information about the environment, Prev: Accessing test resources, Up: Utilities<2>
+
+11.3.4 Obtaining information about the environment
+--------------------------------------------------
+
+ -- Constant: flycheck -ert-user-error-type
+
+ The ‘`user-error'’ type used by Flycheck.
+
+ -- Function: flycheck -ert-travis-ci-p
+
+ Determine whether we are running on Travis CI.
+
+ -- Function: flycheck -ert-check-gpg
+
+ Check whether GPG is available.
+
+ -- Function: flycheck -ert-extract-version-command re executable &rest
+ args
+
+ Use RE to extract the version from EXECUTABLE with ARGS.
+
+ Run EXECUTABLE with ARGS, catch the output, and apply RE to find
+ the version number. Return the text captured by the first group
+ in RE, or nil, if EXECUTABLE is missing, or if RE failed to
+ match.
+
+\1f
+File: flycheck.info, Node: Defining test cases, Prev: Utilities<2>, Up: Flycheck ERT API
+
+11.4 Defining test cases
+========================
+
+In addition to the standard ‘ert-deftest’ from ERT, this library
+provides macros for specialized test case definitions:
+
+ -- Macro: flycheck -ert-def-checker-test checker language name &rest
+ keys-and-body
+
+ Define a test case for a syntax CHECKER for LANGUAGE.
+
+ CHECKER is a symbol or a list of symbols denoting syntax checkers
+ being tested by the test. The test case is skipped, if any of
+ these checkers cannot be used. LANGUAGE is a symbol or a list of
+ symbols denoting the programming languages supported by the
+ syntax checkers. This is currently only used for tagging the
+ test appropriately.
+
+ NAME is a symbol denoting the local name of the test. The test
+ itself is ultimately named
+ ‘`flycheck-define-checker/CHECKER/NAME'’. If CHECKER is a list,
+ the first checker in the list is used for naming the test.
+
+ Optionally, the keyword arguments ‘`:tags'’ and ‘`:expected-result'’
+ may be given. They have the same meaning as in ‘`ert-deftest.'’,
+ and are added to the tags and result expectations set up by this
+ macro.
+
+ The remaining forms denote the body of the test case, including
+ assertions and setup code.
+
+* Menu:
+
+* Checking results of test cases::
+* Invoking syntax checkers in test cases::
+* Writing assertions::
+
+\1f
+File: flycheck.info, Node: Checking results of test cases, Next: Invoking syntax checkers in test cases, Up: Defining test cases
+
+11.4.1 Checking results of test cases
+-------------------------------------
+
+Flycheck ERT provides some functions to check the results of test cases,
+which are handy in ‘:expected-result’ forms.
+
+ -- Function: flycheck -ert-syntax-check-timed-out-p result
+
+ Whether RESULT denotes a timed-out test.
+
+ RESULT is an ERT test result object.
+
+\1f
+File: flycheck.info, Node: Invoking syntax checkers in test cases, Next: Writing assertions, Prev: Checking results of test cases, Up: Defining test cases
+
+11.4.2 Invoking syntax checkers in test cases
+---------------------------------------------
+
+ -- Function: flycheck -ert-buffer-sync
+
+ Like *note ‘flycheck-buffer’: 47, but synchronously.
+
+ -- Function: flycheck -ert-ensure-clear
+
+ Clear the current buffer.
+
+ Raise an assertion error if the buffer is not clear afterwards.
+
+\1f
+File: flycheck.info, Node: Writing assertions, Prev: Invoking syntax checkers in test cases, Up: Defining test cases
+
+11.4.3 Writing assertions
+-------------------------
+
+ -- Function: flycheck -ert-should-overlay error
+
+ Test that ERROR has a proper overlay in the current buffer.
+
+ ERROR is a Flycheck error object.
+
+ -- Function: flycheck -ert-should-errors &rest errors
+
+ Test that the current buffers has ERRORS.
+
+ ERRORS is a list of errors expected to be present in the current
+ buffer. Each error is given as a list of arguments to
+ *note ‘flycheck-error-new-at’: 248.
+
+ If ERRORS are omitted, test that there are no errors at all in
+ the current buffer.
+
+ With ERRORS, test that each error in ERRORS is present in the
+ current buffer, and that the number of errors in the current
+ buffer is equal to the number of given ERRORS. In other words,
+ check that the buffer has all ERRORS, and no other errors.
+
+ -- Function: flycheck -ert-should-syntax-check resource-file modes
+ &rest errors
+
+ Test a syntax check in RESOURCE-FILE with MODES.
+
+ RESOURCE-FILE is the file to check. MODES is a single major mode
+ symbol or a list thereof, specifying the major modes to syntax
+ check with. If more than one major mode is specified, the test
+ is run for each mode separately, so if you give three major
+ modes, the entire test will run three times. ERRORS is the list
+ of expected errors, as in *note ‘flycheck-ert-should-errors’: 27d. If
+ omitted, the syntax check must not emit any errors. The errors
+ are cleared after each test.
+
+ The syntax checker is selected via standard syntax checker
+ selection. To test a specific checker, you need to set
+ *note ‘flycheck-checker’: 23. or *note ‘flycheck-disabled-checkers’: 5f. accordingly
+ before using this predicate, depending on whether you want to use
+ manual or automatic checker selection.
+
+ During the syntax check, configuration files of syntax checkers
+ are also searched in the ‘`config-files'’ sub-directory of the
+ resource directory.
+
+ -- Function: flycheck -ert-at-nth-error n
+
+ Determine whether point is at the N’th Flycheck error.
+
+ Return non-nil if the point is at the N’th Flycheck error in the
+ current buffer. Otherwise return nil.
+
+\1f
+File: flycheck.info, Node: Contribution guidelines, Next: Testing Flycheck, Prev: Flycheck ERT API, Up: Top
+
+12 Contribution guidelines
+**************************
+
+If you discovered bugs and issues, have ideas for improvements or new
+features, or want to contribute a new syntax checker, please report to
+the issue tracker(1) the repository and send a pull request, but respect
+the following guidelines.
+
+* Menu:
+
+* Reporting issues::
+* Contributing code::
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues
+
+\1f
+File: flycheck.info, Node: Reporting issues, Next: Contributing code, Up: Contribution guidelines
+
+12.1 Reporting issues
+=====================
+
+Please report issues to the issue tracker(1).
+
+ - Check that the issue has not already been reported.
+
+ - Check that the issue has not already been fixed in the latest code.
+
+ - Check that your setup is fine with ‘M-x flycheck-verify-setup’.
+
+ - Be clear and precise (do not prose, but name functions and commands
+ exactly).
+
+ - Include the version of Flycheck as shown by ‘M-x flycheck-version’.
+
+ - Open an issue with a clear title and description in grammatically
+ correct, complete sentences.
+
+ ---------- Footnotes ----------
+
+ (1) https://github.com/flycheck/flycheck/issues
+
+\1f
+File: flycheck.info, Node: Contributing code, Prev: Reporting issues, Up: Contribution guidelines
+
+12.2 Contributing code
+======================
+
+Contributions of code, either as pull requests or as patches, are _very_
+welcome, but please respect the following guidelines.
+
+* Menu:
+
+* General::
+* Code style::
+* Commit messages::
+* Contributing syntax checkers::
+* Pull requests::
+
+\1f
+File: flycheck.info, Node: General, Next: Code style, Up: Contributing code
+
+12.2.1 General
+--------------
+
+ - Write good and _complete_ code.
+
+ - Provide use cases and rationale for new features.
+
+\1f
+File: flycheck.info, Node: Code style, Next: Commit messages, Prev: General, Up: Contributing code
+
+12.2.2 Code style
+-----------------
+
+ - Generally, use the same coding style and spacing.
+
+ - Do not use tabs for indentation.
+
+ - Add docstrings for every declaration.
+
+ - Make sure your code compiles without warnings with ‘make compile’,
+ and has no checkdoc issues with ‘M-x checkdoc-buffer’ or ‘C-c ? d’.
+ If you are using Flycheck, just make sure that your code has no
+ Flycheck warnings.
+
+\1f
+File: flycheck.info, Node: Commit messages, Next: Contributing syntax checkers, Prev: Code style, Up: Contributing code
+
+12.2.3 Commit messages
+----------------------
+
+Write commit messages according to Tim Pope’s guidelines(1). In short:
+
+ - Start with a capitalized, short (50 characters or less) summary,
+ followed by a blank line.
+
+ - If necessary, add one or more paragraphs with details, wrapped at
+ 72 characters.
+
+ - Use present tense and write in the imperative: “Fix bug”, not
+ “fixed bug” or “fixes bug”.
+
+ - Separate paragraphs by blank lines.
+
+ - Do _not_ use special markup (e.g. Markdown). Commit messages are
+ plain text. You may use ‘*emphasis*’ or ‘_underline_’ though,
+ following conventions established on mailing lists.
+
+This is a model commit message:
+
+ Capitalized, short (50 chars or less) summary
+
+ More detailed explanatory text, if necessary. Wrap it to about 72
+ characters or so. In some contexts, the first line is treated as the
+ subject of an email and the rest of the text as the body. The blank
+ line separating the summary from the body is critical (unless you omit
+ the body entirely); tools like rebase can get confused if you run the
+ two together.
+
+ Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
+ or "Fixes bug." This convention matches up with commit messages generated
+ by commands like git merge and git revert.
+
+ Further paragraphs come after blank lines.
+
+ - Bullet points are okay, too
+
+ - Typically a hyphen or asterisk is used for the bullet, followed by a
+ single space, with blank lines in between, but conventions vary here
+
+ - Use a hanging indent
+
+Git Commit Mode(2) and Magit(3) provide a major mode for Git commit
+messages, which helps you to comply to these guidelines.
+
+ ---------- Footnotes ----------
+
+ (1)
+http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
+
+ (2) https://github.com/magit/git-modes/
+
+ (3) https://github.com/magit/magit/
+
+\1f
+File: flycheck.info, Node: Contributing syntax checkers, Next: Pull requests, Prev: Commit messages, Up: Contributing code
+
+12.2.4 Contributing syntax checkers
+-----------------------------------
+
+For syntax checkers, some special guidelines apply in addition to the
+above:
+
+ - Provide a link to the website of the syntax checker tool in the
+ comments of your pull request.
+
+ - Add a proper docstring to your syntax checker, including this URL.
+
+ - Add unit tests for your syntax checker, or provide example code
+ that triggers errors for each error pattern of the syntax checker.
+
+ - Extend the Ansible playbooks in ‘playbooks/’ to install the
+ required tools in the CI environment and the local testing VM, or
+ explain how to install the tool on an Ubuntu 12.04 system.
+
+ Note: Unit tests that can run on Travis CI are *mandatory* for all
+ syntax checkers in Flycheck.
+
+\1f
+File: flycheck.info, Node: Pull requests, Prev: Contributing syntax checkers, Up: Contributing code
+
+12.2.5 Pull requests
+--------------------
+
+ - Use a *topic branch* to easily amend a pull request later, if
+ necessary.
+
+ - Do *not* open new pull requests, when asked to improve your patch.
+ Instead, amend your commits with ‘git rebase -i’, and then update
+ the pull request with ‘git push --force’
+
+ - Open a pull request(1) that relates to but one subject with a clear
+ title and description in grammatically correct, complete sentences.
+
+ Note: Pull requests *must* pass all tests on Travis CI before being
+ merged.
+
+ ---------- Footnotes ----------
+
+ (1) https://help.github.com/articles/using-pull-requests
+
+\1f
+File: flycheck.info, Node: Testing Flycheck, Next: Writing documentation, Prev: Contribution guidelines, Up: Top
+
+13 Testing Flycheck
+*******************
+
+Flycheck comes with a large unit test suite, which tests all syntax
+checkers and large parts of Flychecks internal API and interactive
+commands.
+
+This document explains how to use this test suite.
+
+* Menu:
+
+* Test suite layout::
+* Test running::
+* Virtual test environment::
+* Travis CI::
+
+\1f
+File: flycheck.info, Node: Test suite layout, Next: Test running, Up: Testing Flycheck
+
+13.1 Test suite layout
+======================
+
+The library ‘flycheck-ert.el’ provides many extensions to ERT, generic
+ones as well as specific utilities for testing Flycheck code and syntax
+checkers. You may use this library to write test cases for your own
+Flycheck extensions: It is part of the Flycheck package.
+
+All test code is contained in the ‘test/’ sub-directory, which has the
+following contents:
+
+ - ‘flycheck-test.el’: The actual unit test suite, that is, the test
+ cases plus some local utility functions and macros.
+
+ - ‘resources/’: Resource files used by the test suite, including
+ example code in various programming languages to test syntax
+ checkers.
+
+ - ‘run.el’: A simple test runner for non-interactive use, which reads
+ ERT selectors from the command line and runs all matching tests.
+
+\1f
+File: flycheck.info, Node: Test running, Next: Virtual test environment, Prev: Test suite layout, Up: Testing Flycheck
+
+13.2 Test running
+=================
+
+First install Emacs Lisp dependencies using Cask(1):
+
+ $ make deps
+
+Then install the syntax checkers that you’d like to test:
+
+ $ brew install go
+ $ pip install --user pylint
+ $ npm install --global coffee coffee-lint jshint
+ $ cabal install hlint shellcheck
+
+ Note: If you’d like to keep your environment clean, use the *note
+ Virtual test environment: 290. instead.
+
+Run the entire test suite:
+
+ $ make test
+
+ Note: Tests which can’t be run because of missing tools are
+ gracefully skipped.
+
+You may also run a specific subset of test cases by passing an ERT
+selector expression. The following example runs all tests for C and
+C++, except those whose name matches ‘gcc’:
+
+ $ make ERTSELECTOR='(and (or (tag language-c) (tag language-c++)) (not "gcc"))' test
+
+See *note (ert)Test Selectors:: for the syntax of test selectors.
+
+You can also use a different Emacs to run the tests with:
+
+ $ make EMACS=emacs-snapshot test
+
+ Note: Keep in mind that you must quote the expression for your
+ shell _and_ for Emacs Lisp.
+
+ ---------- Footnotes ----------
+
+ (1) http://cask.readthedocs.org
+
+\1f
+File: flycheck.info, Node: Virtual test environment, Next: Travis CI, Prev: Test running, Up: Testing Flycheck
+
+13.3 Virtual test environment
+=============================
+
+To run all tests successfully, you need a large amount of external
+tools. To keep your environment clean, and test against a reference
+environment, Flycheck provides a virtual machine with a complete test
+environment, based on VirtualBox and Vagrant.
+
+The virtual machine contains
+
+ - The latest stable Emacs release
+
+ - A nightly build of Emacs trunk
+
+ - ‘make’ and Cask(1)
+
+ - All syntax checkers supported by Flycheck
+
+To use this VM, first install the following tools on your system:
+
+ - VirtualBox(2)
+
+ - Vagrant(3)
+
+ - Ansible(4)
+
+On Linux, these packages are typically available from the package
+manager of your distribution. On OS X, use the binaries provided for
+Vagrant and VirtualBox, and install Ansible from Homebrew(5) with ‘brew
+install ansible’.
+
+To start the VM run the following command in the root directory of
+Flycheck:
+
+ $ vagrant up
+
+ Warning: On the first time, this command will setup and provision
+ the VM, and *download and install over 1GB* of images and packages
+ along the way. Depending on your network connection and disk
+ speed, this can take an hour or more.
+
+After the VM is started, you can connect to it:
+
+ $ vagrant ssh
+
+This will give you a bash prompt within the VM, on which you can run the
+tests as explained in *note Test running: 28e.
+
+To switch between Emacs versions, pass ‘EMACS’ to ‘make test’:
+
+ $ make EMACS=emacs24 test
+ $ make EMACS=emacs-snapshot test
+
+The latter is the default.
+
+When finished, you can shutdown the VM with:
+
+ $ vagrant halt
+
+Occasionally you should provision the test environment again, to update
+to the latest Emacs nightly build, and to follow updates of syntax
+checker tools. To do so, use the ‘--provision’ flag when starting the
+VM:
+
+ $ vagrant up --provision
+
+You can also provision a running machine with:
+
+ $ vagrant provision
+
+The VM is provisioned from Ansible playbooks in the ‘playbooks/’
+sub-directory of the top-level source directory.
+
+ ---------- Footnotes ----------
+
+ (1) http://cask.readthedocs.org
+
+ (2) https://www.virtualbox.org/
+
+ (3) https://www.vagrantup.com/
+
+ (4) http://www.ansible.com/home
+
+ (5) http://brew.sh/
+
+\1f
+File: flycheck.info, Node: Travis CI, Prev: Virtual test environment, Up: Testing Flycheck
+
+13.4 Travis CI
+==============
+
+The entire test suite continuously runs on *note Travis CI: 293. after
+every push, with the latest Emacs release and a nightly Emacs snapshot.
+
+Travis CI is configured from ‘.travis.yml’ in the top-level source
+directory, and uses mostly the same playbooks for provisioning.
+
+ Note: Travis CI is the *reference environment* for Flycheck’s test
+ suite. All tests *must pass* on Travis CI.
+
+ In case Travis CI diverges from the *note VM: 290, Travis CI is
+ authoritative.
+
+\1f
+File: flycheck.info, Node: Writing documentation, Next: Maintenance tasks, Prev: Testing Flycheck, Up: Top
+
+14 Writing documentation
+************************
+
+This document explains how to edit and building the documentation of
+Flycheck.
+
+* Menu:
+
+* Build environment setup::
+* Building HTML and Texinfo::
+* Verifying references::
+
+\1f
+File: flycheck.info, Node: Build environment setup, Next: Building HTML and Texinfo, Up: Writing documentation
+
+14.1 Build environment setup
+============================
+
+Flycheck’s documentation is written using Sphinx(1) and
+sphinxcontrib-emacs(2). To build the documentation locally, you need to
+install these tools first. This section guides you through the process
+of installing them.
+
+First make sure, that you have Python 2.7 and virtualenv(3) available.
+To install virtualenv, use:
+
+ $ pip install --user virtualenv
+
+ Note: You probably need to install pip(4) first. It is available
+ in the package repositories of most Linux distributions, as
+ ‘python-pip’ or similar. If ‘pip’ is not available for your Linux
+ distribution, or if you are using OS X, please follow the
+ instructions to install pip(5).
+
+Then add ‘~/Library/Python/2.7/bin’ (on OS X) or ‘~/.local/bin’ (on
+other Unix variants) to ‘$PATH’.
+
+Now create a virtual environment and install the requirements of the
+documentation:
+
+ $ mkdir -p ~/.virtualenvs
+ $ virtualenv -p python2.7 ~/.virtualenvs/cask
+ $ pip install -r doc/requirements.txt
+
+Now you are set up to build the documentation.
+
+ ---------- Footnotes ----------
+
+ (1) http://sphinx-doc.org
+
+ (2) http://sphinxcontrib-emacs.readthedocs.org/en/latest/
+
+ (3) http://virtualenv.readthedocs.org/en/latest/
+
+ (4) https://pip.pypa.io/
+
+ (5) https://pip.pypa.io/en/latest/installing.html
+
+\1f
+File: flycheck.info, Node: Building HTML and Texinfo, Next: Verifying references, Prev: Build environment setup, Up: Writing documentation
+
+14.2 Building HTML and Texinfo
+==============================
+
+First, switch to the virtual environment you created in the *note Build
+environment setup: 296, and make sure that the requirements are up to
+date:
+
+ $ source ~/.virtualenvs/cask/bin/activate
+ $ pip install -r doc/requirements.txt
+
+Now build the documentation:
+
+ $ make html
+ $ make texinfo
+
+The HTML documentation is build to ‘build/doc/html/’, where you can
+preview it. The Texinfo build goes to ‘doc/flycheck.texi’.
+
+ Warning: Unlike the HTML output, the Texinfo output is _committed_
+ to the repository, since it is needed by MELPA(1) to build an Info
+ manual for inclusion in the Flycheck packages.
+
+ ---------- Footnotes ----------
+
+ (1) http://melpa.org/
+
+\1f
+File: flycheck.info, Node: Verifying references, Prev: Building HTML and Texinfo, Up: Writing documentation
+
+14.3 Verifying references
+=========================
+
+Sphinx emits warnings for internal references and cross-references to
+Emacs Lisp symbols that could not be resolved. Your documentation
+should build without any such warnings.
+
+You can additionally verify all external references with:
+
+ $ source ~/.virtualenvs/cask/bin/activate
+ $ make linkcheck
+
+\1f
+File: flycheck.info, Node: Maintenance tasks, Next: GNU General Public License, Prev: Writing documentation, Up: Top
+
+15 Maintenance tasks
+********************
+
+This document explains various maintenance tasks for Flycheck, that
+contributors have to perform under specific circumstances.
+
+* Menu:
+
+* Rebuilding the Texinfo::
+* Rasterized logo files::
+
+\1f
+File: flycheck.info, Node: Rebuilding the Texinfo, Next: Rasterized logo files, Up: Maintenance tasks
+
+15.1 Rebuilding the Texinfo
+===========================
+
+Flycheck contains a Texinfo version of the documentation at
+‘doc/flycheck.texi’, to allow MELPA(1) to build the Info manual for
+Flycheck.
+
+ Warning: Do *not* edit this file. It is generated automatically
+ from Flycheck’s documentation.
+
+When making changes to the documentation, you need to rebuild the
+Texinfo version with, by following the *note instructions to build the
+documentation: 298.
+
+ ---------- Footnotes ----------
+
+ (1) http://melpa.org/
+
+\1f
+File: flycheck.info, Node: Rasterized logo files, Prev: Rebuilding the Texinfo, Up: Maintenance tasks
+
+15.2 Rasterized logo files
+==========================
+
+The source of the Flycheck logo is ‘flycheck.svg’. The documentation
+contains rasterized versions of this logo at
+
+ - ‘doc/images/logo.png’ (the logo shown in the documentation and the
+ README)
+
+ - ‘doc/images/favicon.ico’ (the logo for use as favicon of the
+ documentation)
+
+ Warning: Do *not* change these files directly. They are generated
+ automatically from the SVG source.
+
+When changing the Flycheck logo, you need to rebuild these files with:
+
+ make images
+
+You need *convert* from ImageMagick(1) and Inkscape(2). Make sure that
+‘inkscape’ is in ‘$PATH’, because ImageMagick’s own SVG renderer cannot
+properly render the logo.
+
+ ---------- Footnotes ----------
+
+ (1) http://www.imagemagick.org/
+
+ (2) https://www.inkscape.org/
+
+\1f
+File: flycheck.info, Node: GNU General Public License, Next: GNU Free Documentation License, Prev: Maintenance tasks, Up: Top
+
+16 GNU General Public License
+*****************************
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+ software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+ to take away your freedom to share and change the works. By contrast,
+ the GNU General Public License is intended to guarantee your freedom to
+ share and change all versions of a program--to make sure it remains free
+ software for all its users. We, the Free Software Foundation, use the
+ GNU General Public License for most of our software; it applies also to
+ any other work released this way by its authors. You can apply it to
+ your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that you
+ have the freedom to distribute copies of free software (and charge for
+ them if you wish), that you receive source code or can get it if you
+ want it, that you can change the software or use pieces of it in new
+ free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+ these rights or asking you to surrender the rights. Therefore, you have
+ certain responsibilities if you distribute copies of the software, or if
+ you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must pass on to the recipients the same
+ freedoms that you received. You must make sure that they, too, receive
+ or can get the source code. And you must show them these terms so they
+ know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+ (1) assert copyright on the software, and (2) offer you this License
+ giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+ that there is no warranty for this free software. For both users' and
+ authors' sake, the GPL requires that modified versions be marked as
+ changed, so that their problems will not be attributed erroneously to
+ authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+ modified versions of the software inside them, although the manufacturer
+ can do so. This is fundamentally incompatible with the aim of
+ protecting users' freedom to change the software. The systematic
+ pattern of such abuse occurs in the area of products for individuals to
+ use, which is precisely where it is most unacceptable. Therefore, we
+ have designed this version of the GPL to prohibit the practice for those
+ products. If such problems arise substantially in other domains, we
+ stand ready to extend this provision to those domains in future versions
+ of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+ States should not allow patents to restrict development and use of
+ software on general-purpose computers, but in those that do, we wish to
+ avoid the special danger that patents applied to a free program could
+ make it effectively proprietary. To prevent this, the GPL assures that
+ patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+ works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+ License. Each licensee is addressed as "you". "Licensees" and
+ "recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+ in a fashion requiring copyright permission, other than the making of an
+ exact copy. The resulting work is called a "modified version" of the
+ earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+ on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for
+ infringement under applicable copyright law, except executing it on a
+ computer or modifying a private copy. Propagation includes copying,
+ distribution (with or without modification), making available to the
+ public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+ parties to make or receive copies. Mere interaction with a user through
+ a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+ to the extent that it includes a convenient and prominently visible
+ feature that (1) displays an appropriate copyright notice, and (2)
+ tells the user that there is no warranty for the work (except to the
+ extent that warranties are provided), that licensees may convey the
+ work under this License, and how to view a copy of this License. If
+ the interface presents a list of user commands or options, such as a
+ menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+ for making modifications to it. "Object code" means any non-source
+ form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+ standard defined by a recognized standards body, or, in the case of
+ interfaces specified for a particular programming language, one that
+ is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+ than the work as a whole, that (a) is included in the normal form of
+ packaging a Major Component, but which is not part of that Major
+ Component, and (b) serves only to enable use of the work with that
+ Major Component, or to implement a Standard Interface for which an
+ implementation is available to the public in source code form. A
+ "Major Component", in this context, means a major essential component
+ (kernel, window system, and so on) of the specific operating system
+ (if any) on which the executable work runs, or a compiler used to
+ produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+ the source code needed to generate, install, and (for an executable
+ work) run the object code and to modify the work, including scripts to
+ control those activities. However, it does not include the work's
+ System Libraries, or general-purpose tools or generally available free
+ programs which are used unmodified in performing those activities but
+ which are not part of the work. For example, Corresponding Source
+ includes interface definition files associated with source files for
+ the work, and the source code for shared libraries and dynamically
+ linked subprograms that the work is specifically designed to require,
+ such as by intimate data communication or control flow between those
+ subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+ can regenerate automatically from other parts of the Corresponding
+ Source.
+
+ The Corresponding Source for a work in source code form is that
+ same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+ copyright on the Program, and are irrevocable provided the stated
+ conditions are met. This License explicitly affirms your unlimited
+ permission to run the unmodified Program. The output from running a
+ covered work is covered by this License only if the output, given its
+ content, constitutes a covered work. This License acknowledges your
+ rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+ convey, without conditions so long as your license otherwise remains
+ in force. You may convey covered works to others for the sole purpose
+ of having them make modifications exclusively for you, or provide you
+ with facilities for running those works, provided that you comply with
+ the terms of this License in conveying all material for which you do
+ not control copyright. Those thus making or running the covered works
+ for you must do so exclusively on your behalf, under your direction
+ and control, on terms that prohibit them from making any copies of
+ your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+ the conditions stated below. Sublicensing is not allowed; section 10
+ makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+ measure under any applicable law fulfilling obligations under article
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
+ similar laws prohibiting or restricting circumvention of such
+ measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such circumvention
+ is effected by exercising rights under this License with respect to
+ the covered work, and you disclaim any intention to limit operation or
+ modification of the work as a means of enforcing, against the work's
+ users, your or third parties' legal rights to forbid circumvention of
+ technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+ receive it, in any medium, provided that you conspicuously and
+ appropriately publish on each copy an appropriate copyright notice;
+ keep intact all notices stating that this License and any
+ non-permissive terms added in accord with section 7 apply to the code;
+ keep intact all notices of the absence of any warranty; and give all
+ recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+ and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+ produce it from the Program, in the form of source code under the
+ terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+ works, which are not by their nature extensions of the covered work,
+ and which are not combined with it such as to form a larger program,
+ in or on a volume of a storage or distribution medium, is called an
+ "aggregate" if the compilation and its resulting copyright are not
+ used to limit the access or legal rights of the compilation's users
+ beyond what the individual works permit. Inclusion of a covered work
+ in an aggregate does not cause this License to apply to the other
+ parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+ of sections 4 and 5, provided that you also convey the
+ machine-readable Corresponding Source under the terms of this License,
+ in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+ from the Corresponding Source as a System Library, need not be
+ included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+ tangible personal property which is normally used for personal, family,
+ or household purposes, or (2) anything designed or sold for incorporation
+ into a dwelling. In determining whether a product is a consumer product,
+ doubtful cases shall be resolved in favor of coverage. For a particular
+ product received by a particular user, "normally used" refers to a
+ typical or common use of that class of product, regardless of the status
+ of the particular user or of the way in which the particular user
+ actually uses, or expects or is expected to use, the product. A product
+ is a consumer product regardless of whether the product has substantial
+ commercial, industrial or non-consumer uses, unless such uses represent
+ the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+ procedures, authorization keys, or other information required to install
+ and execute modified versions of a covered work in that User Product from
+ a modified version of its Corresponding Source. The information must
+ suffice to ensure that the continued functioning of the modified object
+ code is in no case prevented or interfered with solely because
+ modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+ specifically for use in, a User Product, and the conveying occurs as
+ part of a transaction in which the right of possession and use of the
+ User Product is transferred to the recipient in perpetuity or for a
+ fixed term (regardless of how the transaction is characterized), the
+ Corresponding Source conveyed under this section must be accompanied
+ by the Installation Information. But this requirement does not apply
+ if neither you nor any third party retains the ability to install
+ modified object code on the User Product (for example, the work has
+ been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+ requirement to continue to provide support service, warranty, or updates
+ for a work that has been modified or installed by the recipient, or for
+ the User Product in which it has been modified or installed. Access to a
+ network may be denied when the modification itself materially and
+ adversely affects the operation of the network or violates the rules and
+ protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+ in accord with this section must be in a format that is publicly
+ documented (and with an implementation available to the public in
+ source code form), and must require no special password or key for
+ unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+ License by making exceptions from one or more of its conditions.
+ Additional permissions that are applicable to the entire Program shall
+ be treated as though they were included in this License, to the extent
+ that they are valid under applicable law. If additional permissions
+ apply only to part of the Program, that part may be used separately
+ under those permissions, but the entire Program remains governed by
+ this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+ remove any additional permissions from that copy, or from any part of
+ it. (Additional permissions may be written to require their own
+ removal in certain cases when you modify the work.) You may place
+ additional permissions on material, added by you to a covered work,
+ for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+ add to a covered work, you may (if authorized by the copyright holders of
+ that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+ restrictions" within the meaning of section 10. If the Program as you
+ received it, or any part of it, contains a notice stating that it is
+ governed by this License along with a term that is a further
+ restriction, you may remove that term. If a license document contains
+ a further restriction but permits relicensing or conveying under this
+ License, you may add to a covered work material governed by the terms
+ of that license document, provided that the further restriction does
+ not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+ must place, in the relevant source files, a statement of the
+ additional terms that apply to those files, or a notice indicating
+ where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+ form of a separately written license, or stated as exceptions;
+ the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+ provided under this License. Any attempt otherwise to propagate or
+ modify it is void, and will automatically terminate your rights under
+ this License (including any patent licenses granted under the third
+ paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the copyright
+ holder fails to notify you of the violation by some reasonable means
+ prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from that
+ copyright holder, and you cure the violation prior to 30 days after
+ your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License. If your rights have been terminated and not permanently
+ reinstated, you do not qualify to receive new licenses for the same
+ material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+ run a copy of the Program. Ancillary propagation of a covered work
+ occurring solely as a consequence of using peer-to-peer transmission
+ to receive a copy likewise does not require acceptance. However,
+ nothing other than this License grants you permission to propagate or
+ modify any covered work. These actions infringe copyright if you do
+ not accept this License. Therefore, by modifying or propagating a
+ covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+ receives a license from the original licensors, to run, modify and
+ propagate that work, subject to this License. You are not responsible
+ for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+ organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations. If propagation of a covered
+ work results from an entity transaction, each party to that
+ transaction who receives a copy of the work also receives whatever
+ licenses to the work the party's predecessor in interest had or could
+ give under the previous paragraph, plus a right to possession of the
+ Corresponding Source of the work from the predecessor in interest, if
+ the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+ rights granted or affirmed under this License. For example, you may
+ not impose a license fee, royalty, or other charge for exercise of
+ rights granted under this License, and you may not initiate litigation
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ any patent claim is infringed by making, using, selling, offering for
+ sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+ License of the Program or a work on which the Program is based. The
+ work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+ owned or controlled by the contributor, whether already acquired or
+ hereafter acquired, that would be infringed by some manner, permitted
+ by this License, of making, using, or selling its contributor version,
+ but do not include claims that would be infringed only as a
+ consequence of further modification of the contributor version. For
+ purposes of this definition, "control" includes the right to grant
+ patent sublicenses in a manner consistent with the requirements of
+ this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+ patent license under the contributor's essential patent claims, to
+ make, use, sell, offer for sale, import and otherwise run, modify and
+ propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+ agreement or commitment, however denominated, not to enforce a patent
+ (such as an express permission to practice a patent or covenant not to
+ sue for patent infringement). To "grant" such a patent license to a
+ party means to make such an agreement or commitment not to enforce a
+ patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+ and the Corresponding Source of the work is not available for anyone
+ to copy, free of charge and under the terms of this License, through a
+ publicly available network server or other readily accessible means,
+ then you must either (1) cause the Corresponding Source to be so
+ available, or (2) arrange to deprive yourself of the benefit of the
+ patent license for this particular work, or (3) arrange, in a manner
+ consistent with the requirements of this License, to extend the patent
+ license to downstream recipients. "Knowingly relying" means you have
+ actual knowledge that, but for the patent license, your conveying the
+ covered work in a country, or your recipient's use of the covered work
+ in a country, would infringe one or more identifiable patents in that
+ country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+ arrangement, you convey, or propagate by procuring conveyance of, a
+ covered work, and grant a patent license to some of the parties
+ receiving the covered work authorizing them to use, propagate, modify
+ or convey a specific copy of the covered work, then the patent license
+ you grant is automatically extended to all recipients of the covered
+ work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+ the scope of its coverage, prohibits the exercise of, or is
+ conditioned on the non-exercise of one or more of the rights that are
+ specifically granted under this License. You may not convey a covered
+ work if you are a party to an arrangement with a third party that is
+ in the business of distributing software, under which you make payment
+ to the third party based on the extent of your activity of conveying
+ the work, and under which the third party grants, to any of the
+ parties who would receive the covered work from you, a discriminatory
+ patent license (a) in connection with copies of the covered work
+ conveyed by you (or copies made from those copies), or (b) primarily
+ for and in connection with specific products or compilations that
+ contain the covered work, unless you entered into that arrangement,
+ or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+ any implied license or other defenses to infringement that may
+ otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot convey a
+ covered work so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you may
+ not convey it at all. For example, if you agree to terms that obligate you
+ to collect a royalty for further conveying from those to whom you convey
+ the Program, the only way you could satisfy both those terms and this
+ License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+ permission to link or combine any covered work with a work licensed
+ under version 3 of the GNU Affero General Public License into a single
+ combined work, and to convey the resulting work. The terms of this
+ License will continue to apply to the part which is the covered work,
+ but the special requirements of the GNU Affero General Public License,
+ section 13, concerning interaction through a network will apply to the
+ combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+ the GNU General Public License from time to time. Such new versions will
+ be similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies that a certain numbered version of the GNU General
+ Public License "or any later version" applies to it, you have the
+ option of following the terms and conditions either of that numbered
+ version or of any later version published by the Free Software
+ Foundation. If the Program does not specify a version number of the
+ GNU General Public License, you may choose any version ever published
+ by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+ versions of the GNU General Public License can be used, that proxy's
+ public statement of acceptance of a version permanently authorizes you
+ to choose that version for the Program.
+
+ Later license versions may give you additional or different
+ permissions. However, no additional obligations are imposed on any
+ author or copyright holder as a result of your choosing to follow a
+ later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+ above cannot be given local legal effect according to their terms,
+ reviewing courts shall apply local law that most closely approximates
+ an absolute waiver of all civil liability in connection with the
+ Program, unless a warranty or assumption of liability accompanies a
+ copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+ to attach them to the start of each source file to most effectively
+ state the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program 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.
+
+ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+ notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands `show w' and `show c' should show the appropriate
+ parts of the General Public License. Of course, your program's commands
+ might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
+ For more information on this, and how to apply and follow the GNU GPL, see
+ <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+ into proprietary programs. If your program is a subroutine library, you
+ may consider it more useful to permit linking proprietary applications with
+ the library. If this is what you want to do, use the GNU Lesser General
+ Public License instead of this License. But first, please read
+ <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+\1f
+File: flycheck.info, Node: GNU Free Documentation License, Next: Index, Prev: GNU General Public License, Up: Top
+
+17 GNU Free Documentation License
+*********************************
+
+
+ GNU Free Documentation License
+ Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or noncommercially.
+ Secondarily, this License preserves for the author and publisher a way
+ to get credit for their work, while not being considered responsible
+ for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense. It
+ complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free
+ program should come with manuals providing the same freedoms that the
+ software does. But this License is not limited to software manuals;
+ it can be used for any textual work, regardless of subject matter or
+ whether it is published as a printed book. We recommend this License
+ principally for works whose purpose is instruction or reference.
+
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium, that
+ contains a notice placed by the copyright holder saying it can be
+ distributed under the terms of this License. Such a notice grants a
+ world-wide, royalty-free license, unlimited in duration, to use that
+ work under the conditions stated herein. The "Document", below,
+ refers to any such manual or work. Any member of the public is a
+ licensee, and is addressed as "you". You accept the license if you
+ copy, modify or distribute the work in a way requiring permission
+ under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could fall
+ directly within that overall subject. (Thus, if the Document is in
+ part a textbook of mathematics, a Secondary Section may not explain
+ any mathematics.) The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding
+ them.
+
+ The "Invariant Sections" are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License. If a
+ section does not fit the above definition of Secondary then it is not
+ allowed to be designated as Invariant. The Document may contain zero
+ Invariant Sections. If the Document does not identify any Invariant
+ Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License. A Front-Cover Text may
+ be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or
+ for automatic translation to a variety of formats suitable for input
+ to text formatters. A copy made in an otherwise Transparent file
+ format whose markup, or absence of markup, has been arranged to thwart
+ or discourage subsequent modification by readers is not Transparent.
+ An image format is not Transparent if used for any substantial amount
+ of text. A copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format, SGML
+ or XML using a publicly available DTD, and standard-conforming simple
+ HTML, PostScript or PDF designed for human modification. Examples of
+ transparent image formats include PNG, XCF and JPG. Opaque formats
+ include proprietary formats that can be read and edited only by
+ proprietary word processors, SGML or XML for which the DTD and/or
+ processing tools are not generally available, and the
+ machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page. For works in
+ formats which do not have any title page as such, "Title Page" means
+ the text near the most prominent appearance of the work's title,
+ preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies of
+ the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document whose
+ title either is precisely XYZ or contains XYZ in parentheses following
+ text that translates XYZ in another language. (Here XYZ stands for a
+ specific section name mentioned below, such as "Acknowledgements",
+ "Dedications", "Endorsements", or "History".) To "Preserve the Title"
+ of such a section when you modify the Document means that it remains a
+ section "Entitled XYZ" according to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice which
+ states that this License applies to the Document. These Warranty
+ Disclaimers are considered to be included by reference in this
+ License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and has
+ no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies
+ to the Document are reproduced in all copies, and that you add no
+ other conditions whatsoever to those of this License. You may not use
+ technical measures to obstruct or control the reading or further
+ copying of the copies you make or distribute. However, you may accept
+ compensation in exchange for copies. If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly have
+ printed covers) of the Document, numbering more than 100, and the
+ Document's license notice requires Cover Texts, you must enclose the
+ copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+ the back cover. Both covers must also clearly and legibly identify
+ you as the publisher of these copies. The front cover must present
+ the full title with all words of the title equally prominent and
+ visible. You may add other material on the covers in addition.
+ Copying with changes limited to the covers, as long as they preserve
+ the title of the Document and satisfy these conditions, can be treated
+ as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy
+ a computer-network location from which the general network-using
+ public has access to download using public-standard network protocols
+ a complete Transparent copy of the Document, free of added material.
+ If you use the latter option, you must take reasonably prudent steps,
+ when you begin distribution of Opaque copies in quantity, to ensure
+ that this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you distribute an
+ Opaque copy (directly or through your agents or retailers) of that
+ edition to the public.
+
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to
+ give them a chance to provide you with an updated version of the
+ Document.
+
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document under
+ the conditions of sections 2 and 3 above, provided that you release
+ the Modified Version under precisely this License, with the Modified
+ Version filling the role of the Document, thus licensing distribution
+ and modification of the Modified Version to whoever possesses a copy
+ of it. In addition, you must do these things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+ B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ D. Preserve all the copyright notices of the Document.
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+ H. Include an unaltered copy of this License.
+ I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+ J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+ N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no material
+ copied from the Document, you may at your option designate some or all
+ of these sections as invariant. To do this, add their titles to the
+ list of Invariant Sections in the Modified Version's license notice.
+ These titles must be distinct from any other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of a
+ standard.
+
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version. Only one passage of
+ Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its
+ license notice, and that you preserve all their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by
+ adding at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique number.
+ Make the same adjustment to the section titles in the list of
+ Invariant Sections in the license notice of the combined work.
+
+ In the combination, you must combine any sections Entitled "History"
+ in the various original documents, forming one section Entitled
+ "History"; likewise combine any sections Entitled "Acknowledgements",
+ and any sections Entitled "Dedications". You must delete all sections
+ Entitled "Endorsements".
+
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the rules
+ of this License for verbatim copying of each of the documents in all
+ other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert a
+ copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other separate
+ and independent documents or works, in or on a volume of a storage or
+ distribution medium, is called an "aggregate" if the copyright
+ resulting from the compilation is not used to limit the legal rights
+ of the compilation's users beyond what the individual works permit.
+ When the Document is included in an aggregate, this License does not
+ apply to the other works in the aggregate which are not themselves
+ derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half of
+ the entire aggregate, the Document's Cover Texts may be placed on
+ covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic form.
+ Otherwise they must appear on printed covers that bracket the whole
+ aggregate.
+
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also include
+ the original English version of this License and the original versions
+ of those notices and disclaimers. In case of a disagreement between
+ the translation and the original version of this License or a notice
+ or disclaimer, the original version will prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to Preserve
+ its Title (section 1) will typically require changing the actual
+ title.
+
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void, and
+ will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your license
+ from a particular copyright holder is reinstated (a) provisionally,
+ unless and until the copyright holder explicitly and finally
+ terminates your license, and (b) permanently, if the copyright holder
+ fails to notify you of the violation by some reasonable means prior to
+ 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from that
+ copyright holder, and you cure the violation prior to 30 days after
+ your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you under
+ this License. If your rights have been terminated and not permanently
+ reinstated, receipt of a copy of some or all of the same material does
+ not give you any rights to use it.
+
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of the
+ GNU Free Documentation License from time to time. Such new versions
+ will be similar in spirit to the present version, but may differ in
+ detail to address new problems or concerns. See
+ http://www.gnu.org/copyleft/.
+
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License "or any later version" applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation. If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation. If the Document
+ specifies that a proxy can decide which future versions of this
+ License can be used, that proxy's public statement of acceptance of a
+ version permanently authorizes you to choose that version for the
+ Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server. A
+ "Massive Multiauthor Collaboration" (or "MMC") contained in the site
+ means any set of copyrightable works thus published on the MMC site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or in
+ part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this License
+ somewhere other than this MMC, and subsequently incorporated in whole or
+ in part into the MMC, (1) had no cover texts or invariant sections, and
+ (2) were thus incorporated prior to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the site
+ under CC-BY-SA on the same site at any time before August 1, 2009,
+ provided the MMC is eligible for relicensing.
+
+
+ ADDENDUM: How to use this License for your documents
+
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+ replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+ combination of the three, merge those two alternatives to suit the
+ situation.
+
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License,
+ to permit their use in free software.
+
+\1f
+File: flycheck.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
+
+Index
+*****
+
+\0\b[index\0\b]
+* Menu:
+
+* ;auto; Emacs Lisp function: Error analysis. (line 20)
+* ada-gnat; Emacs Lisp Flycheck syntax checker: Ada. (line 6)
+* asciidoc; Emacs Lisp Flycheck syntax checker: AsciiDoc. (line 6)
+* c/c++-clang; Emacs Lisp Flycheck syntax checker: C/C++. (line 6)
+* c/c++-cppcheck; Emacs Lisp Flycheck syntax checker: C/C++. (line 375)
+* c/c++-gcc; Emacs Lisp Flycheck syntax checker: C/C++. (line 209)
+* cfengine; Emacs Lisp Flycheck syntax checker: CFEngine. (line 6)
+* chaining: Glossary. (line 37)
+* chef-foodcritic; Emacs Lisp Flycheck syntax checker: Chef. (line 11)
+* coffee-coffeelint; Emacs Lisp Flycheck syntax checker: Coffeescript.
+ (line 20)
+* coffee; Emacs Lisp Flycheck syntax checker: Coffeescript. (line 6)
+* coq; Emacs Lisp Flycheck syntax checker: Coq. (line 6)
+* css-csslint; Emacs Lisp Flycheck syntax checker: CSS. (line 6)
+* d-dmd; Emacs Lisp Flycheck syntax checker: D. (line 6)
+* disabled syntax checker: Glossary. (line 14)
+* elixir; Emacs Lisp Flycheck syntax checker: Elixir. (line 6)
+* emacs-lisp-checkdoc; Emacs Lisp Flycheck syntax checker: Emacs Lisp.
+ (line 98)
+* emacs-lisp; Emacs Lisp Flycheck syntax checker: Emacs Lisp. (line 11)
+* enabled syntax checker: Glossary. (line 20)
+* erlang; Emacs Lisp Flycheck syntax checker: Erlang. (line 6)
+* eruby-erubis; Emacs Lisp Flycheck syntax checker: ERuby. (line 6)
+* flycheck-add-mode; Emacs Lisp function: Generic syntax checkers<2>.
+ (line 198)
+* flycheck-add-next-checker; Emacs Lisp function: Generic syntax checkers<2>.
+ (line 208)
+* flycheck-add-overlay; Emacs Lisp function: Error processing<2>.
+ (line 8)
+* flycheck-after-syntax-check-hook; Emacs Lisp hook: Syntax checks.
+ (line 27)
+* flycheck-before-syntax-check-hook; Emacs Lisp hook: Syntax checks.
+ (line 48)
+* flycheck-buffer-saved-p; Emacs Lisp function: Predicates for syntax checkers.
+ (line 8)
+* flycheck-buffer; Emacs Lisp command: Checking buffers. (line 75)
+* flycheck-check-syntax-automatically; Emacs Lisp user option: Checking buffers.
+ (line 19)
+* flycheck-checker-error-threshold; Emacs Lisp user option: Error reporting.
+ (line 18)
+* flycheck-checker; Emacs Lisp variable: Selecting syntax checkers.
+ (line 155)
+* flycheck-checkers; Emacs Lisp user option: Selecting syntax checkers.
+ (line 9)
+* flycheck-chktexrc; Emacs Lisp user option: TeX/LaTeX. (line 20)
+* flycheck-clang-args; Emacs Lisp user option: C/C++. (line 23)
+* flycheck-clang-blocks; Emacs Lisp user option: C/C++. (line 35)
+* flycheck-clang-definitions; Emacs Lisp user option: C/C++. (line 52)
+* flycheck-clang-include-path; Emacs Lisp user option: C/C++. (line 69)
+* flycheck-clang-includes; Emacs Lisp user option: C/C++. (line 86)
+* flycheck-clang-language-standard; Emacs Lisp user option: C/C++.
+ (line 103)
+* flycheck-clang-ms-extensions; Emacs Lisp user option: C/C++.
+ (line 120)
+* flycheck-clang-no-exceptions; Emacs Lisp user option: C/C++.
+ (line 136)
+* flycheck-clang-no-rtti; Emacs Lisp user option: C/C++. (line 152)
+* flycheck-clang-standard-library; Emacs Lisp user option: C/C++.
+ (line 167)
+* flycheck-clang-warnings; Emacs Lisp user option: C/C++. (line 187)
+* flycheck-clear; Emacs Lisp command: Error reporting. (line 187)
+* flycheck-coffeelintrc; Emacs Lisp user option: Coffeescript.
+ (line 31)
+* flycheck-collapse-error-message-whitespace; Emacs Lisp function: Error filters.
+ (line 26)
+* flycheck-compile; Emacs Lisp command: Finding the right error patterns.
+ (line 16)
+* flycheck-completion-system; Emacs Lisp user option: Selecting syntax checkers.
+ (line 118)
+* flycheck-copy-errors-as-kill; Emacs Lisp command: Copying killing errors.
+ (line 9)
+* flycheck-count-errors; Emacs Lisp function: Error analysis. (line 8)
+* flycheck-cppcheck-checks; Emacs Lisp user option: C/C++. (line 384)
+* flycheck-cppcheck-inconclusive; Emacs Lisp user option: C/C++.
+ (line 406)
+* flycheck-current-errors; Emacs Lisp variable: Errors. (line 9)
+* flycheck-dedent-error-messages; Emacs Lisp function: Error filters.
+ (line 32)
+* flycheck-def-args-var; Emacs Lisp macro: Options for command syntax checkers.
+ (line 23)
+* flycheck-def-config-file-var; Emacs Lisp macro: Configuration files for command syntax checkers.
+ (line 9)
+* flycheck-def-executable-var; Emacs Lisp macro: Command syntax checkers.
+ (line 87)
+* flycheck-def-option-var; Emacs Lisp macro: Options for command syntax checkers.
+ (line 9)
+* flycheck-define-checker; Emacs Lisp macro: Command syntax checkers.
+ (line 106)
+* flycheck-define-command-checker; Emacs Lisp function: Command syntax checkers.
+ (line 11)
+* flycheck-define-error-level; Emacs Lisp function: Error levels<2>.
+ (line 23)
+* flycheck-define-generic-checker; Emacs Lisp function: Generic syntax checkers<2>.
+ (line 10)
+* flycheck-dequalify-error-ids; Emacs Lisp function: Error filters.
+ (line 53)
+* flycheck-describe-checker; Emacs Lisp command: Selecting syntax checkers.
+ (line 187)
+* flycheck-disabled-checkers; Emacs Lisp user option: Selecting syntax checkers.
+ (line 34)
+* flycheck-display-error-messages-unless-error-list; Emacs Lisp function: Error reporting.
+ (line 161)
+* flycheck-display-error-messages; Emacs Lisp function: Error reporting.
+ (line 148)
+* flycheck-display-errors-delay; Emacs Lisp user option: Error reporting.
+ (line 117)
+* flycheck-display-errors-function; Emacs Lisp user option: Error reporting.
+ (line 133)
+* flycheck-dmd-include-path; Emacs Lisp user option: D. (line 15)
+* flycheck-emacs-lisp-initialize-packages; Emacs Lisp user option: Emacs Lisp.
+ (line 27)
+* flycheck-emacs-lisp-load-path; Emacs Lisp user option: Emacs Lisp.
+ (line 46)
+* flycheck-emacs-lisp-package-user-dir; Emacs Lisp user option: Emacs Lisp.
+ (line 74)
+* flycheck-error-<; Emacs Lisp function: Errors. (line 169)
+* flycheck-error-buffer; Emacs Lisp slot: Errors. (line 25)
+* flycheck-error-checker; Emacs Lisp slot: Errors. (line 30)
+* flycheck-error-column-region; Emacs Lisp function: Errors. (line 131)
+* flycheck-error-column; Emacs Lisp slot: Errors. (line 42)
+* flycheck-error-filename; Emacs Lisp slot: Errors. (line 34)
+* flycheck-error-format; Emacs Lisp function: Errors. (line 162)
+* flycheck-error-id; Emacs Lisp slot: Errors. (line 71)
+* flycheck-error-level-<; Emacs Lisp function: Errors. (line 175)
+* flycheck-error-level-p; Emacs Lisp function: Error levels<2>.
+ (line 63)
+* flycheck-error-level; Emacs Lisp slot: Errors. (line 66)
+* flycheck-error-line-region; Emacs Lisp function: Errors. (line 121)
+* flycheck-error-line; Emacs Lisp slot: Errors. (line 38)
+* flycheck-error-list-after-refresh-hook; Emacs Lisp hook: Listing errors.
+ (line 22)
+* flycheck-error-list-checker-name; Emacs Lisp face: Listing errors.
+ (line 64)
+* flycheck-error-list-column-number; Emacs Lisp face: Listing errors.
+ (line 57)
+* flycheck-error-list-highlight; Emacs Lisp face: Listing errors.
+ (line 40)
+* flycheck-error-list-line-number; Emacs Lisp face: Listing errors.
+ (line 50)
+* flycheck-error-message; Emacs Lisp slot: Errors. (line 62)
+* flycheck-error-new-at; Emacs Lisp function: Errors. (line 81)
+* flycheck-error-new; Emacs Lisp function: Errors. (line 102)
+* flycheck-error-parser; Emacs Lisp function: Error parsers. (line 23)
+* flycheck-error-pos; Emacs Lisp function: Errors. (line 153)
+* flycheck-error-thing-region; Emacs Lisp function: Errors. (line 141)
+* flycheck-error-with-buffer; Emacs Lisp macro: Errors. (line 115)
+* flycheck-error; Emacs Lisp CL struct: Errors. (line 20)
+* flycheck-error; Emacs Lisp face: Error reporting. (line 72)
+* flycheck-ert-at-nth-error; Emacs Lisp function: Writing assertions.
+ (line 52)
+* flycheck-ert-buffer-sync; Emacs Lisp function: Invoking syntax checkers in test cases.
+ (line 6)
+* flycheck-ert-check-gpg; Emacs Lisp function: Obtaining information about the environment.
+ (line 14)
+* flycheck-ert-def-checker-test; Emacs Lisp macro: Defining test cases.
+ (line 9)
+* flycheck-ert-ensure-clear; Emacs Lisp function: Invoking syntax checkers in test cases.
+ (line 10)
+* flycheck-ert-extract-version-command; Emacs Lisp function: Obtaining information about the environment.
+ (line 18)
+* flycheck-ert-initialize; Emacs Lisp function: Loading and initializing.
+ (line 19)
+* flycheck-ert-locate-config-file; Emacs Lisp function: Accessing test resources.
+ (line 23)
+* flycheck-ert-resource-filename; Emacs Lisp function: Accessing test resources.
+ (line 9)
+* flycheck-ert-should-errors; Emacs Lisp function: Writing assertions.
+ (line 12)
+* flycheck-ert-should-overlay; Emacs Lisp function: Writing assertions.
+ (line 6)
+* flycheck-ert-should-syntax-check; Emacs Lisp function: Writing assertions.
+ (line 28)
+* flycheck-ert-syntax-check-timed-out-p; Emacs Lisp function: Checking results of test cases.
+ (line 9)
+* flycheck-ert-travis-ci-p; Emacs Lisp function: Obtaining information about the environment.
+ (line 10)
+* flycheck-ert-user-error-type; Emacs Lisp constant: Obtaining information about the environment.
+ (line 6)
+* flycheck-ert-with-env; Emacs Lisp macro: Scoping resource access.
+ (line 12)
+* flycheck-ert-with-file-buffer; Emacs Lisp macro: Creating temporary buffers.
+ (line 14)
+* flycheck-ert-with-global-mode; Emacs Lisp macro: Scoping resource access.
+ (line 23)
+* flycheck-ert-with-help-buffer; Emacs Lisp macro: Scoping resource access.
+ (line 6)
+* flycheck-ert-with-resource-buffer; Emacs Lisp macro: Accessing test resources.
+ (line 16)
+* flycheck-ert-with-temp-buffer; Emacs Lisp macro: Creating temporary buffers.
+ (line 6)
+* flycheck-eslint-rulesdir; Emacs Lisp user option: Javascript.
+ (line 32)
+* flycheck-eslintrc; Emacs Lisp user option: Javascript. (line 56)
+* flycheck-first-error; Emacs Lisp command: Navigating and jumping to errors.
+ (line 66)
+* flycheck-flake8-error-level-alist; Emacs Lisp user option: Python.
+ (line 16)
+* flycheck-flake8-maximum-complexity; Emacs Lisp user option: Python.
+ (line 41)
+* flycheck-flake8-maximum-line-length; Emacs Lisp user option: Python.
+ (line 58)
+* flycheck-flake8rc; Emacs Lisp user option: Python. (line 80)
+* flycheck-fold-include-levels; Emacs Lisp function: Error filters.
+ (line 42)
+* flycheck-fringe-error; Emacs Lisp face: Error reporting. (line 105)
+* flycheck-fringe-info; Emacs Lisp face: Error reporting. (line 105)
+* flycheck-fringe-warning; Emacs Lisp face: Error reporting. (line 105)
+* flycheck-gcc-args; Emacs Lisp user option: C/C++. (line 226)
+* flycheck-gcc-definitions; Emacs Lisp user option: C/C++. (line 238)
+* flycheck-gcc-include-path; Emacs Lisp user option: C/C++. (line 255)
+* flycheck-gcc-includes; Emacs Lisp user option: C/C++. (line 272)
+* flycheck-gcc-language-standard; Emacs Lisp user option: C/C++.
+ (line 289)
+* flycheck-gcc-no-exceptions; Emacs Lisp user option: C/C++. (line 306)
+* flycheck-gcc-no-rtti; Emacs Lisp user option: C/C++. (line 322)
+* flycheck-gcc-openmp; Emacs Lisp user option: C/C++. (line 337)
+* flycheck-gcc-warnings; Emacs Lisp user option: C/C++. (line 353)
+* flycheck-gfortran-args; Emacs Lisp user option: Fortran. (line 16)
+* flycheck-gfortran-include-path; Emacs Lisp user option: Fortran.
+ (line 28)
+* flycheck-gfortran-language-standard; Emacs Lisp user option: Fortran.
+ (line 45)
+* flycheck-gfortran-layout; Emacs Lisp user option: Fortran. (line 62)
+* flycheck-gfortran-warnings; Emacs Lisp user option: Fortran.
+ (line 82)
+* flycheck-ghc-args; Emacs Lisp user option: Haskell. (line 23)
+* flycheck-ghc-language-extensions; Emacs Lisp user option: Haskell.
+ (line 35)
+* flycheck-ghc-no-user-package-database; Emacs Lisp user option: Haskell.
+ (line 52)
+* flycheck-ghc-package-databases; Emacs Lisp user option: Haskell.
+ (line 68)
+* flycheck-ghc-search-path; Emacs Lisp user option: Haskell. (line 85)
+* flycheck-gjslintrc; Emacs Lisp user option: Javascript. (line 76)
+* flycheck-gnat-args; Emacs Lisp user option: Ada. (line 16)
+* flycheck-gnat-include-path; Emacs Lisp user option: Ada. (line 28)
+* flycheck-gnat-language-standard; Emacs Lisp user option: Ada.
+ (line 45)
+* flycheck-gnat-warnings; Emacs Lisp user option: Ada. (line 62)
+* flycheck-go-vet-print-functions; Emacs Lisp user option: Go.
+ (line 72)
+* flycheck-has-errors-p; Emacs Lisp function: Error analysis. (line 16)
+* flycheck-has-max-errors-p; Emacs Lisp function: Error analysis.
+ (line 20)
+* flycheck-highlighting-mode; Emacs Lisp user option: Error reporting.
+ (line 38)
+* flycheck-idle-change-delay; Emacs Lisp user option: Checking buffers.
+ (line 55)
+* flycheck-increment-error-columns; Emacs Lisp function: Error filters.
+ (line 19)
+* flycheck-indication-mode; Emacs Lisp user option: Error reporting.
+ (line 89)
+* flycheck-info; Emacs Lisp face: Error reporting. (line 72)
+* flycheck-jshintrc; Emacs Lisp user option: Javascript. (line 15)
+* flycheck-keymap-prefix; Emacs Lisp user option: Usage. (line 13)
+* flycheck-last-status-change; Emacs Lisp variable: Flycheck buffer status.
+ (line 55)
+* flycheck-lintr-caching; Emacs Lisp user option: R. (line 15)
+* flycheck-lintr-linters; Emacs Lisp user option: R. (line 32)
+* flycheck-list-errors; Emacs Lisp command: Listing errors. (line 9)
+* flycheck-locate-config-file-functions; Emacs Lisp user option: Syntax checker configuration files.
+ (line 20)
+* flycheck-locate-config-file; Emacs Lisp function: Configuration files for command syntax checkers.
+ (line 28)
+* flycheck-mode-line-status-text; Emacs Lisp function: Flycheck buffer status.
+ (line 62)
+* flycheck-mode-line; Emacs Lisp user option: Mode line reporting.
+ (line 44)
+* flycheck-mode; Emacs Lisp command: Enabling syntax checking<2>.
+ (line 40)
+* flycheck-mode; Emacs Lisp user option: Enabling syntax checking<2>.
+ (line 44)
+* flycheck-navigation-minimum-level; Emacs Lisp user option: Navigating and jumping to errors.
+ (line 82)
+* flycheck-next-error; Emacs Lisp command: Navigating and jumping to errors.
+ (line 48)
+* flycheck-option-comma-separated-list; Emacs Lisp function: Options for command syntax checkers.
+ (line 44)
+* flycheck-option-int; Emacs Lisp function: Options for command syntax checkers.
+ (line 37)
+* flycheck-parse-checkstyle; Emacs Lisp function: Error parsers.
+ (line 10)
+* flycheck-parse-with-patterns; Emacs Lisp function: Error parsing with regular expressions.
+ (line 39)
+* flycheck-parse-xml-string; Emacs Lisp function: Error parsers.
+ (line 31)
+* flycheck-perlcritic-severity; Emacs Lisp user option: Perl. (line 28)
+* flycheck-phpcs-standard; Emacs Lisp user option: PHP. (line 63)
+* flycheck-phpmd-rulesets; Emacs Lisp user option: PHP. (line 39)
+* flycheck-previous-error; Emacs Lisp command: Navigating and jumping to errors.
+ (line 57)
+* flycheck-process-error-functions; Emacs Lisp hook: Error processing<2>.
+ (line 6)
+* flycheck-pylintrc; Emacs Lisp user option: Python. (line 99)
+* flycheck-registered-checker-p; Emacs Lisp function: Generic syntax checkers<2>.
+ (line 188)
+* flycheck-remove-error-ids; Emacs Lisp function: Error filters.
+ (line 65)
+* flycheck-report-status; Emacs Lisp function: Flycheck buffer status.
+ (line 23)
+* flycheck-rubocop-lint-only; Emacs Lisp user option: Ruby. (line 23)
+* flycheck-rubocoprc; Emacs Lisp user option: Ruby. (line 42)
+* flycheck-rubylintrc; Emacs Lisp user option: Ruby. (line 61)
+* flycheck-rust-check-tests; Emacs Lisp user option: Rust. (line 17)
+* flycheck-rust-crate-root; Emacs Lisp user option: Rust. (line 34)
+* flycheck-rust-crate-type; Emacs Lisp user option: Rust. (line 54)
+* flycheck-rust-library-path; Emacs Lisp user option: Rust. (line 67)
+* flycheck-rx-to-string; Emacs Lisp function: Error parsing with regular expressions.
+ (line 12)
+* flycheck-sanitize-errors; Emacs Lisp function: Error filters.
+ (line 9)
+* flycheck-sass-compass; Emacs Lisp user option: Sass. (line 15)
+* flycheck-scalastyle-jar; Emacs Lisp user option: Scala. (line 33)
+* flycheck-scalastylerc; Emacs Lisp user option: Scala. (line 52)
+* flycheck-scss-compass; Emacs Lisp user option: Scss. (line 15)
+* flycheck-select-checker; Emacs Lisp command: Selecting syntax checkers.
+ (line 74)
+* flycheck-set-checker-executable; Emacs Lisp command: Syntax checker executables.
+ (line 22)
+* flycheck-shellcheck-excluded-warnings; Emacs Lisp user option: Shell script languages.
+ (line 81)
+* flycheck-sphinx-warn-on-missing-references; Emacs Lisp user option: ReStructuredText.
+ (line 21)
+* flycheck-standard-error-navigation; Emacs Lisp user option: Navigating and jumping to errors.
+ (line 21)
+* flycheck-status-changed-functions; Emacs Lisp hook: Flycheck buffer status.
+ (line 6)
+* flycheck-string-list-p; Emacs Lisp function: Utilities. (line 6)
+* flycheck-substitute-argument; Emacs Lisp function: Command arguments.
+ (line 11)
+* flycheck-symbol-list-p; Emacs Lisp function: Utilities. (line 10)
+* flycheck-syntax-check-failed-hook; Emacs Lisp hook: Syntax checks.
+ (line 66)
+* flycheck-temp-prefix; Emacs Lisp user option: Checking buffers.
+ (line 99)
+* flycheck-tidyrc; Emacs Lisp user option: HTML. (line 15)
+* flycheck-verify-setup; Emacs Lisp command: Checking buffers.
+ (line 86)
+* flycheck-warning; Emacs Lisp face: Error reporting. (line 72)
+* fortran-gfortran; Emacs Lisp Flycheck syntax checker: Fortran.
+ (line 6)
+* global-flycheck-mode; Emacs Lisp command: Enabling syntax checking<2>.
+ (line 9)
+* global-flycheck-mode; Emacs Lisp user option: Enabling syntax checking<2>.
+ (line 26)
+* go-build; Emacs Lisp Flycheck syntax checker: Go. (line 93)
+* go-errcheck; Emacs Lisp Flycheck syntax checker: Go. (line 121)
+* go-gofmt; Emacs Lisp Flycheck syntax checker: Go. (line 6)
+* go-golint; Emacs Lisp Flycheck syntax checker: Go. (line 32)
+* go-test; Emacs Lisp Flycheck syntax checker: Go. (line 107)
+* go-vet; Emacs Lisp Flycheck syntax checker: Go. (line 51)
+* haml; Emacs Lisp Flycheck syntax checker: Haml. (line 6)
+* handlebars; Emacs Lisp Flycheck syntax checker: Handlebars. (line 6)
+* haskell-ghc; Emacs Lisp Flycheck syntax checker: Haskell. (line 6)
+* haskell-hlint; Emacs Lisp Flycheck syntax checker: Haskell. (line 109)
+* html-tidy; Emacs Lisp Flycheck syntax checker: HTML. (line 6)
+* javascript-eslint; Emacs Lisp Flycheck syntax checker: Javascript.
+ (line 23)
+* javascript-gjslint; Emacs Lisp Flycheck syntax checker: Javascript.
+ (line 67)
+* javascript-jshint; Emacs Lisp Flycheck syntax checker: Javascript.
+ (line 6)
+* json-jsonlint; Emacs Lisp Flycheck syntax checker: JSON. (line 6)
+* less; Emacs Lisp Flycheck syntax checker: LESS. (line 6)
+* lua; Emacs Lisp Flycheck syntax checker: Lua. (line 6)
+* make; Emacs Lisp Flycheck syntax checker: Make. (line 6)
+* perl-perlcritic; Emacs Lisp Flycheck syntax checker: Perl. (line 19)
+* perl; Emacs Lisp Flycheck syntax checker: Perl. (line 6)
+* php-phpcs; Emacs Lisp Flycheck syntax checker: PHP. (line 54)
+* php-phpmd; Emacs Lisp Flycheck syntax checker: PHP. (line 23)
+* php; Emacs Lisp Flycheck syntax checker: PHP. (line 6)
+* puppet-lint; Emacs Lisp Flycheck syntax checker: Puppet. (line 20)
+* puppet-parser; Emacs Lisp Flycheck syntax checker: Puppet. (line 6)
+* python-flake8; Emacs Lisp Flycheck syntax checker: Python. (line 6)
+* python-pycompile; Emacs Lisp Flycheck syntax checker: Python.
+ (line 107)
+* python-pylint; Emacs Lisp Flycheck syntax checker: Python. (line 88)
+* r-lintr; Emacs Lisp Flycheck syntax checker: R. (line 6)
+* racket; Emacs Lisp Flycheck syntax checker: Racket. (line 6)
+* registered syntax checker: Glossary. (line 9)
+* rpm-rpmlint; Emacs Lisp Flycheck syntax checker: RPM SPEC. (line 6)
+* rst-sphinx; Emacs Lisp Flycheck syntax checker: ReStructuredText.
+ (line 12)
+* rst; Emacs Lisp Flycheck syntax checker: ReStructuredText. (line 6)
+* ruby-jruby; Emacs Lisp Flycheck syntax checker: Ruby. (line 94)
+* ruby-rubocop; Emacs Lisp Flycheck syntax checker: Ruby. (line 6)
+* ruby-rubylint; Emacs Lisp Flycheck syntax checker: Ruby. (line 50)
+* ruby; Emacs Lisp Flycheck syntax checker: Ruby. (line 72)
+* rust; Emacs Lisp Flycheck syntax checker: Rust. (line 6)
+* sass; Emacs Lisp Flycheck syntax checker: Sass. (line 6)
+* scala-scalastyle; Emacs Lisp Flycheck syntax checker: Scala.
+ (line 20)
+* scala; Emacs Lisp Flycheck syntax checker: Scala. (line 6)
+* scss; Emacs Lisp Flycheck syntax checker: Scss. (line 6)
+* sh-bash; Emacs Lisp Flycheck syntax checker: Shell script languages.
+ (line 6)
+* sh-posix-bash; Emacs Lisp Flycheck syntax checker: Shell script languages.
+ (line 39)
+* sh-posix-dash; Emacs Lisp Flycheck syntax checker: Shell script languages.
+ (line 20)
+* sh-shellcheck; Emacs Lisp Flycheck syntax checker: Shell script languages.
+ (line 72)
+* sh-zsh; Emacs Lisp Flycheck syntax checker: Shell script languages.
+ (line 58)
+* slim; Emacs Lisp Flycheck syntax checker: Slim. (line 6)
+* status-callback; Emacs Lisp function: Status callback protocol.
+ (line 10)
+* suitable syntax checker: Glossary. (line 25)
+* syntax checker: Glossary. (line 6)
+* tex-chktex; Emacs Lisp Flycheck syntax checker: TeX/LaTeX. (line 11)
+* tex-lacheck; Emacs Lisp Flycheck syntax checker: TeX/LaTeX. (line 28)
+* texinfo; Emacs Lisp Flycheck syntax checker: Texinfo. (line 6)
+* verilog-verilator; Emacs Lisp Flycheck syntax checker: Verilog.
+ (line 6)
+* xml-xmllint; Emacs Lisp Flycheck syntax checker: XML. (line 12)
+* xml-xmlstarlet; Emacs Lisp Flycheck syntax checker: XML. (line 6)
+* yaml-jsyaml; Emacs Lisp Flycheck syntax checker: YAML. (line 6)
+* yaml-ruby; Emacs Lisp Flycheck syntax checker: YAML. (line 12)
+
--- /dev/null
+Add Cask support for Flycheck.
+
+Configure Flycheck to initialize packages from Cask in Cask projects.
+
+Setup
+
+(add-hook 'flycheck-mode-hook #'flycheck-cask-setup)
--- /dev/null
+Modern on-the-fly syntax checking for GNU Emacs.
+
+Provide `flycheck-mode' which enables on-the-fly syntax checking for a large
+number of different modes and languages (see `flycheck-checkers' for a
+complete list).
+
+Support for new modes and languages can be added by defining a new syntax
+checker (see `flycheck-define-checker').