make test/unit
make test/mutationtest/mutation downloads infection.phar lazily into var/ and runs against
the same source + test set. The PHAR distribution sidesteps the
thecodingmachine/safe / psr/log conflicts that prevent a composer-installed
Infection from coexisting with phpactor/language-server. Curated
equivalent-mutation ignores live in infection.json5 with per-mutator ignore
rules and inline rationale.
PHP-semantic GTD / hover / completion is backed by
phpactor/worse-reflection
and jetbrains/phpstorm-stubs.
xphp-specific paths run FIRST (template instantiation, type-args inside <...>
clauses); when those don't apply we fall through to the worse-reflection path so
behaviour on .xphp files matches PhpStorm's PHP intelligence on regular .php
files. The same PhpHoverResolver / PhpDefinitionResolver /
PhpCompletionResolver triad also drives signatureHelp, inlayHint, and
callHierarchy so all five features agree on receiver / member resolution.
For LSP-client developers wiring this server into a non-bundled editor:
textDocumentSync: 1(Full)hoverProvider,definitionProvider,typeDefinitionProvider,referencesProvider,implementationProviderdocumentHighlightProvider,documentSymbolProvider,workspaceSymbolProviderrenameProviderfoldingRangeProvidercompletionProviderwithtriggerCharacters: ["<", ",", ">", ":"]andresolveProvider: truesignatureHelpProviderwithtriggerCharacters: ["(", ","]inlayHintProvidercodeActionProviderwithresolveProvider: truecodeLensProviderwithresolveProvider: trueexecuteCommandProvideradvertisingxphp.showReferences(the "Show references" CodeLens command) -- advertised by default so PhpStorm renders the lens as clickable; suppressed when the client sendsinitializationOptions: {advertiseCodeLensCommand: false}(VS Code does, to avoid its forwarder shadowing the client handler)callHierarchyProvider,typeHierarchyProvidersemanticTokensProvider(full file; standard LSP-spec token legend includingtypeParameter)- Pull-mode
diagnosticProvider workspace.fileOperations.willRename(LSP 3.17)workspace.didChangeWatchedFiles(dynamic registration)