Skip to content

고급 사용법

Config Composer, 타입 인지 규칙, command codemod, 플러그인 이름 변경, 버전 정책.

Updated View as Markdown

타입 인지 규칙

가장 강력한 TypeScript 린트 규칙 일부는 타입 정보가 필요합니다 — 로컬 구문이 어떻게 보이느냐가 아니라 런타임에 어떤 값인지 실제로 resolve해야 합니다. tsconfig.json을 가리켜 타입 인지 린트를 opt-in 하세요:

eslint.config.tsts
import pleaseai from '@pleaseai/eslint-config'

export default pleaseai({
  typescript: {
    tsconfigPath: 'tsconfig.json',
  },
})

Config Composer

pleaseai()는 FlatConfigComposer를 반환하므로, 일반 옵션 객체만으로는 충분하지 않을 때 이름이 붙은 config 블록을 유연하게 override, prepend, remove, rename할 수 있습니다:

eslint.config.tsts
import pleaseai from '@pleaseai/eslint-config'

export default pleaseai()
  .prepend(
    // 메인 PleaseAI 설정 앞에 들어가는 flat config들
  )
  .override('antfu/stylistic/rules', {
    rules: {
      'style/generator-star-spacing': ['error', { after: true, before: false }],
    },
  })
  .renamePlugins({
    'old-prefix': 'new-prefix',
  })
  .remove('antfu/stylistic')

이 API는 다음과 같은 경우에 사용하세요:

  • 이름이 붙은 config 블록을 완전히 remove하고 싶을 때
  • 커스텀 설정을 작성하지 않고 플러그인 prefix를 rename해야 할 때
  • 특정 이름의 블록 내부 규칙을 override하고 싶을 때 (최상위 overrides보다 더 정교함)

command Codemod

@pleaseai/eslint-config는 eslint-plugin-command를 함께 배포합니다 — triple-slash 주석으로 트리거되는 온디맨드 마이크로 codemod 시스템입니다. 일반적인 린트 규칙이 아니라 사용자가 명시적으로 opt-in 하는 방식입니다.

기본 제공되는 트리거:

  • /// to-function — arrow function → function 선언
  • /// to-arrow — function 선언 → arrow function
  • /// to-for-each — for 루프 → .forEach()
  • /// to-for-of — .forEach() → for-of
  • /// keep-sorted — 다음 객체/배열/인터페이스 정렬

전체 카탈로그는 플러그인 문서에서 확인하세요.

사용법 — 트리거를 코드 한 줄 위에 배치합니다:

before.tsts
/// to-function
const greet = async (name: string): Promise<void> => {
  console.log(`Hello, ${name}`)
}

eslint --fix 실행 후:

after.tsts
async function greet(name: string): Promise<void> {
  console.log(`Hello, ${name}`)
}

트리거 주석은 일회성으로, 변환과 함께 제거됩니다.

플러그인 이름 변경

@pleaseai/eslint-config는 더 짧고 일관된 DX를 위해 @antfu/eslint-config의 플러그인 이름 변경을 상속받습니다:

새 prefix 원본 prefix 소스 플러그인
import/* import-lite/* eslint-plugin-import-lite
node/* n/* eslint-plugin-n
yaml/* yml/* eslint-plugin-yml
ts/* @typescript-eslint/* @typescript-eslint/eslint-plugin
style/* @stylistic/* @stylistic/eslint-plugin
test/* vitest/* @vitest/eslint-plugin

따라서 규칙을 오버라이드할 때는 새 prefix를 사용하세요:

eslint.config.tsts
import pleaseai from '@pleaseai/eslint-config'

export default pleaseai({
  rules: {
    'ts/consistent-type-definitions': ['error', 'interface'],
    'style/max-statements-per-line': ['error', { max: 2 }],
  },
})

활성화된 규칙 보기

@eslint/config-inspector를 사용하면 완전히 해결된 설정을 브라우저에서 시각화할 수 있습니다 — 활성화된 모든 규칙, 모든 플러그인, 모든 파일 glob까지:

Terminalbash
npx @eslint/config-inspector

로컬 서버가 열리면서 flat config 그래프를 보여줍니다. “왜 이 규칙이 적용되는가” 또는 “어떤 프리셋이 이것을 추가했는가”를 디버깅할 때 없어서는 안 될 도구입니다.

Re-exports

@antfu/eslint-config의 모든 export가 재export 되므로, pleaseai() 팩토리를 사용하지 않고 직접 세부 설정을 import해서 조합할 수도 있습니다:

eslint.config.tsts
import { combine, javascript, typescript, vue } from '@pleaseai/eslint-config'

export default combine(
  javascript(),
  typescript(),
  vue(),
)

버전 정책

@pleaseai/eslint-config는 Semantic Versioning을 따르지만, 여러 가지가 얽힌 스타일 프리셋이기 때문에 규칙 변경은 breaking change로 취급하지 않습니다.

Breaking (major 버전 업)

  • Node.js 버전 요구사항 변경
  • 다운스트림 설정을 깨뜨릴 수 있는 대규모 리팩터
  • 기존 규칙을 깨뜨릴 수 있는 주요 플러그인 업그레이드
  • 대부분의 코드베이스에 영향을 미칠 가능성이 높은 변경

Non-breaking (minor/patch)

  • 개별 규칙 활성화 또는 비활성화 (엄격해지더라도)
  • 규칙 옵션 변경
  • 의존성 버전 업데이트

규칙 강화로 빌드가 깨진다면 이전 minor 버전으로 고정하고, 트레이드오프를 논의할 수 있도록 이슈를 열어 주세요.

Navigation

검색어를 입력하세요…

↑↓ 이동↵ 선택Esc 닫기