Skip to content

oxlint-config에 react 프리셋 추가#166

Draft
yujeong-jeon wants to merge 6 commits into
mainfrom
feature/164
Draft

oxlint-config에 react 프리셋 추가#166
yujeong-jeon wants to merge 6 commits into
mainfrom
feature/164

Conversation

@yujeong-jeon

@yujeong-jeon yujeong-jeon commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Related Issue

#164

Describe your changes

@naverpay/eslint-config의 react 프리셋을 기준으로 @naverpay/oxlint-configreact 프리셋을 신설하고, oxlint 네이티브에 없는 룰 중 문자열 포맷으로 로드 가능한 jsPlugins 2종을 추가했습니다.

1. react 프리셋 (native)

  • packages/oxlint-config/react/.oxlintrc.json 신규 — node 프리셋을 extends하고 plugins: ["react", "jsx-a11y"] 활성화 (두 플러그인은 기본 비활성 → 선언해야 correctness 룰이 켜짐)
  • 네이티브 룰: curly, no-restricted-imports(lodash), react/rules-of-hooks, react/exhaustive-deps, react/jsx-handler-names, jsx-a11y/{alt-text,label-has-associated-control}
  • package.json filesreact 디렉토리 추가

2. jsPlugins 룰 (string 포맷, oxlint@>=1.0 호환 유지)

  • node 프리셋: eslint-plugin-unused-importsunused-imports/no-unused-imports
  • react 프리셋: @naverpay/eslint-plugin@naverpay/prevent-default-import (node의 unused-imports는 extends로 병합 상속)
  • 두 플러그인은 패키지 dependencies로 추가 (@naverpay/eslint-plugin: workspace:*, eslint-plugin-unused-imports: ^4.1.4)

jsPlugins는 experimental 단계라 lint 실행 시 경고가 출력되고, IDE(oxc language server)에서는 해당 룰이 표시되지 않습니다.

함께 반영 (code-style-cli 문서 수정)

  • packages/code-style-cli/README.md의 oxfmt 가이드에서 "별도 config 패키지가 없습니다" 라는 잘못된 문장만 제거 (@naverpay/oxfmt-config 패키지가 존재). patch changeset 추가

검증

  • 소비자 방식 extends로 native + node 상속(unused-imports) + react jsPlugin(@naverpay/prevent-default-import)이 모두 정상 발화하는 것을 확인
  • oxlint --rules 대조로 네이티브 지원 룰 선별 (oxlint는 미지원 룰명을 조용히 무시)
  • prettier / markdownlint 통과

범위 외 (후속 · Phase B)

import/order(eslint-plugin-import)와 react 옵션 오버라이드(eslint-plugin-react)는 import/react 네임스페이스가 예약되어 문자열 포맷으로 로드 불가합니다. rename이 되는 객체 포맷이 필요하고 이는 oxlint 상향(및 1.x 하위호환 포기)을 수반하므로 별도 작업으로 분리합니다.

@npayfebot

npayfebot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

✅ Changeset detected

Latest commit: 03895b7

@naverpay/oxlint-config package have detected changes.

If no version change is needed, please add skip-detect-change to the label.

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@naverpay/oxlint-config ✨ Minor
@naverpay/code-style-cli 🐛 Patch
powered by: naverpay changeset detect-add actions

@yujeong-jeon

Copy link
Copy Markdown
Contributor Author

/canary-publish

@npayfebot

Copy link
Copy Markdown
Contributor

Published Canary Packages

@naverpay/oxlint-config@0.1.0-canary.260701-814c2a0

@yujeong-jeon

Copy link
Copy Markdown
Contributor Author

/canary-publish

@npayfebot

Copy link
Copy Markdown
Contributor

Published Canary Packages

@naverpay/oxlint-config@0.1.0-canary.260701-d925f10

@yujeong-jeon

yujeong-jeon commented Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

카나리 검증 피드백 (0.1.0-canary.260701-d925f10)

적용중이던 레포에서 카나리 react 프리셋을 실제 코드베이스에 적용해 검증했습니다.

✅ 정상 동작

  • extends 체인 (react → node) 정상 resolve
  • native react 룰 (jsx-a11y/*, react/*) 발화 OK
  • native node 룰 (no-unused-vars, no-restricted-imports, curly) 발화 OK
  • jsPlugins 2종 정상 발화: @naverpay/prevent-default-import, unused-imports/no-unused-imports (node → react extends 상속 포함)
  • 크래시 없음

⚠️ 보완 이슈 2건 → 근본 원인: extendsenv/globals/categories를 상속하지 않음

처음엔 프리셋 설정 부재로 봤는데, 파고들어보니 oxlint의 extendsrules/plugins/jsPlugins만 병합하고 env/globals/categories는 무시합니다 (oxlint 1.71.0/1.72.0 둘 다 확인). 이건 프리셋 코드 수정으로 해결 불가능합니다.

1. unicorn/* 룰이 의도치 않게 발화 (5건)

  • categories가 extends로 상속되지 않아 oxlint 기본 correctness가 켜짐
  • 소비자 최상위에 categories: { correctness: "off" } 직접 작성 시 사라짐 확인

2. no-undef false positive (6건: require, module, process, __dirname, console)

  • 프리셋의 env: { node, commonjs, es2023 }가 extends로 상속되지 않아 globals가 주입되지 않음
  • 프리셋에 globals를 직접 추가해봐도 extends로 상속되지 않아 해결 안 됨 (검증 완료)
  • 소비자 최상위에 env 직접 작성 시에만 globals 주입됨

버전 검증

  • oxlint 1.71.0 (card-apply-web 사용) / 1.72.0 (최신) 둘 다 동일 결과 → 버전이 아닌 oxlint extends 동작 이슈

대응

  • oxlint 저장소에 extends 병합 이슈 리포트 예정 (근본 해결)
  • 본 PR의 README에 소비자가 최상위에 env/categories를 직접 작성해야 함을 명시하는 가이드 추가

카나리(0.1.0-canary.260701-d925f10) react 프리셋을 card-apply-web에서 검증한 결과,
oxlint의 extends는 rules/plugins/jsPlugins만 병합하고 env/globals/categories는
상속하지 않음을 확인 (oxlint 1.71.0/1.72.0, oxc#20087).

- categories 미상속 → unicorn/* 룰 의도치 않은 발화
- env 미상속 → no-undef가 require/module/process 등을 false positive로 잡음
- 프리셋에 globals 직접 추가해도 extends로 상속되지 않아 해결 불가 (검증 완료)

README의 Node.js/React 예시에 env/categories를 소비자 최상위에 직접 작성하도록
안내하고, 한계를 명시하는 Note 추가.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants