← 输入框|github.com|刷新
Skip to content

Filter enum completions in one pass - #652

Merged
chr-hertel merged 1 commit into
modelcontextprotocol:mainfrom
andreybolonin:perf/enum-completion-single-pass
Nov 2, 2026
Merged

chr-hertel merged 1 commit into
modelcontextprotocol:mainfrom
andreybolonin:perf/enum-completion-single-pass

Conversation

@andreybolonin

Copy link
Copy Markdown
Contributor

Enum prefix completion currently allocates an intermediate filtered array and then reindexes it. Build the result in one pass while preserving case order and the current special handling of an empty or "0" prefix. Unit tests cover these behaviors.

Local PHP 8.5 benchmark (10,000 values, 2,000 iterations): 534.6 → 325.4 ms, with lower peak additional memory (123.3 → 36.9 KB). This measures the affected operation, not full request latency.

Validation: make ci (Composer update, PHP CS Fixer, PHPStan, PHPUnit).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No active review issues are recorded for the single-pass enum completion optimization.

No open issues 🎉

What changed in this PR

Optimizes enum prefix completion by building results in one pass, avoiding an intermediate filtered array while preserving case order and existing empty-prefix and "0" behavior.

Changes:

  • Replaces array_filter and array_values with a single loop.
  • Adds tests for match ordering, unmatched prefixes, and "0" returning all cases.
File Description
tests/​Unit/​Capability/​Completion/​EnumCompletionProviderTest.php Adds regression tests for ordering and prefix behavior.
src/​Capability/​Completion/​EnumCompletionProvider.php Builds filtered completions directly in one pass.

Review effort: Balanced

@chr-hertel
chr-hertel merged commit 371a4c8 into modelcontextprotocol:main Nov 2, 2026
28 checks passed
@chr-hertel chr-hertel added the Server Issues & PRs related to the Server component label Nov 2, 2026
chr-hertel added a commit to BrocksiNet/php-sdk that referenced this pull request Nov 4, 2026
…et/php-sdk into pr-618-end-a-listen-stream-that-can

* 'fix/listen-empty-filter' of https://github.com/BrocksiNet/php-sdk: (25 commits)
  [Server] Pass an explicit null to a nullable tool parameter with a default (modelcontextprotocol#642)
  [Capability] Check tool names against the spec's 128-character limit and character set (modelcontextprotocol#639)
  [Tests] Stop php -S servers together with their forked workers (modelcontextprotocol#658)
  chore(deps): bump astral-sh/setup-uv from 10.3.2 to 10.3.3 (modelcontextprotocol#659)
  [Server] Accept plain http on `*.localhost` and `127.0.0.0/8` hosts in OAuth URLs (modelcontextprotocol#620)
  [Capability] Map PHPDoc pseudo-types to the JSON Schema type of their base type (modelcontextprotocol#643)
  Raise minimum versions of `phpdocumentor/reflection-docblock` and `psr/container` (modelcontextprotocol#657)
  [Server] Use compact JSON in result formatters (modelcontextprotocol#647)
  [Server] Filter list completions in one pass (modelcontextprotocol#649)
  [Server] Fix result lists being sent as JSON objects (modelcontextprotocol#656)
  Avoid repeated array merges in prompt formatting (modelcontextprotocol#650)
  [Docs] Add AGENTS.md (modelcontextprotocol#634)
  Avoid repeated array merges in resource formatting (modelcontextprotocol#651)
  [Server] Fix `"0"` prefix offering all completions (modelcontextprotocol#655)
  Filter enum completions in one pass (modelcontextprotocol#652)
  Paginate registry references before mapping (modelcontextprotocol#653)
  Extract JWT scopes in one pass (modelcontextprotocol#654)
  [Server] Fix `Session::save()` wiping a session that the store failed to read (modelcontextprotocol#637)
  [Server] Answer a DELETE of an unknown or ended session with 404 (modelcontextprotocol#638)
  [Server] Add `Psr6SessionStore` and `Psr6NotificationBus` (modelcontextprotocol#635)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Server Issues & PRs related to the Server component

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants