Um manual para a aplicação do guia de estilo RN/Expo - ESLint, Prettier, TypeScript, revisão de PR e CODEOWNERS configurados para que os padrões sobrevivam à rotatividade sem um xerife de estilo em cada thread.
Cartão de receita de referência rápida - pronto para copiar e colar.
// package.json - os quatro scripts que cada portão chama{ "scripts": { "lint": "expo lint", "lint:ci": "expo lint -- --max-warnings 0", "typecheck": "tsc --noEmit", "format:check": "prettier --check .", "test": "jest" }}
# Pre-push local (sequência idêntica à CI)npm run format:check && npm run lint:ci && npm run typecheck && npm run test
Pilha de aplicação Prettier → formatação (aspas, vírgulas, ordem de importação) ESLint → padrões RN/React, hooks, importações restritas TypeScript → tipos rigorosos - sem `any` implícito em src/ Template de PR → portões humanos que ESLint não pode cobrir CODEOWNERS → caminhos de configuração de toque nativo e liberação
Quando usar isto:
O tamanho da equipe ultrapassou dois engenheiros e os PRs debatem formatação semanalmente.
Integração de novos contratados de React web que importam hábitos de div para RN.
Passo 5 - Fluxo de trabalho de qualidade do GitHub Actions
# .github/workflows/quality.ymlname: Quality Gateson: pull_request: branches: [main]jobs: quality: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: npm - run: npm ci - run: npm run format:check - run: npm run lint:ci - run: npm run typecheck - run: npm run test -- --ci
Proteção de branch requer verificação quality - lint vermelho não pode mesclar
Monorepo: turbo run lint typecheck test distribui entre pacotes
Passo 6 - Portões humanos do template de PR
## Estilo e padrões- [ ] Importações usam apenas barris de recursos (`@/features/<nome>`)- [ ] Sem novo `any` sem `// eslint-disable-next-line` + comentário de ticket- [ ] Listas usam FlashList/FlatList - sem ScrollView para feeds dinâmicos- [ ] Arquivos de toque nativo: diff de pré-compilação anexado (se aplicável)## Evidências- [ ] Testado em iOS - build_id ou screenshot- [ ] Testado em Android - build_id ou screenshot
import { useState } from "react";import { View, Text } from "react-native";import { useRouter } from "expo-router";import { Button } from "@/shared/ui";import { useOrders } from "@/features/orders";import { styles } from "./styles";
Escolha um. Este manual usa Prettier + @ianvs/prettier-plugin-sort-imports. Não ative também as regras de ordem do eslint-plugin-import - elas entram em conflito a cada salvamento.
Avisos na CI - falhar ou permitir?
Falhar em main e release/* com --max-warnings 0. Branches de recursos podem tolerar avisos durante sprints de migração - mas o portão de mesclagem é zero avisos.
Como os guias de estilo se relacionam com expo-rules?
expo-rules são inegociáveis de produto/arquitetura (segredos, OTA, navegação). Guias de estilo são higiene de código. Ambos aparecem no template de PR; violações de expo-rules são sempre bloqueadores.