118 lines
5.2 KiB
Markdown
118 lines
5.2 KiB
Markdown
# 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
|