ビルドとテスト
ビルド
デフォルトビルド
デフォルトの feature(mmap)でワークスペースをビルドします:
cargo build
学習機能付きビルド
CRF ベースの辞書学習機能を含めてビルドします:
cargo build --features train
CLI のみビルド
cargo build -p lindera-cli
CLI ではデフォルトで train feature が有効になっています。
テスト
単一テスト
クレート内の特定のテストを実行します(開発時はこちらを推奨):
cargo test -p <crate> <test_name>
学習機能のテスト
cargo test -p lindera-trainer
クレート単位の全機能テスト
単一クレートの全テストスイートを実行します:
cargo test -p <crate> --all-features
注意: CI では
--all-featuresは使用されません。各クレートに対してキュレートされた個別の feature の組み合わせでテストを実行します(.github/workflows/regression.ymlを参照)。Makefile のクレート別パターンターゲット(make test-<crate>、make lint-<crate>)は CI と同じ feature の組み合わせを適用するため、ローカルでの実行方法としては最も近い代替手段です。CI はさらに、lindera-segmenterとlinderaをすべての辞書を埋め込んだ状態でもう一度テストし(Linux のみ)、ほかの辞書の feature でだけ有効になるテストも実行します。ローカルで同じことをするには、cargo test -p lindera --features embed-ipadic,embed-ipadic-neologd,embed-unidic,embed-sudachidict,embed-ko-dic,embed-cc-cedict,embed-jiebaを実行します(lindera-segmenterも同様)。
ワークスペース全体のテスト
cargo test
品質チェック
フォーマットチェック
コードのフォーマットがプロジェクトのスタイルに一致しているか確認します:
cargo fmt --all -- --check
フォーマットを自動修正するには:
cargo fmt --all
リント
Clippy を警告をエラーとして扱うモードで実行します:
cargo clippy -- -D warnings
注意: CI は各クレートに対して、そのクレートのテストと同じ feature で
cargo clippy --all-targets -- -D warningsを実行します(.github/workflows/test-crate.ymlと、.github/workflows/regression.ymlの言語バインディングのジョブを参照)。そのため、テストのコードも lint されます。make lint-<crate>は同じ clippy のコマンドを実行します。PR を開く前にローカルで(例えばmake lint経由で)clippy を実行してください。
ドキュメント
API ドキュメント
Rust の API ドキュメントを生成して開きます:
cargo doc --no-deps --open
各クレートの API ドキュメントに rustdoc の警告(壊れた intra-doc link や、公開項目から private 項目へのリンクなど)がないかを確認します:
make check-docs
注意: CI は
make check-docsを実行し、rustdoc の警告が 1 つでもあれば失敗します。言語バインディング以外のクレートを、すべての feature を有効にして文書化します。ライブラリは 2 回文書化し、1 回目は docs.rs が公開するのと同じく公開項目だけ、2 回目は private 項目も含めます。private 項目の doc コメントを検査するのは 2 回目だけです。続けて、CLI のコードがあるlindera-cliのバイナリを private 項目も含めて文書化します。ダミーの辞書(DOCS_RS=1)を使い、専用の target ディレクトリtarget/check-docsでビルドするので、辞書をダウンロードせず、target/にも影響しません。
言語バインディングは、ビルドにそれぞれの言語のツールチェーンが必要なため、1 つずつ検査します:
make check-docs-lindera-python # -nodejs、-ruby、-php、-wasm も同様
注意: 各バインディングの CI ジョブがそれぞれのターゲットを実行し、rustdoc の警告が 1 つでもあれば失敗します。ターゲットはバインディングを 2 回文書化します。1 回目は公開項目だけ、2 回目は private 項目も含めます。feature はデフォルトのままです。項目の有無を切り替える feature はすべてデフォルトで有効なので、これで足ります。辞書はビルドしません。
lindera-rubyはmake test-lindera-rubyと同じ RbConfig のラッパーを通して実行し、lindera-wasmはwasm32-unknown-unknown向けに文書化します。
mdBook ドキュメント
ユーザー向けドキュメントをビルドします:
mdbook build docs
http://localhost:3000 でローカルプレビュー:
mdbook serve docs
Markdown リント
ドキュメントの Markdown スタイルの問題をチェックします:
markdownlint-cli2 "docs/src/**/*.md"
ルールはリポジトリルートの .markdownlint.json で設定されています。