branch: elpa/flymake-collection
commit ecc15c74630fa75e7792aa23cec79ea4afc28cc2
Author: Tomasz Hołubowicz <45176912+alternate...@users.noreply.github.com>
Commit: GitHub <nore...@github.com>

    checkers: Add checker for Janet (#40)
---
 src/checkers/flymake-collection-janet.el | 49 ++++++++++++++++++++++++++++++++
 src/flymake-collection-hook.el           |  1 +
 tests/checkers/installers/janet.bash     | 12 ++++++++
 tests/checkers/test-cases/janet.yml      | 23 +++++++++++++++
 4 files changed, 85 insertions(+)

diff --git a/src/checkers/flymake-collection-janet.el 
b/src/checkers/flymake-collection-janet.el
new file mode 100644
index 0000000000..f51ead2674
--- /dev/null
+++ b/src/checkers/flymake-collection-janet.el
@@ -0,0 +1,49 @@
+;;; flymake-collection-janet.el --- Janet diagnostic function -*- 
lexical-binding: t -*-
+
+;; Copyright (c) 2024 Tomasz Hołubowicz
+
+;; 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 Janet using janet flycheck utility
+
+;;; Code:
+
+(require 'flymake)
+(require 'flymake-collection)
+
+(eval-when-compile
+  (require 'flymake-collection-define))
+
+;;;###autoload (autoload 'flymake-collection-janet "flymake-collection-janet")
+(flymake-collection-define-rx flymake-collection-janet
+  "A Janet syntax checker using janet flycheck utility.
+
+See URL `https://janet-lang.org/";
+  :pre-let ((janet-exec (executable-find "janet")))
+  :pre-check (unless janet-exec (user-error "Cannot find janet executable"))
+  :write-type 'pipe
+  :command `(,janet-exec "-k")
+  :regexps
+  ((error bol "error: stdin:" line ":" column ": " (message) eol)))
+
+(provide 'flymake-collection-janet)
+
+;;; flymake-collection-janet.el ends here
diff --git a/src/flymake-collection-hook.el b/src/flymake-collection-hook.el
index 7441b50e1b..475876bdb7 100644
--- a/src/flymake-collection-hook.el
+++ b/src/flymake-collection-hook.el
@@ -57,6 +57,7 @@
      (flymake-collection-clang
       (flymake-collection-gcc :disabled t)))
     (haskell-mode . (flymake-collection-hlint))
+    ((janet-mode janet-ts-mode) . (flymake-collection-janet))
     ((js-mode js2-mode typescript-mode typescript-ts-mode) .
      (flymake-collection-eslint))
     ((json-mode json-ts-mode) .
diff --git a/tests/checkers/installers/janet.bash 
b/tests/checkers/installers/janet.bash
new file mode 100755
index 0000000000..cae24f0931
--- /dev/null
+++ b/tests/checkers/installers/janet.bash
@@ -0,0 +1,12 @@
+JANET_VERSION="1.35.2"
+
+apt-get install -y make gcc
+
+cd "$(mktemp -d)" || exit 1
+
+curl -L 
https://github.com/janet-lang/janet/archive/refs/tags/v$JANET_VERSION.tar.gz | 
tar -xzv
+cd janet-$JANET_VERSION || exit 1
+make && make install
+
+rm -rf "$(pwd)"
+cd - || exit 1
diff --git a/tests/checkers/test-cases/janet.yml 
b/tests/checkers/test-cases/janet.yml
new file mode 100644
index 0000000000..cb918dd149
--- /dev/null
+++ b/tests/checkers/test-cases/janet.yml
@@ -0,0 +1,23 @@
+---
+checker: flymake-collection-janet
+tests:
+  - name: no-lints
+    file: |
+      (print "hello world")
+    lints: []
+  - name: compile-error
+    file: |
+      (pri "hello world")
+    lints:
+      - point: [1, 0]
+        level: error
+        message: |-
+          compile error: unknown symbol pri
+  - name: parse-error
+    file: |
+      (print "hello world"
+    lints:
+      - point: [1, 0]
+        level: error
+        message: |-
+          parse error: unexpected end of source, ( opened at line 1, column 1

Reply via email to