2019年7月16日火曜日

Emacsでformatterを試してみる

Emacs上で、コードの整形をやってくれる、formatterの設定をやってみた。

pythonについては、なんとなく塩梅が分るようになった気がしているが、その他は全滅なので HUGO を触るのに不便に感じたのでやってみた。

試したのは、 format-all、 prettier、 js-beaytify。

prettier と js-beaytify では、prettierの方がメジャーみたい。

1 prettier

  • GitHub - prettier/prettier-emacs: Minor mode to format JS code on file save

  • 対応しているのは、 flow、babylon、typescript、css、less、scss、json、json5、json-stringify、 graphql、markdown、mdx、vue、yam、html など。

  • save する時に自動でやると、反応が遅いので、不快になる。

    (use-package prettier-js :ensure t :defer t
     :diminish (prettier-js-mode . "-prett")
     ; :hook (
     ;   (yaml-mode . prettier-js-mode)
     ;   (json-mode . prettier-js-mode)
     ;   (html-mode . prettier-js-mode)
     ;   (web-mode . prettier-js-mode)
     ;   (css-mode . prettier-js-mode))
     :config
      (setq prettier-js-command "~/.yarn/bin/prettier")
      (setq prettier-js-args '(
        "--trailing-comma" "all"
        "--bracket-spacing" "false"
      ))
    )
    

2 web-beautify

3 format-all

  • GitHub - lassik/emacs-format-all-the-code: Auto-format source code in many la…
  • 外部の formatter を使うので、自分で用意する。
  • できる範囲で formatter をインスト。私には不要なものを含めて。(debian buster)。
    • prettier(Angular/Vue GraphQL Markdown TypeScript/TSX CSS/Less/SCSS JavaScript/JSON/JSX
    • clang-format (Java + C/C++/Objective-C Protocol Buffers)
    • Rust (rusfmt), Go (gofmt), Haskell (brittany), Python (black)
    • Ruby (rufo), Emacs Lisp (emacs), HTML/XHTML/XML (tidy)
    • SQL (sqlformat), Perl (perltidy), Shell script (shfmt)
    • Assembly (asmfmt(go)), Clojure/ClojureScript (node-cljfmt)
    • YAML (yq -> yq.v2)
  • インストしてないやつ
    • Crystal (crystal tool format), D (dfmt)
    • Elixir (mix format), Elm (elm-format)
    • Kotlin (ktlint), Lua (lua-fmt)
    • OCaml (ocp-indent), Swift (swiftformat)
  • なんにでも対応しているみたいで、素人の私にはこちらが良さそう。

    (use-package format-all :ensure t :defer t
     :bind (:map prog-mode-map
            ("<M-f8>" . format-all-buffer)
    ))
    

4 hydra でメニューに加える

‘C-x C-s’ が手に馴染んでいて、その度に一瞬待たされるのが嫌で、 hydra に登録して、手動で実行するようにした。

(defhydra hyd-dict (:hint nil)
  "dic, spell and formatter"
  ("G" skk-get "get dic(web)" :column "skk")
  ("E" skk-edit-private-jisyo "edit p jisho")
  ("w" lookup-pattern "lookup word" :column "lookup")
  ("r" lookup-region "lookup for region")
  ("W" eww-search-words "eww-search")
  ("s" ispell-word "ispell word" :column "flyspell")
  ("b" flyspell-buffer "ispell buffer")
  ("t" powerthesaurus-lookup-word-at-point "at point" :column "thesaurus")
  ("T" powerthesaurus-lookup-word "word")
  ("d" powerthesaurus-lookup-word-dwim "dwin")
  ("f" format-all-buffer "format-all" :column "formatter")
  ("h" web-beautify-html "beautify H")
  ("c" web-beautify-css "beautify C")
  ; ("p" prettier-js "prettier") ;; not work prettier-mode disable
  ("q" nil "Exit" :exit t :column "Quit")
  ("." nil "cancel" :color blue)
)

ここのメニュに加えるはどうかと思うが、これでしばらく試してみる。

メモしてる時とかは、’fill-paragraph’ とか ‘fill-region’ なのだが、 これさえ使ってなかったことに気付いた。今更だが。

0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...