mirror of
https://github.com/snipe/snipe-it.git
synced 2026-04-12 02:37:49 +00:00
5.2 KiB
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- Controllersapp/Models- Eloquent modelsapp/Http/Requests- Form request validationapp/Http/Resources- API resource responsesapp/Enums- Enumsapp/Actions- Single-responsibility action classesapp/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
$fillableor$guardedattributes 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,@onceBlade 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 ofget(). - 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