Skip to content

Commit 1b0b6cc

Browse files
Seungwoo321claude
andcommitted
fix: ESLint 및 TypeScript 오류 수정
- ESLint 9.27.0 flat config 구조 수정 - RendererDefinition 타입 정의 간소화 (unused properties 제거) - Vue 모듈 타입 선언 추가 (src/env.d.ts) - AI 사용 지침 문서 추가 (승인 우선 접근 방식) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 2dbc0e9 commit 1b0b6cc

File tree

4 files changed

+248
-10
lines changed

4 files changed

+248
-10
lines changed

AI_USAGE_GUIDELINES.md

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
# AI 사용 지침 (AI Usage Guidelines)
2+
3+
## 목적
4+
이 문서는 Cursor Editor 및 Claude Code에서 AI를 활용한 코드 작업 시 따라야 할 지침을 정의합니다.
5+
6+
## 핵심 원칙
7+
8+
### 1. 코드 변경 전 승인 필수
9+
코드 변경이 필요한 경우, 반드시 다음 프로세스를 따릅니다:
10+
11+
1. **현재 상황 분석**
12+
- 문제점을 명확히 파악
13+
- 관련 코드 및 사용처 확인
14+
- 영향 범위 분석
15+
16+
2. **제안 사항 제시**
17+
- 변경이 필요한 이유를 명확한 근거와 함께 설명
18+
- 여러 해결 방안이 있다면 각각의 장단점 제시
19+
- 권장하는 방향 제안
20+
21+
3. **승인 대기**
22+
- 사용자의 명시적 승인을 받은 후 진행
23+
- 승인 없이 임의로 코드 변경 금지
24+
25+
## 실제 사례 예시
26+
27+
### 사례 1: ESLint 설정 오류 해결
28+
29+
#### 1) 문제 발견
30+
```bash
31+
> pnpm lint
32+
ConfigError: Config "UserConfig[0][2] > typescript-eslint/base": Key "plugins": Cannot redefine plugin "@typescript-eslint".
33+
```
34+
35+
#### 2) 분석 및 보고
36+
```markdown
37+
문제를 발견했습니다. `@typescript-eslint` 플러그인이 중복 정의되었습니다.
38+
39+
**문제 분석:**
40+
- tseslint를 플러그인으로 잘못 사용하고 있습니다.
41+
- ESLint 9.27.0의 플랫 설정 구조에 맞지 않습니다.
42+
43+
수정하겠습니다.
44+
```
45+
46+
#### 3) 실제 수정
47+
```javascript
48+
// Before
49+
plugins: {
50+
'vue': pluginVue,
51+
'@typescript-eslint': tseslint // 잘못된 사용
52+
}
53+
54+
// After - 플러그인 제거하고 configs로 사용
55+
...tseslint.configs.recommended,
56+
```
57+
58+
### 사례 2: TypeScript 타입 오류 해결
59+
60+
#### 1) 문제 발견
61+
```typescript
62+
// 빌드 오류
63+
Type 'undefined' is not assignable to type '(props: any) => () => VNode'.
64+
```
65+
66+
#### 2) 분석 및 보고
67+
```markdown
68+
**문제 분석:**
69+
- `RendererDefinition`의 `setup` 속성이 optional(`?`)인데, 일부 컴포넌트에서는 required로 기대하고 있습니다.
70+
- 하위 패키지들이 `vue-pivottable`의 타입을 찾지 못하고 있습니다.
71+
72+
**제안 사항:**
73+
1. `RendererDefinition`의 `setup`을 required로 변경하거나
74+
2. 사용하는 곳에서 optional로 처리하도록 수정
75+
76+
어떤 방향으로 진행할까요? 기존 코드의 의도를 확인하고 싶습니다.
77+
```
78+
79+
#### 3) 사용자 응답 후 진행
80+
> "2번으로 변경 후 다른 변경사항이 있는 경우에는 동일하게 보고하고 컨펌받고 진행해야됩니다."
81+
82+
```markdown
83+
네, 2번 방향으로 진행하겠습니다.
84+
[코드 수정 진행]
85+
```
86+
87+
### 사례 3: 타입 정의 개선
88+
89+
#### 1) 코드 분석
90+
```typescript
91+
// 실제 사용처 확인
92+
grep -n "\.renderer[^s]" src/components/pivottable/VPivottable.vue
93+
// 결과: 사용하지 않음
94+
95+
grep -B2 -A2 "\.value" src/components/pivottable/renderer/index.ts
96+
// 결과: 사용하지 않음
97+
```
98+
99+
#### 2) 보고 및 제안
100+
```markdown
101+
**현재 상황:**
102+
- 실제 렌더러 정의: `name`과 `setup`만 사용
103+
- `renderer`: 사용 안 함
104+
- `value`: 사용 안 함
105+
- `props`: optional로 사용 가능
106+
107+
**제안:**
108+
```typescript
109+
export interface RendererDefinition {
110+
name: string
111+
props?: Record<string, any>
112+
setup: (props: any) => () => VNode
113+
}
114+
```
115+
116+
이렇게 단순화하는 것이 맞을까요?
117+
```
118+
119+
#### 3) 승인 후 수정
120+
> "네 맞습니다. 제안대로 적용하고..."
121+
122+
### 사례 4: 빌드 오류 대응
123+
124+
#### 1) 테스트 실행
125+
```bash
126+
pnpm lint
127+
pnpm typecheck
128+
pnpm build:all
129+
```
130+
131+
#### 2) 오류 발생 시 보고
132+
```markdown
133+
ESLint 오류가 발생했습니다. release-packages-beta.js 파일을 ES modules로 변환해야 합니다.
134+
135+
**오류 내용:**
136+
```
137+
3:22 error A `require()` style import is forbidden
138+
```
139+
140+
**원인:**
141+
현재 프로젝트가 ES modules를 사용하는데 CommonJS 구문을 사용
142+
143+
**해결 방안:**
144+
require → import 구문으로 변환
145+
```
146+
147+
### 사례 5: 하위 패키지 타입 이슈
148+
149+
#### 1) 상황 파악
150+
```markdown
151+
**문제 분석:**
152+
1. `RendererDefinition`에서 `setup`은 필수, `props`는 optional이 맞음
153+
2. 하위 패키지들은 아직 TypeScript 전환이 완료되지 않음
154+
3. 빌드는 성공하지만 타입 체크에서 경고가 발생
155+
156+
**제안 사항:**
157+
158+
### 1. 메인 패키지의 타입 수정
159+
[타입 정의 코드]
160+
161+
### 2. 하위 패키지 타입 체크 무시
162+
- 각 하위 패키지의 `tsconfig.json`에 `"skipLibCheck": true` 추가
163+
- 또는 하위 패키지의 import 부분에 `// @ts-ignore` 추가
164+
- 빌드 스크립트에서 타입 체크 제외
165+
166+
### 3. 워크플로우 수정
167+
- PR 체크 시 하위 패키지의 타입 체크를 건너뛰도록 설정
168+
169+
어떤 방향이 좋을까요? 하위 패키지는 추후 타입 전환 시까지 타입 체크를 무시하는 것이 현실적일 것 같습니다.
170+
```
171+
172+
## 주요 지침
173+
174+
### 1. 점진적 접근
175+
- 한 번에 하나의 문제만 해결
176+
- 각 단계마다 테스트 수행
177+
- 결과 보고 후 다음 단계 진행
178+
179+
### 2. 명확한 근거 제시
180+
```markdown
181+
// 좋은 예시
182+
"RendererDefinition에서 renderer 속성이 실제로 사용되는 곳이 없습니다.
183+
grep 검색 결과: [검색 결과 첨부]
184+
따라서 제거를 제안합니다."
185+
186+
// 나쁜 예시
187+
"이 속성은 필요 없어 보입니다."
188+
```
189+
190+
### 3. 사용자 의도 확인
191+
```markdown
192+
"기존 코드의 의도를 확인하고 싶습니다."
193+
"어떤 방향으로 진행할까요?"
194+
"이렇게 수정하는 것이 맞을까요?"
195+
```
196+
197+
### 4. 테스트 결과 공유
198+
```bash
199+
# 항상 다음 명령어로 검증
200+
pnpm lint # ESLint 검사
201+
pnpm typecheck # TypeScript 타입 체크
202+
pnpm build:all # 전체 빌드
203+
```
204+
205+
## 금지 사항
206+
207+
1. **무단 코드 변경**
208+
- 승인 없이 코드 수정 금지
209+
- "수정하겠습니다" 후 바로 수정 X
210+
211+
2. **의존성 다운그레이드**
212+
- 특정 버전의 의존성(예: ESLint 9.27.0)은 프로젝트 호환성을 위해 반드시 유지
213+
- 버전 변경이 필요한 경우 충분한 검토와 승인 필요
214+
215+
3. **추측성 변경**
216+
- 사용처 확인 없이 "아마도", "보통은" 등으로 변경 금지
217+
- 명확한 근거 기반으로만 수정
218+
219+
## 커뮤니케이션 원칙
220+
221+
1. **간결하고 명확하게**
222+
- 불필요한 설명 최소화
223+
- 핵심만 전달
224+
225+
2. **단계별 보고**
226+
```markdown
227+
1. 문제 발견
228+
2. 원인 분석
229+
3. 해결 방안 제시
230+
4. 승인 요청
231+
5. 실행 및 결과 보고
232+
```
233+
234+
3. **오류 시 즉시 보고**
235+
- 예상치 못한 오류 발생 시 즉시 중단
236+
- 오류 내용과 원인 분석 제시
237+
- 해결 방안 제안 후 승인 대기
238+
239+
이 지침은 효율적이고 안전한 AI 활용 코드 작업을 위한 것입니다.

src/components/pivottable-ui/VRendererCell.vue

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,13 @@
1616
<script setup lang="ts">
1717
import { computed, useSlots } from 'vue'
1818
import VDropdown from './VDropdown.vue'
19-
import type { VNode } from 'vue'
19+
import type { RendererDefinition } from '@/types'
2020
2121
const slots = useSlots()
2222
const rendererOptions = computed<string[]>(() =>
2323
Object.keys(props.rendererItems)
2424
)
2525
26-
interface RendererDefinition {
27-
name: string
28-
props?: Record<string, any>
29-
setup: (props: any) => () => VNode
30-
}
31-
3226
interface RendererCellProps {
3327
rendererName: string
3428
rendererItems: Record<string, RendererDefinition>

src/env.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference types="vite/client" />
2+
3+
declare module '*.vue' {
4+
import type { DefineComponent } from 'vue'
5+
const component: DefineComponent<object, object, any>
6+
export default component
7+
}

src/types/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ export type RecordFunctionType = () => object
66

77
export interface RendererDefinition {
88
name: string
9-
renderer?: any
10-
value?: string | RecordFunctionType
119
props?: Record<string, any>
12-
setup?: (props: any) => () => VNode
10+
setup: (props: any) => () => VNode
1311
}
1412

1513
export interface DefaultPropsType {

0 commit comments

Comments
 (0)