system_includes をロケール非依存にする#90
Conversation
gcc/clang の -v 出力を英語固定の目印文字列でパースしているため、 LANG/LC_ALL 等が英語以外のロケールカタログを指す環境では出力が 翻訳されてパースに失敗し、std の登録 (自動セットアップ含む) が 失敗しうる (#73)。LC_ALL/LANGUAGE を C に固定して回避する。
偽コンパイラで LC_ALL/LANGUAGE が C でなければ翻訳済みの目印文字列を 返すようにし、呼び出し側が明示的にロケールを固定していることを確かめる。 修正前のコードに対しては実際に失敗する (ambient ロケールが C でない 環境で目印が一致せず検出に失敗する) ことを手元で確認済み。
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthrough
ChangesLocale-independent include discovery
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Fixes #73
背景
compiler.rsのsystem_includesはgcc -v(または clang) の標準エラーを#include <...> search starts here:/End of search list.という英語の目印文字列でパースしている。LC_ALL/LANGUAGE等を固定していないため、これらの文字列が翻訳される環境では検出が失敗しうる、という理論上の懸念に対する予防的な修正。実機確認の結果 (Issue のコメント参照): Ubuntu 24.04 (WSL2) の gcc 14.2.0 +
language-pack-jaでは、該当メッセージの日本語訳が未整備で再現せず、clang++ 18.1.3 は多言語化機構自体を持たないため常に英語出力だった。したがって「今まさに壊れている」ケースの実機確認はできていないが、翻訳が進んだ将来の gcc や、翻訳カタログの充実度が異なる他ディストリでは起こり得るため、LC_ALL=C/LANGUAGE=Cを明示する対処自体はほぼ無害な予防的ハードニングとして採用する。変更内容
system_includesのコンパイラ起動時にLC_ALL=C/LANGUAGE=Cを設定する。テスト
system_includes_forces_the_c_localeを追加。偽コンパイラがLC_ALL/LANGUAGEの値を見て、Cでなければ翻訳済みの目印文字列を返すようにし、呼び出し側が明示的にロケールを固定していることを確認する。cargo fmt --check/cargo clippy --all-targets --all-features -- -D warnings/cargo test --all-featuresすべて通過。🤖 Generated with Claude Code
Summary by CodeRabbit