Nuten

Nuten とは

概要

Nuten は Nushell のフォーマッタです。.nu のスクリプトと .nuon のデータファイルを、一貫したスタイルに整えます。

名前は「Nu」と、整えるという意味の「neaten」を組み合わせたもので、/ˈnuːtən/ と発音します。「Newton」を英語で読んだときの音に近いです。

背景

Nushell のフォーマッタには、すでに nufmt があります。以前の nufmt は、整形の結果として構文を壊したり、コメントを消したりすることがありました。多くは修正されていますが、Nuten はこの種の問題を設計の段階から防ぐことを目指しています。

なお、Nushell のフォーマッタには、Topiary を使った topiary-nushell もありましたが、現在はアーカイブされています。

設計方針

Nuten は、コードを壊さないことを仕組みとテストの両方で支えています。コードは、空白やコメントも含めて元の内容をすべて保持する lossless CST に解析し、そこから書き直します。解析で構文エラーが見つかったファイルは、書き換えずにそのまま残します。

そのうえでテストでは、整形の結果からトークンやコメントが失われていないか、もう一度整形しても結果が変わらないかを、手書きの入力や実際のスクリプト、ランダムな入力で確かめています。整形の前後のコードを Nushell 自身にも解析させ、Nuten が同じように解釈できているか、意味が変わっていないかも見ています。詳しくは 正しさ を参照してください。

また、速く軽く動くことと、バイナリサイズを小さく抑えることを重視しています。詳しくは 性能 を参照してください。

さらに、普段の開発にそのまま組み込めることも重視し、Nix でのインストール方法 や、エディタやツールとの連携 を用意しています。

nufmt との違い

Nuten は nufmt を置き換えるものではなく、Nushell のフォーマッタのもう一つの選択肢です。

nufmt は Nushell チームのもとで開発されている公式のフォーマッタです。Nushell 本体と同じパーサである nu-parser を使っているので、Nushell と違う解釈をすることもありません。

Nuten のパーサは Nushell 本体とは別のものなので、Nushell と違う解釈をする可能性は残り、新しい構文への対応が遅れることもあります。そのぶん、壊さないことを仕組みとテストで支えています。また、nufmt より速く、メモリ使用量やバイナリサイズも小さく済みます。特定のツールとの連携や周辺の機能など、公式のプロジェクトではすぐには取り入れにくそうな機能にも対応しています。

Nushell と同じ解釈や公式のツールであることを重視するなら nufmt を、速さや、エディタやツールとの連携を重視するなら Nuten を選ぶとよいでしょう。

Last updated: