rust-code-review

Lista de verificación de revisión de código Rust y marco de decisión para PRs de Rust, derivado de rust-best-practices.

npx skills add https://github.com/apollographql/rust-best-practices --skill rust-code-review

Rust Code Review

Use this for Rust review work where consistency, safety, and maintainability matter.

Follow ths standards in https://github.com/apollographql/rust-best-practices

Mandatory pre-merge checks

  • Ownership and data flow are intentional.
  • Error handling is explicit and aligns with crate/binary boundaries.
  • Clippy and format quality are clean in touched files.
  • Performance changes are measured before acceptance.
  • Public APIs are documented; docs match runtime behavior.
  • Tests cover intended behavior and error paths.
  • Unsafe or raw-pointer usage is justified and constrained.

Severity matrix

  • P0: unsafe memory bug, panic in recoverable production path, silent data corruption.
  • P1: correctness bug, missing error propagation, invalid API contract.
  • P2: likely performance regression, missing public API docs, flaky tests.
  • P3: style/readability issues, avoidable clone/allocation, unnecessary complexity.

Review skills

Ownership-first coding

  • Prefer borrowing (&T, &mut T) over cloning.
  • Use Clone only when ownership is required or snapshots are explicitly needed.
  • Treat unnecessary clones (especially in loops) as likely regressions.
  • Reject clone on Copy types.

Value vs reference

  • Pass Copy/small POD types by value.
  • Pass large heap-backed or non-trivial objects by reference.
  • Surface ownership intent in function signatures.
  • Use Cow<'_, T> when input may be borrowed or owned.

Fallible control flow

  • Use let PATTERN = EXPR else { ... } for expected early exits.
  • Use if let ... else when divergence needs additional logic.
  • Prefer ? for bubbling errors.
  • Avoid unwrap/expect in production except when impossible-by-design cases are documented.

Allocation and allocation timing

  • Prefer _else APIs to avoid eager allocation (ok_or_else, map_or_else, etc.).
  • Keep iterator chains lazy; allocate only when required by terminal ops.
  • Do not collect and allocate only to throw away data.

Iterator vs loop

  • Use iterator chains for data transformation and composition.
  • Use for for early exits and side-effect-heavy or control-heavy loops.
  • Require readable formatting; avoid long unreadable chains.

Lints and static checks

  • Run and fix warnings from:
    • cargo clippy --all-targets --all-feature --locked -- -D warnings
  • Do not globally silence useful lints.
  • Prefer #[expect(clippy::...)] with rationale instead of #[allow(...)] unless fully justified.

Error discipline

  • Libraries: prefer typed errors (thiserror and #[from] conversions).
  • Binaries: anyhow acceptable, but keep context rich and actionable.
  • Test both success and error behavior.

Tests as behavior docs

  • One behavior per test.
  • One core assertion per test where possible.
  • Names should be descriptive sentence-like statements.
  • Prefer unit tests for internals, integration tests for public behavior.
  • Use snapshot tests only for complex, stable structured outputs.

Documentation and comments

  • Use //////! for API behavior and constraints.
  • Use // for why, safety rationale, platform constraints, and assumptions.
  • Remove stale comments; prefer smaller functions over narrative comments.
  • Link TODOs to issues instead of leaving bare TODO:.

Pointers and concurrency

  • Prefer &/&mut before any heap pointer.
  • Use Arc for cross-thread shared ownership; Rc for single-threaded.
  • Use Box for recursive/heap allocation needs.
  • Review raw pointer usage as unsafe boundaries with explicit invariants.

Quick rejection triggers

  • Unnecessary clones in hot paths.
  • Unjustified allow(clippy::...).
  • Silent recovery from Err that discards root cause.
  • Copying large types by value without a proof of intent.
  • Comments that simply restate what code already expresses.
  • TODOs without ownership/context.

Más skills de apollographql

apollo-federation
apollographql
Apollo Federation permite componer múltiples APIs de GraphQL (subgrafos) en un supergrafo unificado.
apollo-ios
apollographql
Apollo iOS es un cliente GraphQL fuertemente tipado para plataformas Apple. Genera tipos Swift a partir de tus operaciones y esquema GraphQL, e incluye un cliente async/await, una caché normalizada (en memoria o respaldada por SQLite), un transporte HTTP basado en interceptores conectables que maneja consultas, mutaciones y suscripciones multiparte, y un transporte WebSocket opcional (graphql-transport-ws) que puede transportar cualquier tipo de operación.
apollo-router
apollographql
Apollo Router es un enrutador de grafos de alto rendimiento escrito en Rust para ejecutar supergrafos de Apollo Federation 2. Se sitúa frente a tus subgrafos y maneja la planificación de consultas, ejecución y composición de respuestas.
apollo-router-plugin-creator
apollographql
Crea plugins nativos de Rust para Apollo Router.
apollo-server
apollographql
Guía completa para construir servidores GraphQL con Apollo Server 5.x en distintos frameworks. Cubre definición de esquemas, resolutores, configuración de contexto y manejo de errores con soporte para TypeScript. Soporta modo independiente para prototipado e integraciones con Express, Fastify, Koa y entornos serverless. Incluye patrones de resolutores, autenticación/autorización, plugins, DataLoader para prevención de N+1 y técnicas de optimización de rendimiento. Proporciona documentación de referencia para fuentes de datos, errores...
graphql-operations
apollographql
Guía de mejores prácticas para escribir operaciones GraphQL eficientes y seguras en tipos, y organizarlas con fragmentos. Cubre consultas, mutaciones, suscripciones y fragmentos con convenciones de nomenclatura, sintaxis de variables y uso de directivas. Enfatiza principios fundamentales: solicitar solo los campos necesarios, nombrar todas las operaciones, usar variables en lugar de valores fijos e incluir campos de identificación para la capacidad de caché. Recomienda colocar fragmentos junto con componentes y usar las directivas @include / @skip para campos condicionales...
graphql-schema
apollographql
Guía de mejores prácticas de la industria para diseñar esquemas GraphQL intuitivos, eficientes y mantenibles. Abarca principios fundamentales de diseño, incluyendo organización de tipos centrada en el cliente, patrones explícitos de nulabilidad y estrategias de evolución compatibles con versiones anteriores. Proporciona documentación de referencia sobre tipos, convenciones de nomenclatura, paginación basada en cursores, modelado de errores y consideraciones de seguridad. Incluye patrones prácticos para interfaces, uniones, tipos de entrada, mutaciones y estrategias de ID con ejemplos de código...
rover
apollographql
CLI de Apollo Rover para gestionar esquemas GraphQL, federación y desarrollo local de supergrafos. Publica, obtén y valida esquemas de subgrafos; compone supergrafos federados localmente o mediante GraphOS. Incluye verificación de esquemas (validación previa al despliegue), linting e introspección desde servidores en ejecución. El comando rover dev inicia un Router local con composición automática de esquemas para flujos de trabajo de desarrollo. Soporta patrones de CI/CD con validación de verificación antes de publicar y salida JSON para scripting. Requiere...