Skip to content

bun lint Config

@pleaseai/eslint-config의 규칙 가운데 bun lint가 네이티브로 실행하는 규칙을 담은 bunfig.toml의 [lint] 테이블.

Updated View as Markdown

@pleaseai/bun-lint-config는 @pleaseai/eslint-config의 규칙 가운데 bun lint가 네이티브로 실행하는 규칙을 bunfig.toml의 [lint] 테이블로 제공합니다. 이 패키지는 ESLint 설정에서 생성한 lint.toml 파일 하나만 배포합니다.

bun lint는 아직 Bun canary 빌드에만 있습니다. bunfig.toml에는 extends가 없으므로 테이블을 프로젝트의 bunfig.toml에 복사해서 씁니다.

포함 범위

생성기는 다음을 유지합니다.

  • Bun에 내장된 규칙: ESLint 코어, @typescript-eslint, unicorn, import, node(eslint-plugin-n)와 그 옵션
  • ESLint 설정의 파일 범위: TypeScript 파일, 테스트, 스크립트, .d.ts, 설정 파일 등에 대한 [[lint.overrides]]
  • 전역 ignore: ignorePatterns
  • 이름은 다르지만 네이티브 대응 규칙이 있는 규칙: 대응 규칙으로 매핑(아래 참고)

다음은 포함하지 않습니다.

  • Bun이 네이티브로 실행하지 않는 플러그인(아래에서 매핑한 규칙 제외): stylistic(style/*), regexp, jsdoc, antfu, perfectionist, unused-imports, eslint-comments, command, e18e
  • bun lint가 검사하지 않는 JSON, YAML, TOML, Markdown
  • 포매팅: 이 패키지는 [fmt]가 아니라 [lint]만 설정합니다.

@pleaseai/eslint-config가 켜지 않는 규칙이라도 Bun이 기본으로 켜는 규칙은 그대로 켜져 있습니다. ESLint 코어 규칙 14개(no-constant-condition, for-direction, no-useless-escape, no-unsafe-optional-chaining 등), bun:test를 import하는 파일의 bun:test 규칙, react가 의존성에 있을 때의 React 규칙이 그렇습니다. 그래서 bun lint는 ESLint보다 조금 더 많이 보고할 수 있습니다.

매핑한 규칙

src/rule-map.ts는 bun lint에 같은 이름의 네이티브 규칙이 없지만 같은 일을 하는 네이티브 규칙이 있는 경우, 그 규칙으로 매핑합니다. 생성기는 심각도, 옵션, 파일 범위를 그대로 두고 네이티브 이름으로 기록합니다.

  • antfu의 test/*(vitest) 규칙을 vitest/*로: consistent-test-it, no-identical-title, no-import-node-test, prefer-hooks-in-order, prefer-lowercase-title, 그리고 no-only-tests는 vitest/no-focused-tests로
  • unused-imports/no-unused-vars를 @typescript-eslint/no-unused-vars로
  • style/jsx-* 규칙을 react/jsx-*로: closing-bracket-location, closing-tag-location, curly-brace-presence, curly-newline, curly-spacing, equals-spacing, first-prop-new-line, indent-props, max-props-per-line, one-expression-per-line, tag-spacing
  • antfu/no-top-level-await를 n/no-top-level-await로
  • e18e/prefer-array-some, prefer-date-now, prefer-regex-test, prefer-object-has-own을 각각 unicorn/prefer-array-some, unicorn/prefer-date-now, unicorn/prefer-regexp-test, prefer-object-has-own으로

매핑한 규칙이 대상 규칙을 소유합니다. 대상 규칙에 대한 ESLint 설정의 자체 항목은 버리고(예: TypeScript 파일에서 @typescript-eslint/no-unused-vars를 끄는 항목), 그 항목 중 off가 아닌 것이 있으면 생성기가 실패합니다. jsx-wrap-multilines는 Bun이 propertyValue 옵션을 거부하므로 매핑하지 않습니다.

매핑한 규칙은 ESLint 규칙과 비슷하지만 똑같지는 않습니다.

  • vitest 규칙은 vitest에서 import하는 파일에서 동작합니다. bun:test를 import하는 파일에서는 Bun이 자체 bun:test 규칙을 실행합니다.
  • 보고 위치(열)가 다를 수 있습니다. no-import-node-test는 모듈 이름, no-identical-title은 제목, prefer-array-some은 filter, prefer-regexp-test는 정규식을 가리킵니다.
  • Bun은 no-unused-vars와 @typescript-eslint/no-unused-vars를 하나의 규칙으로 실행하므로, 매핑한 unused-imports/no-unused-vars가 no-unused-vars도 소유하고 모든 파일에서 그 옵션이 적용됩니다. ESLint가 JavaScript 파일에서 함께 실행하는 코어 규칙은 쓰지 않습니다.
  • react/jsx-* 규칙은 설정이 명시적으로 켜므로 react가 의존성에 없어도 실행됩니다.

사용법

CLI를 실행하고 bun-lint-config를 선택합니다.

bunx @pleaseai/code-style init

init은 패키지를 설치하고 lint.toml을 bunfig.toml의 # >>> @pleaseai/bun-lint-config와 # <<< @pleaseai/bun-lint-config 주석 사이에 씁니다. 업그레이드한 뒤 init을 다시 실행하면 블록이 갱신되고, bunfig.toml의 나머지는 그대로 유지됩니다. 블록 밖에 이미 lint 설정이 있으면 init은 파일을 건드리지 않고 그 설정을 먼저 지우라고 안내합니다.

직접 복사하려면 파일을 bunfig.toml 끝에 덧붙이고, 테이블을 파일의 맨 끝에 두세요. 테이블 뒤에 오는 키는 마지막 테이블에 속하게 됩니다.

bun add -D @pleaseai/bun-lint-config
cat node_modules/@pleaseai/bun-lint-config/lint.toml >> bunfig.toml

bun --config=node_modules/@pleaseai/bun-lint-config/lint.toml lint는 같은 방법이 아닙니다. --config는 bunfig.toml에 더하는 것이 아니라 bunfig.toml을 대신합니다.

bun lint 실행

  • package.json에 lint 스크립트가 있으면 bun lint가 그 스크립트를 실행합니다. bun lint --no-script로 실행하거나 스크립트를 bun lint로 바꾸세요.
  • eslint.config.* 파일과 함께 쓰지 마세요. ESLint 설정이 있으면 bun lint는 그 설정을 읽고 그 위에 [lint] 키를 적용하므로, 둘 중 하나만 사용하세요.
Navigation

검색어를 입력하세요…

↑↓ 이동↵ 선택Esc 닫기