Skip to content

fix: import scanner 정규식 경계 보강 - #22

Merged
JeremyDev87 merged 4 commits into
masterfrom
codex/parser-regression-hardening
Apr 20, 2026
Merged

fix: import scanner 정규식 경계 보강#22
JeremyDev87 merged 4 commits into
masterfrom
codex/parser-regression-hardening

Conversation

@JeremyDev87

@JeremyDev87 JeremyDev87 commented Apr 19, 2026

Copy link
Copy Markdown
Owner

배경

  • import scanner regression hardening 작업에서 정규식 리터럴 경계와 template/re-export 경로를 함께 보강했습니다.
  • Devils Advocate 리뷰 루프에서 } 뒤 정규식 리터럴이 dynamic import 로 오탐되는 케이스가 확인되어, 해당 문맥 판별을 추가로 좁혔습니다.

변경 사항

  • source scanner가 정규식 리터럴을 먼저 건너뛰도록 해 comment/string/template 밖의 import-like text 오탐을 줄였습니다.
  • )/} 뒤 문맥을 해석하는 휴리스틱을 추가해 control header, 선언문 종료, 객체 리터럴 문장, 화살표 함수 문장, 라벨드 블록 뒤의 regex statement를 구분합니다.
  • export ... from 경로도 tree-shaking warning 누적 대상으로 연결했습니다.
  • import scanner regression 테스트에 template interpolation regex, control/block/declaration/catch/for-await/object literal/arrow/labeled block, function-body division 케이스를 추가했습니다.

검증

  • cargo fmt --all --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • target/debug/legolas-cli scan <temp project> --json
    • object literal 뒤 regex statement: dynamicImports = 0
    • function body 뒤 division/dynamic import: dynamicImports = 1

브랜치 / 워크트리

  • base: master
  • head: codex/parser-regression-hardening
  • current worktree: /Users/pjw/workspace/legolas
  • source branches/worktrees: 없음

이슈 연결

  • 없음

@JeremyDev87

Copy link
Copy Markdown
Owner Author

독립 fresh-session 리뷰 결과

  • Verdict: CHANGE_REQUEST
  • Findings:
  • 높음: import_scanner_regressions.rsTemplate.tsx 쪽 템플릿 회귀 테스트가 raw text만 고정하고 있어, 실제 ${...} 템플릿 표현식 안의 실행 가능한 import() false negative를 막지 못합니다.
  • Rationale: parser regression hardening PR인데, reviewer 재현 기준으로 ${true ? import("chart.js/auto") : ""}`` 같은 실제 동적 import가 아직 dynamicImports: 0`으로 누락되어 핵심 회귀 방지망이 충분하지 않다고 판단됐습니다.

참고: PR 작성자와 리뷰 계정이 같아 GitHub policy상 official request-changes 대신 PR comment로 남깁니다.

@JeremyDev87
JeremyDev87 force-pushed the codex/parser-regression-hardening branch from 14756b6 to d1c8b4a Compare April 19, 2026 15:59
@JeremyDev87

Copy link
Copy Markdown
Owner Author

독립 fresh-session 리뷰 결과

  • Verdict: APPROVE
  • Findings: 없음
  • Rationale: 이전 CHANGE_REQUEST에서 지적된 template interpolation 내부 dynamic import 누락을 수정했고, cargo fmt/clippy/test 및 관련 회귀 테스트를 다시 통과했습니다.

참고: PR 작성자와 리뷰 계정이 같아 GitHub 정책상 official approve 대신 PR comment로 남깁니다.
이 코멘트는 이전 CHANGE_REQUEST 코멘트(https://github.com/JeremyDev87/legolas/pull/22#issuecomment-4276234268)를 대체합니다.

@JeremyDev87
JeremyDev87 force-pushed the codex/parser-regression-hardening branch from d1c8b4a to 3c0b1c7 Compare April 19, 2026 16:06
@JeremyDev87
JeremyDev87 force-pushed the codex/parser-regression-hardening branch from 3c0b1c7 to 8e3ba09 Compare April 19, 2026 16:08
@JeremyDev87

Copy link
Copy Markdown
Owner Author

독립 fresh-session 리뷰 결과

  • Verdict: APPROVE
  • Findings: 없음
  • Rationale: template interpolation 내부 dynamic import 누락과 regex literal brace 경계 회귀를 수정했고, cargo fmt/clippy/test 및 실제 CLI 재현 검증을 모두 다시 통과했습니다.

참고: PR 작성자와 리뷰 계정이 같아 GitHub 정책상 official approve 대신 PR comment로 남깁니다.
이 코멘트는 이전 review-loop 코멘트들(CHANGE_REQUEST 및 중간 APPROVE 포함)을 최신 HEAD 기준으로 대체합니다.

@JeremyDev87 JeremyDev87 added fix Bug fixes and removed test labels Apr 20, 2026
@JeremyDev87 JeremyDev87 changed the title test: import scanner 회귀 fixture 보강 fix: import scanner 정규식 경계 보강 Apr 20, 2026
@JeremyDev87

Copy link
Copy Markdown
Owner Author

독립 fresh-session 리뷰 결과

  • Verdict: CHANGE_REQUEST
  • Findings:
    • High: crates/legolas-core/src/import_scanner.rs:1157, crates/legolas-core/src/import_scanner.rs:1637 에서 정규식 시작 판별이 이전 비공백 문자만 보고 주석을 건너뛰지 않아, if (ok) /**//import("chart.js\\/auto")/.test(value); 같은 정상 regex 문장을 동적 import로 오인합니다. 이 경우 dynamicImports=1 로 집계되어 heavy dependency/impact 결과까지 왜곡됩니다.
    • High: crates/legolas-core/tests/import_scanner_regressions.rs:169 부근의 새 회귀 테스트들이 제어문/블록 바로 뒤 regex만 검증하고, 그 사이에 주석이 끼는 실제 코드 형태를 다루지 않아 위 오탐이 그대로 빠져나갑니다.
  • Rationale: 이번 PR의 목적이 parser regression hardening 인데, 아직 흔한 주석 뒤 regex 케이스에서 스캔 결과가 잘못 부풀려지므로 승인하기 어렵습니다.
  • Note: PR 작성자와 동일 계정이라 GitHub 공식 Request changes 대신 PR comment로 남깁니다.

@JeremyDev87
JeremyDev87 force-pushed the codex/parser-regression-hardening branch 13 times, most recently from 801587c to d500394 Compare April 20, 2026 16:13
@JeremyDev87
JeremyDev87 force-pushed the codex/parser-regression-hardening branch from d500394 to 22d9649 Compare April 20, 2026 16:19
@JeremyDev87

Copy link
Copy Markdown
Owner Author

독립 리뷰 루프 최종 결과를 남깁니다.

Verdict: APPROVE

반영 내용:

  • 정규식/나눗셈 경계 판별을 실제 런타임 해석에 맞게 보정했습니다.
  • semicolon-less object literal, function expression assignment, malformed template interpolation 회귀를 막았습니다.
  • .vue/.svelte <script> 추출을 문자열/주석 안의 </script>에 안전한 방식으로 교체했습니다.

검증:

  • cargo fmt --all --check
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • cargo run -p legolas-cli -- scan ... --json 실재현 케이스 다수

이 댓글은 이전 Change Request 결과를 대체하는 최신 상태입니다.

@JeremyDev87 JeremyDev87 self-assigned this Apr 20, 2026
@JeremyDev87
JeremyDev87 marked this pull request as ready for review April 20, 2026 16:25
@JeremyDev87
JeremyDev87 merged commit a598eed into master Apr 20, 2026
7 checks passed
@JeremyDev87
JeremyDev87 deleted the codex/parser-regression-hardening branch April 20, 2026 16:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix Bug fixes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant