3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-04-12 02:37:49 +00:00
Files
snipe-it/.github/copilot-instructions.md
2026-03-12 15:56:37 -07:00

5.2 KiB

GitHub Copilot Custom Instructions for Snipe-IT

These instructions guide Copilot to generate code that aligns with modern Laravel 11 standards, PHP 8.2/8.4 features, software engineering principles, and industry best practices to improve software quality, maintainability, and security.

General Coding Standards

  • Prefer short, expressive, and readable code.
  • Use meaningful, descriptive variable, function, class, and file names.
  • Apply proper PHPDoc blocks for classes, methods, and complex logic.
  • Organize code into small, reusable functions or classes with single responsibility.
  • Avoid magic numbers or hard-coded strings; use constants or config files.

PHP 8.2/8.4 Best Practices

  • Use readonly properties to enforce immutability where applicable.
  • Use Enums instead of string or integer constants.
  • Utilize First-class callable syntax for callbacks.
  • Leverage Constructor Property Promotion.
  • Use Union Types, Intersection Types, and true/false return types for strict typing.
  • Apply Static Return Type where needed.
  • Use the Nullsafe Operator (?->) for optional chaining.
  • Adopt final classes where extension is not intended.
  • Use Named Arguments for improved clarity when calling functions with multiple parameters.

Laravel 11 Project Structure & Conventions

  • Follow the official Laravel project structure:

    • app/Http/Controllers - Controllers
    • app/Models - Eloquent models
    • app/Http/Requests - Form request validation
    • app/Http/Resources - API resource responses
    • app/Enums - Enums
    • app/Actions - Single-responsibility action classes
    • app/Policies - Authorization logic
  • Controllers must:

    • Use dependency injection.
    • Use Form Requests for validation. The request class should utilize the rules set on the model.
    • Return typed responses (e.g., JsonResponse).
    • Use Transformers for API responses.

Eloquent ORM & Database

  • Use Eloquent Models with proper $fillable or $guarded attributes for mass assignment protection.
  • Utilize casts for date, boolean, JSON, and custom data types.
  • Apply accessors & mutators for attribute transformation.
  • Avoid direct raw SQL unless absolutely necessary; prefer Eloquent or Query Builder.
  • Migrations:
    • Always use migrations for schema changes.
    • Include proper constraints (foreign keys, unique indexes, etc.).
    • Prefer UUIDs or ULIDs as primary keys where applicable.

API Development

  • Use Transformer classes for consistent and structured JSON responses.
  • Apply route model binding where possible.
  • Use Form Requests for input validation.

Blade & Frontend (if applicable)

  • Keep Blade templates clean and logic-free; use View Composers or dedicated View Models for complex data.
  • Use @props, @aware, @once Blade features appropriately.
  • Utilize Alpine.js or Livewire for interactive frontend logic (optional).

Security Best Practices

  • Never trust user input; always validate and sanitize inputs.
  • Use prepared statements via Eloquent or Query Builder to prevent SQL injection.
  • Use Laravel's built-in CSRF, XSS, and validation mechanisms.
  • Store sensitive information in .env, never hard-code secrets.
  • Apply proper authorization checks using Policies or Gates.
  • Follow principle of least privilege for users, roles, and permissions.

Testing Standards

  • Use factories for test data setup.
  • Include feature tests for user-facing functionality.
  • Include unit tests for business logic, services, and helper classes.
  • Mock external services using Laravel's Http::fake() or equivalent.
  • Maintain high code coverage but focus on meaningful tests over 100% coverage obsession.

Software Quality & Maintainability

  • Follow SOLID Principles:

    • Single Responsibility Principle (SRP)
    • Open/Closed Principle (OCP)
    • Liskov Substitution Principle (LSP)
    • Interface Segregation Principle (ISP)
    • Dependency Inversion Principle (DIP)
  • Follow DRY (Don't Repeat Yourself) and KISS (Keep It Simple, Stupid) principles.

  • Apply YAGNI (You Aren't Gonna Need It) to avoid overengineering.

  • Document complex logic with PHPDoc and inline comments.

Performance & Optimization

  • Eager load relationships to avoid N+1 queries.
  • Use caching with Laravel's Cache system for frequently accessed data.
  • Paginate large datasets using paginate() instead of get().
  • Queue long-running tasks using Laravel Queues.
  • Optimize database indexes for common queries.

Modern Laravel Features to Use

  • Use Event Broadcasting if real-time updates are needed.
  • Use Full-text search if search functionality is required.
  • Use Rate Limiting for API routes.

Additional Copilot Behavior Preferences

  • Generate strictly typed, modern PHP code using latest language features.
  • Prioritize readable, clean, maintainable code over cleverness.
  • Avoid legacy or deprecated Laravel patterns (facade overuse, logic-heavy views, etc.).
  • Suggest proper class placement based on Laravel directory structure.
  • Suggest tests alongside new features where applicable.
  • Default to immutability, dependency injection, and encapsulation best practices. No newline at end of file