lintrやstylerとは -Rパッケージのリファクタリング-
コード整形・コードの書き方を指南してくれるパッケージらしい
目的
Rパッケージのリファクタリングしたい
文法修正パッケージやRstudioのアドインをどう運用するのがスマートか整理し、いい感じのリファクタリング手順(2022🌞summer版)を確立したい。lintrとstylerどっち使えばええの?が一番気になるところ
結論
手順
大きい修正(パイプ処理など)
各コードファイルごとの修正
コメント行修正(日文→英文、英文チェック)
lintr(styler前のチェック)
styler
lintr(styler後のチェック)
修正
lintr(最終チェック)の手順が良さそう
メモ
とりあえず、上記の手順でやる、どうしても変になるなら修正
lintrパッケージ
自動的に修正してくれなくて、警告するだけ
スタイルガイドを順守しているかチェックし、知らせてくれる
code:R
install.packages("lintr")
lintr::lint_package()
checkするレベルは下記関数を使い分ければ良い
code:R
lint() lints a single file.
lint_dir() lints all files in a directory.
lint_package() lints all likely locations for R files in a package, i.e. R/, tests/, inst/, vignettes/, data-raw/, and demo/.
code:メモ
lintr::lint_package()でMarkersペインに, ファイルごとの修正すべき内容と行番号が表示される. 修正箇所をダブルクリックでその行にカーソルが移動する. 見ながらなおしていくと, 行番号と修正箇所が合わなくなるので, 末尾の行番号から修正していく.
stylerパッケージ
選択した範囲で使うと、自動的に直してくれるっぽい。
日本語/windowsだとバグるときがあるそうです
stylerはformatRの強化版って感じ
lintrは修正点を提示してくれるのに対して、stylerは自動的に直す
code:メモ
tidy = styler を設定したなら, コード整形には代わりに styler パッケージ (Müller and Walthert 2021) が使われます. R コードは styler::style_text() 関数で整形されます. styler パッケージは formatR よりも豊富な機能を持ちます. 例えば, %>%, !!, {{ といった tidyverse 特有の構文が含まれていてもアラインメントを維持することができます. チャンクオプション tidy.opts は styler::style_text() へ引数を渡して使うこともできます. これが例です.
indentがスペース4つの人は以下のオプションをindent_byに追加
code:R
style_text(string_to_format, style = tidyverse_style, indent_by = 4)
やりとりみる感じ、Rstudioの設定変更でも対応できるかも
lintr vs styler
code:メモ
"lintr is complementary to the styler package which automatically restyles code, eliminating some of the problems that lintr can detect."
code:DeepL
lintrはstylerパッケージを補完するもので、自動的にコードを再スタイリングし、lintrが検出できる問題のいくつかを排除します。
この感じだと、styler使ってもろて、lintrで補完してなって感じ
lintrもstylerもinstall.packagesすると、RstudioのAddinsから使える
参考
📚Rパッケージ開発入門
p.26〜, 3.3コードスタイル