opção
LarLar Skill Desenvolvimento Web coding-standards

Convenções básicas de codificação válidas para todos os projetos em relação à nomenclatura, legibilidade, imutabilidade e revisão da qualidade do código. Utilize conhecimentos detalhados de front-end ou back-end para padrões específicos de cada framework.

...Expandir tudo
55
Tempo atualizado 29 de Junho de 2026

Sobre coding-standards

coding-standards é uma habilidade de IA reutilizável focada em um fluxo de trabalho específico. nome: coding-standards

A habilidade reúne instruções, convenções e orientações específicas para tarefas, para que um agente possa executar o trabalho de forma mais consistente. Descrição: Convenções básicas de codificação válidas para todos os projetos em relação a nomenclatura, legibilidade, imutabilidade e revisão da qualidade do código. Utilize habilidades detalhadas de front-end ou back-end para padrões específicos de frameworks. Convenções básicas de codificação aplicáveis em todos os projetos. Esta habilidade é a base comum, não o manual detalhado de um framework específico.

Na prática, esta habilidade é mais adequada para usuários que precisam de execução repetível com menos etapas de configuração e menos ambiguidade. - Use `frontend-patterns` para React, estado, formulários, renderização e arquitetura de interface do usuário. - Use `backend-patterns` ou `api-design` para camadas de repositório/serviço, projeto de endpoints, validação e questões específicas do servidor. - Use `rules/common/coding-style.md` quando precisar da camada de regras reutilizáveis mais concisa, em vez de um guia completo da habilidade. - Iniciando um novo projeto ou módulo

Perguntas frequentes

Em que o ` coding-standards ` ajuda?

coding-standards ajuda os agentes a seguirem um fluxo de trabalho focado, descrito na documentação de origem, reduzindo ambiguidades e mantendo a execução alinhada com a tarefa pretendida.

Quando essa skill deve ser usada?

Use-a quando a tarefa corresponder ao fluxo de trabalho, ao domínio ou às regras operacionais descritas na documentação da skill, especialmente quando a execução consistente for importante.

Quais são as principais limitações?

A habilidade é limitada pela qualidade e pelo escopo de suas instruções de origem. Se a documentação subjacente estiver incompleta, o agente ainda pode precisar de contexto adicional ou de validação manual.

Ver no GitHub

Coding Standards & Best Practices

Baseline coding conventions applicable across projects.

This skill is the shared floor, not the detailed framework playbook.

  • Use frontend-patterns for React, state, forms, rendering, and UI architecture.
  • Use backend-patterns or api-design for repository/service layers, endpoint design, validation, and server-specific concerns.
  • Use rules/common/coding-style.md when you need the shortest reusable rule layer instead of a full skill walkthrough.

When to Activate

  • Starting a new project or module
  • Reviewing code for quality and maintainability
  • Refactoring existing code to follow conventions
  • Enforcing naming, formatting, or structural consistency
  • Setting up linting, formatting, or type-checking rules
  • Onboarding new contributors to coding conventions

Scope Boundaries

Activate this skill for:

  • descriptive naming
  • immutability defaults
  • readability, KISS, DRY, and YAGNI enforcement
  • error-handling expectations and code-smell review

Do not use this skill as the primary source for:

  • React composition, hooks, or rendering patterns
  • backend architecture, API design, or database layering
  • domain-specific framework guidance when a narrower ECC skill already exists

Code Quality Principles

1. Readability First

  • Code is read more than written
  • Clear variable and function names
  • Self-documenting code preferred over comments
  • Consistent formatting

2. KISS (Keep It Simple, Stupid)

  • Simplest solution that works
  • Avoid over-engineering
  • No premature optimization
  • Easy to understand > clever code

3. DRY (Don't Repeat Yourself)

  • Extract common logic into functions
  • Create reusable components
  • Share utilities across modules
  • Avoid copy-paste programming

4. YAGNI (You Aren't Gonna Need It)

  • Don't build features before they're needed
  • Avoid speculative generality
  • Add complexity only when required
  • Start simple, refactor when needed

TypeScript/JavaScript Standards

Variable Naming

// PASS: GOOD: Descriptive namesconst marketSearchQuery = 'election'const isUserAuthenticated = trueconst totalRevenue = 1000// FAIL: BAD: Unclear namesconst q = 'election'const flag = trueconst x = 1000

Function Naming

// PASS: GOOD: Verb-noun patternasync function fetchMarketData(marketId: string) { }function calculateSimilarity(a: number[], b: number[]) { }function isValidEmail(email: string): boolean { }// FAIL: BAD: Unclear or noun-onlyasync function market(id: string) { }function similarity(a, b) { }function email(e) { }

Immutability Pattern (CRITICAL)

// PASS: ALWAYS use spread operatorconst updatedUser = {  ...user,  name: 'New Name'}const updatedArray = [...items, newItem]// FAIL: NEVER mutate directlyuser.name = 'New Name'  // BADitems.push(newItem)     // BAD

Error Handling

// PASS: GOOD: Comprehensive error handlingasync function fetchData(url: string) {  try {    const response = await fetch(url)    if (!response.ok) {      throw new Error(`HTTP ${response.status}: ${response.statusText}`)    }    return await response.json()  } catch (error) {    console.error('Fetch failed:', error)    throw new Error('Failed to fetch data')  }}// FAIL: BAD: No error handlingasync function fetchData(url) {  const response = await fetch(url)  return response.json()}

Async/Await Best Practices

// PASS: GOOD: Parallel execution when possibleconst [users, markets, stats] = await Promise.all([  fetchUsers(),  fetchMarkets(),  fetchStats()])// FAIL: BAD: Sequential when unnecessaryconst users = await fetchUsers()const markets = await fetchMarkets()const stats = await fetchStats()

Type Safety

// PASS: GOOD: Proper typesinterface Market {  id: string  name: string  status: 'active' | 'resolved' | 'closed'  created_at: Date}function getMarket(id: string): Promise<Market> {  // Implementation}// FAIL: BAD: Using 'any'function getMarket(id: any): Promise<any> {  // Implementation}

React Best Practices

Component Structure

// PASS: GOOD: Functional component with typesinterface ButtonProps {  children: React.ReactNode  onClick: () => void  disabled?: boolean  variant?: 'primary' | 'secondary'}export function Button({  children,  onClick,  disabled = false,  variant = 'primary'}: ButtonProps) {  return (    <button      onClick={onClick}      disabled={disabled}      className={`btn btn-${variant}`}    >      {children}    </button>  )}// FAIL: BAD: No types, unclear structureexport function Button(props) {  return <button onClick={props.onClick}>{props.children}</button>}

Custom Hooks

// PASS: GOOD: Reusable custom hookexport function useDebounce<T>(value: T, delay: number): T {  const [debouncedValue, setDebouncedValue] = useState<T>(value)  useEffect(() => {    const handler = setTimeout(() => {      setDebouncedValue(value)    }, delay)    return () => clearTimeout(handler)  }, [value, delay])  return debouncedValue}// Usageconst debouncedQuery = useDebounce(searchQuery, 500)

State Management

// PASS: GOOD: Proper state updatesconst [count, setCount] = useState(0)// Functional update for state based on previous statesetCount(prev => prev + 1)// FAIL: BAD: Direct state referencesetCount(count + 1)  // Can be stale in async scenarios

Conditional Rendering

// PASS: GOOD: Clear conditional rendering{isLoading && <Spinner />}{error && <ErrorMessage error={error} />}{data && <DataDisplay data={data} />}// FAIL: BAD: Ternary hell{isLoading ? <Spinner /> : error ? <ErrorMessage error={error} /> : data ? <DataDisplay data={data} /> : null}

API Design Standards

REST API Conventions

GET    /api/markets              # List all marketsGET    /api/markets/:id          # Get specific marketPOST   /api/markets              # Create new marketPUT    /api/markets/:id          # Update market (full)PATCH  /api/markets/:id          # Update market (partial)DELETE /api/markets/:id          # Delete market# Query parameters for filteringGET /api/markets?status=active&limit=10&offset=0

Response Format

// PASS: GOOD: Consistent response structureinterface ApiResponse<T> {  success: boolean  data?: T  error?: string  meta?: {    total: number    page: number    limit: number  }}// Success responsereturn NextResponse.json({  success: true,  data: markets,  meta: { total: 100, page: 1, limit: 10 }})// Error responsereturn NextResponse.json({  success: false,  error: 'Invalid request'}, { status: 400 })

Input Validation

import { z } from 'zod'// PASS: GOOD: Schema validationconst CreateMarketSchema = z.object({  name: z.string().min(1).max(200),  description: z.string().min(1).max(2000),  endDate: z.string().datetime(),  categories: z.array(z.string()).min(1)})export async function POST(request: Request) {  const body = await request.json()  try {    const validated = CreateMarketSchema.parse(body)    // Proceed with validated data  } catch (error) {    if (error instanceof z.ZodError) {      return NextResponse.json({        success: false,        error: 'Validation failed',        details: error.errors      }, { status: 400 })    }  }}

File Organization

Project Structure

src/├── app/                    # Next.js App Router│   ├── api/               # API routes│   ├── markets/           # Market pages│   └── (auth)/           # Auth pages (route groups)├── components/            # React components│   ├── ui/               # Generic UI components│   ├── forms/            # Form components│   └── layouts/          # Layout components├── hooks/                # Custom React hooks├── lib/                  # Utilities and configs│   ├── api/             # API clients│   ├── utils/           # Helper functions│   └── constants/       # Constants├── types/                # TypeScript types└── styles/              # Global styles

File Naming

components/Button.tsx          # PascalCase for componentshooks/useAuth.ts              # camelCase with 'use' prefixlib/formatDate.ts             # camelCase for utilitiestypes/market.types.ts         # camelCase with .types suffix

Comments & Documentation

When to Comment

// PASS: GOOD: Explain WHY, not WHAT// Use exponential backoff to avoid overwhelming the API during outagesconst delay = Math.min(1000 * Math.pow(2, retryCount), 30000)// Deliberately using mutation here for performance with large arraysitems.push(newItem)// FAIL: BAD: Stating the obvious// Increment counter by 1count++// Set name to user's namename = user.name

JSDoc for Public APIs

/** * Searches markets using semantic similarity. * * @param query - Natural language search query * @param limit - Maximum number of results (default: 10) * @returns Array of markets sorted by similarity score * @throws {Error} If OpenAI API fails or Redis unavailable * * @example * ```typescript * const results = await searchMarkets('election', 5) * console.log(results[0].name) // "Trump vs Biden" * ``` */export async function searchMarkets(  query: string,  limit: number = 10): Promise<Market[]> {  // Implementation}

Performance Best Practices

Memoization

import { useMemo, useCallback } from 'react'// PASS: GOOD: Memoize expensive computations// Copy before sorting - Array.prototype.sort mutates in placeconst sortedMarkets = useMemo(() => {  return [...markets].sort((a, b) => b.volume - a.volume)}, [markets])// PASS: GOOD: Memoize callbacksconst handleSearch = useCallback((query: string) => {  setSearchQuery(query)}, [])

Lazy Loading

import { lazy, Suspense } from 'react'// PASS: GOOD: Lazy load heavy componentsconst HeavyChart = lazy(() => import('./HeavyChart'))export function Dashboard() {  return (    <Suspense fallback={<Spinner />}>      <HeavyChart />    </Suspense>  )}

Database Queries

// PASS: GOOD: Select only needed columnsconst { data } = await supabase  .from('markets')  .select('id, name, status')  .limit(10)// FAIL: BAD: Select everythingconst { data } = await supabase  .from('markets')  .select('*')

Testing Standards

Test Structure (AAA Pattern)

test('calculates similarity correctly', () => {  // Arrange  const vector1 = [1, 0, 0]  const vector2 = [0, 1, 0]  // Act  const similarity = calculateCosineSimilarity(vector1, vector2)  // Assert  expect(similarity).toBe(0)})

Test Naming

// PASS: GOOD: Descriptive test namestest('returns empty array when no markets match query', () => { })test('throws error when OpenAI API key is missing', () => { })test('falls back to substring search when Redis unavailable', () => { })// FAIL: BAD: Vague test namestest('works', () => { })test('test search', () => { })

Code Smell Detection

Watch for these anti-patterns:

1. Long Functions

// FAIL: BAD: Function > 50 linesfunction processMarketData() {  // 100 lines of code}// PASS: GOOD: Split into smaller functionsfunction processMarketData() {  const validated = validateData()  const transformed = transformData(validated)  return saveData(transformed)}

2. Deep Nesting

// FAIL: BAD: 5+ levels of nestingif (user) {  if (user.isAdmin) {    if (market) {      if (market.isActive) {        if (hasPermission) {          // Do something        }      }    }  }}// PASS: GOOD: Early returnsif (!user) returnif (!user.isAdmin) returnif (!market) returnif (!market.isActive) returnif (!hasPermission) return// Do something

3. Magic Numbers

// FAIL: BAD: Unexplained numbersif (retryCount > 3) { }setTimeout(callback, 500)// PASS: GOOD: Named constantsconst MAX_RETRIES = 3const DEBOUNCE_DELAY_MS = 500if (retryCount > MAX_RETRIES) { }setTimeout(callback, DEBOUNCE_DELAY_MS)

Remember: Code quality is not negotiable. Clear, maintainable code enables rapid development and confident refactoring.

Todos os arquivos

1 arquivos
SKILL.md 12.4k
Ver

Instalar coding-standards

Baixe e extraia os arquivos de habilidades para o diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

git clone https://github.com/affaan-m/ECC/blob/main/skills/coding-standards/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

Copiar Copiar
Configuração rápida: Copie a pasta da habilidade para .claude/skills/. O Claude detectará e utilizará automaticamente a habilidade

Habilidades relacionadas

github-code-search
Tempo atualizado 29 de Junho de 2026
drizzle-orm
Tempo atualizado 29 de Junho de 2026
clickhouse-io
Tempo atualizado 29 de Junho de 2026
prisma-client-api
Tempo atualizado 29 de Junho de 2026
OR