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)"

Reply via email to