Skip to content

자동 수정

Lodestar는 셋업 위반과 코드 위반 모두에 대한 자동 수정을 지원합니다. lodestar check --fix를 실행하여 사용 가능한 모든 수정을 적용하세요.

--fix 동작 방식

수정 파이프라인은 세 단계로 실행됩니다:

1단계: 셋업 수정

누락되거나 드리프트된 설정 파일(예: eslint.config.js, .prettierrc)을 생성하거나 재생성합니다. 이 단계는 어댑터 검사가 실행되기 전에 수행되어, 도구가 설정 파일을 찾을 수 있도록 합니다.

2단계: 위반 수정

fix를 제공하는 개별 위반 사항이 적용됩니다. 네이티브 규칙 위반과 어댑터 위반 모두 포함됩니다.

3단계: 어댑터 일괄 수정

일괄 수정 기능이 있는 어댑터가 마지막으로 실행됩니다. 예를 들어 ESLint 어댑터는 eslint --fix를, Prettier 어댑터는 prettier --write를 실행합니다.

어댑터별 수정 지원 현황

어댑터셋업 수정검사 수정일괄 수정
ESLint지원--지원
Prettier지원--지원
Biome지원----
Stylelint지원--지원
Husky지원----
Lint-Staged지원----
Commitlint지원----
Knip지원----

셋업 수정은 관리 대상 설정 파일을 생성합니다. 일괄 수정은 도구의 네이티브 수정 명령을 실행합니다.

수정 가능한 규칙 작성

커스텀 규칙은 보고된 위반에 fix 객체를 첨부하여 수정을 제공할 수 있습니다:

ts
import { defineRule } from '@retemper/lodestar';

const myRule = defineRule({
  name: 'my-plugin/enforce-barrel',
  description: 'Barrel 파일 export 강제',
  needs: ['fs'],
  async check(ctx) {
    const modules = await ctx.providers.fs.glob('src/*/index.ts');

    for (const dir of await ctx.providers.fs.glob('src/*/')) {
      const barrel = `${dir}index.ts`;
      const hasBarrel = modules.includes(barrel);

      if (!hasBarrel) {
        ctx.report({
          message: `Barrel 파일 누락: ${barrel}`,
          location: { file: dir },
          fix: {
            description: `빈 export로 ${barrel} 생성`,
            async apply() {
              const { writeFile } = await import('node:fs/promises');
              await writeFile(barrel, 'export {};\n', 'utf-8');
            },
          },
        });
      }
    }
  },
});

Fix 인터페이스

ts
interface Fix {
  /** 수정이 무엇을 하는지에 대한 사람이 읽을 수 있는 설명 */
  readonly description: string;
  /** 수정을 실행하여 필요에 따라 파일 시스템을 변경 */
  readonly apply: () => Promise<void>;
}

수정 작성 가이드라인

  • 정확하게: 위반과 관련된 정확한 파일과 라인만 수정하세요.
  • 멱등성 유지: 수정을 여러 번 실행해도 동일한 결과를 만들어야 합니다.
  • 수정 설명: description은 사용자에게 표시되므로 무엇이 변경되는지 이해할 수 있어야 합니다.
  • 에러 처리: 수정을 적용할 수 없는 경우(예: 읽기 전용 파일) 에러를 전파하세요 -- 엔진이 이를 캐치합니다.

드라이 런

수정을 적용하지 않고 어떤 위반이 있는지 확인하려면 --fix 플래그 없이 lodestar check를 실행하세요. 수정 가능한 위반은 출력에 수정 설명이 표시됩니다.

Released under the MIT License.