proc-macro #[param] 전면 attribute 완성 — Feature DSL 성숙 #9

Open
opened 2026-04-16 09:22:10 +09:00 by kimminsung · 0 comments
Owner

목적

ADR-002 D 와 ADR-004 D14 로드맵. 현재 cimery-macros#[derive(ParamSummary)] 만 있는 스캐폴딩 상태. 전면 #[param(...)] attribute 로 완성.

현재 상태

  • cimery-macros 크레이트 신설 (Sprint 38) — proc-macro=true, syn/quote/proc-macro2
  • #[derive(ParamSummary)] — struct named field 의 PARAM_COUNT + PARAM_NAMES 상수 생성
  • 테스트 3개 (count/names/empty)

작업 항목

Phase A: #[param] attribute 파싱

  • #[param(unit="mm", range=1000..=3000, default=1800)] 파싱
    • unit 문자열
    • range Rust RangeInclusive 리터럴
    • default 리터럴
  • 각 필드별 메타데이터 struct 생성 (name, type, unit, range, default)

Phase B: 자동 생성 코드

  • fn validate(&self) -> Result<(), FeatureError> — range 체크
  • fn builder() -> FeatureBuilder — 자동 builder 패턴
  • fn param_metadata() -> &[ParamMeta] — UI 자동생성용
  • fn from_csv_row(...) — CSV 라운드트립 (Sprint 7 확장)

Phase C: 기존 IR 적용

  • PscISectionParams#[param] 적용 — 레퍼런스 구현
  • GirderIR, DeckSlabIR, PierIR, BearingIR 등 순차 적용
  • 기존 수동 builder 와 호환 유지 (deprecation path)

Phase D: viewer UI 자동생성

  • param_metadata() 기반 egui 슬라이더 자동 배치
  • 카테고리(상부구조·하부구조 등) 자동 그룹핑

테스트

  • #[param] 파싱 에러 케이스 (잘못된 range, 중복 default 등)
  • 생성된 validate() 가 경계값에서 Ok/Err 반환
  • 기존 테스트(cimery-ir, cimery-dsl) 회귀 없음

참조

  • ADR-002 D (Feature DSL 아키텍처)
  • ADR-004 D14 (proc-macro 스캐폴딩 결정, 전면은 Feature 10+ 안정화 후)
  • cimery/crates/macros/src/lib.rs — 현재 #[derive(ParamSummary)]
  • cimery/crates/dsl/src/ — 수동 builder 레퍼런스
## 목적 ADR-002 D 와 ADR-004 D14 로드맵. 현재 `cimery-macros` 에 `#[derive(ParamSummary)]` 만 있는 스캐폴딩 상태. 전면 `#[param(...)]` attribute 로 완성. ## 현재 상태 - [x] `cimery-macros` 크레이트 신설 (Sprint 38) — proc-macro=true, syn/quote/proc-macro2 - [x] `#[derive(ParamSummary)]` — struct named field 의 PARAM_COUNT + PARAM_NAMES 상수 생성 - [x] 테스트 3개 (count/names/empty) ## 작업 항목 ### Phase A: `#[param]` attribute 파싱 - [ ] `#[param(unit="mm", range=1000..=3000, default=1800)]` 파싱 - `unit` 문자열 - `range` Rust `RangeInclusive` 리터럴 - `default` 리터럴 - [ ] 각 필드별 메타데이터 struct 생성 (name, type, unit, range, default) ### Phase B: 자동 생성 코드 - [ ] `fn validate(&self) -> Result<(), FeatureError>` — range 체크 - [ ] `fn builder() -> FeatureBuilder` — 자동 builder 패턴 - [ ] `fn param_metadata() -> &[ParamMeta]` — UI 자동생성용 - [ ] `fn from_csv_row(...)` — CSV 라운드트립 (Sprint 7 확장) ### Phase C: 기존 IR 적용 - [ ] `PscISectionParams` 에 `#[param]` 적용 — 레퍼런스 구현 - [ ] `GirderIR`, `DeckSlabIR`, `PierIR`, `BearingIR` 등 순차 적용 - [ ] 기존 수동 builder 와 호환 유지 (deprecation path) ### Phase D: viewer UI 자동생성 - [ ] `param_metadata()` 기반 egui 슬라이더 자동 배치 - [ ] 카테고리(상부구조·하부구조 등) 자동 그룹핑 ## 테스트 - [ ] `#[param]` 파싱 에러 케이스 (잘못된 range, 중복 default 등) - [ ] 생성된 validate() 가 경계값에서 Ok/Err 반환 - [ ] 기존 테스트(cimery-ir, cimery-dsl) 회귀 없음 ## 참조 - ADR-002 D (Feature DSL 아키텍처) - ADR-004 D14 (proc-macro 스캐폴딩 결정, 전면은 Feature 10+ 안정화 후) - `cimery/crates/macros/src/lib.rs` — 현재 `#[derive(ParamSummary)]` - `cimery/crates/dsl/src/` — 수동 builder 레퍼런스
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kimminsung/ParaWiki#9