branch: elpa/flymake-collection commit 023472345980c251429046d6a20e85c76f9e928e Author: Fredrik Bergroth <fbergr...@gmail.com> Commit: GitHub <nore...@github.com>
(checkers): Add flymake-collection-flake8 (#7) --- src/checkers/flymake-collection-flake8.el | 61 +++++++++++++++++++++++++++++++ src/flymake-collection-hook.el | 3 +- tests/checkers/installers/flake8.bash | 1 + tests/checkers/test-cases/flake8.yml | 29 +++++++++++++++ tests/checkers/test-cases/pylint.yml | 2 +- 5 files changed, 94 insertions(+), 2 deletions(-) diff --git a/src/checkers/flymake-collection-flake8.el b/src/checkers/flymake-collection-flake8.el new file mode 100644 index 0000000000..c23c49b89c --- /dev/null +++ b/src/checkers/flymake-collection-flake8.el @@ -0,0 +1,61 @@ +;;; flymake-collection-flake8.el --- Flake8 diagnostic function -*- lexical-binding: t -*- + +;; Copyright (c) 2022 Fredrik Bergroth + +;; Permission is hereby granted, free of charge, to any person obtaining a copy +;; of this software and associated documentation files (the "Software"), to deal +;; in the Software without restriction, including without limitation the rights +;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +;; copies of the Software, and to permit persons to whom the Software is +;; furnished to do so, subject to the following conditions: + +;; The above copyright notice and this permission notice shall be included in all +;; copies or substantial portions of the Software. + +;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +;; SOFTWARE. + +;;; Commentary: + +;; `flymake' syntax checker for python using flake8. + +;;; Code: + +(require 'flymake) +(require 'flymake-collection) + +(eval-when-compile + (require 'flymake-collection-define)) + +(defcustom flymake-collection-flake8-args nil + "Command line arguments always passed to `flymake-collection-flake8'." + :type '(repeat string) + :group 'flymake-collection) + +;;;###autoload (autoload 'flymake-collection-flake8 "flymake-collection-flake8") +(flymake-collection-define-rx flymake-collection-flake8 + "A Python syntax and style checker using Flake8. + +This syntax checker requires Flake8 3.0 or newer. +See URL `https://flake8.readthedocs.io/'." + :title "flake8" + :pre-let ((flake8-exec (executable-find "flake8"))) + :pre-check (unless flake8-exec + (error "Cannot find flake8 executable")) + :write-type 'pipe + :command `(,flake8-exec + ,@flymake-collection-flake8-args + ,@(when-let ((file (buffer-file-name flymake-collection-source))) + (list "--stdin-display-name" file)) + "-") + :regexps + ((warning bol (file-name) ":" line ":" column ": " (id (one-or-more alnum)) " " (message) eol))) + +(provide 'flymake-collection-flake8) + +;;; flymake-collection-flake8.el ends here diff --git a/src/flymake-collection-hook.el b/src/flymake-collection-hook.el index a2a03472ff..cb09f9e30f 100644 --- a/src/flymake-collection-hook.el +++ b/src/flymake-collection-hook.el @@ -38,7 +38,8 @@ '((python-mode flymake-collection-pycodestyle (flymake-mypy :disabled t) - (flymake-collection-pylint :disabled t)) + (flymake-collection-pylint :disabled t) + (flymake-collection-flake8 :disabled t)) (awk-mode flymake-collection-awk-gawk) (c-mode flymake-collection-clang diff --git a/tests/checkers/installers/flake8.bash b/tests/checkers/installers/flake8.bash new file mode 100755 index 0000000000..4e6505af52 --- /dev/null +++ b/tests/checkers/installers/flake8.bash @@ -0,0 +1 @@ +python3.8 -m pip install flake8 diff --git a/tests/checkers/test-cases/flake8.yml b/tests/checkers/test-cases/flake8.yml new file mode 100644 index 0000000000..1fce0826c5 --- /dev/null +++ b/tests/checkers/test-cases/flake8.yml @@ -0,0 +1,29 @@ +--- +checker: flymake-collection-flake8 +tests: + - name: no-lints + file: | + """A test case with no output from flake8.""" + + print("hello world") + lints: [] + - name: notes + file: | + """A test case with a warning lint.""" + + print(f"hello world") + print(f"hello world") + lints: + - point: [3, 6] + level: warning + message: F541 f-string is missing placeholders (flake8) + - point: [4, 6] + level: warning + message: F541 f-string is missing placeholders (flake8) + - name: syntax-error + file: | + definitely should not work + lints: + - point: [1, 11] + level: warning + message: "E999 SyntaxError: invalid syntax (flake8)" diff --git a/tests/checkers/test-cases/pylint.yml b/tests/checkers/test-cases/pylint.yml index 3052b66b80..513e08e0f5 100644 --- a/tests/checkers/test-cases/pylint.yml +++ b/tests/checkers/test-cases/pylint.yml @@ -26,4 +26,4 @@ tests: lints: - point: [1, 11] level: error - message: E0001 invalid syntax (<unknown>, line 1) (pylint) + message: "E0001 Parsing failed: 'invalid syntax (<unknown>, line 1)' (pylint)"