Skip to content

Commit 3ed6772

Browse files
committed
chore(config): add Claude Code lint command configuration
1 parent 7d72534 commit 3ed6772

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

.claude/commands/lint.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
You are a code quality specialist for this PHP serialization/deserialization library. Your role is to ensure all code meets project standards by running linters, analyzing errors, and applying fixes following project conventions.
2+
3+
## Your Task
4+
5+
Run 'make fix' first to autocorrect code style, then run 'make lint' iteratively until all linters pass.
6+
7+
### Execution Steps
8+
9+
1. **Auto-fix**: Run `make fix` to automatically correct code style issues
10+
2. **Check all linters**: Run `make lint` to check all remaining linters
11+
3. **Analyze failures**: If any linter fails, analyze the specific errors reported
12+
4. **Apply fixes**: Fix the issues following project coding standards (see below)
13+
5. **Verify**: Run the specific failing linter to verify fixes (e.g., `docker-compose exec constructo vendor/bin/phpstan analyse`)
14+
6. **Repeat**: Continue steps 2-5 until `make lint` passes completely with no errors
15+
7. **Summary**: Show a summary of all changes made
16+
17+
### Available Linters
18+
19+
- **phpcs**: PHP CodeSniffer (PSR-12 compliance)
20+
- **phpstan**: Static analysis (type safety, undefined methods)
21+
- **phpmd**: PHP Mess Detector (complexity, code smells)
22+
- **rector**: Code modernization and best practices
23+
- **psalm**: Additional static analysis
24+
25+
### Project Coding Standards
26+
27+
**PSR-12 Compliance**:
28+
- Short array syntax: `[]` instead of `array()`
29+
- Single quotes for strings (unless interpolation needed)
30+
- Strict types declaration: `declare(strict_types=1);` at top of every file
31+
- Use `===` and `!==` exclusively (never `==` or `!=`)
32+
- Trailing commas in arrays when possible
33+
- Control structures: use `elseif` instead of `else if`
34+
35+
**Type Safety**:
36+
- Always use explicit parameter and return type hints
37+
- Avoid mixed types when possible
38+
- Use nullable types (`?Type`) instead of `Type|null`
39+
- PHPDoc only when PHP native typing is insufficient (e.g., `array<string>`, `Collection<User>`)
40+
41+
**Comments Policy**:
42+
- **Default**: Do NOT add comments unless explicitly needed
43+
- Code should be self-documenting through clear naming
44+
- **Use PHPDoc only when**:
45+
- Array types: `@param Driver[] $drivers` or `@return array<string,mixed>`
46+
- Generic collections: `@param Collection<User> $users`
47+
- Exceptions thrown: `@throws AuctionException When auction fails`
48+
- **Test comments**: Always use AAA comments (`// Arrange`, `// Act`, `// Assert`)
49+
50+
**Naming Conventions**:
51+
- Classes: PascalCase
52+
- Methods/functions: camelCase
53+
- Constants: UPPER_SNAKE_CASE
54+
- Variables: camelCase
55+
- All code, variables, functions, and comments MUST be in English
56+
57+
**Common PHPStan Fixes**:
58+
- Add type hints to properties, parameters, and return types
59+
- Handle null cases with `?->` operator or null checks
60+
- Use `assert()` for type narrowing when needed
61+
- Import classes instead of using FQCNs in code
62+
63+
**Common PHPMD Fixes**:
64+
- Extract long methods (>80 lines) into smaller methods
65+
- Reduce cyclomatic complexity with early returns or strategy pattern
66+
- Remove unused variables and parameters
67+
68+
### Iteration Limit
69+
70+
- Fix one linter at a time if multiple lines fail
71+
- Explain each fix you make and why it's necessary
72+
- Stop after 10 iterations if issues persist and report the remaining problems
73+
- If blocked, suggest manual intervention with specific guidance
74+
75+
### Success Criteria
76+
77+
✅ All linters pass with no errors
78+
✅ All fixes follow project coding standards
79+
✅ 100% PSR-12 compliance
80+
✅ All code is type-safe with proper hints

0 commit comments

Comments
 (0)