8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Clojure開発環境でのフォーマッターcljstyle設定まとめ: Spacemacs, IntelliJ IDEA (Cursive), VS Code (Calva), Vim (vim-iced)

Last updated at Posted at 2020-08-02

お好みのエディタ/IDEにClojure開発環境を用意したら、ぜひファイル保存時に自動実行できるフォーマッターも設定しましょう。

他言語におけるPrettierなどと同様に、ファイルを保存するたびにフォーマットできると非常に快適です。

Clojureのフォーマッターcljstyleの使い方 - TOYOKUMO Tech Blogという記事でも紹介されている、従来のcljfmtよりも高速に動作し高機能なcljstyleを利用します。

本記事でもClojure開発環境での基本操作まとめ: Spacemacs, IntelliJ IDEA (Cursive), VS Code (Calva), Vim (vim-iced), rebel-readlineと同様に2020年時点でClojurianに特に人気のエディタ/IDEでの設定方法に絞って紹介します。

他のエディタ/IDEをご利用の方はサポート状況と設定方法をご確認ください(cf. Integrations)。

共通: cljstyleのインストールとデフォルト設定

macOSの場合、Homebrewでインストールするのが簡単です。

$ brew install --cask cljstyle

また、デフォルトで適用したい設定を ~/.cljstyle ファイルとして配置しておくと便利です。

例えば以下のように設定すると、およそThe Clojure Style Guideのレイアウトに沿った形でフォーマットされるようになります(※ バージョン0.14.0で設定ファイルの記述形式が変更されているので注意)。

~/.cljstyle
{:rules {:blank-lines {:max-consecutive 1
                       :padding-lines 1}
         :comments {:enabled? false}
         :functions {:enabled? false}
         :indentation {:indents {defspec [[:inner 0]]
                                 fdef [[:inner 0]]
                                 for-all [[:inner 0]]}
                       :list-indent 1}
         :namespaces {:indent-size 1}
         :types {:enabled? false}}}

:rules > :indentation > :indents の設定は必須ではありませんが、一例として私がプロジェクト横断でよく使うclojure.spectest.checkのマクロについて設定してあります。

特定のプロジェクト固有のフォーマット設定はプロジェクトルートディレクトリの .cljstyle ファイルで行うと良いでしょう。

Spacemacs + Clojure layerの場合

jstokes/cljstyle-modeを利用することで、ファイル保存時に cljstyle fix 相当のコマンドが自動実行されるようにすることができます。

~/.spacemacs
(defun dotspacemacs/layers ()
  (setq-default
   ...
   dotspacemacs-additional-packages '((cljstyle-mode :location (recipe :fetcher github :repo "jstokes/cljstyle-mode")))
   ...))

(defun dotspacemacs/user-config ()
  ...
  (add-hook 'clojure-mode-hook #'cljstyle-mode)
  ...)

動作例:

image.png

image.png

IntelliJ IDEA + Cursiveの場合

File Watchersを利用することで、ファイル編集時に cljstyle fix が自動実行されるように設定することができます。

    1. (Ultimate Editionでない場合) File Watchersプラグインをインストールする

image.png

image.png

    1. Tools > File Watchers でファイルタイプ Clojure, ClojureScript, CLJC に対するプロジェクト横断(Level: Global)の設定を追加する

image.png

image.png

image.png

image.png

image.png

動作例:

image.png

image.png

VS Code + Calvaの場合

Save and Run (もしくはその他同種の拡張)を利用することで、ファイル保存時に cljstyle fix が自動実行されるように設定することができます。

例えばユーザ設定ファイル settings.json に以下のように設定すると、拡張子 .clj, .cljc, .cljs の任意のファイル保存時に cljstyle fix <保存対象ファイル> が実行されます。

settings.json
{
  ...,
  "saveAndRun": {
    "commands": [
      {
        "match": "\\.clj[cs]?$",
        "cmd": "cljstyle fix ${file}",
        "useShortcut": false,
        "silent": true
      }
    ]
  }
}

動作例:

image.png

image.png

Vim + vim-icedの場合

vim-iced > 9. Formattingを参考に以下のように設定すると、ファイル保存時に cljstyle fix 相当のコマンドが自動実行されるようにすることができます1

~/.vimrc
let g:iced_formatter = 'cljstyle'

aug MyClojureSetting
  au!
  au BufWritePre *.clj,*.cljs,*.cljc,*.edn execute ':IcedFormatSyncAll'
aug END

動作例:

image.png

image.png

Further Reading

  1. vim-icedの作者 @uochan さんから、局所的に自動フォーマットする設定例も教えていただきました: Format only current top form on writing a file

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?