From 23c4ad97b9172a7eeda95ca04b5f3dc0c95235c2 Mon Sep 17 00:00:00 2001 From: altair823 Date: Wed, 20 May 2026 02:28:53 +0000 Subject: [PATCH] fix(p10-1b): apply round-1 lang.rs doc + tests/ test case missed in 4503b5b MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #142 round-1 fix commit 4503b5b 보고에는 lang.rs 의 (a) module_path_for_python doc comment 갱신 (tests/examples/benches 가 의도적으로 strip 안 됨 명시) 과 (b) tests/test_foo.py → tests.test_foo 단언 추가가 포함됐다고 적혔으나, 실제 commit 에는 lang.rs 변경이 staging 되지 않아 main 에 안 들어감 (review loop round 2 이 working tree 상태만 신뢰하고 commit 검증을 안 함). 이번 PR 이 누락된 (5)+(6) 항목만 retro 적용. lang.rs +9 lines (test 1 + doc 4 + 주석 2 + 빈줄 2). cargo test -p kebab-parse-code --lib → 20/20 pass. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/kebab-parse-code/src/lang.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/kebab-parse-code/src/lang.rs b/crates/kebab-parse-code/src/lang.rs index 1128ac7..2fa992f 100644 --- a/crates/kebab-parse-code/src/lang.rs +++ b/crates/kebab-parse-code/src/lang.rs @@ -44,6 +44,12 @@ pub fn code_lang_for_path(path: &Path) -> Option<&'static str> { /// p10-1B: workspace-relative Python file path → dotted module-path prefix. /// See plan §Task C for the exact rules + tasks/p10/p10-1b for the §3.4 /// design contract. +/// +/// Stripped source-roots: `src/`, `lib/`, and `crates//src/`. +/// `tests/`, `examples/`, and `benches/` are intentionally NOT stripped — +/// they appear in test/example/bench namespaces and dropping them would +/// conflate identical symbol names across conventional Python directories +/// (e.g. `tests/test_foo.py` → `tests.test_foo`, not `test_foo`). pub fn module_path_for_python(workspace_path: &str) -> String { let mut p: &str = workspace_path; if let Some(rest) = p.strip_prefix("crates/") { @@ -97,6 +103,9 @@ mod tests { assert_eq!(module_path_for_python("a/b/c.pyi"), "a.b.c"); assert_eq!(module_path_for_python("standalone.py"), "standalone"); assert_eq!(module_path_for_python("src/__init__.py"), ""); + // `tests/` is NOT a stripped source-root — it is preserved as + // part of the module path so test symbols stay namespaced. + assert_eq!(module_path_for_python("tests/test_foo.py"), "tests.test_foo"); } #[test]