rust-code-review

Danh sách kiểm tra và khung quyết định đánh giá mã Rust cho các PR Rust, dựa trên 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.

Thêm skills từ apollographql

apollo-federation
apollographql
Apollo Federation cho phép kết hợp nhiều API GraphQL (subgraph) thành một siêu đồ thị thống nhất.
apollo-ios
apollographql
Apollo iOS là một trình khách GraphQL có kiểu mạnh dành cho các nền tảng Apple. Nó tạo ra các kiểu Swift từ các thao tác và lược đồ GraphQL của bạn, đồng thời cung cấp một trình khách async/await, bộ nhớ đệm chuẩn hóa (trong bộ nhớ hoặc dùng SQLite), một lớp truyền tải HTTP dựa trên interceptor có thể cắm thêm để xử lý các truy vấn, biến đổi và đăng ký đa phần, cùng với một lớp truyền tải WebSocket tùy chọn (graphql-transport-ws) có thể mang bất kỳ loại thao tác nào.
apollo-router
apollographql
Apollo Router là một bộ định tuyến đồ thị hiệu suất cao được viết bằng Rust để chạy các siêu đồ thị Apollo Federation 2. Nó nằm phía trước các đồ thị con của bạn và xử lý việc lập kế hoạch truy vấn, thực thi và tổng hợp phản hồi.
apollo-router-plugin-creator
apollographql
Tạo plugin Rust gốc cho Apollo Router.
apollo-server
apollographql
Hướng dẫn hoàn chỉnh để xây dựng máy chủ GraphQL với Apollo Server 5.x trên nhiều framework. Bao gồm định nghĩa schema, resolver, thiết lập context và xử lý lỗi với hỗ trợ TypeScript. Hỗ trợ chế độ standalone để tạo nguyên mẫu và tích hợp với Express, Fastify, Koa cùng môi trường serverless. Bao gồm các mẫu resolver, xác thực/phân quyền, plugin, DataLoader để ngăn chặn N+1 và các kỹ thuật tối ưu hiệu suất. Cung cấp tài liệu tham khảo cho nguồn dữ liệu, lỗi...
graphql-operations
apollographql
Hướng dẫn thực hành tốt nhất để viết các thao tác GraphQL hiệu quả, an toàn về kiểu và tổ chức chúng với các fragment. Bao gồm queries, mutations, subscriptions và fragments với quy ước đặt tên, cú pháp biến và cách sử dụng chỉ thị. Nhấn mạnh các nguyên tắc cốt lõi: chỉ yêu cầu các trường cần thiết, đặt tên cho tất cả các thao tác, sử dụng biến thay vì giá trị cứng, và bao gồm các trường id để có thể lưu vào bộ nhớ đệm. Khuyến nghị đặt fragment cùng với component và sử dụng các chỉ thị @include / @skip cho các trường có điều kiện...
graphql-schema
apollographql
Hướng dẫn thực tiễn tốt nhất trong ngành để thiết kế lược đồ GraphQL trực quan, hiệu suất cao và dễ bảo trì. Bao gồm các nguyên tắc thiết kế cốt lõi như tổ chức kiểu dữ liệu tập trung vào máy khách, các mẫu nullability rõ ràng và chiến lược phát triển tương thích ngược. Cung cấp tài liệu tham khảo về các kiểu dữ liệu, quy ước đặt tên, phân trang dựa trên con trỏ, mô hình hóa lỗi và các cân nhắc bảo mật. Bao gồm các mẫu thực tế cho interfaces, unions, input types, mutations và chiến lược ID kèm ví dụ mã...
rover
apollographql
CLI Apollo Rover để quản lý schema GraphQL, federation và phát triển supergraph cục bộ. Xuất bản, tải và xác thực schema subgraph; soạn supergraph liên kết cục bộ hoặc qua GraphOS. Bao gồm kiểm tra schema (xác thực trước khi triển khai), linting và introspection từ các máy chủ đang chạy. Lệnh rover dev khởi động Router cục bộ với tính năng soạn schema tự động cho quy trình phát triển. Hỗ trợ các mẫu CI/CD với xác thực trước khi xuất bản và đầu ra JSON cho việc viết script. Yêu cầu...