Deslop: AI 생성 TypeScript를 위한 Oxlint 규칙
개요
Deslop은 Oxlint 생태계를 위한 특수 플러그인으로, 충분한 근거가 부족하거나, 안전하지 않은 타입 단언에 의존하거나, API 사용 방식이 부적절한 등 LLM이 생성한 코드 패턴(일명 "AI-slop")을 식별하고 거부하기 위한 독자적인 규칙 세트를 제공합니다. Deslop은 TypeScript 코드에 더 엄격한 제약을 적용함으로써, 개발자가 AI 보조 기능 개발을 통합할 때 코드베이스의 무결성을 유지하도록 돕습니다.
핵심 기능 및 규칙
Deslop은 규칙을 타입 안전성, 코드 품질, 테스트 표준이라는 세 가지 주요 영역으로 분류합니다. 이 플러그인은 anti-slop 프로젝트에서 원래 개발된 규칙을 기반으로 하며, deslop/* 네임스페이스 하에 추가적인 사용자 정의 규칙으로 확장되었습니다.
타입 안전성 및 근거
이 규칙들은 AI가 안전하지 않은 단언을 통해 TypeScript 타입 시스템을 우회하려는 일반적인 경향을 방지하도록 설계되었습니다. 주요 규칙은 다음과 같습니다:
no-chained-type-assertions: 타입 근거를 조작하는 중첩된as또는 꺾쇠 괄호 단언을 거부합니다.no-unknown-parameters및no-unknown-returns: 함수 시그니처와 반환 계약에서unknown사용을 금지하여 명시적인 타입 정의를 강제합니다.require-safety-comment-for-type-assertion: const가 아닌 단언에 대해 불변의 정당성을 요구하며, 개발자가 왜 단언이 필요한지 문서화하도록 합니다.
코드 품질 및 API 사용
지나치게 복잡하거나 관용적이지 않은 코드 생성을 방지하기 위해, Deslop은 LLM이 자주 사용하는 특정 API 패턴을 대상으로 합니다:
no-reflect-apply및no-reflect-get: Claude와 같은 모델에서 과도하게 사용되는 전역Reflect메서드 사용을 제한합니다.no-array-filter-map: 비효율적인 인접 즉시 배열 연산을 방지하고, 더 성능이 뛰어난 이터레이터 파이프라인을 장려합니다.
테스트 표준
Deslop은 AI 생성 코드에 의존할 때 매우 중요한 테스트 스위트의 신뢰성을 향상하기 위한 규칙을 포함합니다. 여기에는 다음이 포함됩니다:
no-module-mocking: 더 나은 의존성 주입을 장려하기 위해 Vitest 및 Jest 모듈 모킹 사용을 거부합니다.no-poor-substring-tests: 검증을 위해 약한 부분 문자열 일치에 의존하는 테스트를 표시합니다.
개발자 반응 및 사용 사례
Deslop 및 유사 도구의 초기 사용자들은 공격적인 린팅이 AI 보조 개발을 확장하기 위한 필수 조건임을 강조합니다. 개발자들은 이러한 가드레일 없이는 AI 참여도가 높은 코드베이스를 유지 관리하기가 매우 어렵다고 지적합니다.
"저는 최근 AI 보조 기능 개발로 크게 전환한 프로젝트에서 일하고 있는데, 매우 방어적이고 공격적인 린트 설정과 ~80%에 가까운 테스트 커버리지가 없다면 이러한 개발은 거의 불가능했을 것입니다." — @SSchick
사용자들은 또한 다양한 언어와 LLM 출력 전반에 걸쳐 코드 품질을 보장하기 위해 Oxlint를 다른 AST 기반 도구와 결합하는 것의 중요성을 강조했습니다. ast-grep-essentials와 같은 프로젝트는 AI 생성 코드를 위한 사용자 정의 검증 파이프라인을 구축하는 팀에게 보완 도구로 자주 언급됩니다.
설치 및 사용법
Deslop은 npm 패키지로 배포되며 Bun, Deno, Node.js를 포함한 모든 Oxlint JavaScript 플러그인 런타임과 호환됩니다. 이를 통합하려면 사용자는 oxlint 구성 파일에 플러그인을 추가해야 합니다:
import { defineConfig } from "oxlint";
import { configs as deslopConfigs } from "ai-deslop";
export default defineConfig({
jsPlugins: ["ai-deslop"],
options: deslopConfigs.recommended.options,
rules: deslopConfigs.recommended.rules
});
더 세밀한 제어가 필요한 팀을 위해, 이 플러그인은 특정 프로젝트 요구 사항에 따라 활성화할 수 있는 no-duplicate-types 및 Tailwind CSS v4용 canonical-class-names와 같은 선택적 규칙 세트도 제공합니다.