Windows10上のspacemacsでClojureのlinterを使う（clj-kondo, joker）


**英語を読めばわかる**と言われればそれはそうなんだけど英語力クソザコなので。。。。。。。。。


# developブランチで利用可能になった
linterである `clj-kondo`と `joker`が使えるようになった（Clojure Layerの `README.org`に項目が追加されている）
https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enabling-automatic-linting

`clj-kondo`は履歴でいうとコレなのかなぁ…

```
   ...
   290cacf2a * [python] Bind formatter to == only for LSP backend
   c4a05f7eb * Corrected keybinding collision (format-buffer)
   592fb5863 * documentation formatting: Sat Aug 31 19:04:38 UTC 2019
-> b71c78655 * add flycheck-clj-kondo as an optional package
   145f7e56c * [ansible] Fix void-variable company-backends
   e61e91fbc * documentation formatting: Thu Aug 29 23:13:44 UTC 2019
   424d02919 * Revert "[gnus] Add G prefix to evil state"
   c5c63f48c * ansible: simplify filename matching re
   ...
```

該当コミット => https://github.com/syl20bnr/spacemacs/commit/b71c78655f105739c1062452fe5c60bbcaf5ea0c



# clj-kondoを使う
## インストール
公式いわく、

> This linter based on static syntax checking and requires the clj-kondo binary installed on the system PATH that spacemacs.env includes. Please read the [clj-kondo binary installation instructions](https://github.com/borkdude/clj-kondo/blob/master/doc/install.md)

`clj-kondo binary installation instructions`リンク先を読めば何とかなる（雑）。

飛んだ先は `clj-kondo`のREADME。下の方に [Installation](https://github.com/borkdude/clj-kondo/blob/master/doc/install.md)というリンクがあるのでまた飛ぶ。 `clj-kondo/doc/install.md`だと思う。

色々書いてあるけど、基本はMac or Linux向け。その中にぽつんと、

> ## NPM (Linux, MacOS, Windows)
```
npm install -g clj-kondo
```
Note: on Windows this invokes the standalone jar.

これに従い、npmでインストールする（Nodeバージョンは確認してないけど `10.14.0`は大丈夫だった）


おまけ：
 `npm install -g`でインストールした場合、clj-kondoの更新はこんな感じ。

更新があるか確認し、

```powershell
> npm outdated -g
Package               Current      Wanted     Latest  Location
clj-kondo  2019.10.11-alpha.1  2019.11.23  2020.1.13  global
```

Wantedのバージョンのほうが新しければ更新を行い、

```
> npm update -g clj-kondo
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
C:\nvm_windows\clj-kondo -> C:\nvm_windows\node_modules\clj-kondo\bin\clj-kondo

> clj-kondo@2019.11.23 install C:\nvm_windows\node_modules\clj-kondo
> binwrap-install

+ clj-kondo@2019.11.23
removed 1 package and updated 14 packages in 8.701s
```

再び `npm outdated -g`で、更新された (CurrentとWantedが一致している)ことを確認する。

参考 => [npm入門](https://qiita.com/maitake9116/items/7825d90c09f3e2f87dea)


## spacemac側の設定
公式の[Enable clj-kondo linter](https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enable-clj-kondo-linter)に書いてある。 `.spacemacs`にこんな感じで追記すればいい

> 
```emacs-lisp:.spacemacs
;; to use clj-kondo as a linter, add this variable to the clojure layer
;; wrapping the clojure layer in a list
dotspacemacs-configuration-layers
'(...
  (clojure :variables
           clojure-enable-linters 'clj-kondo)
  )
```

`joker`など他のlinterと併用する場合は[Enable multiple linters](https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enable-multiple-linters)が示すように書く。


## 使えているか確認する
spacemacsを再起動して、適当な `.clj`ファイルで `(def- okimochi 1)`とか書けば `unresolved symbol def-`とか怒ってくれる。





# jokerを使う
## インストール
公式には `joker`のインストール方法が載ってる => https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enable-joker-linter

> This linter is based on static syntax checking and requires the joker binary installed on the system PATH that spacemacs.env includes. Please read the [joker binary installation instructions](https://github.com/candid82/joker#installation)

やはり `joker binary installation instructions`リンク先を見に行けばわかる（雑）らしい。

ちょうど `joker` READMEのInstallationに飛ぶ。

> On macOS, the easiest way to install Joker is via Homebrew:

やはりMacを前提とされている😇

しかし、Windows10でも使えることを仄めかす記述もある。

> On other platforms (or if you prefer manual installation), download a [precompiled binary](https://github.com/candid82/joker/releases) for your platform and put it on your PATH.  
You can also build Joker from the source code.

`precompiled binary`リンクから飛ぶとGithub上のReleasesページに着く。
Windows10なら、たとえば `joker-0.13.0-win-amd64.zip`をダウンロードする。

解凍したディレクトリ内には `joker.exe`だけが入っているので、これを好きな場所に置く。たとえば `C:\joker-0.13.0-win-amd64\joker.exe`

そしてWindows環境変数Pathに、そのディレクトリを加える。たとえば上記の場所なら `C:\joker-0.13.0-win-amd64`

どうやら`joker`はこれでインストール完了のようだ。


## spacemacs側の設定
※環境変数Pathを設定したということは、 `.spacemacs.env`にも `joker`のPathが書かれていなければならない。
自動で更新されない場合😇は、Pathを追記しておく。

---
公式の[Enable joker linter](https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enable-joker-linter)にあるように、 `.spacemacs`に追記する。


> 
```emacs-lisp:.spacemacs
;; to use joker as a linter, add this variable to the clojure layer
;; wrapping the clojure layer in a list
dotspacemacs-configuration-layers
'(...
  (clojure :variables
           clojure-enable-linters 'joker)
  )
```

`clj-kondo`など他のlinterと併用する場合は[Enable multiple linters](https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/clojure#enable-multiple-linters)が示すように書く。


## 使えているか確認する
spacemacs再起動後、適当な `.clj`ファイルで `(let [a 1])`とか書けば `let form with empty body`と怒ってくれる。


## 誤検知っぽい何かをどうにかする
正しく動いているコードでも、 `joker`がエラーを出すことはある。

対処法は `joker`公式の[Reducing false positives](https://github.com/candid82/joker#reducing-false-positives)に書いてある。

Leiningenプロジェクトなら、プロジェクトのルートディレクトリ直下に `.joker`ファイルを置いておくと効きそう。
たとえば `clojure.spec.alpha/fdef`（マクロ？）に出されるエラーを無視するなら以下のようになりそう。

```:.joker
{:known-macros [clojure.spec.alpha/fdef]}
```





# まとめ
- Windows10で掃除屋を雇えた気がする