Clojure Tutorial Part 7 -- clj-konodo, Calva, cljstyle をインストールして文法やフォーマットのエラーを検知変更できるようにする。
Tags: clojure
Published: 2022-06-05 13:51:30


# clj-konodo

## これは何？

https://github.com/clj-kondo/clj-kondo#command-line

静的分析ツール。

走らせると間違っているところを指摘してくれる。

https://github.com/clj-kondo/clj-kondo#features

詳細なチェック項目はここにある。

---

## インストール

https://github.com/clj-kondo/clj-kondo/blob/master/doc/install.md#brew-macos-and-linux

```php
arch -arm64 brew install borkdude/brew/clj-kondo

==> Installing clj-kondo from borkdude/brew
```

直接叩くコマンドではないのに brew で入れる。

```php
clj-kondo --version
clj-kondo v2022.05.31
```

---

## コマンドでの使い方

```php

Options:

  --lint <file>: 
a file can either be a normal file, 
directory or classpath. 
In the case of a directory or classpath, 
only .clj, .cljs and .cljc will be processed. 
Use - as filename for reading from stdin.

  --lang <lang>: 
if lang cannot be derived from the file extension 
this option will be used. 
Supported values: clj, cljs, cljc.

  --filename <file>: 
in case stdin is used for linting, 
use this to set the reported filename.

```

通常は --lint {fileName} で動くらしい。

---

## デフォルトの src/ ディレクトリに打って、エラーが出ないのを確認する

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rx06g3tsfj1slw4u8kw7.png)

デフォルトのディレクトリを狙って clj-kondo --lint を打ってみる

```php
clj-kondo --lint src/
src/cljblog/core.clj:6:6: warning: unused binding args
linting took 170ms, errors: 0, warnings: 1
```

するとスキャンが走って、エラーがないのを確認できる。

---

## 引数が足りない状態でスキャンを打って、エラーが出るのを確認する

```clj
(defn -main
  "I don't do a whole lot ... yet."
  (println "lint test"))
```

main を引数

```clj
  [& args]
```

なしで書いて、

```php
clj-kondo --lint src/
src/cljblog/core.clj:6:3: error: 
Function arguments should be wrapped in vector.
linting took 185ms, errors: 1, warnings: 0
```

と
引数がベクトルに包まれてるべき言う指摘が出た。

スキャンとエラーの洗い出しが機能しているのが確認できた。

---

## clj-kondo まとめ

brew でインストールできる。
clojure コードを書いた際にファイルやディレクトリに対して打てば
ミスっている時に指摘してくれる。

---
---

# VSCode/ Calva

## Extension Store でインストール

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zpkvlcqxm9pqsyr0bthy.png)
 
検索して出てくるので、インストールすると

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcafkb9lz4xxkkjz2stz.png)

hover で警告がだせた。
間違えている時に自動で教えてくれると効率が上がりそう。

---
---

# cljstyle

## これは何？

https://tech.toyokumo.co.jp/entry/format-clojure-code-using-cljstyle#cljstyle%E3%81%AE%E8%A8%AD%E5%AE%9A

トヨクモ株式会社の記事によると

- 規定とは違うインデントの数
- 余分なスペース
- 余分な改行

これらを修正してくれるコマンドらしい。

---

## インストールと有効化

https://github.com/greglook/cljstyle#macos-via-homebrew

```php
arch -arm64 brew install --cask cljstyle
...
==> Installing Cask cljstyle
🍺  cljstyle was successfully installed!
```

cljstyle も brew でインストールできる。

```php
cljstyle --help

“cljstyle” cannot be opened 
because the developer cannot be verified
```

しかし、デフォルトでは認証が通ってないので実行できない。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hh4zuphdw0o0ge12c5l.png)

Finder/Security&Pravacy/General/

を確認すると、ブロックされているので

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vzhtzskb8t8iczqmx9q1.png)
 

Allow Anyway のボタンを押して変更する。

```php
cljstyle version  
mvxcvi/cljstyle 0.15.0 (1f58e2e7af4c193aa77ad0695f6c2b9ac2c5c5ec)
```

すると、0.15.0 で入っているのが確認できた。

---

## cljstyle check コマンドで、フォーマットに反している部分の差分を出力する

```php
cljstyle check src

--- a/src/cljblog/core.clj
+++ b/src/cljblog/core.clj
@@ -2,8 +2,7 @@
   (:gen-class))
 
 
-
 (defn -main
   "I don't do a whole lot ... yet."
-          [& args]
+  [& args]
   (println "core.clj's text changed"))

1 files formatted incorrectly
```

無駄な改行やインデントを敢えて入れて
cljstyle check {dir/} コマンドを叩くと
どこが修正されるかのを表示してくれる。

---

## cljstyle fix コマンドでフォーマットに沿った形に変更する

```php
cljstyle fix

Reformatting source file project.clj
Reformatting source file src/cljblog/core.clj
Reformatting source file test/cljblog/core_test.clj

Corrected formatting of 3 files
```

fix を打つと、フォーマットに沿った形に
実際のファイルが書き換えられる。

https://qiita.com/lagenorhynque/items/a5d83b4a36a1cf1cacbe#vs-code--calva%E3%81%AE%E5%A0%B4%E5%90%88

VSCode Calva に組み込んで、保存時に自動的に fix が走るようにする。

---

## cljstyle まとめ

余分な改行やインデントを検知、変更ができるコマンド。
brew cask でインストールして認証を通して有効化する。
check で変更すべき箇所の差分を出力して
fix で変更をファイルに適用する。

---
---

# clj-konodo, Calva, cljstyle まとめ

## clj-kondo

静的解析ツール (Lint) 。
実行すると文法が間違っている箇所を教えてくれる。
Node.js の eslint 相当。

brew でインストールできる。

---

## Calva

自動解析ツール？
VSCode に入れると、文法が間違っている箇所を
自動で波線( ~ )を出して表示してくれる。
VSCode x TypeScript の標準機能相当。

VSCode の拡張機能ストアでインストールできる。

---

## cljstyle

静的解析ツール (Formatter)
実行するとインデントや改行が間違っている箇所を教えてくれる。
Node.js の prettier 相当。

brew cask でインストールできる。