Node.js環境でClangを使ったC、C++、Javaフォーマッタを開発しました。
(github.com/lumirlumir)こんにちは。Node.js環境でClangを使ったC、C++、Javaフォーマッタを開発しました。このプロジェクトは、すでにメンテナンスされていない(deprecated となった)Angular の clang-format パッケージをベースに、新たに進めているプロジェクトです。
1〜2か月ほど前にも一度同じ内容を投稿しましたが、パッケージの安定性がさらに高まり、新機能も追加されたため、改めて記事を書くことにしました。
現在、多くの方に関心を持っていただき、既存のレガシーユーザーの方々にも多く移行していただいたおかげで、週間ダウンロード数が10,000回を突破しました。本当にありがとうございます。
また、このパッケージはフルテストカバレッジを達成しており、Node.js コアでも既存の Angular の clang-format プロジェクトの代わりに現在のパッケージを利用する形へ変更しようとする PR が上がっているため、安定性については安心して使っていただけると思います。(もちろん、まだ私が見落としている部分があるかもしれません……)
このパッケージは、LLVM の C コンパイラとして有名な Clang の clang-format をベースに、C、C++、Java 言語のコードフォーマットを整えるパッケージです。Node.js 環境で最も有名なパッケージの一つである Prettier と同じ役割を果たすと考えていただければよいと思います。
ただし、Prettier パッケージでは C、C++、Java 言語のフォーマットはサポートされていないため、これらの言語でフォーマットを整えるには clang-format を使うことが多いです。
Node.js 環境での clang-format は、Node.js コア開発のように JavaScript コードと C/C++ コードを一緒に書く必要がある場合に特に便利です。従来の clang-format では、このパッケージを利用するために追加の依存関係をインストールする必要がありましたが、現在のパッケージではその必要がありません。
また、従来の clang-format パッケージは、CI などで Node.js と npm を使ったワークフローに統合するのがかなり難しい面がありましたが、現在のパッケージであれば npm からダウンロードしてスクリプトを設定するだけでよいため、CI 環境で多くの利点があります。
さらに、1.2.0 バージョンへのアップグレードに伴い、新機能が追加されました。主な変更点は git-clang-format パッケージを追加したことです。
たとえば、C/C++ プロジェクトを進める中でコードフォーマットの必要性を感じ、clang-format などのパッケージを導入しようとする状況を考えてみましょう。
小規模なプロジェクトでは、コードフォーマットを一括で全面的に修正してからまとめてコミットしても、履歴の追跡にそれほど問題はないかもしれません。しかし、大規模なプロジェクトでは、コードフォーマットの導入によって既存コードのフォーマットを一括で全面的に修正する必要があるため、コミット履歴の追跡が煩雑になるおそれがあります。
ここで、開発者が1000行のコードのうち100行だけを修正し、コミット時に修正された100行だけに対してフォーマットチェックを行うとしたらどうでしょうか。第一に、修正された100行だけにフォーマットを適用すればよいため、1000行すべてを全面的に修正する必要がなくなり、コミット履歴の追跡が容易になります。第二に、開発の過程でコードがコミットされるたびにフォーマットが適用されたコードが徐々に増えていくため、時間が経つほどコードフォーマットの一貫性が高まっていきます。
このために使うのが git-clang-format パッケージです。lint-staged によってステージされたファイルだけを検査して CI の速度を向上させるように、それより一段進んで、変更されたファイルの中でも変更されたコードに該当する行だけを検査し、コードフォーマットチェックを適用できます。これも LLVM が標準で提供しているため、パッケージとしてラップして公開しました。
正確な使い方は公式ドキュメントに記載してありますので、ぜひご関心をお寄せください。(ただし公式ドキュメントは英語です) ご不明な点やご意見がありましたら、コメントいただけると幸いです。長文をお読みいただき、ありがとうございました。
公式ドキュメント: https://clang-format-node.lumir.page
リポジトリ: https://github.com/lumirlumir/npm-clang-format-node
2件のコメント
オープンソース開発を応援します!
ありがとうございます!!🙇♂️