Skip to content

Conversation

@CodeWithKyrian
Copy link
Contributor

This PR significantly enhances the completion provider system by adding built-in support for simple list-based and enum-based completions, making it much easier for developers to provide auto-completion without writing custom provider classes.

What's New

Enhanced CompletionProvider Attribute

The attribute now supports three mutually exclusive parameters:

  • provider - Existing class-string or instance (backward compatible)
  • values - Array of completion values for simple lists
  • enum - Enum class-string for enum-based completions
// Simple list completion
#[CompletionProvider(values: ['draft', 'published', 'archived'])]
string $status

// Enum-based completion  
#[CompletionProvider(enum: StatusEnum::class)]
string $priority

// Custom provider (existing functionality)
#[CompletionProvider(provider: MyCustomProvider::class)]
string $category

Built-in Completion Providers

  • ListCompletionProvider - Handles array-based completions with prefix filtering
  • EnumCompletionProvider - Extracts values from string-backed, int-backed, and unit enums

- Add CompletionProvider attribute support for values array and enum class
- Create ListCompletionProvider for simple list-based completions
- Create EnumCompletionProvider for enum-based completions
- Update Discoverer and ServerBuilder to auto-create provider instances
- Enhance serialization/deserialization for provider instances
- Add comprehensive test coverage for all completion provider types
@CodeWithKyrian CodeWithKyrian force-pushed the feat/enhanced-completion-providers branch from d6b5144 to 60c38e9 Compare June 30, 2025 21:08
@CodeWithKyrian CodeWithKyrian merged commit 76b15d5 into main Jun 30, 2025
8 checks passed
@CodeWithKyrian CodeWithKyrian deleted the feat/enhanced-completion-providers branch June 30, 2025 21:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants