ディスカッション (5件)
R言語での開発体験がTree-sitterによって劇的に向上しました。シンタックスハイライトの精度向上やコード解析の高速化など、Rユーザーにとって見逃せない進化がここにあります。最新のR開発環境を構築するなら、今すぐTree-sitterを活用しましょう。
Tree-sitterは最高クラスのエンジニアリングプロダクトの一つだよね、本当に色んな可能性を広げてくれる。開発者と、このプロジェクトや数多くの文法定義に貢献してきた全員に感謝!
これを使って作られたツールって、dplyrのパイプラインや、コード内で変数としてそのまま扱われるデータフレームのカラムをちゃんと理解できるの?もしそうなら、かなり感動的だな。Rって結構特殊なことしてるからさ。
少し前にEmacsでTree-sitterに移行したけど、実際やってみると思ったより全然簡単だよ。
最初にちょっとしたユースケースを試したんだ。理由はよくわからないけど、Clojureコードのletバインディングを揃えるための設定って、「セマンティック」な方法だろうがTonskyの準標準的なフォーマット方法(結構色んなツールがこれ採用してるよね)だろうが、どのオプションをいじっても理想通りに揃わなくてさ。
こういう純粋でひどいカオス状態が本当に、心底嫌いでね:
(let [abc (+ a 2)
d (inc b)
vwxyz (+ abc d)]
...
でも、こっちの完璧さは最高 [1]:
(let [abc (+ a 2)
d (inc b)
vwxyz (+ abc d)]
...
cljfmtはこれに対してかなり寛容で、Emacsからcljfmtを使ってフックを設定しても、全体を揃えつつこのきれいな垂直配置を壊さないようにできるんだ。
もちろん、本来はcljfmtだけで完結するはずだってことは知ってるよ。でも最新版でも多くのオプションが実験的扱いだし、どの設定をいじっても自分の環境じゃどうしても上手くいかなくて。
そこで何をしたかというと、Claude Code CLIとTree-sitter、そして3つのelisp関数を使ったんだ。
そうして、Clojureのletバインディング用に自分専用の垂直インデント処理を追加した。cljfmtとの互換性もある(つまり、cljfmtを実行してもせっかくの垂直配置が崩れない)。
Tree-sitterの構文木は信じられないくらい冗長(そうあるべきものだけど)だけど、使う分にはそんなに難しくないと思うよ。
追伸:この手の揃え方を好むのは自分だけじゃないし、「それだと1行変えただけで複数行が変更扱いになるじゃん」なんて意見は受け付けないよ。インデントを無視してASTの差分だけを取れるツールも出てきてる今、そんな批判はますます意味をなさなくなってるしね。
この記事、オートコンプリートやホバー時のヘルプ表示があたかも新しい機能かのように書いてるけど、RStudio IDEは何年も前から普通にあったよ。
RとRStudioが自分の最初の言語・IDEだったんだ。他の言語に触れた時、R/RStudioでは当たり前だった機能がなくてめちゃくちゃショックを受けたよ。「え、関数やメソッドのドキュメントを自分でわざわざ調べるの!?それ自動じゃないの!?」って感じで。
Rには他の言語が及ばない機能がたくさんあって、他のエコシステムがそれを持っていないことを知った時の衝撃はすごい。例えば、RStudioのキーボードショートカットでコード行を即座に実行できるREPLの便利さね(Rubyで同じことをしようとすると、neovim/slimeの設定に何時間もかけてもRStudioの標準機能には到底及ばない)。
本当に優れたツールって、素人がそれを使っても専門家が代替ツールを使うより良い仕事ができるものなんだよ。