Agent skill
code-style-enforcer
Analyzes code for style consistency and applies project-specific formatting conventions beyond what linters catch. Use when reviewing code, ensuring style consistency, or when user requests code style improvements.
Install this agent skill to your Project
npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/crazydubya/code-style-enforcer
SKILL.md
Code Style Enforcer
This skill ensures code follows project-specific style conventions and patterns that automated linters may miss.
When to Use This Skill
- User requests code style review or improvements
- Ensuring consistency across the codebase
- Onboarding new code or contributors
- Pre-commit code review
- User mentions "style", "consistency", "formatting", or "conventions"
Instructions
1. Detect Project Style Guides
Look for style configuration files:
JavaScript/TypeScript:
.eslintrc.*- ESLint configuration.prettierrc.*- Prettier configurationtsconfig.json- TypeScript compiler options.editorconfig- Editor configuration
Python:
.pylintrc,pylint.cfg- Pylintpyproject.toml- Black, isort configuration.flake8- Flake8 configurationsetup.cfg- Various tool configs
Ruby:
.rubocop.yml- RuboCop configuration
Go:
go.fmtenforced (standard).golangci.yml- GolangCI-Lint
Java:
checkstyle.xml- Checkstyle.editorconfig
General:
CONTRIBUTING.md- Contribution guidelinesSTYLE_GUIDE.md- Project style guide.editorconfig- Cross-editor settings
Use Glob to find these files and Read to understand the project's style preferences.
2. Analyze Existing Code Patterns
Sample existing code to understand implicit conventions:
File organization:
- Directory structure patterns
- File naming conventions (camelCase, kebab-case, snake_case)
- Import/export organization
Code structure:
- Class/function ordering
- Public vs private method placement
- Constant/variable declaration location
Formatting:
- Indentation (spaces vs tabs, size)
- Line length limits
- Blank line usage
- Comment styles
Naming:
- Variable naming (camelCase, snake_case)
- Class naming (PascalCase, capitalization)
- Constant naming (UPPER_CASE, etc.)
- File naming patterns
Use Grep to find common patterns across similar files.
3. Beyond Linters: Check for Patterns
Focus on style issues that automated tools often miss:
Naming Consistency:
- Boolean variables:
is,has,shouldprefixes - Event handlers:
handle*,on*patterns - Getters/setters:
get*,set*consistency - Collection naming: plural vs singular
- Acronyms: consistent capitalization
Code Organization:
- Related functions grouped together
- Consistent file structure across modules
- Logical ordering (public before private, etc.)
- Separation of concerns
Comments and Documentation:
- JSDoc/docstring completeness
- Comment style consistency
- TODO/FIXME format
- Inline vs block comments
Import/Export Patterns:
- Import ordering (external, internal, relative)
- Named vs default exports
- Destructuring consistency
- Aliasing patterns
Error Handling:
- Consistent error message format
- Error class usage
- Try/catch patterns
- Logging format
Type Usage (TypeScript/typed languages):
- Explicit vs inferred types
interfacevstypepreference- Generic naming (T, K, V vs descriptive)
- Null/undefined handling
4. Identify Common Anti-Patterns
Flag code smells and anti-patterns:
Magic Numbers:
// Bad
if (status === 200) { }
// Good
const HTTP_OK = 200;
if (status === HTTP_OK) { }
Inconsistent null checks:
// Inconsistent
if (user === null) { }
if (!data) { }
if (typeof result === 'undefined') { }
// Consistent
if (user === null) { }
if (data === null) { }
if (result === undefined) { }
Nested ternaries:
// Hard to read
const value = a ? b ? c : d : e;
// Better
let value;
if (a) {
value = b ? c : d;
} else {
value = e;
}
Long parameter lists:
# Hard to maintain
def create_user(name, email, age, address, phone, ...):
# Better
def create_user(user_data: UserData):
5. Check Project-Specific Conventions
Look for patterns unique to this project:
- Custom naming for specific domains (e.g., "repo" vs "repository")
- Preferred libraries for common tasks
- Architectural patterns (MVC, service layer, etc.)
- Test file naming and structure
- Configuration patterns
Read CONTRIBUTING.md, README.md, or similar docs for explicit guidelines.
6. Generate Style Recommendations
For each issue, provide:
Current code:
function getData(id) {
const d = fetch('/api/users/' + id);
return d;
}
Issue:
- Inconsistent naming (
getDatavs other functions usefetch*) - Single-letter variable name (
d) - String concatenation instead of template literals
Recommended:
function fetchUser(id) {
const userData = fetch(`/api/users/${id}`);
return userData;
}
7. Prioritize Issues
Order by impact:
High Priority (Consistency):
- Naming inconsistencies across similar functions
- Mixed indentation or formatting
- Inconsistent error handling
Medium Priority (Readability):
- Magic numbers/strings
- Unclear variable names
- Missing documentation
Low Priority (Nice-to-have):
- Comment formatting
- Import ordering
- Extra blank lines
8. Suggest Automated Tools
Recommend tools to enforce styles:
JavaScript/TypeScript:
npm install --save-dev prettier eslint
npx prettier --write .
npx eslint --fix .
Python:
pip install black isort flake8
black .
isort .
Go:
go fmt ./...
golangci-lint run
Ruby:
gem install rubocop
rubocop -a
9. Create or Update EditorConfig
Suggest .editorconfig if missing:
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{js,ts,jsx,tsx}]
indent_style = space
indent_size = 2
[*.py]
indent_style = space
indent_size = 4
[*.go]
indent_style = tab
10. Style Review Checklist
When reviewing code for style:
- Naming follows project conventions
- Indentation and formatting consistent
- Imports organized properly
- Comments where needed, not excessive
- No magic numbers or strings
- Error handling consistent
- File organization matches project structure
- No obvious code smells
- Type annotations consistent (if applicable)
- Tests follow testing conventions
Best Practices
- Consistency over perfection: Follow existing patterns even if not ideal
- Document decisions: Add style guides for ambiguous cases
- Automate where possible: Use Prettier, Black, gofmt, etc.
- Be pragmatic: Don't refactor working code just for style
- Team agreement: Align on styles that matter
- Incremental improvement: Fix styles in touched files, not all at once
- Readability first: Style serves readability, not vice versa
Common Style Conflicts
Tabs vs Spaces
- Check
.editorconfigor existing files - When in doubt, use project majority
Quote Style (Single vs Double)
- JavaScript: Single (
') common - Python: Either, be consistent
- Go: Always double (
") - Follow linter config if present
Semicolons (JavaScript)
- Check existing code majority
- If mixed, suggest Prettier to enforce
Line Length
- Common limits: 80, 100, 120 characters
- Check linter config or
.editorconfig
Import Ordering
- Usually: stdlib, external, internal, relative
- Use automated tools (isort, organize imports)
Supporting Files
reference/style-guides.md: Links to popular style guidesexamples/before-after.md: Code examples showing improvements
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
perigon-backend
Perigon ASP.NET Core + EF Core + Aspire conventions
perigon-agent
Pointers for Copilot/agents to apply Perigon conventions
perigon-angular
Angular 21+ standalone/Material/signal conventions for Perigon WebApp
fastapi-mastery
Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.
context7-efficient
Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.
browser-use
Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.
Didn't find tool you were looking for?