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