diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 6d9be6b71d..0000000000
--- a/.gitattributes
+++ /dev/null
@@ -1,24 +0,0 @@
-# Handle line endings automatically for files detected as text and leave all
-# files detected as binary untouched.
-* text=auto
-
-# Files and directories with the attribute export-ignore won’t be added to
-# archive files. See http://git-scm.com/docs/gitattributes for details.
-.gitattributes export-ignore
-.gitignore export-ignore
-/*.neon export-ignore
-/.github export-ignore
-/.php-cs-fixer.dist.php export-ignore
-/.readthedocs.yaml export-ignore
-/Makefile export-ignore
-/box.json export-ignore
-/doc/ export-ignore
-/docker-compose.yml export-ignore
-/docker/ export-ignore
-/flake.* export-ignore
-/lib/**/Tests/ export-ignore
-/phpbench.json export-ignore
-/phpunit.xml.dist export-ignore
-/test.php export-ignore
-/tests/ export-ignore
-/rector.php export-ignore
diff --git a/.github/.vimrc b/.github/.vimrc
deleted file mode 100644
index 982b722c36..0000000000
--- a/.github/.vimrc
+++ /dev/null
@@ -1,7 +0,0 @@
-filetype off
-let s:phpactorRootDir = expand(':p:h:h')
-let &runtimepath .= ',' . expand(s:phpactorRootDir . '/vader.vim')
-let &runtimepath .= ',' . s:phpactorRootDir
-let &runtimepath .= ',' . expand(s:phpactorRootDir . '/after')
-filetype plugin indent on
-syntax enable
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 34fbbad24b..0000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: dantleech
diff --git a/.github/build-phar.sh b/.github/build-phar.sh
deleted file mode 100755
index 92bd0cbd19..0000000000
--- a/.github/build-phar.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-composer install --no-dev
-mkdir -p build
-cd build
-
-wget -O box.phar https://github.com/box-project/box/releases/download/4.5.0/box.phar
-php box.phar compile -c ../box.json
-
-cd -
-
diff --git a/.github/phpbench_regression_test.sh b/.github/phpbench_regression_test.sh
deleted file mode 100755
index 87207a797c..0000000000
--- a/.github/phpbench_regression_test.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-RETRY_THRESHOLD=${RETRY_THRESHOLD:-5}
-
-echo -e "\n\n"
-echo -e "Benchmarking master branch"
-echo -e "==========================\n\n"
-git fetch origin master &> /dev/null
-git checkout master &> /dev/null
-mv composer.lock composer.lock.pr
-composer install --quiet
-vendor/bin/phpbench run --report=aggregate --progress=travis --retry-threshold=$RETRY_THRESHOLD --tag=master
-
-echo -e "\n\n"
-echo -e "Benchmarking GITHUB_REF and comparing to master"
-echo -e "==================================================\n\n"
-git checkout - &> /dev/null
-mv composer.lock.pr composer.lock
-composer install --quiet
-vendor/bin/phpbench run --report=aggregate --progress=travis --retry-threshold=$RETRY_THRESHOLD --ref=master
diff --git a/.github/vim-plugin-test.sh b/.github/vim-plugin-test.sh
deleted file mode 100755
index 69a1354092..0000000000
--- a/.github/vim-plugin-test.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export PHPACTOR_UNCONDITIONAL_TRUST=1
-vim -Nu .github/.vimrc -c 'Vader! tests/VimPlugin/*'
diff --git a/.github/workflows/benchmark-pr.yml b/.github/workflows/benchmark-pr.yml
deleted file mode 100644
index b234e6a60b..0000000000
--- a/.github/workflows/benchmark-pr.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-name: Benchmark PR
-
-on:
- pull_request_target:
- types:
- - opened
- - synchronize
- - reopened
-
-jobs:
- benchmark-pr:
- name: Benchmark (PR comparison)
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install PHP
- uses: shivammathur/setup-php@v2
- with:
- coverage: none
- php-version: "8.2"
- tools: composer:v2
-
- - name: Composer install
- uses: ramsey/composer-install@v2
- with:
- composer-options: "--no-scripts"
-
- - name: Check gh-pages branch exists
- id: check-gh-pages
- run: |
- if git ls-remote --exit-code --heads origin gh-pages > /dev/null 2>&1; then
- echo "exists=true" >> "$GITHUB_OUTPUT"
- else
- echo "exists=false" >> "$GITHUB_OUTPUT"
- echo "⚠️ gh-pages branch does not exist yet — skipping PR benchmark comparison"
- fi
-
- - name: Run PHPBench
- if: steps.check-gh-pages.outputs.exists == 'true'
- run: vendor/bin/phpbench run --progress=plain --report=github-action-benchmark --output=json > output.json
-
- - name: Compare against baseline
- if: steps.check-gh-pages.outputs.exists == 'true'
- uses: benchmark-action/github-action-benchmark@v1
- with:
- name: Phpactor Benchmarks
- tool: customSmallerIsBetter
- output-file-path: output.json
- gh-pages-branch: gh-pages
- benchmark-data-dir-path: dev/bench
- auto-push: false
- github-token: ${{ secrets.GITHUB_TOKEN }}
- comment-on-alert: true
- alert-threshold: "200%"
- fail-on-alert: false
-
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
deleted file mode 100644
index bbfdcc096e..0000000000
--- a/.github/workflows/benchmark.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Benchmark
-
-on:
- push:
- branches:
- - master
-
-jobs:
- benchmark:
- name: Benchmark
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install PHP
- uses: shivammathur/setup-php@v2
- with:
- coverage: none
- php-version: "8.2"
- tools: composer:v2
-
- - name: Composer install
- uses: ramsey/composer-install@v2
- with:
- composer-options: "--no-scripts"
-
- - name: Ensure gh-pages branch exists
- run: |
- if ! git ls-remote --exit-code --heads origin gh-pages > /dev/null 2>&1; then
- git config user.name "github-actions[bot]"
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- empty_tree="$(git hash-object -t tree /dev/null)"
- commit="$(git commit-tree "$empty_tree" -m 'Initial gh-pages branch')"
- git push origin "$commit:refs/heads/gh-pages"
- fi
-
- - name: Run PHPBench
- run: vendor/bin/phpbench run --progress=plain --report=github-action-benchmark --output=json > output.json
-
- - name: Store benchmark result
- uses: benchmark-action/github-action-benchmark@v1
- with:
- name: Phpactor Benchmarks
- tool: customSmallerIsBetter
- output-file-path: output.json
- gh-pages-branch: gh-pages
- benchmark-data-dir-path: dev/bench
- auto-push: true
- github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 413491effd..0000000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,316 +0,0 @@
-name: "CI"
-
-on:
- pull_request:
- push:
- branches:
- - 'master'
-
-env:
- fail-fast: true
- TZ: "Europe/Paris"
-
-jobs:
- phar:
- name: Compile Phar
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set PHP 8.2
- uses: shivammathur/setup-php@v2
- with:
- php-version: '8.2'
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts --no-dev"
-
- - name: Tag with a dummy name
- run: git tag test
-
- - name: Compile phpactor.phar
- run: .github/build-phar.sh
-
- - name: Check existence of compiled .phar
- run: test -e build/phpactor.phar && exit 0 || exit 10
- - name: Execute Phar
- run: ./build/phpactor.phar
-
- - name: Archive phar
- uses: actions/upload-artifact@v4
- with:
- name: phar
- path: build/phpactor.phar
-
- #- name: "Attach signature to Release"
- # uses: actions/upload-release-asset@v1
- # env:
- # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- # with:
- # upload_url: ${{ github.event.release.upload_url }}
- # asset_path: ./build/phpactor.phar.asc
- # asset_name: phpactor.phar.asc
- # asset_content_type: application/pgp-signature
-
- vim-tests:
- name: "VIM Tests (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
-
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: Install Dependencies
- run: |
- composer validate --strict
- composer install --optimize-autoloader --classmap-authoritative
- bin/phpactor --version
- export PHPACTOR_UNCONDITIONAL_TRUST=1
- git clone https://github.com/junegunn/vader.vim.git
-
- -
- name: "VIM tests fail with a TTL of 1.0 for some reason"
- run: "./bin/phpactor config:set worse_reflection.cache_lifetime 5.0"
- -
- name: "Run VIM Tests"
- run: ".github/vim-plugin-test.sh"
- phpunit:
- name: "PHPUnit (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
- - '8.3'
- - '8.4'
- - '8.5'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: "Run PHPUnit"
- run: |
- php -dphar.readonly=0 \
- -dzend.assertions=1 \
- vendor/bin/phpunit --log-junit phpunit-junit.xml
- mago:
- name: "Mago integration (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- permissions:
- contents: read
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: "Install Mago"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- composer require --dev --no-interaction "carthage-software/mago:^1.30"
- vendor/bin/mago --version
- -
- name: "Run Mago integration tests"
- run: 'PATH="$PWD/vendor/bin:$PATH" vendor/bin/phpunit --group language-server-mago'
- phpstan:
- name: "PHPStan (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: "Run PHPStan"
- run: "vendor/bin/phpstan analyse"
- phpactor:
- name: "Phpactor Self Lint"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: "Run Phpactor Analyse"
- run: "bin/phpactor worse:analyse lib --ignore-failure"
- php-cs-fixer:
- name: "PHP-CS-Fixer (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- -
- name: "Run PHP-CS_Fixer"
- run: "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run --diff"
- phpbench:
- name: "PHPBench smoke (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
-
- strategy:
- matrix:
- php-version:
- - '8.2'
-
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Install PHP"
- uses: "shivammathur/setup-php@v2"
- with:
- coverage: "none"
- extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}"
- php-version: "${{ matrix.php-version }}"
- tools: composer:v2
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts"
- ignore-cache: "yes"
- -
- name: "Run PHPBench"
- run: "vendor/bin/phpbench run --progress=plain --iterations=1 --dump-file=phpbench.xml"
- docs:
- name: "Lint Docs (${{ matrix.php-version }})"
-
- runs-on: "ubuntu-latest"
- steps:
- -
- name: "Checkout code"
- uses: "actions/checkout@v4"
- -
- name: "Make Docs"
- run: "make docs"
diff --git a/.github/workflows/release-phar.yml b/.github/workflows/release-phar.yml
deleted file mode 100644
index e2d51b061a..0000000000
--- a/.github/workflows/release-phar.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-on:
- release:
- types:
- - created
-
-name: Append phpactor.phar to release
-
-jobs:
- build:
- name: Compile and upload Phar
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - name: Set PHP 8.2
- uses: shivammathur/setup-php@v2
- with:
- php-version: '8.2'
-
- -
- name: "Composer install"
- uses: "ramsey/composer-install@v2"
- with:
- composer-options: "--no-scripts --no-dev"
-
- - name: Compile phpactor.phar
- run: .github/build-phar.sh
-
- - name: Check existence of compiled .phar
- run: test -e build/phpactor.phar && exit 0 || exit 10
-
- - name: "Upload PHAR to Release"
- uses: actions/upload-release-asset@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ github.event.release.upload_url }}
- asset_path: ./build/phpactor.phar
- asset_name: phpactor.phar
- asset_content_type: application/octet-stream
-
- #- name: "Attach signature to Release"
- # uses: actions/upload-release-asset@v1
- # env:
- # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- # with:
- # upload_url: ${{ github.event.release.upload_url }}
- # asset_path: ./build/phpactor.phar.asc
- # asset_name: phpactor.phar.asc
- # asset_content_type: application/pgp-signature
-
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index d8493eee1a..0000000000
--- a/.gitignore
+++ /dev/null
@@ -1,31 +0,0 @@
-/extensions
-/phpactor.schema.json
-/lib/Extension/WorseReflection/stubs
-/.phpbench
-
-# Composer
-/vendor
-
-# Cache
-/tests/Assets/Cache
-/cache
-/lib/Completion/cache
-/lib/WorseReflection/Tests/Cache
-
-# Workspaces
-/tests/Assets/Workspace
-/**/Tests/Workspace
-
-# File frequently used for testing
-/lib/Test.php
-/.phpactor.yml
-/.phpactor/*
-
-# Logging
-/application.log
-
-/.php-cs-fixer.cache
-/build
-__pycache__
-/doc/_ext/__pycache__
-.phpunit.result.cache
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
deleted file mode 100644
index 6f042d1e0e..0000000000
--- a/.php-cs-fixer.dist.php
+++ /dev/null
@@ -1,57 +0,0 @@
-in('lib')
- ->in('tests')
- ->exclude([
- 'Workspace',
- 'Assets/Cache',
- 'Assets/Projects',
- 'Assets/Workspace',
- 'InternalStubs',
- ])
-;
-
-return (new Config())
- ->setRiskyAllowed(true)
- ->setRules([
- '@PSR2' => true,
- 'no_unused_imports' => true,
- 'phpdoc_to_property_type' => true,
- 'no_superfluous_phpdoc_tags' => [
- 'remove_inheritdoc' => true,
- 'allow_mixed' => true,
- ],
- 'class_attributes_separation' => [
- 'elements' => [
- 'const' => 'only_if_meta',
- 'property' => 'one',
- 'trait_import' => 'only_if_meta',
- ],
- ],
- 'ordered_class_elements' => true,
- 'no_empty_phpdoc' => true,
- 'phpdoc_trim' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'list_syntax' => ['syntax' => 'short'],
- 'void_return' => true,
- 'ordered_class_elements' => true,
- 'single_quote' => true,
- 'heredoc_indentation' => true,
- 'global_namespace_import' => true,
- 'no_trailing_whitespace' => true,
- 'no_whitespace_in_blank_line' => true,
- 'new_with_parentheses' => [
- 'anonymous_class' => true,
- 'named_class' => true,
- ],
- 'multiline_promoted_properties' => [
- 'minimum_number_of_parameters' => 2
- ],
- ])
- ->setFinder($finder)
-;
-
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
deleted file mode 100644
index cd1ade57af..0000000000
--- a/.readthedocs.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-# Read the Docs configuration file for Sphinx projects
-# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
-
-# Required
-version: 2
-
-# Set the OS, Python version and other tools you might need
-build:
- os: ubuntu-22.04
- tools:
- python: "3.12"
- # You can also specify other tool versions:
- # nodejs: "20"
- # rust: "1.70"
- # golang: "1.20"
-
-# Build documentation in the "docs/" directory with Sphinx
-sphinx:
- configuration: doc/conf.py
- # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs
- # builder: "dirhtml"
- # Fail on all warnings to avoid broken references
- # fail_on_warning: true
-
-# Optionally build your docs in additional formats such as PDF and ePub
-# formats:
-# - pdf
-# - epub
-
-# Optional but recommended, declare the Python requirements required
-# to build your documentation
-# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
-python:
- install:
- - requirements: requirements.txt
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 20c2104da2..0000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,1483 +0,0 @@
-Changelog
-=========
-
-## 2026.06.23.0
-
-Improvements:
-
-- Show the Phpactor version in the LSP `phpactor/status` response @dantleech
-- `worse:analyse` writes its progress to STDERR, and its `--format=json` output
- now reports the line, column, diagnostic code and a readable severity #3061
- @ajenbo
-
-Bug fixes:
-
-- Fix false positives in analyser ]#3063 @ajenbo
-- Fix functions declared in the source code passed to the reflector being
- reported as not found (e.g. every function declared and called in the same
- file when running `worse:analyse`) #3061 @ajenbo.
-
-
-## 2026.06.22.0
-
-Features:
-
-- Code action / transformer to add missing `#[\Override]` attributes #2966 @ajenbo
-
-Improvements:
-
-- Respect cancellation for outsourced diagnostic processes #3058 @dantleech
-
-Bug fixes:
-
-- Handle premature cancellation of code-action that caused regression in VS
- code @dantleech @zobo #3058
-- Require the posix extension and fail early with a descriptive error when a
- required extension is missing (instead of crashing mid-session) @fain182 #3053
-
-## 2026.06.25.0
-
-- Mago diagnostics and lint extension @marjovanlier #3052
-
-## 2026.05.30.2
-
-- Do not show client warning when code action resolution process is killed
- @dantleech #3051
-
-## 2026.05.30.1
-
-- Include missing prod depenency in composer `require` (deep-copy) @dantleech
-
-
-## 2026.05.30.0
-
-**NOTE** this relase drops support for PHP 8.1. The minium supported PHP version
-is now 8.2.
-
-Features:
-
- - Index optimizer #3037 @dantleech
-
-Improvements:
-
- - Code-action resolution in separate process (avoid code action stacking and
- blocking) #3048 @dantleech
- - Include new line at end of generated `phpactor.json` #3047 @cweiske
- - Resolve stubs in way consistent with other configurable paths #3040
- @dantleech
- - Goto definition on first-class callable #3025 @przepompownia
-
-Bug fixes:
-
- - Explicitly specify byte order #3033 @dantleech / @zobo
- - Fix null coalesce behavior on undefinfed variable @przepompownia
- - Fix function call with unpacked array #3026 @yohanson
- - Create trust directory recursively #3021 @kneemund
-
-Meta:
-
- - Bump to PHP 8.2 @dantleech
- - Clean up since dropping 8.1 #3038 @przepompownia
- - Introduce benchmark tracking / monitoring #3028 @ajenbo
- - Ignore more unnecessary files with .gitattributes ~
-
-## 2025.12.21.0
-
-Features:
-
- - Additive stubs #2968 @dantleech
- - Support for 1st-class callables @dantleech
- - Support for the PHP 8.5 pipe operator @dantleech
-
-Improvements:
-
- - Restrict attribute completion using targets #2629 @przepompownia
- - Use the Phan fork of the Tolerant Parser as a base #2946 @dantleech
- - Show find references progress with LSP progress #2947 @dantleech
- - Cache and highlighter refactoring #2883, #2992, #2991 @dantleech
-
-Bug fixes:
-
- - Do not enter infinite loop on self-referencing constants #2984 @mamazu
- - Do not index files that exceed a configured size #2979 @mamazu
- - Fix scoped property access variable renaming #2968 @dantleech
- - Fix display of configuration warnings #2971 @dantleech
-
-## 2025.10.17.0
-
-BREAKING
-
- - VIM plugin: Local `.phpactor.json` configuration files are no longer loaded by
- default. If you use the VIM plugin you **must** explicitly trust the
- configuration file with `:PhpactorTrust`.
-
-Features:
-
- - Support PHPStan editormode #2936 @mamazu
- - (development) optional opentelemertry extension.
-
-Improvements:
-
- - Indexer: prioritize static include/exclude over dynamic paths #2927 @zonuexe
- - Improved inlay type hints #2825 @dantleech
- - Improve static analysis performance in some cases #2929 @dantleech
- - Support for asymmetrical visiblity in parser #2926 @dantleech
- - Ignore rector-stubs by default (frequently causes PHPUnit testcase
- reflection issues) #2944 @dantleech
-
-Security:
-
- - Ask permission before loading project-level `.phpactor.json` @dantleech
-
-Bug fixes:
-
- - rename: Do not throw error if there is a reference to a now-non-existing file. @dantleech
- - avoid infinite loop when looking up constant type #2913 @dantleech
-
-## 2025-07-25.0
-
-Improvements:
-
- - Extract document highlighter to own module and add config option to
- disable it @dantleech
- - Fix false diagnostic for missing `__destruct` return type @przepompownia #2900
- - Add depth info to `worse:dump-ast` command @mamazo #2897
- - Ensure that stub locator results are cached in-memory @dantleech #2911
- - Upload PHAR as artifact on builds @drzraf #2915
-
-Features:
-
- - Search filtering (as applicable to autocomplete, name importing etc)
- @dantleech
-
-Bug fixes:
-
- - Require `ext-tokenizer` (fixes nixos distribution) @drupol
- - Don't complete HEREDOC identifier @przepompownia #2909
- - Fix parameter type resolution priority @dantleech
- - Fix completion rendering when snippets are disabled @mamazu #2898
-
-## 2025.04.17.0
-
-Improvements:
-
- - Do not suggest code action for missing return type if type is accurately
- provided by docblock @dantleech
- - Do not generate `void` return type on PHP 7.0
-
-Bug fixes:
-
- - Support loading code templates when Phpactor included as a dependency
- @zobo
-
-## 2025.03.28.0
-
-Improvements:
-
- - Reference finding: Ask for confirmation to continue after soft timeout @dantleech #2856
- - PHAR fixes for Windows @zobo
- - LSP - Support for inline values @zobo
- - Code action prioritization @mamazu
-
-## 2025.02.21.0
-
-Features:
-
- - String <=> Heredoc code action #2825 @mamazu
- - Support new expression without parenthesis #2811
- - Support vscode evaluatable expressions #2905 @zobo
- - Runtime support for PHP 8.4 #2829
- - Initial support for property hooks @dantleech #2833
-
-Improvements:
-
- - Performance: Do not run Indexed reference finder if references handled by
- Variable reference finder @dantleech
- - Performance: Do needlessly re-index documents before searching for
- references @dantleech
- - Psalm: add `config` option to specify Psalm config @GDXbsv #2835
- - Completion for `@internal` tag #2827 @mamazu
- - Add documentation for Nova Language Client #2830 @EmranMR
- - Enable fill constructor code action on attributes #2810 @mamazu
- - Require `ext-mbstring` extension to avoid off-by-one issues #2838 @dantleech
-
-Bug fix:
-
- - Handle zero modulo evaluation @dantleech
- - Do not use FQNs for imported classes in generated docblocks #2843 @dantleech
-
-Documentation:
-
- - Add information for Zed editor @sethstha #2836
-
-## 2024-11-28.1
-
-Bug fixes:
-
-- Do not include the file scheme in when including/excluding files #2794
-
-## 2024-11-28
-
-Features:
-
- - Show codes for all diagnostics and allow them to be ignored @dantleech
- #2781
-
-Improvements:
-
- - Do not highlight entire class for fix class/namespace name diagnostic
- #2728 @dantleech
- - Tolerate code action provider failures #2761 @dantleech
- - Limit number of methods that are documented on classes to improve
- completion/resolve performance for large classes #2768 @dantleech
-
-Bug fixes:
-
- - Navigator: Fix attempt to create existing directories #2776 @bart-jaskulsi
- - Fix goto constant within a trait #2784 @dantleech
- - Preserve PHAR scheme when indexing PHAR stubs @dantleech #2754
- - Fix duplicated types when updating methods @mamazu #2779
-
-## 2024-11-05
-
-Bug fixes:
-
- - Docblock: support parsing quoted string literals as array valuyes #2730
- - Tell WorseReflection about new definitions from the stdin for the
- diagnostics process #2723
- - Flush index on save (make latest changes available to diagnostic process) #2722
- - Fix bad contextual filtering #2715 @dantleech
- - Take optional parameters into account with conditional types #2700 @dantleech
- - Fix import position when `declare` is present #2698 @dantleech
- - Fix NULL error in Docblock parser #2693 @dantleech
- - Handle "source not found" when resolving template map #2716 @dantleech
-
-Improvements:
-
- - Allow exclude patterns to be set for diagnostics (e.g. `vendor/**/*`) #2705 @dantleech
- - Improve formatting for override method #2702 @dantleech
- - Offer completions on attributes not associated with class member body
- #2695 @przepompownia
- - Show prose associated with `@throws` tag #2694 @mamazu
- - Support parsing generic variance e.g. `covariant` #2664 @dantleech
- - Support opt-out of using temporary files with phpstan #2764 @tsterker
-
-Features:
-
- - Add support for 8.3 typed class constants
- - Basic support for `@{phpstan,psalm}-assert` #2720 @dantleech
-
-## 2024-06-30
-
-Features:
-
- - PHAR Indexing #2412 #2611 @dantleech
- - Override method refactor #2686 @dantleech
-
-Improvements:
-
- - Do not use indexer when renaming private properties/methods #2672 @dantleech
- - Fix contextual completion in constructor agrument position #2504
- - Basic support for `array_reduce` stub #2576
- - Support variadics in contextual completion #2603
- - Allow use of `%project_root%` in index paths #2665 @mamazon
- - Fix another `PHP_BINARY` avoid writing to `dev/null` and other windows fixes @MatmaRex
- - Use `get_debug_type` @zonuexe
- - Show strikethrough for deprecated diagnostics #2623 @mamazu
- - Adding more type coverage #2606 #2614 @mamazu
-
-Bug fixes:
-
- - Fix renaming attributed class members @przepompownia
- - Do not error when PHPStan returns no output @mamazu
- - Only filter new object expression names in contextual completion #2603
- - Fixing include and exclude patterns #2593 @mamazu
- - Fix missing @implements code action #2668 @dantleech
- - Initialized properties don't appear in LSP document symbols #2678 @mamazu
-
-## 2024-03-09
-
-Features:
-
- - Completion suggestions filtered by accepting type #2456
- - Basic support for local type aliases #2462
-
-Improvements:
-
- - Show enums in LSP document symbol provider #2575 @gmli
- - PHPStan show tip if as a dignostic hint if available #2512
- - Docblock completion, suggest `@throws` @przepompownia
- - Suggest named parameters on attributes @mamazu
- - Remove redundant documentation #2500 @einenlum
- - Resolve inherited generic types #2474
- - Allow additional CLI arguments to be passed to php code sniffer #2465
- - Clear document diagnostic cache on save #2458
- - Skip parent parameters on complete constructor #2471 @mamazu
- - Support generics on `@mixin` #2463
- - Remove "on develop warning" service #2533
- - Disable the processing of includes/requires, it doesn't work very well but
- it has massive performance impact on certain projects #2580
- - Include project PHP and runtime version and LSP status
- - Add `iterable` "generic" `@param` in docblock #2585
- - Improved diagnostic engine #2584
- - Ongoing windows compatiblity effort #2567 #2572 #2570 @MatmaRex
- - Ignore unnecessary files in gitexport #2570 @zonuexe
- - Improve ANSI test compatiblity #2521 @gerardroche
- - More snippet support #2515 #2508 @przepompownia
- - Add completion for `@throws` #2509 @przepompownia
-
-Bug fixes:
-
- - Fix completion of constants in enums #2541 @eviljeks
- - Fix `renderException` call in bin/phpactor #2548 @MatmaRex
- - Psalm: fix exception handling #2587 @przepompownia
- - Do not generalize generated return types (i.e. false instead of bool) #2588
- - Fix diagnostic process concurrency and do not lint outdated files #2538
- - Upgrade `amp/process` to fix #2516 thanks to @gerardroche
- - Fix division by zero edge case
- - Fix crash if referenced file no longer exists on class rename #2518
- - Fix detection of import used relatively in an annotation #2539
- - Fix PHAR crashing issue on PHP8.3 #2533
- - Fix UTF-16 conversion for LSP #2530 #2557
- - Fix support for Attributes on readonly classes #2493
- - Fix `$this` undefined var false positive in anon. class #2469 @mamazu
- - Fix `$argv` undefined var false positives #2468 @mamazu
-
-Documentation:
-
- - Added Helix LSP instructions #2581 @lens0021
- - Fix typos in Behat #2534 @vuon9
- - Fix broken external links #2500 @einenlum
-
-## 2023-12-03
-
-Bug fixes:
-
- - Support LSP document symbols in traits #2446 @lizhening
- - Fix null variable name crash #2443
- - Fix frame merging of include/require #2391
- - Fix enum representation in method generation #2395
- - Fix enum cases() not existing false-positive #2423
- - Fix incorrect enum import #2400
- - Fix undefined var false positive for arra unpacking #2403
- - Fix autoloading class conflcits with test files #2535 @gerardroche
- - Fix enum renaming in legacy renamer #2445
- - Fix enum renaming on "new" renamer #2445
- - Fix crash on resolveItem() caused by race condition (?) #2434
- - Fix false positive for undefined var where vardoc not counting as variable definition #2437
- - Render variadics as variadics in help, not as arrays #2448
- - Fix representation of int-range min/max #2444
- - Render default value for enum when filling object #2441
-
-Features:
-
- - Generate enum cases and class constants #2422
- - Generate enum match arms #2401
-
-Improvements:
-
- - PHPStan: Support setting custom config path and memory limit @ungrim97
- - Exclude tests from archive #2433
-
-Breaking changes:
-
- - Drop support for PHP 8.0. Minimum version is now 8.1
-
-## 2023.09.24
-
-Bug fixes:
-
- - Fix crash with `php-cs-fixer` when using strict types rule #2348
- - Fix `null` error (and improve type safety) in the docblock parser #2379
- - Fix undefined-var false positive for undeclared variables that have `@var` #2366
- - Fix undefined-var false positive for pass by ref (again) #2361
- - Do not crash lanugage server if LSP header cannot be parsed (log error
- instead) #2373
-
-Improvements:
-
- - Correctly implementing LSP ranges #2352 @mamazu
- - Add mechanism to automatically trigger an index update when breaking changes
- are made
- - Method generation on emums @mamazu
-
-
-Improvements:
-
- - Support single line comments #2350
- - Do not promote parameters that are used in parent constructor #2119 @mamazu
- - Improve detection of Xdebug @bart-jaskulsi #2347
- - Improve plain docblock parsing #2345
- - Generate `@param` tag for iterables #2343 @mamazu
-
-## 2023.08.06-1
-
-Bug fixes:
-
- - Limit number of threads Psalm uses to 1 by default #
- - Update file watching lib to handle "process already exited" errors
-
-## 2023.08.06
-
-Improvements:
-
- - Improve Diagnostics: Run linters in parallel #2327
- - Index documents on save #2326
-
-Bug fixes:
-
- - Fix generic extends with templated argument #2295
- - Do not report statically declared variables as undefined #2311
- - Do not trigger function completion for incomplete opening PHP tag
- - Fix PHP linter #2318
- - Do not report undeclared variables that are passed by reference as undefined #2329 @mecha
-
-## 2023.06.17-1
-
-Bug fixes:
-
- - Do not report globals or super globals as undefined #2302
-
-## 2023.06.17
-
-Features:
-
- - Diagnostics and code action for fixing missing `@implements` and `@extends` #2112
- - Diagnostic for undefined variables #2209
- - Code action to suggest fixes for undefined variables (in case of typos) #2209
- - PHPUnit: code action for adding `setUp` / `tearDown` #2180 @mamazu
- - Making the completion label formatter configurable #2277 @mamazu
- - Auto-reindex: unconditionally reindex modified files every N seconds
- (default 5 minutes) - work around for missed file modification
- notifications.
-
-Improvements:
-
- - Revised getting started documentation #2282
- - Support indexing PHP files that don't have a `.php` extension #2296
- - Allow language server auto-configuration to be disabled #2159
- (`language_server_configuration.auto_config`)
- - Symfony: show and consider non-public services by default (e.g. in tests it's
- possible to retrieve non-public services) #2263
- - Support traits in enums #2256
-
-Bug fixes:
-
- - Fix enum case completion #2284
- - Fix error handling for responses from language client #2283
- - Do not show named parameters after string literal argument #2259
- - Fix "instanceof" behavior for statically reflected classes #2273
- - Fix behavior when user cancels type selection on goto type #2270
- - Fix docblock parsing of `array<'quoted'|'strings'>` #2264
- - Fix constant declaration indexing with `define` #2249 @mamazu
- - Fix use of class-string variable as static scope resolution qualifier #2238
- - URL decode root URI - fixes issues with special chars in path #2228
- - Do not deduplicate suggestions of different types (e.g. prop/method with same name) #2214
- - Fix list assignment #2226
- - Support parsing interface clause on enums #2220
- - Do not make fully qualified name usage relative in class-mover #2208 @mamazu
- - Fix resolution of `self` type (esp. in relation to traits) #2116
- - Fix different virtual member types with the same name replacing eachother #2108
- - Specify maximum size (255 chars) for string literal types #2144
- - Fix docblock parser with `$this` when used as generic argument #2092
-
-## 2023.04.10
-
-Features:
-
- - Show references to new objects when finding references to `__construct` method #2194
- - Support for inlay hints #2138
- - Deprecation diagnostics #2120
- - Auto configuration - automatically suggest and apply configuration #2114
- - Transform to "promote" unassigned consturctor properties #2106
- - Hierarchical namespace segment completion #2070
- - Completion for promoted property visiblity #2087
- - Option `language_server.diagnostic_outsource` to outsource diagnostics in separate process #2105
-
-Bug fixes:
-
- - Also use in-memory files when enanching indexed records #2187
- - Prophecy: Do not crash when used in trait #2129
- - Prophecy: fixing chaining of methods via. `getObjectProphecy` #2122
- - `new class-string` now resolves to `new Foo` #2065
- - Fix extract method within trait #2076 @mamazu
- - Do not attempt to index classes whose names are reserved words #2098
- - Fix typo in LanguageServerExtension::PARAM_FILE_EVENTS resulting in typo in documentation
- - Fix parsing array types in `@param` Tags in doc blocks #2172
-
-Improvements:
-
- - Only show completion suggestions for real attributes #2183, #2100 @mamazu @przepompownia
- - Code action and formatting handlers now send progress notifications #2192
- - Invalidate diagnostics cache only when document changes #2191
- - Optimize analysis for scopes with many many assignments #2188
- - Made some heavy blocking operations non-blocking (e.g. diagnostics, code
- actions).
- - ⚠ Removed frame sorting which increases radically in some cases, but may
- also cause regressions #2179
- - Psalm: Support for overriding the error level #2174
- - Generating constructor at the top of the file #2113 @mamazu
- - Include (complex) docblock params when generating method
- - Take into account named parameters when "guessing" parameter names #2090
- - Show full FQN for classes in hover #2081
- - Upgrade to 3.17 of the language server protocol #2082
- - Facilitate changing visiblity on promoted properties @mamazu
- - Allow generation of constructor for Attributes.
-
-## 2023.01.21
-
-Bug fixes:
-
- - Allow class completion within constant declaration in class #1985 @przepompownia
- - Do not suggest return type on `__destruct` #1992
- - Do not report Prophecy methods as "not found" #2006
- - Do not add NULL to type list (fixes search bug) #2009
- - Create a real package for the tolerant-parser fork and use it #2033
- - Also highlight use statements when hovering on class #2039 @mamazu
- - Fix priotity of "internal" stub locator - facilitating enum completion #2040
- - Require posix extension #2042 @dacianb
- - Fix evaluation of replacement assignments #1705
- - Fix crash on missing token in Indexer #2049 @vlada-dudr
- - Fix missing compact use name false positive #2052
- - Fix `class-template` when not in 1st arg position #2054
-
-Features:
-
- - `@param` docblock generation
- - Reintroduce the PHPUnit extension
- - Support integer range type e.g. `int<0, max>` #2024
-
-Improvements:
-
- - Support the Psalm cache #2046 @gbprod
- - Support completion inside match expression #2051 @przepompownia
- - Fixed typos in documentation #2050 @d-danilov
- - Psalm Extension: allow `info` diagnostics to be hidden #2032 @gbprod
- - Better docblock parsing and formatting #2004
- - More liberal support for vendor tags #2011 @ging-dev
- - Fix nested template type arguments #2016
- - Fix importing of nested types #2009
- - Reverts #1974 - which made the situation worse rather than better.
- - Change default WR cache TTL from 5 seconds to 1 second to avoid race with
- diagnostics timeout.
- - Add return tags to existing docblocks #1995
- - Naive support for attribute completion #2001 @przepompownia
- - Support union type from class-string variadic generic
-
-## 2022.12.12
-
-Breaking changes:
-
- - Minimum version of PHP changed to 8.0. **Phpactor will no longer run on PHP 7.4**.
-
-Features:
-
- - [lsp] Generate mutator @florian-merle
-
-Improvements:
-
- - [wr] Fix inference of array subscript expressions #1961
-
-Bug fixes:
-
- - [lsp] Prevent race condition that makes old changes get analyzed after new changes #1974
- - [cmp] Constant visibility not taken into account for completion #1979 @przepompownia
- - [rn] Fix crash on rename interface #1982 @nataneb32
- - [wr] Fix crash on enum with custom methods #1966
- - [ls] Log errors even if they are for a request @lumnn
- - [ls] Do not include `results` key in JSON response when error @lumnn
- - [lsp] Do not send workDoneProgress notifications to clients that do not
- support it #1951
- - [lsp] Fix highlighting on PHP 8.1 #1960
- - [wr] Do not crash when encountering an array union operator #1971 @wouterj
- - [wr] Fixing handling of HEREDOC in StringResolver #1977 @mamazu
-
-## 2022.11.12
-
-Features:
-
- - [ct] Replace qualfier with import LSP refactoring #1939 @mamazu
- - [sf] New Symfony extension #1915
- - [wr] Generic constructor parameters support #1920
-
-Bug fixes:
-
- - [wr] Fix member template params when declared in interface #1914
- - [cb] Do not prompt to generate constructor when object is given no arguments #1911
-
-Improvements:
-
- - [cb] Add properties _after_ constants #1917 @mamazu
- - [--] Remove dependency on webmozart/path-util @mamazu
- - [wr] "invokable" type refactoring
- - [--] Do not register services for disabled extensions
-
-Documentation:
-
- - Added Emacs LSP client guides @zonuexe
-
-## 2022.10.11
-
-Bug fixes:
-
- - [lsp] Import all unresolved names command no longer dupliates names #1835
- - [tp] Update tolerant parser library fixing issue with parsing `match` keyword #1873
- - [rpc] Fix regression with :PhpactorClassNew opening in `Untitled` buffer #1881
- - [ctf] Fix token issue with simple class-to-file converter #920
- - [wr] Built-in enum members are reflected #1902
- - [wr] Fix iterable generic not being resolved properly #1875
-
-Improvements:
-
- - [wr] Better modelling of enums
- - [wr] Add additional phpactor-specific stubs (e.g. for Enums)
- - [lsp] Enum hover improvement
- - [lsp] Improve formating signature help parameters #1894
- - [lsp] Highlighting more 10x faster #1891
- - [cmp/lsp] inline type information for completion items
- - [cmp] complete `__construct` on `parent::` #1272
- - [wr] Refactored generic handling
-
-Features:
-
- - [wr] Support for `class-string` generic
- - [ct] Decorate interface #1879 @mamazu
- - [lsp] Document formatting via. php-cs-fixer #1897
- - [gtd] For member declarations, goto parent member definition if it exists #1886
-
-## 2022.09.11
-
-Bug fixes:
-
- - [wr] Inconsistent type resolution - removed node level cache #1673
- - [in] Fix exception when indexed file has no path #1643
- - [wr] Do not complete constants on class instance #1614
- - [wr] Include virtual properties in class members #1623
- - [wr] Fix false positive for virutal method not existing #1603
- - [wr] Ignore exceptions (permission denied f.e.) when traversing files #1569
- - [wr] Fix resolutin of virtual method
- - [ct] Fix missing properties refactor does not import class #1534
- - [ct] Fix false diagnostic for missing method #1500
- - [dl] Fix docblock definition location at class level docblocks
- - [idx] Do not try and use non-tokens for property names #1317
- - [cb] Fix rendering of array values in generated code
- - [wr] Fix arrow function completion #1303
- - [dl] Fixed off-by-one error with plain text goto definition
- - [fw] Ensure inotify is stopped before shutting down
- - [wr] properly deconstruct array in foreach
- - [lsp] import unresolved classes refactoring: Ensure only unique names are shown when asking user to select an import candidate
- - [lsp] ensure fully qualified filename is used for generate method refactoring #1313
- - [wr] detect branch determination with throw expression
- - [cr] add missing properties: correctly infer type from call expressions
- - [filesystem] Fix "too many files open" issue #1376
- - [class-mover] Fix long standing bug with aliased imports being duplicated
- on class move and other strange issues.
- - [lsp] Fix call to properties() on non-class in generate accessors provider.
- - [lsp] Fix unresolvable classes not being listed in code actions
- - [cb] Do not apply HTML escaping when rendering code templates
- - [wr] Promoted property docblock types not picked up #1334
- - [completion] Limit results from the search index (improve search performance significantly)
-
-Improvements:
-
- - [cmp] Show partial namespace to disambiguate class name suggestions
- - [wr] Markdown formatted member completion documentation
- - [ls] publish diagnostics on open and update
- - [ct] Add missing properties for array assignments #1640
- - [cmp] Provide variables from parent frame for anonymous use #1602
- - [ref] Increase reference finder timeout to 1 minute by default #1579
- - [cmp] Improved contextual completion
- - [rn] Fixed numerous issues
- - [rename] Fixed numerous issues
- - [compl] Allow named param completion on functions
- - [wr] Infer return type for generators
- - [lsp] Show Phpactor version info in initialize result @lalanikarim
- - [ls] Fixed class completion performance
- - [ct] Add option to disable importing global functions
- - [cmp] (Better) support for completing imported names #1490
- - [wr] reset,array_shift and array_pop stubs
- - [wr] improved ternary support
- - [log] Include a channel prefxi in log messages
- - [wr] require `ext-pnctl` (language server would crash otherwise)
- - [wr] handle static properly #967
- - [ls] include list of diagnostic providers in status report
- - [ct] add retutn type to generated method if it would immediately return
- - [wr] support array [] addition operator
- - [wr] support in_array type assertion
- - [wr] support for casts
- - [wr] if statement branches
- - [wr] inline type inference
- - [wr] infer param types from _function_ docblock
- - [wr] support for Closure as a type #1413
- - [wr] expressions are evaluated as types
- - [wr] literal types and internal refactorings
- - [ls] Show error message in client if service stops unexpectedly with an
- error
- - [code-transform] Faithfully reproduce documented types in generated code
- - [docblock] New docblock parser to facilitate parsing complex types
- - [hover] Improve "offset" hover (mostly related to showing variable info)
- - [templates] Include templates for creating new interfaces, traits and enums
- - [wr] Resolve type from array access
- - [cb] Preserve `?` operator as distinct from a union type
- - [wr] Support for class-string type (not for type inference however)
- - [completion + location] Better support for union types
- - [cs] Updated CS and converted property docblock types to actual types
-
-Features:
-
- - [-] Better constant suppoer - indexing, goto def, find references, hover, etc.
- - [cmp] Support absolute name completions
- - [ls] Lazily resolve documentation for completion items
- - [ct] Generate constructor refactoring
- - [ct] Fill object refactoring
- - [ct] Remove unused imports diagnositcs and code transformation #1758
- - [wr] Added native WR single-pass diagnostics #1700
- - [cmd] Index clean command #1691 @mamazu
- - [cmp] (re?)support completion on parent:: #1643
- - [cb] Render types based on PHP version #1655
- - [wr] Support `@property-read`
- - [wr] Support for mixins #990
- - [rf] Support for constants, properties and promoted properties
- - [compl] Docblock completion
- - [wr] Support for intersection types
- - [rf] Union type support for goto definition
- - [ct] Add missing PHP return types
- - [wr] Support for inference for `array_map`, and arrow and anonymous functions
- - [ct] Add missing @return type docblocks code transformation
- - [cmp] Explicitly enable/disable completors and disable `keyword` completor by default.
- - [wr] Support `iterator_to_array`
- - [wr] Handle constant glob to union types (`@return Foo::BAR_*`).
- - [lsp] show class category in offset hover info
- - [lsp] jump to types in a union type
- - [wr] Type combination
- - [wr] Support for type assertions via. is_*, instanceof etc
- - [wr] Array shape type support (types and completion)
- - [wr] Support for variadics
- - [lsp] Send rename file request to client when renaming a PSR class
- @przepompownia
- - [wr] Initial support for generics #1382
- - [lsp] Added generate accessors code action
- - [lsp] Added extract constant code action
- - [extension] Removed the extension manager.
- - [extension] PHPStan and Psalm extensions are now included by default.
- - [lsp] Code action to complete constructor with _public_ properties
- - [php] Bump min. PHP version to 7.4
- - [php] Fix PHP 8.1 deprecations
- - [config] JSON schema support
- - [cli] `phpactor config:init` command to create or update config (to
- include JSON schema location)
- - [completion] Enum support (requires 8.1 PHP runtime)
- - [reference-finder] Enum support (requires 8.1 PHP runtime)
- - [php8.1] Disable deprecation warnings unless `PHPACTOR_DEPRECATIONS`
- provided.
-
-## 2022-01-03 (0.18.0)
-
-Features:
-
- - [language-server] Import all names refactoring - @dantleech
- - [language-server] Extract expression - @BladeMF
- - [language-server] Extract method generation - @BladeMF
- - [language-server] Initial support for method generation - @BladeMF
- - [langauge-server] Support for renaming files (LSP 3.16) - @dantleech
- - [language-server] Ability to use client file events where available - @dantleech
- - [completion] Experimental support snippets for built-in functions - @weeman1337
- - [completion] Experimental support snippets for class constructos - @weeman1337
- - [completion] Added `experimental` flag
- - [completion] Added flag to enable / disable snippets entirely
- - [language-server] Ensure workspace is indexed before finding references - @dantleech
- - [language-server] Support for renaming class names (short only) - @dantleech
- - [language-server] Rename class members and variables - @BladeMF, @dantleech
- - [language-server] Basic support for workspace symbols.
- - [language-server] Added basic PHP linting by default.
-
-Improvements:
-
- - [completion] Improve diagnostic message for #1245 - @dantleech
- - [language-server] Allow hover template paths to be customized - @BladeMF
- - [language-server] Show warning in client if extra config keys present - @dantleech
- - [code-transform] Improved performance for unresolvable class name finder - @dantleech
- - [code-transform] Improved information in name-not-found exception -
- @weeman1337
- - [language-server] Do not show "class not found" diagnostics by default - @dantleech
- - [worse-reflection, etc] Update to latest tolerant parser lib to support PHP 8.1 syntax
-
-Bug fixes:
-
- - [worse-reflection] Fix handling of non-decimal integers - @Slamdunk
- - [worse-reflection] Fix variable detection in closures - @BladeMF
- - [completion] Fix snippet method completion #1172 - @BladeMF
- - [worse-reflection] Fix PHP8.0 deprecation warnings - @gregoire
- - [completion] Tests fail due to jetbrain stubs changes - @weeman1337
- - [worse-reference-finder] Do not know how to create class from type "NULL" #1246 - @dantleech
- - [worse-reflection] Property context class not propagated
-
-## 2021-03-21 (0.17.1)
-
-Features:
-
- - [completion] Support Attribute Completion
-
-Bug fixes:
-
- - [language-server] Diagnostics do not tolerate NULL document version on save #1220
- - [worse-reflection] Unhandled exception thrown when variable name is "NULL"
- - [language-server] Unhandled exception when function not found on hover
-
-## 2021-02-06 (0.17.0)
-
-Features:
-
- - [completion] Support for PHP named parameters - @dantleech
- - [completion] Basic Doctrine annotation completion support - @elythyr
- - [completion] References are sorted alphabetically - @elythyr
- - [completion] Show warning character if method or class is deprecated
- - [completion] Sort class names and fucntions according to proximity to current file by default - @dantleech
-
- - [composer] Class map only mode by default (do not register autoloader at all, do not include files)
- - [file-watcher] Experimental support for [watchman](https://facebook.github.io/watchman/)
- - [indexer] CLI command for index search (mainly for debugging)
- - [indexer] PhpStorm stubs are now indexed
- - [indexer] Show memory usage and limit in progress notification.
- - [language-server] Import class/function code action and diagnostics
- - [language-server] Transform code actions and diagnostics (complete constructor, implement contracts, fix class name and add missing properties)
- - [completion] Keyword completion - @BladeMF
- - [language-server] Create class code actions - @dantleech
- - [phpactor] Update extensions after install composer hook - @dantleech
-
-Improvements:
-
- - [worse-reflection] Support for list foreach
- - [worse-reflection] Various issues around NULL and exception handling
- - [worse-reflection] Improved frame resolution performance by 99.5x - @dantleech
- - [worse-reflection] Fixed mixed up start/end positions in symbol resolver - @BladeMF
- - [language-server] Update classes on workspace update - @BladeMF
- - [language-server] New LSP protocol and general refactoring - @dantleech
- - [language-server] Support document symbols (f.e. showing code outline for document)
- - [language-server] Support symbol highlighting
- - [language-server] Support for indexing constants
- - [code-tranform] Generated accessors automatically `ucfirst` the property name when prefix is used. - @einenlum
- - [worse-reflection] Improved inference for property types - @elythyr
- - [worse-reflection] Include virtual members from traits - @scisssssssors
- - [code-tranform] fix invalid missing property diagnostic (#1126) - @elythyr
- - [code-transform] Improve performance for missing properries - @dantleech
-
-Bug fixes:
-
- - [code-transform] Catch unhandled exceptions - @dantleech
- - [text-document] valid php class names not detected for word-at-offset
- - [code-tranform] Return types not considered for unresolved names - @dantleech
- - [completion] Avoid reflection on NULL
- - [scf] Fix support for moving and removing folders - @Lumnn
- - [indexer] Fix indexing of static properties - @BladeMF
- - [completion] Fix signature help in nested symbols - @BladeMF
- - [worse-reflection] Static properties not resolved - @BladeMF
- - [lanaguge-server] Correctly highlight use statements against qualified
- names - @dantleech
- - [language-server] Fix occasional class-not-found error on code transform (due to incorrectly formatted path)
- - [worse-reflection] Do not consider "iterable" as an FQN - @elythyr
- - [code-transform] Fix trailing line on class import - @elythyr
- - [code-transform] Fix importing class names in docblocks - @elythyr
-
-## 2020-06-09 (0.16.1)
-
-Improvements:
-
- - [worse-reflection] Support for virtual methods in interfaces - @dantleech
- - [code-transform] Fix regression with importing from root namespace
-
-## 2020-06-09 (0.16.0)
-
-Features:
-
- - [vim-plugin] Ability to set custom project root strategy (#1027) - @przepompownia
- - [indexer-extension] Workspace reference finder (classes,functions,members) - @dantleech
- - [worse-reflection] Support "final" keyword - @dantleech
- - [language-server-hover] Show "final" keyword on class hover - @dantleech
- - [language-server-hover] Show inherited method documentation - @dantleech
- - [language-server-code-transform] Add command to import class - @dantleech
- - [language-server-completion] Automatically import class on completion confirm - @dantleech
- - [code-transform] Consider current class as a potential conflict for imports - @dantleech
- - [completion] Indexed class name and function completion - @dantleech
- - [indexer-extension] Support "deep references" (search over all implementaions) - @dantleech
- - [composer] Enable disbaling of autoloader inclusion via. `composer.enable` - @dantleech
- - [lanaguage-server-completion] Auto-import functions - @dantleech
-
-Improvements:
-
- - [code-builder] Removed functionality to "update" parameters: was very
- buggy. Now only new parameters will be added when updating methods via.
- generate method.
- - [language-server-bridge] Service to convert Phpactor Locations to LSP locations - @dantleech
- - [code-transform] Class import updates context name on alias - @dantleech
- - [documentation] Generate the configuration reference - @dantleech
- - [completion-worse] Allow completors to be disabled via `completion_worse.disabled_completors` - @dantleech
- - [indexer-extension] Validate search results (remove from search index if invalid).
- - [language-server] Exit session immediately if NULL given as CWD (instead of crashing).
- - [container] Adds command for introspecting the container (`container:dump`) - @dantleech
- - [indexer-extension] Increase priority of indexer source-locators (they should come before the composer locators) - @dantleech
- - [language-server] Show explicit meassage when indexer dies
-
-Bug fixes;
-
- - [completion] Completion limit of 32 imposed in 0.15 removed.
- - [ampfs-watch] Inotify watcher not reporting error when out of available
- watchers
- (https://github.com/phpactor/amp-fswatch/commit/1e38faadc3fb73158de9a966ee12d17992dad4fe)
- - @dantleech
- - [ampfs-watch] Buffered watcher not allowing errors to bubble up
- (https://github.com/phpactor/amp-fswatch/commit/b5cb54b6d01a9ec3dcbfdcca804c2d63c0e84a19)
- - @dantleech
- - [language-server] Ensure that `result` key is missing when `NULL` (some
- clients require it) - @dantleech
- - [code-transform] Fixed occasional whitespace issues when importing classes
- - [language-server] Support for LSP commands
- - [indexer] Fixed crash with empty class name
-
-## 2020-05-03 0.15.0
-
-Features:
-
- - [reference-finder] Goto type: goto the type of the symbol under the cursor #892 - @dantleech
- - [worse-reflection] Enable cache lifetime (important for long running
- processes) (#929) - @dantleech
- - [language-server] Included in the core - @dantleech
- - [indexer] Indexer included in the core - @dantleech
- - [rpc] Add docblock prose to hover
- - [vim-plugin] Add support `:checkhealth` and provide `:PhpactorStatus` in
- terminal window (#974) - @elythyr
- - [ref-finder] Goto definition works for vars (https://github.com/phpactor/worse-reference-finder/pull/1) - @FatBoyXPC
- - [phpactor-ls] workspace/references support - @dantleech
-
-Improvements:
-
- - [text-document] Include `<` and `>` when getting "class" name undercursor
- (allow implorting `Foobar` from an `@var array` doc
- - [completion] Option to deduplicate suggetions (#905) - @dantleech
- - [completion] Option to limit completion options - @dantleech
- - [completion] Allow completors to return `true` when they finish (allow
- final consumer to know if list is complete) - @elythyr
- - [vim-plugin] Improved command registration (#965) - @elythyr
- - [completion] Improved signature help (https://github.com/phpactor/completion/pull/31) - @elythyr
- - [completion] Completors can return if they are complete (https://github.com/phpactor/completion/pull/30) - @elythyr
-
-Bug fixes:
-
- - [code-transform] Generate accessor doesn't work on selected property (regression)
- - [vim-plugin] Configuration was not global (#964) - @elythyr
- - [class-mover] `$` was removed when renaming static variables (#925) -
- @dantleech
- - [class-to-file] Remove duplicate candidates (fixes issue with class
- completion duplicate suggestions)
-
-Documentation:
-
- - [doc] Fix examples in refactoring documentation - @Great-Antique
- - [doc] Fix example mappings and add missing commands - @yeagassy
-
-## 2020-03-04 0.14.1
-
-Bug fixes:
-
- - [vim-plugin] Fix `force_reload` behavior with `g:useOpenWindow`
-
-## 2020-03-01 0.14.0
-
-Features:
-
- - [vim-plugin] Introduces Commands for user actions (instead of having to
- call the functions)
- - [vim-plugin] Generate the VIM help from the plugin's code documentation
- - [code-builder] Support for nullable types - @elythyr / @dantleech
- - [code-builder] Generates typed property for PHP 7.4 - @elythyr
- - [worse-reflection] Support for PHP 7.4 property types - @dantleech / @elythyr
- - [phpactor|code-builder] Allow to override the templates by PHP version - @elythyr
- - [phpactor] Auto-detection of project PHP version - @dantleech
- - [code-transform|rpc] Import missing classes - @dantleech
- - [context-menu] Invoke menu for the nearest actionable node (i.e. you can
- invoke the context menu on whitespace now) - @elythyr
- - [vim-plugin] Extract functions handles motions @elythyr
- - [vim-plugin] Jumping to another file preserves the jumplist @elythyr
- - [class-mover] Jump to implementation - @dantleech
-
-Bug fix:
-
- - [code-transform] Cannot rename variable from anonymous function variable
- (#829) - @dantleech
- - [code-transform] Complete constructor does not take into account aliased
- imports (#886) - @dantleech
- - [code-builder] New aliased class imports alias not added (#860) - @dantleech
- - [worse-reflection] instanceof returns negative if class implements
- interface but extends another class - @dantleech
- - [worse-reflection] foreach key variable resolves as symbol type "unknown"
- - @dantleech
- - [text-document] Word splitting includes commas, and other non-word chars
- (#851) - @einenlum
- - [worse-reflection] Functions wrongly memonized as classes - @dantleech
- - [class-new-cli] response shows source code instead of path (#792)
- - [class-new] Wrong file path when destination shares the same namespace as source (#795).
-
-Improvements:
-
- - [vim-plugin] Better handling of `json_decode` errors
- - [vim-plugin] Add option to switch to open windows
- `g:phpactorUseOpenWindows` - @przepompownia
- - [vim-plugin] Stable context menu shortcuts - @dantleech (#896)
-
-## 2019-10-23 0.13.5
-
-Bug fix:
-
- - [text-document] `?` included with word-at-offset #833
-
-## 2019-09-13 0.13.4
-
-Bug fixes:
-
- - [text-document] Word-at-offset offset off by one #816
-
-## 2019-08-25 0.13.3
-
-Bug fixes:
-
- - [context-menu] Import class from context menu not working #816
-
-## 2019-08-25 0.13.0
-
-Features:
-
- - [vim-plugin] Add new `GotoDefinition[Vsplit|Hsplit|Tab]` functions.
- - [code-builder] Initial support for nullable types - @einenlum
- - [vim-plugin] FZF integration for list inputs (#769) - @elythyr
- - [vim-plugin] FZF multiple selection (#773). @elythyr
- - [vim-plugin] Maintain correct cursor position after certain text diffs (#770) - @elythyr
- - [code-transform|rpc] Generate multiple accessors for a class - @elythyr
- - [code-tranform] Generate static methods if the call was static (#25) - @einenlum
- - [completion] Use declared classes as completion source
- - [import-class] Import declared classes (as long as they can be statically
- resolved).
- - [rpc] Class import uses offset to determine type to import
- - [class-mover] Possiblity to move related any files whose relations are
- defined in `navigator.destinations` (for both command and rpc)
- - [worse-reflection] Support virtual class properties (in addition to
- methods).
-
-Bug fixes:
-
- - [completion] Signature helper does not work on interfaces (#752) - @taluu
- - [code-builder] Class import doesn't work with single element namespace
- #760
- - [code-builder] Variant is not passed to class generator (#766)
- - [phpactor|cli] response shows source code instead of path (#792)
- - [class-mover|rpc] Fix order of open/close operations, prevent VIM crashing
-
-BC Break:
-
- - [rpc] Import class no longer requires name parameter. RPC version changed
- to version 2.
- - [code-transform] Generate accessors is now a class action and allows
- generation of multiple accessors.
-
-## 2019-03-03 0.12.0
-
-BC Break:
-
- - [completion] Comletion API changed to accept the new
- [TextDocument](https://github.com/phpactor/text-document).
-
-Features:
-
- - [goto-definition] Goto definition extracted from core into separate
- packages including [extension
- point](https://github.com/phpactor/reference-finder-extension).
- - [goto-definition] Support for "plain text" goto class definition, works
- for docblocks, and non-PHP files.
- - [completion] Do not suggest non-static method on static calls.
- - [completion] Suggest ::class constant, fixes #673
- - [completion] Docblock type injection allow name to be omitted #618
- - [application] Log errors in command error handler (for logging async
- completion errors using the complete command)
- - [worse-reflection] Support variadic arguments #621
- - [worse-reflection] Support for virtual methods #682
- - [worse-reflection] Support for evaluating `clone()`
- - [worse-reflection] Support for registering custom virtual class member
- providers.
- - [vim-plugin] Find references shows context line #706
- - [code-builder] Trait support, thanks @dshoreman
-
-Improvements:
-
- - [code-transform] Support extracting expressions to methods #666
- - [code-transform] Extract method adds return statement to calling code if
- extracted code contained a return #704
- - [worse-reflection] Support union catch #711
-
-Bug fixes:
-
- - [completion] Fix type resolution immediately following docblock #678
- - [completion] Include `$` on static properties #677
- - [extension-manager] Do not install dev dependencies for extensions #674
- - [class-to-file] sort candidates by path length #712 thanks @greg0ire
- - [code-transform] Rename variable includes anonumous function use #713
- - [worse-reflection] Do not downcast union types in named docblocks #711
- - [code-transform] Extract method sometimes creates method in new class in
- same file #730
- - [code-transform] Add Missing Properties added trait props in new class #726
-
-## 2018-12-21 0.11.1
-
- - [application] Resolve the vendor directory correctly when Phpactor
- included as a dependency, thanks @kermorgant
-
-## 2018-12-02 0.11.0
-
-BC Break:
-
- - [rpc] All handlers must now be registered with the "name" attribute.
-
-Features:
-
- - [worse-reflection-extension] Allows new framewalkers to be registered
- (i.e. new ways to infer types).
- - [config] Support loading config from JSON files
-
-Improvements:
-
- - [rpc] Handlers are lazy loaded, improving the RPC baseline latency
-
-## 2018-11-26 0.10.0
-
-BC Break:
-
- - [php] Bumped minimum PHP version to 7.1
- - [config] Renamed `reflection.enable_cache` => `worse_reflection.enable_cache`
- - [config] Renamed `reflection.stub_directory` => `worse_reflection.stub_directory`
- - [config] Renamed `autoload` => `composer.autoloader_path`
- - [config] Renamed `autoload.deregister` => `composer.autoload_deregister`
-
-Features:
-
- - [ExtensionManager] Facility to dynamically add extensions to Phpactor
- - [RPC] `extension_list`, `extension_remove` and `extension_install`
- handlers.
- - [Completion] Class alias completor, #592
- - [CodeTransform] Cycle class member visiblity #521
- - [RPC] Adds `hover` handler which shows the synopsis of the symbol
- underneath the cursor.
- - [Completion] Introduction of a type-specific completion registry, to allow
- registration of completors for different sources, e.g. cucumber.
-
-Improvements:
-
- - [Application] Do not eagerly load commands (~20% baseline improvement)
- - [Transform] Complete constructor will work work on ! interfaces #597
- - [Transform] Import missing types on generate method
- - [Transform] Adds return types on generate method
- - [CodeBuilder] Do not add additional spaces when importing classes
- - [Completion] Completion qualifiers to allow reusable way to determine
- candidate completors.
- - [Vim Plugin] The "label" for omni complete suggestions is now truncated to
- a specified length.
-
-Other:
-
- - [Console] Config dump now only shows JSON format
- - [Completion] Completors now `yield` suggestions and problems are no longer
- returned. The `issues` key returned from suggestions is now deprecated.
- - [Vim Plugin] The "omni error" feature has been removed (as completion no
- longer returns them).
-
-## 2018-08-04 0.9.0
-
-BC Breaks:
-
- - [RPC Plugins] a new `update_file_source` method is now returned by most
- code-transforming RPC handlers (e.g. import class, complete constructors).
- this is used in place of `replace_file_source`.
- See [https://github.com/phpactor/phpactor/issues/550](#550) for details
-
-Deprecations:
-
- - [Completion|Completion Plugins] Serialized key `info` is deprecated in favour of
- `short_description` and could be removed, at least, in 0.10.0.
-
-Features:
-
- - [RPC] `open_file` command now has a `force_reload` flag
- - [Completion|Vim Plugin] Auto-import class names (thanks @kermorgant for
- improvements)
- - [Completion] Suggestion types now have more explicit types (e.g. `method`,
- `constant`, `class`, rather than the VIM-centric kind characters).
- - [WorseReflection] Fallback to inferring property types from constructor assignments.
- - [RPC|Vim Plugin] RPC handler for file class info (e.g. namespace, class
- FQN) and VIM functions new `phpactor#getNamespace()` and
- `phpactir#getClassFullName()`. Thanks @voronkovich
- - [WorseReflection] Reflect any user-defined functions parsed when including
- the Composer autoloader. #562
- - [WorseReflection] Support trait alias maps. #540
- - [RPC] Return semantic RPC protocol version in response (starting at `1.0.0`).
- - [Completion] Complete constructor parameters.
-
-Improvements:
-
- - [Rpc|VIM Plugin] Source code is now updated (by way of a diff algorithm)
- not replaced. The cursor position and undo history are maintained.
- - [VIM Plugin] Regression test for Transform RPC call.
- - [Application] Make class completion candidate limit configurable.
- - [WorseReflection] Foreach Frame walker: inject keys in foreach loop, #578
- - [RPC] find references: Do not return files with no concrete references,
- #581
- - [CodeBuilder] Tracks which nodes have been modified after factory
- creation.
- - [ClassToFile] Composer class-to-file strategy no longer discards inferior
- prefix lengths from consideration, fixes #576
-
-Bug fixes:
-
- - [Completion] Fixed multi-byte issue with class completor.
- - [VIM Plugin] Allow duplicate name suggestions (e.g. same class short-name
- different FQNs) in omni-complete results.
- - [CodeBuilder] Builder attempts to act on a string (when return type is f.e.
- self). #529
- - [WorseReflection] Fix fatal error when `Parameter#getName()` returns NULL in
- SymbolContextResolver. #533
- - [CodeBuilder] Fix for unrelated methods being updated, #583
-
-## 2018-08-03 0.8.0
-
-Improvements:
-
- - [WorseReflectoin] Smoke test for find parsing errors.
- - [WorseReflection] Improved efficiency for frame building.
- non-variable.
- - [Completion] Improved multi-byte performance, fixes #537 thanks
- @weirdan
-
-Bug fixes:
-
- - [WorseReflection] Handle fatal error on incomplete extends.
- - [WorseReflection] Handle fatal error on instanceof coercion on
- - [Completion] Fixed class member container resolution accuracy
- - [SourceCodeFilesystem] Quote regular expressions in file list filter, fixes #543
-
-Misc
-
- - [RPC] Refactored handlers to define input requirements more explicitly.
-
-## 2018-07-02 0.7.0
-
-Features:
-
- - [CodeTransforn] Extract expression
- - [Application] Changed behavior of Transform command: accepts globs, shows
- diffs and writes to files (rather than just dumping them to stdout if they
- changed).
- - [Completion] Support constant completion
- - [Application] Use version from composer instead of hard-coded version.
- Thanks @weirdan
-
-Improvements:
-
- - [Completion] Support namespaced functions, fixes #473.
- - [Completion] Sort completion results alphabetically.
- - [Docs] Added section on completion.
- - [WorseReflection] Explicitly do not support anonymous classes when
- resolving nodes, fixes #505.
-
-Bug fixes:
-
- - [WorseReflection] Do not parse non-PHP files when building stub cache.
- - [Completion] Fixed last non-whitespace char detection, fixes #504
-
-Misc
-
- - Downgraded composer to 1.x as 2.x-dev now requires PHP 7.2
-
-## 2018-06-16 0.6.0
-
-Features:
-
- - [CodeTransform] Transformer to fix namesapce / class name #474
-
-Improvements:
-
- - [WorseReflection] Resolve UseNameVariables (e.g. context menu `use ($f<>oo)`). #466
- - [Application] Improved status (show current version) #481
- - [CodeTransform] Better handling of new file generation
- - [Docs] Added Development section
-
-Bug fixes:
-
- - [WorseReflection] access property on null error when resolving incomplete
- function variable use.
- - [CodeTransform] Generate method does can use pseudo type for return type #486
- - [Vim Plugin] Goto reference in a modified file causes warning #477.
- - [Application] Overridden CWD not being passed to `Paths` (affected config
- file resolution).
- - [Application] Fixed find references regression (only the current class
- wasn't being checked for references..)
-
-## 2018-05-20 0.5.0
-
-Features:
-
- - [Completion] Parameter completion, suggests variables that are valid for
- the parameter position.
-
-Refactoring:
-
- - [SourceCodeFilesystem] Public API accepts scalar paths in addition to
- value objects.
-
-Improvements:
-
- - [Documentation] Updated VIM completion plugin docs including
- `phpactor/ncm-phpactor` fork (mainline is not maintained currently).
-
-## 2018-05-01 0.4.0
-
-Features:
-
- - [Navigation] Reflection navigation: navigate to related classes (currently
- supports parent class and interfaces).
- - [Completion] Built-in function completion, #371
- - [Completion] _Experimental_ class completion: complete use, new and
- extends. Class names inferred from file names.
- - [GotoDefinition] Goto function definitions (currently limited to functions
- defined by the PHPStorm stubs).
-
-Improvements:
-
- - [ClassMover] Find/replace references will only traverse possible classes
- when givn a known class member #349 (also it will no longer ask the scope,
- instead defaulting to either composer or full-filesystem search depending
- on env).
- - [ClassMover] (RPC) Will update current (unsaved) source.
- - [vim-plugin] Correctly handle expanding class when at beginning of word, #438 thanks @greg0ire
- - [vim-plugin] Reload file before replacing contents, fixes #445
- - [vim-plugin] File references, do not show quick fix list if all references
- are in current file.
- - [vim-plugin] Completion - trigger on any word-like, fixes #443
- - [WorseReflection] Support for `@property` type override (but doesn't
- create a "pretend" property).
- - [Application] Pass the Phpactor vendor directory as an argument to the
- Application and include vendor files (e.g. stubs) relative to that, fixes
- #460
- - [Application] Use XDG data directory for cache.
- - [Documentation] Typo fix, thanks @pierreboissinot
-
-Bug fixes:
-
- - [RPC] Import class from context menu, uses context class path
- instead of current #448
- - [CodeBuilder] Regression where already-existing names are imported fixes
- #452
- - [Application] Fixed location of cache directory.
- - [Application] Fixed binary path, thanks @talbergs
- - [RPC] Specify completion type for text input, fixes #455
-
-Refactoring:
-
- - [WorseReflection] Full support for reflecting functions.
- - [WorseReflection] All member collections extend common interface,
- class-likes have a `members(): ReflectionMemberCollection` method.
- - [Completion] Refactored to make interface more efficient, decoupled
- formatting from completion.
- - [Completion] Made existing completors a subset of tolerant-parser
- completors (means there is one "chain" tolerant completor which delegates
- to the other completors and we only have to parse once).
-
-## 0.3.0
-
-Features:
-
- - [Application] Disable XDebug by default, very much improve performance.
- Fixes #317
-
-Improvements:
-
- - [Completion] Do not evaluate left operand when completing expression,
- #380
- - [RPC] Request validation (no more undefined index errors).
- - [WorseReflection] Classes inherit constants from interfaces.
- - [CodeBuilder] Use statements added after the first lexigraphically
- inferior existing use-statement, fixes #176. Thanks @greg0ire.
-
-Bug fixes:
-
- - [WorseReflection] Associated class for trait methods is the trait
- itself, not the class it's used in, #412
- - [WorseReflection] Do not evaluate assignments with missing tokens.
- - [SourceCodeFilesystem] Non-existing paths not ignored.
- - [CodeTransform] Indentation not being taken into account for code
- updates (fixes #423).
- - [WorseReflection] Tolerate incomplete if statements, fixes #424
- - [WorseReflection] Tolerate missing token in expression evaluator #430
-
-## 0.2.0
-
-Features:
-
- - [VIM Plugin] `g:phpactorBranch` can be used to set the update branch.
- - [WorseReflection] Support parenthesised expressions (i.e. complete for `(new Foobar())->`), #279
-
-Improvements:
-
- - [Application] Large restructuring of code, almost everything is now in an extension.
- - [WorseReflection] [problem with name import](https://github.com/phpactor/worse-reflection/pull/37) (thanks @adeslade)
- - [WorseReflection] All class members implement common interface, fixes
- #283
- - [VIM Plugin] Disable the omni-complete errors by default, as this breaks
- the assumptions of some auto-complete managers (set
- `g:phpactorOmniError` to `v:true` to enable again), fixes #370.
- - [VIM Plugin] Only define settings if not already set.
- - [WorseReflection] `Type#__toString` represents arrays and collections
- - [WorseReflection] Improved `Type` class.
- - [Completion] Use partial match to filter class members, fixes #321
- - [phpactor.vim] Correctly return start position for omni-complete
- - [Docblock] Be tolerant of invalid tags, fixes #382
- - [WorseReflection] Refactored FrameBuilder: Extracted walkers
- - [WorseReflection] [Expression evaluator](https://github.com/phpactor/worse-reflection/blob/master/lib/Core/Inference/ExpressionEvaluator.php).
-
-Bugfixes:
-
- - [SourceCodeFilesystem] Support symlinks in vendor dir #396
- - [WorseReflection] trait lists were not being correctly interpreted #320
- - [WorseReflection] could not find class "NULL"...
- - [SourceCodeFilesystem] Support symlinks in vendor dir #396
- - [Dockblock] Tolerate extra spaces, fixes #365
- - [Completion] Was using the type of the first declared variable, instead
- of the last before the offset.
- - [Completion] Used `Type#__toString` to reflect class.
- - [CodeBuilder] Extract method rewrites arguments #361
- - [VimPlugin] Fixed goto definition, #398
- - [WorseReflection] [problem with name import](https://github.com/phpactor/worse-reflection/pull/37) (thanks @adeslade)
-
-## 0.1.0
-
-**2018-04-03**
-
-First tagged version, changes from 30th March.
-
-- **CodeTransform**
- - New implementation of class import
- - Offer to alias existing classes,
- - Error message if class in same namespace,
-- **Completion**
- - New [Completion library](https://github.com/phpactor/completion).
- - Improved formatting.
- - Local variable completion.
-- **Documentation**
- - Configuration [documentation](http://phpactor.github.io/phpactor/configuration.html).
- - Better Drupal integration (thanks @fenetikm).
- - VIM Plugin documentation (`:help phpactor`) (thanks @joereynolds)
-- **RPC**
- - Request Replay: replay requests made from the IDE.
-- **WorseReflection**
- - Docblocks for Arrays and simple `Collection` supported.
- - Foreach supported.
- - Method `@param` supported.
-- **Infrastructure**
- - All packages are on packagist.
- - [Infrastructure] Do not store PHPBench results on Travis if PR is a fork.
-- Various bug fixes everywhere.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 981cd3ffbd..0000000000
--- a/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2018 Daniel Leech
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 40f2f508fb..0000000000
--- a/Makefile
+++ /dev/null
@@ -1,44 +0,0 @@
-# Minimal makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line, and also
-# from the environment for the first two.
-SPHINXOPTS ?= -W
-SPHINXBUILD ?= sphinx-build
-SPHINXAUTOBUILD ?= sphinx-autobuild
-SOURCEDIR = doc
-BUILDDIR = build
-
-.PHONY: help sphinx
-
-build:
- mkdir build
-
-composer:
- composer install --no-scripts --optimize-autoloader --classmap-authoritative
-
-vimdoc:
- docker compose run php vimdoc .
-
-configreference:
- ./bin/phpactor development:generate-documentation extension > doc/reference/configuration.rst
- ./bin/phpactor development:generate-documentation rpc > doc/reference/rpc_command.rst
- ./bin/phpactor development:generate-documentation diagnostic > doc/reference/diagnostic.rst
-
-# Put it first so that "make" without argument is like "make help".
-help:
- docker compose run php $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-sphinxwatch:
- docker compose run php $(SPHINXAUTOBUILD) "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-sphinx:
- docker compose run php $(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-sphinxlatex:
- docker compose run php $(SPHINXBUILD) -M latex "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-docs: composer configreference vimdoc sphinx
-
-clean:
- rm -Rf build
diff --git a/README.md b/README.md
deleted file mode 100644
index c78442927c..0000000000
--- a/README.md
+++ /dev/null
@@ -1,90 +0,0 @@
-Phpactor
-========
-
-> [!WARNING]
-> This language server may not be the one you're looking for.
->
-> I personally use it and will continue to maintain it until I don't use it
-> anymore. There are new and interesting open source language servers being
-> developed that can offer far more performant capabilities. I think Phpactor
-> still offers some great features, especially in regards to code actions and
-> I genuinely miss some functionality when using servers for Rust, Go and
-> Typescript.
->
-> There are many parts of this project that I'm proud of but ultimately it has
-> some short-comings in regards to performance, accuracy and maintainability
-> that I'm not capable of addressing at this time.
-> [YMMV](https://en.wiktionary.org/wiki/your_mileage_may_vary).
-
-
-
-
-
-This project aims to provide heavy-lifting *refactoring* and *introspection*
-tools which can be used standalone or as the backend for a text editor to
-provide intelligent code completion.
-
-- Accurate code [completion](https://phpactor.readthedocs.io/en/master/reference/completion.html) including class name auto-import.
-- [Various](https://phpactor.readthedocs.io/en/master/reference/refactorings.html) refactoring,fixes and code generation options.
-- Provides a [Language Server](https://phpactor.readthedocs.io/en/master/usage/language-server.html)
-- Native [VIM plugin](https://phpactor.readthedocs.io/en/master/usage/vim-plugin.html) ([emacs](https://github.com/emacs-php/phpactor.el) plugin is in development).
-- [Navigation](https://phpactor.readthedocs.io/en/master/reference/navigation.html) (jump to
- definition, related classes, references etc).
-- [More](https://phpactor.readthedocs.io/en/master).
-
-Installation
-------------
-
-Phpactor is a general tool, it is not intended that it be installed as a project dependency.
-
-See
-[Installation](https://phpactor.readthedocs.io/en/master/usage/standalone.html)
-for installation instructions.
-
-Requirements
-------------
-
-- PHP 8.2+
-- PHP [mbstring](https://www.php.net/manual/en/book.mbstring.php) extension.
-- [Composer](https://getcomposer.org/)
-- Linux or MacOS (Windows users will need to use [WSL](https://learn.microsoft.com/en-us/windows/wsl/install))
-
-Project Recommendations
------------------------
-
-Phpactor will perform better with [Composer](https://getcomposer.org) and, to
-a lesser extent, with [GiT](https://git-scm.org).
-
-Documentation
--------------
-
-Full documentation can be found on [Read the Docs](https://phpactor.readthedocs.io/en/master)
-
-Community
----------
-
-- Follow [@phpactor](https://phpc.social/@phpactor) on 🦣 Mastodon for latest news.
-- Join the `#phpactor` channel on the Slack [Symfony Devs](https://symfony.com/slack-invite) channel.
-
-Contributing
-------------
-
-This package is open source and welcomes contributions! Feel free to open a
-pull request on this repository.
-
-Support
--------
-
-- Create an issue on the main [Phpactor](https://github.com/phpactor/phpactor) repository.
-- Join the `#phpactor` channel on the Slack [Symfony Devs](https://symfony.com/slack-invite) channel.
-
-Sponsors
---------
-
-The following organisations are providing either financial support or free
-services. If you would like to support Phpactor development financially you
-can [sponsor me](https://github.com/sponsors/dantleech).
-
-### Tinkerwell
-
-[](https://tinkerwell.app/)
diff --git a/autoload/health/phpactor.vim b/autoload/health/phpactor.vim
deleted file mode 100644
index bc8bf6b88d..0000000000
--- a/autoload/health/phpactor.vim
+++ /dev/null
@@ -1,40 +0,0 @@
-function! s:check_info(status) abort
- call v:lua.vim.health.start('Info')
-
- call v:lua.vim.health.info('Phpactor version: '. a:status.phpactor_version)
- call v:lua.vim.health.info('PHP version: '. a:status.php_version)
- call v:lua.vim.health.info('Filesystems'. join(a:status.filesystems, ', '))
- call v:lua.vim.health.info('Working directory'. a:status.cwd)
-endfunction
-
-function! s:check_diagnostics(diagnostics) abort
- call v:lua.vim.health.start('Diagnostics')
-
- for [l:diagnostic, l:isOk] in items(a:diagnostics)
- if l:isOk
- call v:lua.vim.health.ok(l:diagnostic)
- else
- call v:lua.vim.health.warn(l:diagnostic)
- endif
- endfor
-endfunction
-
-function! s:check_config_files(configFiles) abort
- call v:lua.vim.health.start('Config files (missing is not bad)')
-
- for [l:configFile, l:isOk] in items(a:configFiles)
- if l:isOk
- call v:lua.vim.health.ok(l:configFile)
- else
- call v:lua.vim.health.warn(l:configFile)
- endif
- endfor
-endfunction
-
-function! health#phpactor#check() abort
- let l:status = phpactor#rpc('status', {'type': 'detailed'})
-
- call s:check_info(l:status)
- call s:check_diagnostics(l:status.diagnostics)
- call s:check_config_files(l:status.config_files)
-endfunction
diff --git a/autoload/phpactor.vim b/autoload/phpactor.vim
deleted file mode 100644
index c14f202b90..0000000000
--- a/autoload/phpactor.vim
+++ /dev/null
@@ -1,856 +0,0 @@
-""
-" @section Introduction, intro
-" @order intro config completion commands mappings
-"
-" Phpactor is a auto-completion, refactoring and code-navigation tool for PHP.
-" This is the help file for the VIM client. For more information see the
-" official website: https://phpactor.github.io/phpactor/
-"
-" NOTE: This help is auto-generated from the VimScript using
-" https://github.com/google/vimdoc. See
-" https://phpactor.github.io/phpactor/developing.html#vim-help
-
-let s:_phpactorCompletionMeta = {}
-
-function! phpactor#Update()
- let current = getcwd()
- execute 'cd ' . g:phpactorpath
- echo system('git checkout ' . g:phpactorBranch)
- echo system('git pull origin ' . g:phpactorBranch)
- echo system('composer install --optimize-autoloader --classmap-authoritative')
- execute 'cd ' . current
-endfunction
-
-function! phpactor#Complete(findstart, base)
-
- let lineOffset = line2byte(line("."))
-
- " get the source up until the cursor
- let source = join(getline(1,line('.') - 1), "\n")
- let partialLine = getline(line('.'))[0:col('.') - 2]
- let source = source . "\n" . partialLine
-
- if a:findstart
-
- let patterns = ["[\$0-9A-Za-z_]\\+$"]
-
- for pattern in patterns
- let pos = match(source, pattern)
-
- if -1 != pos
- return pos - lineOffset + 1
- endif
- endfor
-
- return -1
- endif
-
- let offset = lineOffset + col('.') - 2
- let offset = offset + strlen(a:base)
- let source = source . a:base . "\n" . join(getline(line('.') + 1, '$'), "\n")
-
- let result = phpactor#rpc("complete", { "offset": offset, "source": source, "type": &ft})
- let suggestions = result['suggestions']
- let issues = result['issues']
-
- let completions = []
- let s:_phpactorCompletionMeta = {}
-
- if !empty(suggestions)
- for suggestion in suggestions
- let completion = {
- \ 'word': suggestion['name'],
- \ 'abbr': phpactor#_completeTruncateLabel(suggestion['label'], g:phpactorCompleteLabelTruncateLength),
- \ 'menu': suggestion['short_description'],
- \ 'kind': suggestion['type'],
- \ 'dup': 1,
- \ 'icase': g:phpactorCompletionIgnoreCase
- \ }
- call add(completions, completion)
- let s:_phpactorCompletionMeta[phpactor#_completionItemHash(completion)] = suggestion
- endfor
- endif
-
- return completions
-endfunction
-
-function! phpactor#_completeTruncateLabel(label, length)
- if strlen(a:label) < a:length
- return a:label
- endif
-
- return strpart(a:label, 0, a:length - 3) . '...'
-endfunction
-
-function! phpactor#_completionItemHash(completion)
- return a:completion['word'] . a:completion['menu'] . a:completion['kind']
-endfunction
-
-function! phpactor#_completeImportClass(completedItem)
-
- if get(b:, 'phpactorOmniAutoClassImport', g:phpactorOmniAutoClassImport) != v:true
- return
- endif
-
- if !has_key(a:completedItem, "word")
- return
- endif
-
- let hash = phpactor#_completionItemHash(a:completedItem)
- if !has_key(s:_phpactorCompletionMeta, hash)
- return
- endif
-
- let suggestion = s:_phpactorCompletionMeta[hash]
-
- if !empty(get(suggestion, "class_import", ""))
- call phpactor#rpc("import_class", {
- \ "qualified_name": suggestion['class_import'],
- \ "offset": phpactor#_offset(),
- \ "source": phpactor#_source(),
- \ "path": expand('%:p')})
- endif
-
- let s:_phpactorCompletionMeta = {}
-
-endfunction
-
-function! phpactor#ExtractMethod(...)
- let positions = {}
-
- if 0 == a:0 " Visual mode - backward compatibility
- let positions.start = phpactor#_selectionStart()
- let positions.end = phpactor#_selectionEnd()
- elseif a:1 ==? 'v' " Visual mode
- let positions.start = phpactor#_selectionStart()
- let positions.end = phpactor#_selectionEnd()
- else " Linewise or characterwise motion
- let linewise = 'line' == a:1
-
- let positions.start = s:getStartOffsetFromMark("'[", linewise)
- let positions.end = s:getEndOffsetFromMark("']", linewise)
- endif
-
- call phpactor#rpc("extract_method", { "path": phpactor#_path(), "offset_start": positions.start, "offset_end": positions.end, "source": phpactor#_source()})
-endfunction
-
-function! phpactor#ExtractExpression(type)
- let positions = {}
-
- if v:true == a:type " Invoked from Visual mode - backward compatibility
- let positions.start = phpactor#_selectionStart()
- let positions.end = phpactor#_selectionEnd()
- elseif v:false == a:type " Invoked from an offset - backward compatibility
- let positions.start = phpactor#_offset()
- let positions.end = v:null
- elseif a:type ==? 'v' " Visual mode
- let positions.start = phpactor#_selectionStart()
- let positions.end = phpactor#_selectionEnd()
- else " Linewise or characterwise motion
- let linewise = 'line' == a:type
-
- let positions.start = s:getStartOffsetFromMark("'[", linewise)
- let positions.end = s:getEndOffsetFromMark("']", linewise)
- endif
-
- call phpactor#rpc("extract_expression", { "path": phpactor#_path(), "offset_start": positions.start, "offset_end": positions.end, "source": phpactor#_source()})
-endfunction
-
-function! phpactor#ExtractConstant()
- call phpactor#rpc("extract_constant", { "offset": phpactor#_offset(), "source": phpactor#_source(), "path": phpactor#_path()})
-endfunction
-
-function! phpactor#ClassExpand()
- let word = expand("")
- let classInfo = phpactor#rpc("class_search", { "short_name": word })
-
- if (empty(classInfo))
- return
- endif
-
- let line = getline('.')
- let char = line[col('.') - 2]
- let namespace_prefix = classInfo['class_namespace'] . "\\"
-
- " otherwise goto start of word
- execute "normal! ciw" . namespace_prefix.word
-endfunction
-
-function! phpactor#UseAdd()
- call phpactor#ImportClass()
-endfunction
-function! phpactor#ImportClass()
- call phpactor#rpc("import_class", {"offset": phpactor#_offset(), "source": phpactor#_source(), "path": expand('%:p')})
-endfunction
-function! phpactor#ImportMissingClasses()
- call phpactor#rpc("import_missing_classes", {"source": phpactor#_source(), "path": expand('%:p')})
-endfunction
-
-""
-" @default target=`edit`
-" @default mods=''
-"
-" Goto the definition of the symbol under the cursor.
-" Open the definition in the [target] window, see @section(window-target) for
-" the list of possible targets.
-" [mods] is a string containing || values separated by a space.
-"
-" Examples:
-" >
-" " Opens in the current buffer
-" call phpactor#GotoDefinition()
-"
-" " Opens in a vertical split opened on the right side
-" call phpactor#GotoDefinition('split', 'vertical botright')
-"
-" " Opens in a new tab
-" call phpactor#GotoDefinition('tabnew')
-" <
-function! phpactor#GotoDefinition(...)
- let target = !empty(a:0 ? a:1 : '') ? a:1 : 'edit'
- let mods = a:0 > 1 ? a:2 : ''
-
- call phpactor#rpc("goto_definition", {
- \ "offset": phpactor#_offset(),
- \ "source": phpactor#_source(),
- \ "path": expand('%:p'),
- \ 'language': &ft,
- \ }, {
- \ "target": target,
- \ "mods": mods,
- \ })
-endfunction
-
-""
-" @usage [target] [mods]
-"
-" Same as @function(phpactor#GotoDefinition) but goto the implementation of
-" the symbol under the cursor.
-"
-" If there is more than one result the quickfix strategy will be used and [target]
-" will be ignored, see @setting(g:phpactorQuickfixStrategy).
-function! phpactor#GotoImplementations(...)
- let target = !empty(a:0 ? a:1 : '') ? a:1 : 'edit'
- let mods = a:0 > 1 ? a:2 : ''
-
- call phpactor#rpc("goto_implementation", {
- \ "offset": phpactor#_offset(),
- \ "source": phpactor#_source(),
- \ "path": expand('%:p'),
- \ 'language': &ft,
- \ }, {
- \ "target": target,
- \ "mods": mods,
- \ })
-endfunction
-
-""
-" @usage [target] [mods]
-"
-" Same as @function(phpactor#GotoDefinition) but goto the type of
-" the symbol under the cursor.
-function! phpactor#GotoType(...)
- let target = !empty(a:0 ? a:1 : '') ? a:1 : 'edit'
- let mods = a:0 > 1 ? a:2 : ''
-
- call phpactor#rpc('goto_type', {
- \ 'offset': phpactor#_offset(),
- \ 'source': phpactor#_source(),
- \ 'path': expand('%:p'),
- \ 'language': &ft,
- \ }, {
- \ "target": target,
- \ "mods": mods,
- \ })
-endfunction
-
-function! phpactor#Hover()
- call phpactor#rpc("hover", { "offset": phpactor#_offset(), "source": phpactor#_source() })
-endfunction
-
-function! phpactor#ContextMenu()
- call phpactor#rpc("context_menu", { "offset": phpactor#_offset(), "source": phpactor#_source(), "current_path": expand('%:p') })
-endfunction
-
-function! phpactor#CopyFile()
- call phpactor#rpc("copy_class", { "source_path": phpactor#_path() })
-endfunction
-
-function! phpactor#MoveFile()
- call phpactor#rpc("move_class", { "source_path": phpactor#_path() })
-endfunction
-
-function! phpactor#Trust()
- call phpactor#rpc("trust", { "trust": 1 })
-endfunction
-
-function! phpactor#Untrust()
- call phpactor#rpc("trust", { "trust": 0 })
-endfunction
-
-function! phpactor#OffsetTypeInfo()
- call phpactor#rpc("offset_info", { "offset": phpactor#_offset(), "source": phpactor#_source()})
-endfunction
-
-function! phpactor#Transform(...)
- let transform = get(a:, 1, '')
-
- let args = { "path": phpactor#_path(), "source": phpactor#_source() }
-
- if transform != ''
- let args.transform = transform
- endif
-
- call phpactor#rpc("transform", args)
-endfunction
-
-function! phpactor#ClassNew()
- call phpactor#rpc("class_new", { "current_path": phpactor#_path() })
-endfunction
-
-function! phpactor#ClassInflect()
- call phpactor#rpc("class_inflect", { "current_path": phpactor#_path() })
-endfunction
-
-" Deprecated!! Use FindReferences
-function! phpactor#ClassReferences()
- call phpactor#FindReferences()
-endfunction
-
-function! phpactor#FindReferences()
- call phpactor#rpc("references", { "offset": phpactor#_offset(), "source": phpactor#_source(), "path": phpactor#_path()})
-endfunction
-
-function! phpactor#Navigate()
- call phpactor#rpc("navigate", { "source_path": phpactor#_path() })
-endfunction
-
-function! phpactor#CacheClear()
- call phpactor#rpc("cache_clear", {})
-endfunction
-
-function! phpactor#Status()
- if exists(':terminal')
- let l:workspaceDir = phpactor#getRootDirectory()
-
- " note that we should escape these arguments, but using the list syntax
- " here causes tests to fail on travis with VIM 8.3 ...
- let l:cmd = g:phpactorPhpBin . ' ' . g:phpactorbinpath . ' status --working-dir=' . l:workspaceDir
-
- if has('nvim')
- execute 'split term://' . l:cmd
- " Press any key to leave
- normal i
- else
- execute 'terminal ' . l:cmd
- endif
- else
- call phpactor#rpc("status", {'type': 'formatted'})
- endif
-endfunction
-
-function! phpactor#Config()
- call phpactor#rpc("config", {})
-endfunction
-
-function! phpactor#GetNamespace()
- let fileInfo = phpactor#rpc("file_info", { "path": phpactor#_path() })
-
- return fileInfo['class_namespace']
-endfunction
-
-function! phpactor#GetClassFullName()
- let fileInfo = phpactor#rpc("file_info", { "path": phpactor#_path() })
-
- return fileInfo['class']
-endfunction
-
-function! phpactor#CopyFullClassName()
- let className = phpactor#GetClassFullName()
- if empty(className)
- echo "No class name found for the current file"
- else
- let @+ = className
- echo printf("Class Name copied to clipboard: %s", className)
- endif
-endfunction
-
-function! phpactor#ChangeVisibility()
- call phpactor#rpc("change_visibility", { "offset": phpactor#_offset(), "source": phpactor#_source(), "path": expand('%:p') })
-endfunction
-
-function! phpactor#GenerateAccessors()
- call phpactor#rpc("generate_accessor", { "source": phpactor#_source(), "path": expand('%:p'), 'offset': phpactor#_offset() })
-endfunction
-
-function! phpactor#GenerateMutators()
- call phpactor#rpc("generate_mutator", { "source": phpactor#_source(), "path": expand('%:p'), 'offset': phpactor#_offset() })
-endfunction
-
-"""""""""""""""""""""""
-" Utility functions
-"""""""""""""""""""""""
-function! s:isOpenInCurrentWindow(filePath)
- return phpactor#_path() == a:filePath
-endfunction
-
-function! phpactor#_switchToBufferOrEdit(filePath)
- if s:isOpenInCurrentWindow(a:filePath)
- return v:false
- endif
-
- let bufferNumber = bufnr(a:filePath . '$')
-
- let command = (bufferNumber == -1)
- \ ? ":edit " . a:filePath
- \ : ":buffer " . bufferNumber
-
- exec command
-endfunction
-
-function! phpactor#_offset()
- return line2byte(line('.')) + col('.') - 1
-endfunction
-
-function! phpactor#_source()
- return join(getline(1,'$'), "\n")
-endfunction
-
-function! phpactor#_path()
- let l:path = expand('%:p')
-
- if filereadable(l:path) || stridx(l:path, '/') == 0
- return l:path
- endif
-
- " todo if empty path
- "
- return printf('%s/%s', g:phpactorInitialCwd, l:path)
-endfunction
-
-function! s:getStartOffsetFromMark(mark, linewise)
- let [line, column] = getpos(a:mark)[1:2]
- let offset = line2byte(line)
-
- if v:true == a:linewise
- return offset - 1
- endif
-
- return offset + column - 2
-endfunction
-
-function! s:getEndOffsetFromMark(mark, linewise)
- let [line, column] = getpos(a:mark)[1:2]
- let offset = line2byte(line)
- let lineLenght = strlen(getline(line))
-
- if v:true == a:linewise
- return offset + lineLenght - 1
- endif
-
- " Note VIM returns 2,147,483,647 on this system when in block select mode
- if (column > 1000000)
- let column = lineLenght
- endif
-
- return offset + column - 1
-endfunction
-
-function! phpactor#_selectionStart()
- return s:getStartOffsetFromMark("'<", v:false)
-endfunction
-
-function! phpactor#_selectionEnd()
- return s:getEndOffsetFromMark("'>", v:false)
-endfunction
-
-function! phpactor#_applyTextEdits(path, edits)
- call phpactor#_switchToBufferOrEdit(a:path)
-
- let postCursorPosition = getpos('.')
- let curLine = postCursorPosition[1]
- let numberOfLinesToPreviousPosition = 0
-
- for edit in a:edits
- let startLine = edit.start.line
- let endLine = edit.end.line
-
- if edit.start.character != 0 || edit.end.character != 0
- throw "Non-zero character offsets not supported in text edits, got " . json_encode(edit)
- endif
-
- let numberOfDeletedLines = endLine - startLine
- if numberOfDeletedLines > 0
- silent execute printf('keepjumps %d,%dd _', startLine + 1, endLine)
-
- if startLine < curLine && curLine <= endLine
- let numberOfLinesToPreviousPosition += endLine - curLine + 1
- elseif endLine < curLine
- let curLine -= numberOfDeletedLines
- endif
- endif
-
- let newLines = edit.text == "\n" ? [''] : split(edit.text, "\n")
- keepjumps call append(startLine, newLines)
-
- if startLine < curLine
- let curLine += len(newLines)
- endif
- endfor
-
- let postCursorPosition[1] = curLine - numberOfLinesToPreviousPosition
- call setpos('.', postCursorPosition)
-endfunction
-
-function! phpactor#getRootDirectory() abort
- let l:Strategy = get(b:, 'PhpactorRootDirectoryStrategy', g:PhpactorRootDirectoryStrategy)
-
- if type(function('type')) != type(l:Strategy)
- let l:Strategy = {-> g:phpactorInitialCwd}
- endif
-
- return l:Strategy()
-endfunction
-
-"""""""""""""""""""""""
-" RPC -->-->-->-->-->--
-"""""""""""""""""""""""
-
-function! phpactor#rpc(action, arguments, ...)
- " Remove any existing output in the message window
- execute ':redraw'
-
- let request = { "action": a:action, "parameters": a:arguments }
-
- let l:workspaceDir = phpactor#getRootDirectory()
-
- " note that we should escape these arguments, but using the list syntax
- " here causes tests to fail on travis with VIM 8.3 ...
- let l:cmd = g:phpactorPhpBin . ' ' . g:phpactorbinpath . ' rpc --working-dir=' . l:workspaceDir
-
- let result = system(l:cmd, json_encode(request))
-
- if (v:shell_error == 0)
- try
- let response = json_decode(result)
- catch
- throw "Could not parse response from Phpactor: " . v:exception
- endtry
-
- let actionName = response['action']
- let parameters = extend(copy(response['parameters']), a:0 ? a:1 : {})
-
- let response = phpactor#_rpc_dispatch(actionName, parameters)
-
- if !empty(response)
- return response
- endif
- else
- echo "Phpactor returned an error: " . result
- return
- endif
-endfunction
-
-function! phpactor#_rpc_dispatch(actionName, parameters)
-
- " >> return_choice
- if a:actionName == "return"
- return a:parameters["value"]
- endif
-
- " >> return_choice
- if a:actionName == "return_choice"
- let list = []
- let c = 1
- for choice in a:parameters["choices"]
- call add(list, c . ") " . choice["name"])
- let c = c + 1
- endfor
-
- let choice = inputlist(list)
-
- if (choice == 0)
- return
- endif
-
- let choice = choice - 1
-
- return a:parameters["choices"][choice]["value"]
- endif
-
- " >> echo
- if a:actionName == "echo"
- echo a:parameters["message"]
- return
- endif
-
- " >> error
- if a:actionName == "error"
- echo "Error from Phpactor: " . a:parameters["message"]
- return
- endif
-
- " >> collection
- if a:actionName == "collection"
- for action in a:parameters["actions"]
- let result = phpactor#_rpc_dispatch(action["name"], action["parameters"])
-
- if !empty(result)
- return result
- endif
- endfor
-
- return
- endif
-
- " >> open_file
- if a:actionName == "open_file"
- let changedFileOrWindow = v:true
-
- let l:target = get(a:parameters, 'target', 'edit')
- let l:mods = get(a:parameters, 'mods', '')
-
- if 'focused_window' ==# l:target
- let l:target = 'edit'
- elseif 'hsplit' ==# l:target
- let l:target = 'split'
- elseif 'new_tab' ==# l:target
- let l:target = 'tabedit'
- endif
-
- call s:openFileInSelectedTarget(
- \ a:parameters["path"],
- \ l:target,
- \ l:mods,
- \ get(a:parameters, "use_open_window", g:phpactorUseOpenWindows),
- \ a:parameters["force_reload"]
- \ )
-
- if a:parameters["target"] == 'edit'
- let changedFileOrWindow = !s:isOpenInCurrentWindow(a:parameters["path"])
- endif
-
- if (a:parameters['offset'])
- let keepjumps = changedFileOrWindow ? 'keepjumps' : ''
-
- exec keepjumps . ":goto " . (a:parameters['offset'] + 1)
- normal! zz
- endif
- return
- endif
-
- " >> close_file
- if a:actionName == "close_file"
- let bufferNumber = bufnr(a:parameters['path']. '$')
-
- if (bufferNumber == -1)
- return
- endif
-
- exec ":bdelete " . bufferNumber
- return
- endif
-
- " >> file references
- if a:actionName == "file_references"
- " if there is only one file, and it is the open file, don't
- " bother opening the quick fix window
- if len(a:parameters['file_references']) == 1
- let fileRefs = a:parameters['file_references'][0]
- if -1 != match(fileRefs['file'], bufname('%') . '$')
- return
- endif
- endif
-
- let results = []
- for fileReferences in a:parameters['file_references']
- for reference in fileReferences['references']
- call add(results, {
- \ 'filename': fileReferences['file'],
- \ 'lnum': reference['line_no'],
- \ 'col': reference['col_no'] + 1,
- \ 'text': reference['line']
- \ })
- endfor
- endfor
-
- call phpactor#quickfix#build(results)
-
- return
- endif
-
- " >> input_callback
- if a:actionName == "input_callback"
- let inputs = a:parameters['inputs']
- let action = a:parameters['callback']['action']
- let parameters = a:parameters['callback']['parameters']
-
- try
- return phpactor#_rpc_dispatch_input(inputs, action, parameters)
- catch /cancelled/
- redraw
- echo 'Cancelled'
- return
- endtry
- endif
-
- " >> information
- if a:actionName == "information"
- " We write to a temporary file and then "edit" it in the preview
- " window. Not sure if there is a better way to do this.
- let temp = resolve(tempname())
- execute 'pedit ' . temp
- wincmd P
- call append(0, split(a:parameters['information'], "\n"))
- execute ":1"
- silent write!
- wincmd p
- return
- endif
-
- " >> update file source
- "
- " NOTE: This method currently works on a line-by-line basis as currently
- " supported by Phpactor. We calculate the cursor offset by the
- " number of lines inserted before the actual cursor line. Character
- " offset is not taken into account, so same-line edits will cause an
- " incorrect post-edit cursor character offset.
- "
- if a:actionName == "update_file_source"
- call phpactor#_applyTextEdits(a:parameters['path'], a:parameters['edits'])
- return
- endif
-
- " >> replace_file_source
- if a:actionName == "replace_file_source"
-
- " if the file is open in a buffer, reload it before replacing it's
- " source (avoid file-modified-on-disk errors)
- if -1 != bufnr(a:parameters['path'] . '$')
- exec ":edit! " . a:parameters['path']
- endif
-
- call phpactor#_switchToBufferOrEdit(a:parameters['path'])
-
- " save the cursor position
- let savePos = getpos(".")
-
- " delete everything into the blackhole buffer
- exec "%d _"
-
- " insert the transformed source code
- execute ":put =a:parameters['source']"
-
- " `put` will leave a blank line at the start of the file, remove it
- execute ":1delete _"
-
- " restore the cursor position
- call setpos('.', savePos)
- return
- endif
-
- throw "Do not know how to handle action '" . a:actionName . "'"
-endfunction
-
-""
-" @section Window targets, window-targets
-" @parentsection commands
-"
-" Phpactor provide a few window targets to use with some commands.
-" See @command(PhpactorGotoDefinition) for an example of how to use them.
-"
-" Possible values are:
-" * `e`, `edit`, `ex`
-" * `new`, `vne`, `vnew`
-" * `sp`, `split`, `vs`, `vsplit`
-" * `vie`, `view`, `sv`, `sview`, `splitview`
-" * `tabe`, `tabedit`, `tabnew`
-
-function! phpactor#_window_targets() abort
- return [
- \ 'e', 'edit', 'ex',
- \ 'new', 'vne', 'vnew',
- \ 'sp', 'split', 'vs', 'vsplit',
- \ 'vie', 'view', 'sv', 'sview', 'splitview',
- \ 'tabe', 'tabedit', 'tabnew',
- \ ]
-endfunction
-
-function! s:openFileInSelectedTarget(filePath, target, mods, useOpenWindow, forceReload)
- let l:bufferNumber = bufnr(a:filePath . '$')
-
- if v:true == a:useOpenWindow && -1 != l:bufferNumber
- let l:firstWindowId = get(win_findbuf(l:bufferNumber), 0, v:null)
-
- if v:null != l:firstWindowId
- call win_gotoid(l:firstWindowId)
- if v:true == a:forceReload
- exec 'e!'
- endif
- return
- endif
- endif
-
- if -1 == index(phpactor#_window_targets(), a:target)
- echohl WarningMsg
- echomsg printf('Error executing: %s %s %s', a:mods, a:target, a:filePath)
- echomsg printf('Invalid target: %s', a:target)
- echomsg printf('Valid targets are: %s', join(phpactor#_window_targets(), ', '))
- echohl None
- return
- endif
-
- execute printf('%s %s %s', a:mods, a:target, a:filePath)
-endfunction
-
-function! phpactor#_rpc_dispatch_input_handler(Next, parameters, parameterName, result)
- let a:parameters[a:parameterName] = a:result
-
- call a:Next(a:parameters)
-endfunction
-
-function! phpactor#_rpc_dispatch_input(inputs, action, parameters)
- let input = remove(a:inputs, 0)
- let inputParameters = input['parameters']
-
- let Next = empty(a:inputs)
- \ ? function('phpactor#rpc', [a:action])
- \ : function('phpactor#_rpc_dispatch_input', [a:inputs, a:action])
-
- let ResultHandler = function('phpactor#_rpc_dispatch_input_handler', [
- \ Next,
- \ a:parameters,
- \ input['name'],
- \ ])
-
- " Remove any existing output in the message window
- execute ':redraw'
-
- if 'text' == input['type']
- let TypeHandler = function('phpactor#input#text', [
- \ inputParameters['label'],
- \ inputParameters['default'],
- \ inputParameters['type']
- \ ])
- elseif 'choice' == input['type']
- let TypeHandler = function('phpactor#input#choice', [
- \ inputParameters['label'],
- \ inputParameters['choices'],
- \ inputParameters['keyMap']
- \ ])
- elseif 'list' == input['type']
- let TypeHandler = function('phpactor#input#list', [
- \ inputParameters['label'],
- \ inputParameters['choices'],
- \ inputParameters['multi']
- \ ])
- elseif 'confirm' == input['type']
- let TypeHandler = function('phpactor#input#confirm', [
- \ inputParameters['label']
- \ ])
- else
- throw "Do not know how to handle input '" . input['type'] . "'"
- endif
-
- call TypeHandler(ResultHandler)
-endfunction
diff --git a/autoload/phpactor/completion.vim b/autoload/phpactor/completion.vim
deleted file mode 100644
index a790725ec1..0000000000
--- a/autoload/phpactor/completion.vim
+++ /dev/null
@@ -1,28 +0,0 @@
-""
-" @section Completion
-"
-" You will need to explicitly configure Phpactor to provide completion
-" capabilities.
-"
-" @subsection Omni-Completion
-"
-" Use VIMs native omni-completion (|compl-omni|)
-"
-" Enable omni-completion for PHP files: >
-"
-" autocmd FileType php setlocal omnifunc=phpactor#Complete
-"
-" For case sensitive searching see @setting(g:phpactorCompletionIgnoreCase)
-"
-" @subsection NCM2
-"
-" Nvim Completion Manager is a completion manager for Neovim.
-"
-" Install the integration plugin to get started: https://github.com/phpactor/ncm2-phpactor
-"
-" @subsection Deoplete
-"
-" Deoplete is another completion plugin.
-"
-" Install the Deoplete Phpactor
-" integration to get started: https://github.com/kristijanhusak/deoplete-phpactor
diff --git a/autoload/phpactor/input.vim b/autoload/phpactor/input.vim
deleted file mode 100644
index 29d15728a4..0000000000
--- a/autoload/phpactor/input.vim
+++ /dev/null
@@ -1,110 +0,0 @@
-function! phpactor#input#text(label, default, completionType, ResultHandler)
- if v:null != a:completionType
- let text = input(a:label, a:default, a:completionType)
- else
- let text = input(a:label, a:default)
- endif
-
- call a:ResultHandler(text)
-endfunction
-
-function! phpactor#input#confirm(label, ResultHandler)
- let choice = confirm(a:label, "&Yes\n&No\n")
-
- if choice == 1
- let response = v:true
- else
- let response = v:false
- endif
-
- call a:ResultHandler(response)
-endfunction
-
-let s:usedShortcuts = []
-function! phpactor#input#choice(label, choices, keyMap, ResultHandler)
- let s:usedShortcuts = []
- let list = []
-
- if empty(a:choices)
- call confirm("No choices available")
- throw "cancelled"
- endif
-
- for choiceLabel in keys(a:choices)
- let buffer = []
-
- " note that a:keyMap can be an empty list because PHP's json_decode
- " can't tell the difference between an empty list and an empty dict
- if !empty(a:keyMap) && has_key(a:keyMap, choiceLabel) && !empty(a:keyMap[choiceLabel])
- let confirmLabel = s:determineConfirmLabelFromPreference(choiceLabel, a:keyMap[choiceLabel])
- else
- let confirmLabel = s:determineConfirmLabel(choiceLabel)
- endif
-
- call add(list, confirmLabel)
- endfor
-
- let choice = confirm(a:label, join(list, "\n"))
-
- if (choice == 0)
- " this is an exception, not a message!
- throw "cancelled"
- endif
-
- call a:ResultHandler(keys(a:choices)[choice - 1])
-endfunction
-
-function! s:determineConfirmLabelFromPreference(choiceLabel, preference)
- let buffer = []
- let foundShortcut = v:false
-
- for char in split(a:choiceLabel, '\zs')
- if foundShortcut == v:false && tolower(char) == tolower(a:preference)
- let foundShortcut = v:true
-
- call add(buffer, '&' . a:preference)
- call add(s:usedShortcuts, a:preference)
- continue
- endif
-
- call add(buffer, char)
- endfor
-
- if foundShortcut == v:false
- " Could not find char in the label - add the shortcut at the end
- call add(buffer, '&' . a:preference)
- endif
-
- return join(buffer, "")
-endfunction
-
-function! s:determineConfirmLabel(choiceLabel)
- let foundShortcut = v:false
- let buffer = []
- for char in split(a:choiceLabel, '\zs')
- if v:false == foundShortcut && -1 == index(s:usedShortcuts, tolower(char))
- let foundShortcut = v:true
-
- call add(buffer, '&')
- call add(s:usedShortcuts, tolower(char))
- endif
-
- call add(buffer, char)
- endfor
-
- return join(buffer, "")
-endfunction
-
-function! phpactor#input#list(label, choices, multi, ResultHandler)
- let choices = sort(keys(a:choices))
-
- try
- let strategy = g:phpactorInputListStrategy
- call call(strategy, [a:label, choices, a:multi, a:ResultHandler])
- catch /E117/
- redraw!
- echo 'The strategy "'. strategy .'" is unknown, check the value of "g:phpactorInputListStrategy".'
- endtry
-endfunction
-
-" vim: et ts=4 sw=4 fdm=marker
diff --git a/autoload/phpactor/input/list.vim b/autoload/phpactor/input/list.vim
deleted file mode 100644
index 5bcfef8ee8..0000000000
--- a/autoload/phpactor/input/list.vim
+++ /dev/null
@@ -1,59 +0,0 @@
-function! phpactor#input#list#inputlist(label, choices, multi, ResultHandler)
- echo a:label
- let choice = inputlist(s:add_number_to_choices(a:choices))
-
- if (choice == 0)
- throw "cancelled"
- endif
-
- call a:ResultHandler(a:choices[choice - 1])
-endfunction
-
-" expreimental: this stategy currently does not work when used in a
-" non-terminal RPC step - https://github.com/phpactor/phpactor/issues/845
-function! phpactor#input#list#fzf(label, choices, multi, ResultHandler)
- let options = [
- \ '--tiebreak=index',
- \ '--layout=reverse-list',
- \ ]
- let sink = {
- \ 'sink': {key -> a:ResultHandler(a:choices[key - 1])},
- \ }
-
- if a:multi
- call extend(options, [
- \ '--multi',
- \ '--bind=ctrl-a:select-all,ctrl-d:deselect-all',
- \ ])
-
- let sink = {
- \ 'sink*': {results -> a:ResultHandler(map(
- \ results,
- \ {key, value -> a:choices[value - 1]}
- \ ))}
- \ }
- endif
-
- " sink works because "key" is converted to integer, so only the number is kept
- call fzf#run(extend({
- \ 'source': s:add_number_to_choices(a:choices),
- \ 'down': '30%',
- \ 'options': options
- \ }, sink))
-endfunction
-
-function! s:auto_detect_strategy()
- let strategy = 'inputlist'
-
- if get(g:, 'loaded_fzf', 0)
- let strategy = 'fzf'
- endif
-
- return 'phpactor#input#list#'. strategy
-endfunction
-
-function! s:add_number_to_choices(choices)
- return map(copy(a:choices), {key, value -> key + 1 .') '. value})
-endfunction
-
-" vim: et ts=4 sw=4 fdm=marker
diff --git a/autoload/phpactor/quickfix.vim b/autoload/phpactor/quickfix.vim
deleted file mode 100644
index 6ec7c2536b..0000000000
--- a/autoload/phpactor/quickfix.vim
+++ /dev/null
@@ -1,145 +0,0 @@
-function! phpactor#quickfix#vim(entries) abort
- call setqflist(a:entries)
- cw
-endfunction
-
-function! phpactor#quickfix#build(entries) abort
- try
- let strategy = g:phpactorQuickfixStrategy
- call call(strategy, [a:entries])
- catch /E117/
- redraw!
- echo 'The strategy "'. string(strategy) .'" is unknown, check the value of "g:phpactorQuickfixStrategy".'
- endtry
-endfunction
-
-function! phpactor#quickfix#fzf(entries) abort
- " Associate each entry data with a unique key
- let entries = {}
- " Keep track of the order of the entries by their key
- let sortedKeys = []
- for entry in a:entries
- let key = s:relative_path(entry['filename'])
- \ .':'. entry['lnum']
- \ .':'. (entry['col'])
- \ .':'. entry['text']
-
- let entries[key] = entry
- call add(sortedKeys, key)
- endfor
-
- let formatedEntries = s:align_pairs(sortedKeys, '^\(.\{-}:\d\+:\d\+:\)\s*\(.*\)\s*$', 100)
-
- let tmp = copy(entries)
- let entries = {}
- let source = [] " Need a list to keep the order (dict does not guarantee it)
- for key in sortedKeys
- let newKey = formatedEntries[key]
- let entries[newKey] = tmp[key]
- call add(source, newKey)
- endfor
- unlet tmp
-
- let actions = {
- \ 'ctrl-t': 'tab split',
- \ 'ctrl-x': 'split',
- \ 'ctrl-v': 'vsplit',
- \ 'ctrl-q': function('phpactor#quickfix#vim')
- \ }
-
- call fzf#run(fzf#wrap('find_references', fzf#vim#with_preview({
- \ 'source': source,
- \ 'down': '60%',
- \ '_action': actions,
- \ 'sink*': function('quickfix_sink', [entries, actions]),
- \ 'options': [
- \ '--exit-0',
- \ '--expect='. join(keys(actions), ','),
- \ '--multi',
- \ '--bind=ctrl-a:select-all,ctrl-d:deselect-all',
- \ '--inline-info',
- \ '--header', ":: Press \x1b[35mCTRL-Q\x1b[m to open the quickfix with your selection",
- \ '--delimiter=:', '--nth=1,4',
- \ '--reverse'
- \ ]}, 'up', '?'), 1))
-endfunction
-
-function! s:quickfix_sink(results, actions, lines) abort
- if 2 > len(a:lines)
- " Don't know how to handle this, should not append
- return
- endif
-
- let actionKey = remove(a:lines, 0)
- let Action = get(a:actions, actionKey, 'e')
- let items = map(copy(a:lines), {key, value -> a:results[value]})
-
- if type(function('call')) == type(Action)
- return Action(items)
- endif
-
- if len(a:lines) > 1
- augroup fzf_swap
- autocmd SwapExists * let v:swapchoice='o' | echohl WarningMsg
- \| echom 'fzf: E325: swap file exists: '. expand('')
- \| echohl None
- augroup END
- endif
-
- try
- let empty = empty(expand('%')) && 1 == line('$') && empty(getline(1)) && !&modified
- let autochdir = &autochdir
- set noautochdir
-
- for item in items
- let filename = fnameescape(item.filename)
- let Action = empty ? 'e' : Action " Use the current buffer if empty
-
- execute Action '+'.item.lnum filename
- execute 'normal!' item.col .'|'
- normal! zz
-
- if empty
- let empty = v:false
- endif
-
- if !has('patch-8.0.0177') && !has('nvim-0.2') && exists('#BufEnter')
- \ && isdirectory(item.filename)
- doautocmd BufEnter
- endif
- endfor
- catch /^Vim:Interrupt$/
- finally
- let &autochdir = autochdir
- silent! autocmd! fzf_swap
- endtry
-endfunction
-
-function! s:align_pairs(list, regexp, ...) abort
- let maxlen = 0
- let pairs = {}
- for elem in a:list
- let match = matchlist(elem, a:regexp)
- let [filename, text] = match[1:2]
- let maxlen = max([maxlen, len(filename)])
- let pairs[elem] = [filename, text]
- endfor
-
- let args = copy(a:000)
- let max = 60
- if 0 < len(args) && type(v:t_number) == type(args[0])
- let max = remove(args, 0)
- endif
-
- let maxlen = min([maxlen, max])
-
- return map(pairs, "printf('%-'.maxlen.'s', v:val[0]).' '.v:val[1]")
-endfunction
-
-function! s:relative_path(absolute_path)
- let l:cwd = getcwd()
-
- return substitute(a:absolute_path, l:cwd .'/', '', '')
-endfunction
-
-" vim: et ts=4 sw=4 fdm=marker
diff --git a/bin/phpactor b/bin/phpactor
deleted file mode 100755
index 1697fb3ca7..0000000000
--- a/bin/phpactor
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env php
-run(null, $output);
-} catch (Exception $e) {
- $application->renderThrowable($e, $output);
- exit(255);
-}
diff --git a/box.json b/box.json
deleted file mode 100644
index 2781c8aa7a..0000000000
--- a/box.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "compression": "GZ",
- "directories": [
- "templates"
- ],
- "files": [
- "LICENSE"
- ],
- "finder": [
- {
- "exclude": [
- "Tests"
- ],
- "in": "lib"
- },
- {
- "name": "{\\.(php|bash|fish|zsh)}",
- "exclude": [
- "tests",
- "test"
- ],
- "in": "vendor"
- }
- ],
- "git-tag": "git_tag",
- "intercept": true,
- "output": "build/phpactor.phar"
-}
diff --git a/composer.json b/composer.json
deleted file mode 100644
index 8dd4923ca0..0000000000
--- a/composer.json
+++ /dev/null
@@ -1,137 +0,0 @@
-{
- "name": "phpactor/phpactor",
- "description": "PHP refactoring and intellisense tool for text editors",
- "license": "MIT",
- "require": {
- "php": "^8.2",
- "ext-mbstring": "*",
- "ext-posix": "*",
- "ext-tokenizer": "*",
- "composer/xdebug-handler": "^3.0",
- "symfony/yaml": "^5.1",
- "phpactor/container": "^3.0",
- "phpactor/class-to-file": "~0.5",
- "twig/twig": "^3.4",
- "dnoegel/php-xdg-base-dir": "^0.1.0",
- "symfony/console": "^6.0",
- "dantleech/invoke": "^2.0",
- "phpactor/amp-fswatch": "^0.3.0",
- "amphp/process": "^1.1.5",
- "phpactor/phly-event-dispatcher": "^2.2.0",
- "phpactor/language-server": "^7.0.1",
- "phpactor/language-server-protocol": "^3.17.4",
- "dantleech/object-renderer": "^0.1.1",
- "monolog/monolog": "^2.10",
- "sebastian/diff": "^5.0",
- "webmozart/glob": "^4.4",
- "symfony/filesystem": "^6.0",
- "symfony/process": "^6.0",
- "jetbrains/phpstorm-stubs": "dev-master",
- "phpactor/tolerant-php-parser": "dev-phan-phactor-fixes",
- "phpactor/map-resolver": "^1.7.0",
- "webmozart/assert": "^1.11",
- "composer/semver": "^3.4",
- "myclabs/deep-copy": "^1.13"
- },
- "require-dev": {
- "blackfire/php-sdk": "^1.31",
- "dantleech/what-changed": "~0.4",
- "dms/phpunit-arraysubset-asserts": "dev-master",
- "friendsofphp/php-cs-fixer": "^3.32",
- "guzzlehttp/psr7": "^2.8",
- "jangregor/phpstan-prophecy": "^2",
- "open-telemetry/exporter-otlp": "^1.3",
- "open-telemetry/sdk": "^1.7",
- "php-http/guzzle7-adapter": "^1.1",
- "phpactor/test-utils": "^2.0.0",
- "phpbench/phpbench": "^1.6.0",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^2",
- "phpstan/phpstan-phpunit": "^2",
- "phpunit/phpunit": "^10.0",
- "psalm/phar": "6.14.1",
- "psr/log": "^1.1",
- "rector/rector": "^2",
- "squizlabs/php_codesniffer": "^3.7",
- "symfony/var-dumper": "^6.4"
- },
- "replace": {
- "phpactor/class-mover": "0.2.0",
- "phpactor/class-to-file-extension": "0.2.2",
- "phpactor/code-builder": "0.4.3",
- "phpactor/code-transform": "0.4.3",
- "phpactor/code-transform-extension": "0.2.2",
- "phpactor/completion": "*",
- "phpactor/completion-extension": "0.2.5",
- "phpactor/completion-rpc-extension": "0.2.3",
- "phpactor/completion-worse-extension": "0.2.4",
- "phpactor/composer-autoloader-extension": "0.2.3",
- "phpactor/config-loader": "0.1.2",
- "phpactor/console-extension": "0.1.6",
- "phpactor/debug-extension": "*",
- "phpactor/file-path-resolver": "0.8.3",
- "phpactor/file-path-resolver-extension": "0.3.4",
- "phpactor/indexer-extension": "0.3.3",
- "phpactor/language-server-extension": "0.6.4",
- "phpactor/language-server-phpactor-extensions": "0.5.3",
- "phpactor/logging-extension": "0.3.4",
- "phpactor/name": "0.1.1",
- "phpactor/path-finder": "0.1.2",
- "phpactor/php-extension": "0.1.1",
- "phpactor/reference-finder": "0.1.6",
- "phpactor/reference-finder-extension": "0.1.7",
- "phpactor/reference-finder-rpc-extension": "0.1.5",
- "phpactor/rpc-extension": "0.2.4",
- "phpactor/source-code-filesystem": "0.1.8",
- "phpactor/source-code-filesystem-extension": "0.1.5",
- "phpactor/worse-reference-finder-extension": "0.1.6",
- "phpactor/worse-reference-finder": "0.2.6",
- "phpactor/worse-reflection-extension": "0.2.5"
- },
- "config": {
- "platform": {
- "php": "8.2.0"
- },
- "allow-plugins": {
- "dantleech/what-changed": true,
- "phpstan/extension-installer": true,
- "php-http/discovery": false,
- "tbachert/spi": false
- },
- "preferred-install": {
- "phan/tolerant-php-parser": "source"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\": "lib/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "Phpactor\\Tests\\": "tests/"
- },
- "files": [
- "lib/Extension/Debug/bootstrap.php"
- ]
- },
- "minimum-stability": "dev",
- "prefer-stable": true,
- "bin": [
- "bin/phpactor"
- ],
- "scripts": {
- "post-install-cmd": [
- "@php bin/phpactor config:json-schema phpactor.schema.json"
- ],
- "integrate": [
- "@composer validate --strict",
- "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix",
- "@php vendor/bin/phpstan analyse --memory-limit=-1",
- "@php vendor/bin/phpunit",
- "@php vendor/bin/phpbench run --iterations=1 --revs=1",
- "make docs"
- ]
- }
-}
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index 731d52bae9..0000000000
--- a/composer.lock
+++ /dev/null
@@ -1,9517 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "ce37ef692b689fcf157fc2e665060a14",
- "packages": [
- {
- "name": "amphp/amp",
- "version": "v2.6.5",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/amp.git",
- "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/d7dda98dae26e56f3f6fcfbf1c1f819c9a993207",
- "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^7 | ^8 | ^9",
- "react/promise": "^2",
- "vimeo/psalm": "^3.12"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/functions.php",
- "lib/Internal/functions.php"
- ],
- "psr-4": {
- "Amp\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "A non-blocking concurrency framework for PHP applications.",
- "homepage": "https://amphp.org/amp",
- "keywords": [
- "async",
- "asynchronous",
- "awaitable",
- "concurrency",
- "event",
- "event-loop",
- "future",
- "non-blocking",
- "promise"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v2.6.5"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2025-09-03T19:41:28+00:00"
- },
- {
- "name": "amphp/byte-stream",
- "version": "v1.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/byte-stream.git",
- "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc",
- "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1.4",
- "friendsofphp/php-cs-fixer": "^2.3",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6 || ^7 || ^8",
- "psalm/phar": "^3.11.4"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/functions.php"
- ],
- "psr-4": {
- "Amp\\ByteStream\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "https://amphp.org/byte-stream",
- "keywords": [
- "amp",
- "amphp",
- "async",
- "io",
- "non-blocking",
- "stream"
- ],
- "support": {
- "issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/v1.8.2"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-04-13T18:00:56+00:00"
- },
- {
- "name": "amphp/cache",
- "version": "v1.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/cache.git",
- "reference": "fe78cfae2fb8c92735629b8cd1893029c73c9b63"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/cache/zipball/fe78cfae2fb8c92735629b8cd1893029c73c9b63",
- "reference": "fe78cfae2fb8c92735629b8cd1893029c73c9b63",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "amphp/serialization": "^1",
- "amphp/sync": "^1.2",
- "php": ">=7.1"
- },
- "conflict": {
- "amphp/file": "<0.2 || >=3"
- },
- "require-dev": {
- "amphp/file": "^1 || ^2",
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1.1",
- "phpunit/phpunit": "^6 | ^7 | ^8 | ^9",
- "vimeo/psalm": "^4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Amp\\Cache\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- }
- ],
- "description": "A promise-aware caching API for Amp.",
- "homepage": "https://github.com/amphp/cache",
- "support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/cache/issues",
- "source": "https://github.com/amphp/cache/tree/v1.5.1"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-03-21T19:35:02+00:00"
- },
- {
- "name": "amphp/dns",
- "version": "v1.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/dns.git",
- "reference": "4a13ffdc5e088593eb01860fc5002ebd9316d562"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/dns/zipball/4a13ffdc5e088593eb01860fc5002ebd9316d562",
- "reference": "4a13ffdc5e088593eb01860fc5002ebd9316d562",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "amphp/byte-stream": "^1.1",
- "amphp/cache": "^1.2",
- "amphp/parser": "^1",
- "amphp/windows-registry": "^0.3",
- "daverandom/libdns": "^2.0.1",
- "ext-filter": "*",
- "ext-json": "*",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "phpunit/phpunit": "^6 || ^7 || ^8 || ^9"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/functions.php"
- ],
- "psr-4": {
- "Amp\\Dns\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Wright",
- "email": "addr@daverandom.com"
- },
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- }
- ],
- "description": "Async DNS resolution for Amp.",
- "homepage": "https://github.com/amphp/dns",
- "keywords": [
- "amp",
- "amphp",
- "async",
- "client",
- "dns",
- "resolve"
- ],
- "support": {
- "issues": "https://github.com/amphp/dns/issues",
- "source": "https://github.com/amphp/dns/tree/v1.2.4"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-12-08T15:06:32+00:00"
- },
- {
- "name": "amphp/parser",
- "version": "v1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/parser.git",
- "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7",
- "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "phpunit/phpunit": "^9",
- "psalm/phar": "^5.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Amp\\Parser\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "A generator parser to make streaming parsers simple.",
- "homepage": "https://github.com/amphp/parser",
- "keywords": [
- "async",
- "non-blocking",
- "parser",
- "stream"
- ],
- "support": {
- "issues": "https://github.com/amphp/parser/issues",
- "source": "https://github.com/amphp/parser/tree/v1.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-03-21T19:16:53+00:00"
- },
- {
- "name": "amphp/process",
- "version": "v1.1.9",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/process.git",
- "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/process/zipball/55b837d4f1857b9bd7efb7bb859ae6b0e804f13f",
- "reference": "55b837d4f1857b9bd7efb7bb859ae6b0e804f13f",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "amphp/byte-stream": "^1.4",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "phpunit/phpunit": "^6"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/functions.php"
- ],
- "psr-4": {
- "Amp\\Process\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Asynchronous process manager.",
- "homepage": "https://github.com/amphp/process",
- "support": {
- "issues": "https://github.com/amphp/process/issues",
- "source": "https://github.com/amphp/process/tree/v1.1.9"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-12-13T17:38:25+00:00"
- },
- {
- "name": "amphp/serialization",
- "version": "v1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/serialization.git",
- "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1",
- "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "phpunit/phpunit": "^9 || ^8 || ^7"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Amp\\Serialization\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Serialization tools for IPC and data storage in PHP.",
- "homepage": "https://github.com/amphp/serialization",
- "keywords": [
- "async",
- "asynchronous",
- "serialization",
- "serialize"
- ],
- "support": {
- "issues": "https://github.com/amphp/serialization/issues",
- "source": "https://github.com/amphp/serialization/tree/master"
- },
- "time": "2020-03-25T21:39:07+00:00"
- },
- {
- "name": "amphp/socket",
- "version": "v1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/socket.git",
- "reference": "b00528bd75548b7ae06a502358bb3ff8b106f5ab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/socket/zipball/b00528bd75548b7ae06a502358bb3ff8b106f5ab",
- "reference": "b00528bd75548b7ae06a502358bb3ff8b106f5ab",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "amphp/byte-stream": "^1.6",
- "amphp/dns": "^1 || ^0.9",
- "ext-openssl": "*",
- "kelunik/certificate": "^1.1",
- "league/uri-parser": "^1.4",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "phpunit/phpunit": "^6 || ^7 || ^8",
- "vimeo/psalm": "^3.9@dev"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php",
- "src/Internal/functions.php"
- ],
- "psr-4": {
- "Amp\\Socket\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@gmail.com"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Async socket connection / server tools for Amp.",
- "homepage": "https://github.com/amphp/socket",
- "keywords": [
- "amp",
- "async",
- "encryption",
- "non-blocking",
- "sockets",
- "tcp",
- "tls"
- ],
- "support": {
- "issues": "https://github.com/amphp/socket/issues",
- "source": "https://github.com/amphp/socket/tree/v1.2.1"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2024-03-21T18:12:22+00:00"
- },
- {
- "name": "amphp/sync",
- "version": "v1.4.2",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/sync.git",
- "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/sync/zipball/85ab06764f4f36d63b1356b466df6111cf4b89cf",
- "reference": "85ab06764f4f36d63b1356b466df6111cf4b89cf",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2.2",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1.1",
- "phpunit/phpunit": "^9 || ^8 || ^7"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/functions.php",
- "src/ConcurrentIterator/functions.php"
- ],
- "psr-4": {
- "Amp\\Sync\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Stephen Coakley",
- "email": "me@stephencoakley.com"
- }
- ],
- "description": "Mutex, Semaphore, and other synchronization tools for Amp.",
- "homepage": "https://github.com/amphp/sync",
- "keywords": [
- "async",
- "asynchronous",
- "mutex",
- "semaphore",
- "synchronization"
- ],
- "support": {
- "issues": "https://github.com/amphp/sync/issues",
- "source": "https://github.com/amphp/sync/tree/v1.4.2"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2021-10-25T18:29:10+00:00"
- },
- {
- "name": "amphp/windows-registry",
- "version": "v0.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/windows-registry.git",
- "reference": "0f56438b9197e224325e88f305346f0221df1f71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/windows-registry/zipball/0f56438b9197e224325e88f305346f0221df1f71",
- "reference": "0f56438b9197e224325e88f305346f0221df1f71",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "amphp/byte-stream": "^1.4",
- "amphp/process": "^1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Amp\\WindowsRegistry\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Windows Registry Reader.",
- "support": {
- "issues": "https://github.com/amphp/windows-registry/issues",
- "source": "https://github.com/amphp/windows-registry/tree/master"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2020-07-10T16:13:29+00:00"
- },
- {
- "name": "brick/math",
- "version": "0.13.1",
- "source": {
- "type": "git",
- "url": "https://github.com/brick/math.git",
- "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04",
- "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
- "phpunit/phpunit": "^10.1",
- "vimeo/psalm": "6.8.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Brick\\Math\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Arbitrary-precision arithmetic library",
- "keywords": [
- "Arbitrary-precision",
- "BigInteger",
- "BigRational",
- "arithmetic",
- "bigdecimal",
- "bignum",
- "bignumber",
- "brick",
- "decimal",
- "integer",
- "math",
- "mathematics",
- "rational"
- ],
- "support": {
- "issues": "https://github.com/brick/math/issues",
- "source": "https://github.com/brick/math/tree/0.13.1"
- },
- "funding": [
- {
- "url": "https://github.com/BenMorel",
- "type": "github"
- }
- ],
- "time": "2025-03-29T13:50:30+00:00"
- },
- {
- "name": "composer/pcre",
- "version": "3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/pcre.git",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<1.11.10"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.12 || ^2",
- "phpstan/phpstan-strict-rules": "^1 || ^2",
- "phpunit/phpunit": "^8 || ^9"
- },
- "type": "library",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- },
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Pcre\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
- "keywords": [
- "PCRE",
- "preg",
- "regex",
- "regular expression"
- ],
- "support": {
- "issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.3.2"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-12T16:29:46+00:00"
- },
- {
- "name": "composer/semver",
- "version": "3.4.4",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
- "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.11",
- "symfony/phpunit-bridge": "^3 || ^7"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Semver\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
- }
- ],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
- "keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
- ],
- "support": {
- "irc": "ircs://irc.libera.chat:6697/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.4"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- }
- ],
- "time": "2025-08-20T19:15:30+00:00"
- },
- {
- "name": "composer/xdebug-handler",
- "version": "3.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
- "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
- "shasum": ""
- },
- "require": {
- "composer/pcre": "^1 || ^2 || ^3",
- "php": "^7.2.5 || ^8.0",
- "psr/log": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "description": "Restarts a process without Xdebug.",
- "keywords": [
- "Xdebug",
- "performance"
- ],
- "support": {
- "irc": "ircs://irc.libera.chat:6697/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-05-06T16:37:16+00:00"
- },
- {
- "name": "dantleech/argument-resolver",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://gitlab.com/dantleech/argument-resolver.git",
- "reference": "e34fabf7d6e53e5194f745ad069c4a87cc4b34cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://gitlab.com/api/v4/projects/dantleech%2Fargument-resolver/repository/archive.zip?sha=e34fabf7d6e53e5194f745ad069c4a87cc4b34cc",
- "reference": "e34fabf7d6e53e5194f745ad069c4a87cc4b34cc",
- "shasum": ""
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.16",
- "phpstan/phpstan": "^0.10.1",
- "phpunit/phpunit": "^7.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "DTL\\ArgumentResolver\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Resolve method arguments from an associative array",
- "support": {
- "issues": "https://gitlab.com/api/v4/projects/7322320/issues"
- },
- "time": "2020-04-09T09:32:31+00:00"
- },
- {
- "name": "dantleech/invoke",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/dantleech/invoke.git",
- "reference": "9b002d746d2c1b86cfa63a47bb5909cee58ef50c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dantleech/invoke/zipball/9b002d746d2c1b86cfa63a47bb5909cee58ef50c",
- "reference": "9b002d746d2c1b86cfa63a47bb5909cee58ef50c",
- "shasum": ""
- },
- "require": {
- "php": "^7.2||^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.13",
- "phpbench/phpbench": "^1.0",
- "phpstan/phpstan": "^0.12.0",
- "phpunit/phpunit": "^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "DTL\\Invoke\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "daniel leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Emulate named parameters",
- "support": {
- "issues": "https://github.com/dantleech/invoke/issues",
- "source": "https://github.com/dantleech/invoke/tree/2.0.0"
- },
- "time": "2021-05-01T17:22:58+00:00"
- },
- {
- "name": "dantleech/object-renderer",
- "version": "0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dantleech/object-renderer.git",
- "reference": "942ad54a22e5ffb9ac3421d7bb06fa76bc45ad30"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dantleech/object-renderer/zipball/942ad54a22e5ffb9ac3421d7bb06fa76bc45ad30",
- "reference": "942ad54a22e5ffb9ac3421d7bb06fa76bc45ad30",
- "shasum": ""
- },
- "require": {
- "php": "^7.3 || ^8.0",
- "psr/container": "^1.0@dev",
- "twig/twig": "^2.0||^3.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.15.0",
- "phpactor/test-utils": "^1.1",
- "phpstan/phpstan": "^0.12.0",
- "phpunit/phpunit": "^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\ObjectRenderer\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Render/pretty-print objects",
- "support": {
- "issues": "https://github.com/dantleech/object-renderer/issues",
- "source": "https://github.com/dantleech/object-renderer/tree/0.1.1"
- },
- "time": "2021-01-31T18:57:08+00:00"
- },
- {
- "name": "daverandom/libdns",
- "version": "v2.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/DaveRandom/LibDNS.git",
- "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a",
- "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "Required for IDN support"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "LibDNS\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "DNS protocol implementation written in pure PHP",
- "keywords": [
- "dns"
- ],
- "support": {
- "issues": "https://github.com/DaveRandom/LibDNS/issues",
- "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0"
- },
- "time": "2024-04-12T12:12:48+00:00"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "implementation of xdg base directory specification for php",
- "support": {
- "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
- "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
- },
- "time": "2019-12-04T15:06:13+00:00"
- },
- {
- "name": "jetbrains/phpstorm-stubs",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/JetBrains/phpstorm-stubs",
- "reference": "4a38b62928bb95c29d3cd866ffc188c07d035e0a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/4a38b62928bb95c29d3cd866ffc188c07d035e0a",
- "reference": "4a38b62928bb95c29d3cd866ffc188c07d035e0a",
- "shasum": ""
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^v3.86",
- "nikic/php-parser": "^v5.6",
- "phpdocumentor/reflection-docblock": "^5.6",
- "phpunit/phpunit": "^12.3"
- },
- "default-branch": true,
- "type": "library",
- "autoload": {
- "files": [
- "PhpStormStubsMap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "description": "PHP runtime & extensions header files for PhpStorm",
- "homepage": "https://www.jetbrains.com/phpstorm",
- "keywords": [
- "autocomplete",
- "code",
- "inference",
- "inspection",
- "jetbrains",
- "phpstorm",
- "stubs",
- "type"
- ],
- "support": {
- "source": "https://github.com/JetBrains/phpstorm-stubs/tree/master"
- },
- "time": "2025-11-11T19:21:31+00:00"
- },
- {
- "name": "kelunik/certificate",
- "version": "v1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/kelunik/certificate.git",
- "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e",
- "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e",
- "shasum": ""
- },
- "require": {
- "ext-openssl": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "^2",
- "phpunit/phpunit": "^6 | 7 | ^8 | ^9"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Kelunik\\Certificate\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "Access certificate details and transform between different formats.",
- "keywords": [
- "DER",
- "certificate",
- "certificates",
- "openssl",
- "pem",
- "x509"
- ],
- "support": {
- "issues": "https://github.com/kelunik/certificate/issues",
- "source": "https://github.com/kelunik/certificate/tree/v1.1.3"
- },
- "time": "2023-02-03T21:26:53+00:00"
- },
- {
- "name": "league/uri-parser",
- "version": "1.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/uri-parser.git",
- "reference": "671548427e4c932352d9b9279fdfa345bf63fa00"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00",
- "reference": "671548427e4c932352d9b9279fdfa345bf63fa00",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^2.0",
- "phpstan/phpstan": "^0.9.2",
- "phpstan/phpstan-phpunit": "^0.9.4",
- "phpstan/phpstan-strict-rules": "^0.9.0",
- "phpunit/phpunit": "^6.0"
- },
- "suggest": {
- "ext-intl": "Allow parsing RFC3987 compliant hosts",
- "league/uri-schemes": "Allow validating and normalizing URI parsing results"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "League\\Uri\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ignace Nyamagana Butera",
- "email": "nyamsprod@gmail.com",
- "homepage": "https://nyamsprod.com"
- }
- ],
- "description": "userland URI parser RFC 3986 compliant",
- "homepage": "https://github.com/thephpleague/uri-parser",
- "keywords": [
- "parse_url",
- "parser",
- "rfc3986",
- "rfc3987",
- "uri",
- "url"
- ],
- "support": {
- "issues": "https://github.com/thephpleague/uri-parser/issues",
- "source": "https://github.com/thephpleague/uri-parser/tree/master"
- },
- "abandoned": "league/uri-interfaces",
- "time": "2018-11-22T07:55:51+00:00"
- },
- {
- "name": "monolog/monolog",
- "version": "2.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/monolog.git",
- "reference": "37308608e599f34a1a4845b16440047ec98a172a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/37308608e599f34a1a4845b16440047ec98a172a",
- "reference": "37308608e599f34a1a4845b16440047ec98a172a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2",
- "psr/log": "^1.0.1 || ^2.0 || ^3.0"
- },
- "provide": {
- "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
- },
- "require-dev": {
- "aws/aws-sdk-php": "^2.4.9 || ^3.0",
- "doctrine/couchdb": "~1.0@dev",
- "elasticsearch/elasticsearch": "^7 || ^8",
- "ext-json": "*",
- "graylog2/gelf-php": "^1.4.2 || ^2@dev",
- "guzzlehttp/guzzle": "^7.4",
- "guzzlehttp/psr7": "^2.2",
- "mongodb/mongodb": "^1.8 || ^2.0",
- "php-amqplib/php-amqplib": "~2.4 || ^3",
- "phpspec/prophecy": "^1.15",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^8.5.38 || ^9.6.19",
- "predis/predis": "^1.1 || ^2.0",
- "rollbar/rollbar": "^1.3 || ^2 || ^3",
- "ruflin/elastica": "^7",
- "swiftmailer/swiftmailer": "^5.3|^6.0",
- "symfony/mailer": "^5.4 || ^6",
- "symfony/mime": "^5.4 || ^6"
- },
- "suggest": {
- "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
- "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
- "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client",
- "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
- "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler",
- "ext-mbstring": "Allow to work properly with unicode symbols",
- "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)",
- "ext-openssl": "Required to send log messages using SSL",
- "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)",
- "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
- "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)",
- "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
- "rollbar/rollbar": "Allow sending log messages to Rollbar",
- "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Monolog\\": "src/Monolog"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "https://seld.be"
- }
- ],
- "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
- "homepage": "https://github.com/Seldaek/monolog",
- "keywords": [
- "log",
- "logging",
- "psr-3"
- ],
- "support": {
- "issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/2.11.0"
- },
- "funding": [
- {
- "url": "https://github.com/Seldaek",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
- "type": "tidelift"
- }
- ],
- "time": "2026-01-01T13:05:00+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.13.4",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
- "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3 <3.2.2"
- },
- "require-dev": {
- "doctrine/collections": "^1.6.8",
- "doctrine/common": "^2.13.3 || ^3.2.2",
- "phpspec/prophecy": "^1.10",
- "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/DeepCopy/deep_copy.php"
- ],
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-01T08:46:24+00:00"
- },
- {
- "name": "phpactor/amp-fswatch",
- "version": "0.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/amp-fswatch.git",
- "reference": "8b79e76b451d40a3367aae460883d90455dbeb1a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/amp-fswatch/zipball/8b79e76b451d40a3367aae460883d90455dbeb1a",
- "reference": "8b79e76b451d40a3367aae460883d90455dbeb1a",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2.4",
- "amphp/process": "^1.1",
- "php": "^8.0",
- "psr/log": "^1.1",
- "symfony/filesystem": "^5.0|^6.0",
- "webmozart/glob": "^4.4"
- },
- "require-dev": {
- "amphp/phpunit-util": "^1.3",
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^3.15",
- "jangregor/phpstan-prophecy": "^1.0",
- "phpactor/test-utils": "~1.1.3",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^1.1",
- "phpunit/phpunit": "^9.0",
- "symfony/var-dumper": "^5.0|^6.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\AmpFsWatch\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Async Filesystem Watcher for Amphp",
- "support": {
- "issues": "https://github.com/phpactor/amp-fswatch/issues",
- "source": "https://github.com/phpactor/amp-fswatch/tree/0.3.0"
- },
- "time": "2023-08-12T15:51:57+00:00"
- },
- {
- "name": "phpactor/class-to-file",
- "version": "0.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/class-to-file.git",
- "reference": "2fcf99a39f830b0d57c374bacaa9471e5c0483e3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/class-to-file/zipball/2fcf99a39f830b0d57c374bacaa9471e5c0483e3",
- "reference": "2fcf99a39f830b0d57c374bacaa9471e5c0483e3",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "psr/log": "^1.0 || ^2.0 || ^3.0",
- "symfony/filesystem": "^4.2 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^3.0",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^9.0",
- "symfony/var-dumper": "^6.0 || ^5.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.4.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\ClassFileConverter\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Library to covert class names to file paths and vice-versa",
- "support": {
- "source": "https://github.com/phpactor/class-to-file/tree/0.6.0"
- },
- "time": "2025-10-02T14:48:57+00:00"
- },
- {
- "name": "phpactor/container",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/container.git",
- "reference": "143bbd987da798f2d7e5cedafd35b49d5051e167"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/container/zipball/143bbd987da798f2d7e5cedafd35b49d5051e167",
- "reference": "143bbd987da798f2d7e5cedafd35b49d5051e167",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "phpactor/map-resolver": "^1.4",
- "psr/container": "^1.0||^2.0"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^3.0",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\Container\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Phpactor's DI Container",
- "support": {
- "issues": "https://github.com/phpactor/container/issues",
- "source": "https://github.com/phpactor/container/tree/3.0.1"
- },
- "time": "2024-11-16T22:20:43+00:00"
- },
- {
- "name": "phpactor/language-server",
- "version": "7.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/language-server.git",
- "reference": "e4934195cc1857ec3347a488f3357b0f0df2d2bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/language-server/zipball/e4934195cc1857ec3347a488f3357b0f0df2d2bf",
- "reference": "e4934195cc1857ec3347a488f3357b0f0df2d2bf",
- "shasum": ""
- },
- "require": {
- "amphp/socket": "^1.1",
- "dantleech/argument-resolver": "^1.1",
- "dantleech/invoke": "^2.0",
- "php": "^8.1",
- "phpactor/language-server-protocol": "^3.17",
- "psr/event-dispatcher": "^1.0",
- "psr/log": "^1.0",
- "ramsey/uuid": "^4.0"
- },
- "require-dev": {
- "amphp/phpunit-util": "^1.3",
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^3.0",
- "jangregor/phpstan-prophecy": "^1.0",
- "phpactor/phly-event-dispatcher": "~2.0.0",
- "phpactor/test-utils": "~1.1.3",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^9.0",
- "symfony/var-dumper": "^5.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\LanguageServer\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Generic Language Server Platform",
- "support": {
- "issues": "https://github.com/phpactor/language-server/issues",
- "source": "https://github.com/phpactor/language-server/tree/7.0.1"
- },
- "time": "2025-01-26T23:40:29+00:00"
- },
- {
- "name": "phpactor/language-server-protocol",
- "version": "3.17.4",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/language-server-protocol.git",
- "reference": "1f7d7218db2cc77223bbb4e03961d0bceea50e60"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/language-server-protocol/zipball/1f7d7218db2cc77223bbb4e03961d0bceea50e60",
- "reference": "1f7d7218db2cc77223bbb4e03961d0bceea50e60",
- "shasum": ""
- },
- "require": {
- "dantleech/invoke": "^2.0",
- "php": "^7.3 || ^8.0"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^2.17",
- "phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^9.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\LanguageServerProtocol\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Langauge Server Protocol for PHP (transpiled)",
- "support": {
- "issues": "https://github.com/phpactor/language-server-protocol/issues",
- "source": "https://github.com/phpactor/language-server-protocol/tree/3.17.4"
- },
- "time": "2024-11-21T20:07:12+00:00"
- },
- {
- "name": "phpactor/map-resolver",
- "version": "1.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/map-resolver.git",
- "reference": "a1ed625b9aa93ca9520f85a0d54e9359e70d7276"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/map-resolver/zipball/a1ed625b9aa93ca9520f85a0d54e9359e70d7276",
- "reference": "a1ed625b9aa93ca9520f85a0d54e9359e70d7276",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^3.91",
- "infection/infection": "^0.29.0",
- "phpstan/phpstan": "^2.0",
- "phpunit/phpunit": "^10.0",
- "symfony/var-dumper": "^6.0|^7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\MapResolver\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Map Resolver",
- "support": {
- "issues": "https://github.com/phpactor/map-resolver/issues",
- "source": "https://github.com/phpactor/map-resolver/tree/1.7.0"
- },
- "time": "2025-11-30T19:17:10+00:00"
- },
- {
- "name": "phpactor/phly-event-dispatcher",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/phly-event-dispatcher.git",
- "reference": "9817636e907075494e6a95479552cbe9a301ca6d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/phly-event-dispatcher/zipball/9817636e907075494e6a95479552cbe9a301ca6d",
- "reference": "9817636e907075494e6a95479552cbe9a301ca6d",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "psr/container": "^1.0||^2.0",
- "psr/event-dispatcher": "^1.0"
- },
- "conflict": {
- "phpspec/prophecy": "<1.7.5"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "^1.0"
- },
- "require-dev": {
- "fig/event-dispatcher-util": "^1.0",
- "friendsofphp/php-cs-fixer": "^2.17",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^1.0",
- "phpunit/phpunit": "^9.0.0",
- "zendframework/zend-coding-standard": "~1.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions/lazy_listener.php"
- ],
- "psr-4": {
- "Phly\\EventDispatcher\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Experimental event dispatcher for PSR-14",
- "keywords": [
- "components",
- "event-dispatcher",
- "psr-14"
- ],
- "support": {
- "issues": "https://github.com/phly/phly-event-dispatcher/issues",
- "rss": "https://github.com/phly/phly-event-dispatcher/releases.atom",
- "source": "https://github.com/phly/phly-event-dispatcher"
- },
- "time": "2025-01-26T23:32:28+00:00"
- },
- {
- "name": "phpactor/tolerant-php-parser",
- "version": "dev-phan-phactor-fixes",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/tolerant-php-parser.git",
- "reference": "960913636ee651899dc39a6968bc7425f6a32660"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/tolerant-php-parser/zipball/960913636ee651899dc39a6968bc7425f6a32660",
- "reference": "960913636ee651899dc39a6968bc7425f6a32660",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Microsoft\\PhpParser\\": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rob Lourens",
- "email": "roblou@microsoft.com"
- }
- ],
- "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios",
- "support": {
- "source": "https://github.com/phpactor/tolerant-php-parser/tree/phan-phactor-fixes"
- },
- "time": "2025-10-29T17:55:10+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
- },
- "time": "2021-11-05T16:50:12+00:00"
- },
- {
- "name": "psr/event-dispatcher",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/event-dispatcher.git",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\EventDispatcher\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Standard interfaces for event handling.",
- "keywords": [
- "events",
- "psr",
- "psr-14"
- ],
- "support": {
- "issues": "https://github.com/php-fig/event-dispatcher/issues",
- "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
- },
- "time": "2019-01-08T18:20:26+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
- },
- "time": "2021-05-03T11:20:27+00:00"
- },
- {
- "name": "ramsey/collection",
- "version": "2.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/collection.git",
- "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2",
- "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "captainhook/plugin-composer": "^5.3",
- "ergebnis/composer-normalize": "^2.45",
- "fakerphp/faker": "^1.24",
- "hamcrest/hamcrest-php": "^2.0",
- "jangregor/phpstan-prophecy": "^2.1",
- "mockery/mockery": "^1.6",
- "php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.4",
- "phpspec/prophecy-phpunit": "^2.3",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-mockery": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpunit/phpunit": "^10.5",
- "ramsey/coding-standard": "^2.3",
- "ramsey/conventional-commits": "^1.6",
- "roave/security-advisories": "dev-latest"
- },
- "type": "library",
- "extra": {
- "captainhook": {
- "force-install": true
- },
- "ramsey/conventional-commits": {
- "configFile": "conventional-commits.json"
- }
- },
- "autoload": {
- "psr-4": {
- "Ramsey\\Collection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ben Ramsey",
- "email": "ben@benramsey.com",
- "homepage": "https://benramsey.com"
- }
- ],
- "description": "A PHP library for representing and manipulating collections.",
- "keywords": [
- "array",
- "collection",
- "hash",
- "map",
- "queue",
- "set"
- ],
- "support": {
- "issues": "https://github.com/ramsey/collection/issues",
- "source": "https://github.com/ramsey/collection/tree/2.1.1"
- },
- "time": "2025-03-22T05:38:12+00:00"
- },
- {
- "name": "ramsey/uuid",
- "version": "4.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/ramsey/uuid.git",
- "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440",
- "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440",
- "shasum": ""
- },
- "require": {
- "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14",
- "php": "^8.0",
- "ramsey/collection": "^1.2 || ^2.0"
- },
- "replace": {
- "rhumsaa/uuid": "self.version"
- },
- "require-dev": {
- "captainhook/captainhook": "^5.25",
- "captainhook/plugin-composer": "^5.3",
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "ergebnis/composer-normalize": "^2.47",
- "mockery/mockery": "^1.6",
- "paragonie/random-lib": "^2",
- "php-mock/php-mock": "^2.6",
- "php-mock/php-mock-mockery": "^1.5",
- "php-parallel-lint/php-parallel-lint": "^1.4.0",
- "phpbench/phpbench": "^1.2.14",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-mockery": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpunit/phpunit": "^9.6",
- "slevomat/coding-standard": "^8.18",
- "squizlabs/php_codesniffer": "^3.13"
- },
- "suggest": {
- "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.",
- "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.",
- "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.",
- "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
- "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
- },
- "type": "library",
- "extra": {
- "captainhook": {
- "force-install": true
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Ramsey\\Uuid\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).",
- "keywords": [
- "guid",
- "identifier",
- "uuid"
- ],
- "support": {
- "issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.9.1"
- },
- "time": "2025-09-04T20:59:21+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "5.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0",
- "symfony/process": "^6.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T07:15:17+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v6.4.36",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/9f481cfb580db8bcecc9b2d4c63f3e13df022ad5",
- "reference": "9f481cfb580db8bcecc9b2d4c63f3e13df022ad5",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^5.4|^6.0|^7.0"
- },
- "conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/dotenv": "<5.4",
- "symfony/event-dispatcher": "<5.4",
- "symfony/lock": "<5.4",
- "symfony/process": "<5.4"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0|3.0"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^6.4|^7.0",
- "symfony/http-kernel": "^6.4|^7.0",
- "symfony/lock": "^5.4|^6.0|^7.0",
- "symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/stopwatch": "^5.4|^6.0|^7.0",
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command-line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v6.4.36"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-03-27T15:30:51+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v3.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
- "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:21:43+00:00"
- },
- {
- "name": "symfony/filesystem",
- "version": "v6.4.34",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/01ffe0411b842f93c571e5c391f289c3fdd498c3",
- "reference": "01ffe0411b842f93c571e5c391f289c3fdd498c3",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8"
- },
- "require-dev": {
- "symfony/process": "^5.4|^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides basic utilities for the filesystem",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.34"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-02-24T17:51:06+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
- "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "provide": {
- "ext-ctype": "*"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-04-10T16:19:22+00:00"
- },
- {
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df",
- "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-04-10T16:19:22+00:00"
- },
- {
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315",
- "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315",
- "shasum": ""
- },
- "require": {
- "ext-iconv": "*",
- "php": ">=7.2"
- },
- "provide": {
- "ext-mbstring": "*"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-04-10T17:25:58+00:00"
- },
- {
- "name": "symfony/process",
- "version": "v6.4.33",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "c46e854e79b52d07666e43924a20cb6dc546644e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/c46e854e79b52d07666e43924a20cb6dc546644e",
- "reference": "c46e854e79b52d07666e43924a20cb6dc546644e",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Executes commands in sub-processes",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/process/tree/v6.4.33"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-01-23T16:02:12+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v3.6.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
- "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "psr/container": "^1.1|^2.0",
- "symfony/deprecation-contracts": "^2.5|^3"
- },
- "conflict": {
- "ext-psr": "<1.1|>=2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- },
- "exclude-from-classmap": [
- "/Test/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-07-15T11:30:57+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v7.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "114ac57257d75df748eda23dd003878080b8e688"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/114ac57257d75df748eda23dd003878080b8e688",
- "reference": "114ac57257d75df748eda23dd003878080b8e688",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.33",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "conflict": {
- "symfony/translation-contracts": "<2.5"
- },
- "require-dev": {
- "symfony/emoji": "^7.1|^8.0",
- "symfony/http-client": "^6.4|^7.0|^8.0",
- "symfony/intl": "^6.4|^7.0|^8.0",
- "symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^6.4|^7.0|^8.0"
- },
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions.php"
- ],
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v7.4.8"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-03-24T13:12:05+00:00"
- },
- {
- "name": "symfony/yaml",
- "version": "v5.4.45",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "a454d47278cc16a5db371fe73ae66a78a633371e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e",
- "reference": "a454d47278cc16a5db371fe73ae66a78a633371e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "symfony/console": "<5.3"
- },
- "require-dev": {
- "symfony/console": "^5.3|^6.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
- },
- "bin": [
- "Resources/bin/yaml-lint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Loads and dumps YAML files",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/yaml/tree/v5.4.45"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:11:13+00:00"
- },
- {
- "name": "twig/twig",
- "version": "v3.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/twigphp/Twig.git",
- "reference": "1de2ec1fc43ab58a4b7e80b214b96bfc895750f3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/1de2ec1fc43ab58a4b7e80b214b96bfc895750f3",
- "reference": "1de2ec1fc43ab58a4b7e80b214b96bfc895750f3",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1.0",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3"
- },
- "require-dev": {
- "phpstan/phpstan": "^2.0",
- "psr/container": "^1.0|^2.0",
- "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/Resources/core.php",
- "src/Resources/debug.php",
- "src/Resources/escaper.php",
- "src/Resources/string_loader.php"
- ],
- "psr-4": {
- "Twig\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com",
- "homepage": "http://fabien.potencier.org",
- "role": "Lead Developer"
- },
- {
- "name": "Twig Team",
- "role": "Contributors"
- },
- {
- "name": "Armin Ronacher",
- "email": "armin.ronacher@active-4.com",
- "role": "Project Founder"
- }
- ],
- "description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "https://twig.symfony.com",
- "keywords": [
- "templating"
- ],
- "support": {
- "issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.22.1"
- },
- "funding": [
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/twig/twig",
- "type": "tidelift"
- }
- ],
- "time": "2025-11-16T16:01:12+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.12.1",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "9be6926d8b485f55b9229203f962b51ed377ba68"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68",
- "reference": "9be6926d8b485f55b9229203f962b51ed377ba68",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-date": "*",
- "ext-filter": "*",
- "php": "^7.2 || ^8.0"
- },
- "suggest": {
- "ext-intl": "",
- "ext-simplexml": "",
- "ext-spl": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.12.1"
- },
- "time": "2025-10-29T15:56:20+00:00"
- },
- {
- "name": "webmozart/glob",
- "version": "4.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/glob.git",
- "reference": "8a2842112d6916e61e0e15e316465b611f3abc17"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17",
- "reference": "8a2842112d6916e61e0e15e316465b611f3abc17",
- "shasum": ""
- },
- "require": {
- "php": "^7.3 || ^8.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5",
- "symfony/filesystem": "^5.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Glob\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "A PHP implementation of Ant's glob.",
- "support": {
- "issues": "https://github.com/webmozarts/glob/issues",
- "source": "https://github.com/webmozarts/glob/tree/4.7.0"
- },
- "time": "2024-03-07T20:33:40+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "blackfire/php-sdk",
- "version": "v1.35.0",
- "source": {
- "type": "git",
- "url": "https://github.com/blackfireio/php-sdk.git",
- "reference": "2c5950ff2ad29c2af96c69810eb304f0f350177d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/blackfireio/php-sdk/zipball/2c5950ff2ad29c2af96c69810eb304f0f350177d",
- "reference": "2c5950ff2ad29c2af96c69810eb304f0f350177d",
- "shasum": ""
- },
- "require": {
- "composer/ca-bundle": "^1.0",
- "php": ">=5.2.0"
- },
- "require-dev": {
- "behat/behat": "^3.8",
- "friends-of-behat/mink-browserkit-driver": "^1.4",
- "friends-of-behat/mink-extension": "^2.5",
- "guzzlehttp/psr7": "^1.6",
- "illuminate/console": "^8.81",
- "illuminate/queue": "^8.81",
- "illuminate/support": "^8.81",
- "laravel/octane": "^1.2",
- "phpunit/phpunit": "^9.5",
- "psr/http-message": "^1.0",
- "symfony/browser-kit": "^5.1",
- "symfony/framework-bundle": "^5.1",
- "symfony/http-client": "^5.1",
- "symfony/messenger": "^5.1",
- "symfony/panther": "^1.0",
- "symfony/phpunit-bridge": "^5.2"
- },
- "suggest": {
- "ext-blackfire": "The C version of the Blackfire probe",
- "ext-zlib": "To push config to remote profiling targets",
- "symfony/panther": "To use Symfony web test cases with Blackfire"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.36-dev"
- }
- },
- "autoload": {
- "files": [
- "src/autostart.php"
- ],
- "psr-4": {
- "Blackfire\\": "src/Blackfire"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Blackfire.io",
- "email": "support@blackfire.io"
- }
- ],
- "description": "Blackfire.io PHP SDK",
- "keywords": [
- "performance",
- "profiler",
- "uprofiler",
- "xhprof"
- ],
- "support": {
- "issues": "https://github.com/blackfireio/php-sdk/issues",
- "source": "https://github.com/blackfireio/php-sdk/tree/v1.35.0"
- },
- "time": "2023-04-06T09:37:28+00:00"
- },
- {
- "name": "clue/ndjson-react",
- "version": "v1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/clue/reactphp-ndjson.git",
- "reference": "392dc165fce93b5bb5c637b67e59619223c931b0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0",
- "reference": "392dc165fce93b5bb5c637b67e59619223c931b0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3",
- "react/stream": "^1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
- "react/event-loop": "^1.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Clue\\React\\NDJson\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering"
- }
- ],
- "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
- "homepage": "https://github.com/clue/reactphp-ndjson",
- "keywords": [
- "NDJSON",
- "json",
- "jsonlines",
- "newline",
- "reactphp",
- "streaming"
- ],
- "support": {
- "issues": "https://github.com/clue/reactphp-ndjson/issues",
- "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0"
- },
- "funding": [
- {
- "url": "https://clue.engineering/support",
- "type": "custom"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
- }
- ],
- "time": "2022-12-23T10:58:28+00:00"
- },
- {
- "name": "composer/ca-bundle",
- "version": "1.5.9",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/ca-bundle.git",
- "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/1905981ee626e6f852448b7aaa978f8666c5bc54",
- "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54",
- "shasum": ""
- },
- "require": {
- "ext-openssl": "*",
- "ext-pcre": "*",
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^8 || ^9",
- "psr/log": "^1.0 || ^2.0 || ^3.0",
- "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\CaBundle\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
- "keywords": [
- "cabundle",
- "cacert",
- "certificate",
- "ssl",
- "tls"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.9"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- }
- ],
- "time": "2025-11-06T11:46:17+00:00"
- },
- {
- "name": "dantleech/what-changed",
- "version": "0.4.5",
- "source": {
- "type": "git",
- "url": "https://github.com/dantleech/what-changed.git",
- "reference": "dd46d0f43809e43282c5aca8d7f68da5febb8cb1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dantleech/what-changed/zipball/dd46d0f43809e43282c5aca8d7f68da5febb8cb1",
- "reference": "dd46d0f43809e43282c5aca8d7f68da5febb8cb1",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.1|^2.0",
- "ext-curl": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": "^7.3 || ^8.0"
- },
- "require-dev": {
- "composer/composer": "^1.4|^2.0",
- "friendsofphp/php-cs-fixer": "^2.16",
- "phpactor/test-utils": "^1.0",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^0.12",
- "phpunit/phpunit": "^9.0",
- "symfony/process": "^4.2"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "DTL\\WhatChanged\\WhatChangedPlugin",
- "branch-alias": {
- "dev-master": "0.5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "DTL\\WhatChanged\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Report changes in your dependencies",
- "support": {
- "issues": "https://github.com/dantleech/what-changed/issues",
- "source": "https://github.com/dantleech/what-changed/tree/0.4.5"
- },
- "time": "2025-04-03T09:29:53+00:00"
- },
- {
- "name": "dms/phpunit-arraysubset-asserts",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/rdohms/phpunit-arraysubset-asserts.git",
- "reference": "1aa0d838475b1b3de642aa7ad022fadc1e0f5a75"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/1aa0d838475b1b3de642aa7ad022fadc1e0f5a75",
- "reference": "1aa0d838475b1b3de642aa7ad022fadc1e0f5a75",
- "shasum": ""
- },
- "require": {
- "php": "^5.4 || ^7.0 || ^8.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
- },
- "require-dev": {
- "dms/coding-standard": "^9"
- },
- "default-branch": true,
- "type": "library",
- "autoload": {
- "files": [
- "assertarraysubset-autoload.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rafael Dohms",
- "email": "rdohms@gmail.com"
- }
- ],
- "description": "This package provides ArraySubset and related asserts once deprecated in PHPUnit 8",
- "support": {
- "issues": "https://github.com/rdohms/phpunit-arraysubset-asserts/issues",
- "source": "https://github.com/rdohms/phpunit-arraysubset-asserts/tree/master"
- },
- "time": "2024-01-29T14:09:12+00:00"
- },
- {
- "name": "doctrine/annotations",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7",
- "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "^2 || ^3",
- "ext-tokenizer": "*",
- "php": "^7.2 || ^8.0",
- "psr/cache": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "doctrine/cache": "^2.0",
- "doctrine/coding-standard": "^10",
- "phpstan/phpstan": "^1.10.28",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "symfony/cache": "^5.4 || ^6.4 || ^7",
- "vimeo/psalm": "^4.30 || ^5.14"
- },
- "suggest": {
- "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "Docblock Annotations Parser",
- "homepage": "https://www.doctrine-project.org/projects/annotations.html",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
- ],
- "support": {
- "issues": "https://github.com/doctrine/annotations/issues",
- "source": "https://github.com/doctrine/annotations/tree/2.0.2"
- },
- "abandoned": true,
- "time": "2024-09-05T10:17:24+00:00"
- },
- {
- "name": "doctrine/deprecations",
- "version": "1.1.6",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/deprecations.git",
- "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
- "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "phpunit/phpunit": "<=7.5 || >=14"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^14",
- "phpstan/phpstan": "1.4.10 || 2.1.30",
- "phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0",
- "psr/log": "^1 || ^2 || ^3"
- },
- "suggest": {
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Deprecations\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
- "homepage": "https://www.doctrine-project.org/",
- "support": {
- "issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.6"
- },
- "time": "2026-02-07T07:09:04+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
- "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "doctrine/coding-standard": "^11",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^1.2",
- "phpstan/phpstan": "^1.9.4",
- "phpstan/phpstan-phpunit": "^1.3",
- "phpunit/phpunit": "^9.5.27",
- "vimeo/psalm": "^5.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2022-12-30T00:23:10+00:00"
- },
- {
- "name": "doctrine/lexer",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
- "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
- "shasum": ""
- },
- "require": {
- "php": "^8.1"
- },
- "require-dev": {
- "doctrine/coding-standard": "^12",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^10.5",
- "psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^5.21"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Lexer\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/3.0.1"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
- "type": "tidelift"
- }
- ],
- "time": "2024-02-05T11:56:58+00:00"
- },
- {
- "name": "evenement/evenement",
- "version": "v3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/igorw/evenement.git",
- "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
- "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9 || ^6"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Evenement\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Igor Wiedler",
- "email": "igor@wiedler.ch"
- }
- ],
- "description": "Événement is a very simple event dispatching library for PHP",
- "keywords": [
- "event-dispatcher",
- "event-emitter"
- ],
- "support": {
- "issues": "https://github.com/igorw/evenement/issues",
- "source": "https://github.com/igorw/evenement/tree/v3.0.2"
- },
- "time": "2023-08-08T05:53:35+00:00"
- },
- {
- "name": "fidry/cpu-core-counter",
- "version": "1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
- "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "fidry/makefile": "^0.2.0",
- "fidry/php-cs-fixer-config": "^1.1.2",
- "phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^2.0",
- "phpstan/phpstan-deprecation-rules": "^2.0.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpstan/phpstan-strict-rules": "^2.0",
- "phpunit/phpunit": "^8.5.31 || ^9.5.26",
- "webmozarts/strict-phpunit": "^7.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Fidry\\CpuCoreCounter\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Théo FIDRY",
- "email": "theo.fidry@gmail.com"
- }
- ],
- "description": "Tiny utility to get the number of CPU cores.",
- "keywords": [
- "CPU",
- "core"
- ],
- "support": {
- "issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
- },
- "funding": [
- {
- "url": "https://github.com/theofidry",
- "type": "github"
- }
- ],
- "time": "2025-08-14T07:29:31+00:00"
- },
- {
- "name": "friendsofphp/php-cs-fixer",
- "version": "v3.91.0",
- "source": {
- "type": "git",
- "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "c4a25f20390337789c26b693ae46faa125040352"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/c4a25f20390337789c26b693ae46faa125040352",
- "reference": "c4a25f20390337789c26b693ae46faa125040352",
- "shasum": ""
- },
- "require": {
- "clue/ndjson-react": "^1.3",
- "composer/semver": "^3.4",
- "composer/xdebug-handler": "^3.0.5",
- "ext-filter": "*",
- "ext-hash": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "fidry/cpu-core-counter": "^1.3",
- "php": "^7.4 || ^8.0",
- "react/child-process": "^0.6.6",
- "react/event-loop": "^1.5",
- "react/socket": "^1.16",
- "react/stream": "^1.4",
- "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
- "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0",
- "symfony/polyfill-mbstring": "^1.33",
- "symfony/polyfill-php80": "^1.33",
- "symfony/polyfill-php81": "^1.33",
- "symfony/polyfill-php84": "^1.33",
- "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0",
- "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "facile-it/paraunit": "^1.3.1 || ^2.7",
- "infection/infection": "^0.31.0",
- "justinrainbow/json-schema": "^6.5",
- "keradus/cli-executor": "^2.2",
- "mikey179/vfsstream": "^1.6.12",
- "php-coveralls/php-coveralls": "^2.9",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
- "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
- "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0",
- "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0"
- },
- "suggest": {
- "ext-dom": "For handling output formats in XML",
- "ext-mbstring": "For handling non-UTF8 characters."
- },
- "bin": [
- "php-cs-fixer"
- ],
- "type": "application",
- "autoload": {
- "psr-4": {
- "PhpCsFixer\\": "src/"
- },
- "exclude-from-classmap": [
- "src/Fixer/Internal/*"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Dariusz Rumiński",
- "email": "dariusz.ruminski@gmail.com"
- }
- ],
- "description": "A tool to automatically fix PHP code style",
- "keywords": [
- "Static code analysis",
- "fixer",
- "standards",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.91.0"
- },
- "funding": [
- {
- "url": "https://github.com/keradus",
- "type": "github"
- }
- ],
- "time": "2025-11-28T22:07:42+00:00"
- },
- {
- "name": "google/protobuf",
- "version": "v4.33.1",
- "source": {
- "type": "git",
- "url": "https://github.com/protocolbuffers/protobuf-php.git",
- "reference": "0cd73ccf0cd26c3e72299cce1ea6144091a57e12"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/0cd73ccf0cd26c3e72299cce1ea6144091a57e12",
- "reference": "0cd73ccf0cd26c3e72299cce1ea6144091a57e12",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1.0"
- },
- "require-dev": {
- "phpunit/phpunit": ">=5.0.0 <8.5.27"
- },
- "suggest": {
- "ext-bcmath": "Need to support JSON deserialization"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Google\\Protobuf\\": "src/Google/Protobuf",
- "GPBMetadata\\Google\\Protobuf\\": "src/GPBMetadata/Google/Protobuf"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "proto library for PHP",
- "homepage": "https://developers.google.com/protocol-buffers/",
- "keywords": [
- "proto"
- ],
- "support": {
- "source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.33.1"
- },
- "time": "2025-11-12T21:58:05+00:00"
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "7.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
- "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^2.3",
- "guzzlehttp/psr7": "^2.8",
- "php": "^7.2.5 || ^8.0",
- "psr/http-client": "^1.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
- },
- "provide": {
- "psr/http-client-implementation": "1.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "ext-curl": "*",
- "guzzle/client-integration-tests": "3.0.2",
- "php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20",
- "psr/log": "^1.1 || ^2.0 || ^3.0"
- },
- "suggest": {
- "ext-curl": "Required for CURL handler support",
- "ext-intl": "Required for Internationalized Domain Name (IDN) support",
- "psr/log": "Required for using the Log middleware"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "GuzzleHttp\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Jeremy Lindblom",
- "email": "jeremeamia@gmail.com",
- "homepage": "https://github.com/jeremeamia"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "psr-18",
- "psr-7",
- "rest",
- "web service"
- ],
- "support": {
- "issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-23T22:36:01+00:00"
- },
- {
- "name": "guzzlehttp/promises",
- "version": "2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
- "reference": "481557b130ef3790cf82b713667b43030dc9c957",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5 || ^8.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
- "support": {
- "issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.3.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-22T14:34:08+00:00"
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "2.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "21dc724a0583619cd1652f673303492272778051"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
- "reference": "21dc724a0583619cd1652f673303492272778051",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5 || ^8.0",
- "psr/http-factory": "^1.0",
- "psr/http-message": "^1.1 || ^2.0",
- "ralouphie/getallheaders": "^3.0"
- },
- "provide": {
- "psr/http-factory-implementation": "1.0",
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.2",
- "http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.44 || ^9.6.25"
- },
- "suggest": {
- "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
- },
- "type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "psr-7",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
- "support": {
- "issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.8.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-23T21:21:41+00:00"
- },
- {
- "name": "jangregor/phpstan-prophecy",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Jan0707/phpstan-prophecy.git",
- "reference": "aebda94b6b1c39055d8f2227e879c07bac651550"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Jan0707/phpstan-prophecy/zipball/aebda94b6b1c39055d8f2227e879c07bac651550",
- "reference": "aebda94b6b1c39055d8f2227e879c07bac651550",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.1.5"
- },
- "conflict": {
- "phpspec/prophecy": "<1.17.0 || >=2.0.0",
- "phpspec/prophecy-phpunit": "<2.3.0 || >=3.0.0",
- "phpunit/phpunit": "<9.1.0 || >=13.0.0"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.47.0",
- "ergebnis/license": "^2.6.0",
- "ergebnis/php-cs-fixer-config": "^6.46.0",
- "phpspec/prophecy": "^1.7.0",
- "phpspec/prophecy-phpunit": "^2.3",
- "phpunit/phpunit": "^9.1.0"
- },
- "type": "phpstan-extension",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "JanGregor\\Prophecy\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jan Gregor Emge-Triebel",
- "email": "jan@jangregor.me"
- }
- ],
- "description": "Provides a phpstan/phpstan extension for phpspec/prophecy",
- "support": {
- "issues": "https://github.com/Jan0707/phpstan-prophecy/issues",
- "source": "https://github.com/Jan0707/phpstan-prophecy/tree/2.2.0"
- },
- "time": "2025-05-22T08:21:52+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v5.6.2",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "3a454ca033b9e06b63282ce19562e892747449bb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb",
- "reference": "3a454ca033b9e06b63282ce19562e892747449bb",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "php": ">=7.4"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2"
- },
- "time": "2025-10-21T19:32:17+00:00"
- },
- {
- "name": "nyholm/psr7-server",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Nyholm/psr7-server.git",
- "reference": "4335801d851f554ca43fa6e7d2602141538854dc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Nyholm/psr7-server/zipball/4335801d851f554ca43fa6e7d2602141538854dc",
- "reference": "4335801d851f554ca43fa6e7d2602141538854dc",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "psr/http-factory": "^1.0",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "require-dev": {
- "nyholm/nsa": "^1.1",
- "nyholm/psr7": "^1.3",
- "phpunit/phpunit": "^7.0 || ^8.5 || ^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Nyholm\\Psr7Server\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com"
- },
- {
- "name": "Martijn van der Ven",
- "email": "martijn@vanderven.se"
- }
- ],
- "description": "Helper classes to handle PSR-7 server requests",
- "homepage": "http://tnyholm.se",
- "keywords": [
- "psr-17",
- "psr-7"
- ],
- "support": {
- "issues": "https://github.com/Nyholm/psr7-server/issues",
- "source": "https://github.com/Nyholm/psr7-server/tree/1.1.0"
- },
- "funding": [
- {
- "url": "https://github.com/Zegnat",
- "type": "github"
- },
- {
- "url": "https://github.com/nyholm",
- "type": "github"
- }
- ],
- "time": "2023-11-08T09:30:43+00:00"
- },
- {
- "name": "open-telemetry/api",
- "version": "1.7.1",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/api.git",
- "reference": "45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4",
- "reference": "45bda7efa8fcdd9bdb0daa2f26c8e31f062f49d4",
- "shasum": ""
- },
- "require": {
- "open-telemetry/context": "^1.4",
- "php": "^8.1",
- "psr/log": "^1.1|^2.0|^3.0",
- "symfony/polyfill-php82": "^1.26"
- },
- "conflict": {
- "open-telemetry/sdk": "<=1.0.8"
- },
- "type": "library",
- "extra": {
- "spi": {
- "OpenTelemetry\\API\\Instrumentation\\AutoInstrumentation\\HookManagerInterface": [
- "OpenTelemetry\\API\\Instrumentation\\AutoInstrumentation\\ExtensionHookManager"
- ]
- },
- "branch-alias": {
- "dev-main": "1.8.x-dev"
- }
- },
- "autoload": {
- "files": [
- "Trace/functions.php"
- ],
- "psr-4": {
- "OpenTelemetry\\API\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "API for OpenTelemetry PHP.",
- "keywords": [
- "Metrics",
- "api",
- "apm",
- "logging",
- "opentelemetry",
- "otel",
- "tracing"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/languages/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-10-19T10:49:48+00:00"
- },
- {
- "name": "open-telemetry/context",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/context.git",
- "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/d4c4470b541ce72000d18c339cfee633e4c8e0cf",
- "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "symfony/polyfill-php82": "^1.26"
- },
- "suggest": {
- "ext-ffi": "To allow context switching in Fibers"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0.x-dev"
- }
- },
- "autoload": {
- "files": [
- "fiber/initialize_fiber_handler.php"
- ],
- "psr-4": {
- "OpenTelemetry\\Context\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "Context implementation for OpenTelemetry PHP.",
- "keywords": [
- "Context",
- "opentelemetry",
- "otel"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-09-19T00:05:49+00:00"
- },
- {
- "name": "open-telemetry/exporter-otlp",
- "version": "1.3.3",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/exporter-otlp.git",
- "reference": "07b02bc71838463f6edcc78d3485c04b48fb263d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/exporter-otlp/zipball/07b02bc71838463f6edcc78d3485c04b48fb263d",
- "reference": "07b02bc71838463f6edcc78d3485c04b48fb263d",
- "shasum": ""
- },
- "require": {
- "open-telemetry/api": "^1.0",
- "open-telemetry/gen-otlp-protobuf": "^1.1",
- "open-telemetry/sdk": "^1.0",
- "php": "^8.1",
- "php-http/discovery": "^1.14"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.0.x-dev"
- }
- },
- "autoload": {
- "files": [
- "_register.php"
- ],
- "psr-4": {
- "OpenTelemetry\\Contrib\\Otlp\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "OTLP exporter for OpenTelemetry.",
- "keywords": [
- "Metrics",
- "exporter",
- "gRPC",
- "http",
- "opentelemetry",
- "otel",
- "otlp",
- "tracing"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/languages/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-11-13T08:04:37+00:00"
- },
- {
- "name": "open-telemetry/gen-otlp-protobuf",
- "version": "1.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/gen-otlp-protobuf.git",
- "reference": "673af5b06545b513466081884b47ef15a536edde"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/gen-otlp-protobuf/zipball/673af5b06545b513466081884b47ef15a536edde",
- "reference": "673af5b06545b513466081884b47ef15a536edde",
- "shasum": ""
- },
- "require": {
- "google/protobuf": "^3.22 || ^4.0",
- "php": "^8.0"
- },
- "suggest": {
- "ext-protobuf": "For better performance, when dealing with the protobuf format"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Opentelemetry\\Proto\\": "Opentelemetry/Proto/",
- "GPBMetadata\\Opentelemetry\\": "GPBMetadata/Opentelemetry/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "PHP protobuf files for communication with OpenTelemetry OTLP collectors/servers.",
- "keywords": [
- "Metrics",
- "apm",
- "gRPC",
- "logging",
- "opentelemetry",
- "otel",
- "otlp",
- "protobuf",
- "tracing"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-09-17T23:10:12+00:00"
- },
- {
- "name": "open-telemetry/sdk",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/sdk.git",
- "reference": "3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99",
- "reference": "3dfc3d1ad729ec7eb25f1b9a4ae39fe779affa99",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "nyholm/psr7-server": "^1.1",
- "open-telemetry/api": "^1.7",
- "open-telemetry/context": "^1.4",
- "open-telemetry/sem-conv": "^1.0",
- "php": "^8.1",
- "php-http/discovery": "^1.14",
- "psr/http-client": "^1.0",
- "psr/http-client-implementation": "^1.0",
- "psr/http-factory-implementation": "^1.0",
- "psr/http-message": "^1.0.1|^2.0",
- "psr/log": "^1.1|^2.0|^3.0",
- "ramsey/uuid": "^3.0 || ^4.0",
- "symfony/polyfill-mbstring": "^1.23",
- "symfony/polyfill-php82": "^1.26",
- "tbachert/spi": "^1.0.5"
- },
- "suggest": {
- "ext-gmp": "To support unlimited number of synchronous metric readers",
- "ext-mbstring": "To increase performance of string operations",
- "open-telemetry/sdk-configuration": "File-based OpenTelemetry SDK configuration"
- },
- "type": "library",
- "extra": {
- "spi": {
- "OpenTelemetry\\API\\Configuration\\ConfigEnv\\EnvComponentLoader": [
- "OpenTelemetry\\API\\Instrumentation\\Configuration\\General\\ConfigEnv\\EnvComponentLoaderHttpConfig",
- "OpenTelemetry\\API\\Instrumentation\\Configuration\\General\\ConfigEnv\\EnvComponentLoaderPeerConfig"
- ],
- "OpenTelemetry\\SDK\\Common\\Configuration\\Resolver\\ResolverInterface": [
- "OpenTelemetry\\SDK\\Common\\Configuration\\Resolver\\SdkConfigurationResolver"
- ],
- "OpenTelemetry\\API\\Instrumentation\\AutoInstrumentation\\HookManagerInterface": [
- "OpenTelemetry\\API\\Instrumentation\\AutoInstrumentation\\ExtensionHookManager"
- ]
- },
- "branch-alias": {
- "dev-main": "1.9.x-dev"
- }
- },
- "autoload": {
- "files": [
- "Common/Util/functions.php",
- "Logs/Exporter/_register.php",
- "Metrics/MetricExporter/_register.php",
- "Propagation/_register.php",
- "Trace/SpanExporter/_register.php",
- "Common/Dev/Compatibility/_load.php",
- "_autoload.php"
- ],
- "psr-4": {
- "OpenTelemetry\\SDK\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "SDK for OpenTelemetry PHP.",
- "keywords": [
- "Metrics",
- "apm",
- "logging",
- "opentelemetry",
- "otel",
- "sdk",
- "tracing"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/languages/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-11-25T10:59:15+00:00"
- },
- {
- "name": "open-telemetry/sem-conv",
- "version": "1.37.0",
- "source": {
- "type": "git",
- "url": "https://github.com/opentelemetry-php/sem-conv.git",
- "reference": "8da7ec497c881e39afa6657d72586e27efbd29a1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opentelemetry-php/sem-conv/zipball/8da7ec497c881e39afa6657d72586e27efbd29a1",
- "reference": "8da7ec497c881e39afa6657d72586e27efbd29a1",
- "shasum": ""
- },
- "require": {
- "php": "^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "OpenTelemetry\\SemConv\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "opentelemetry-php contributors",
- "homepage": "https://github.com/open-telemetry/opentelemetry-php/graphs/contributors"
- }
- ],
- "description": "Semantic conventions for OpenTelemetry PHP.",
- "keywords": [
- "Metrics",
- "apm",
- "logging",
- "opentelemetry",
- "otel",
- "semantic conventions",
- "semconv",
- "tracing"
- ],
- "support": {
- "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V",
- "docs": "https://opentelemetry.io/docs/php",
- "issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
- "source": "https://github.com/open-telemetry/opentelemetry-php"
- },
- "time": "2025-09-03T12:08:10+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "54750ef60c58e43759730615a392c31c80e23176"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
- "reference": "54750ef60c58e43759730615a392c31c80e23176",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2024-03-03T12:33:53+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.2.1"
- },
- "time": "2022-02-21T01:04:05+00:00"
- },
- {
- "name": "php-http/discovery",
- "version": "1.20.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/discovery.git",
- "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
- "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.0|^2.0",
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "nyholm/psr7": "<1.0",
- "zendframework/zend-diactoros": "*"
- },
- "provide": {
- "php-http/async-client-implementation": "*",
- "php-http/client-implementation": "*",
- "psr/http-client-implementation": "*",
- "psr/http-factory-implementation": "*",
- "psr/http-message-implementation": "*"
- },
- "require-dev": {
- "composer/composer": "^1.0.2|^2.0",
- "graham-campbell/phpspec-skip-example-extension": "^5.0",
- "php-http/httplug": "^1.0 || ^2.0",
- "php-http/message-factory": "^1.0",
- "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
- "sebastian/comparator": "^3.0.5 || ^4.0.8",
- "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Http\\Discovery\\Composer\\Plugin",
- "plugin-optional": true
- },
- "autoload": {
- "psr-4": {
- "Http\\Discovery\\": "src/"
- },
- "exclude-from-classmap": [
- "src/Composer/Plugin.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
- }
- ],
- "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
- "homepage": "http://php-http.org",
- "keywords": [
- "adapter",
- "client",
- "discovery",
- "factory",
- "http",
- "message",
- "psr17",
- "psr7"
- ],
- "support": {
- "issues": "https://github.com/php-http/discovery/issues",
- "source": "https://github.com/php-http/discovery/tree/1.20.0"
- },
- "time": "2024-10-02T11:20:13+00:00"
- },
- {
- "name": "php-http/guzzle7-adapter",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/guzzle7-adapter.git",
- "reference": "03a415fde709c2f25539790fecf4d9a31bc3d0eb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/guzzle7-adapter/zipball/03a415fde709c2f25539790fecf4d9a31bc3d0eb",
- "reference": "03a415fde709c2f25539790fecf4d9a31bc3d0eb",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/guzzle": "^7.0",
- "php": "^7.3 | ^8.0",
- "php-http/httplug": "^2.0",
- "psr/http-client": "^1.0"
- },
- "provide": {
- "php-http/async-client-implementation": "1.0",
- "php-http/client-implementation": "1.0",
- "psr/http-client-implementation": "1.0"
- },
- "require-dev": {
- "php-http/client-integration-tests": "^3.0",
- "php-http/message-factory": "^1.1",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpunit/phpunit": "^8.0|^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Http\\Adapter\\Guzzle7\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com"
- }
- ],
- "description": "Guzzle 7 HTTP Adapter",
- "homepage": "http://httplug.io",
- "keywords": [
- "Guzzle",
- "http"
- ],
- "support": {
- "issues": "https://github.com/php-http/guzzle7-adapter/issues",
- "source": "https://github.com/php-http/guzzle7-adapter/tree/1.1.0"
- },
- "time": "2024-11-26T11:14:36+00:00"
- },
- {
- "name": "php-http/httplug",
- "version": "2.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/httplug.git",
- "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4",
- "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "php-http/promise": "^1.1",
- "psr/http-client": "^1.0",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "require-dev": {
- "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0",
- "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Http\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eric GELOEN",
- "email": "geloen.eric@gmail.com"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
- }
- ],
- "description": "HTTPlug, the HTTP client abstraction for PHP",
- "homepage": "http://httplug.io",
- "keywords": [
- "client",
- "http"
- ],
- "support": {
- "issues": "https://github.com/php-http/httplug/issues",
- "source": "https://github.com/php-http/httplug/tree/2.4.1"
- },
- "time": "2024-09-23T11:39:58+00:00"
- },
- {
- "name": "php-http/promise",
- "version": "1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-http/promise.git",
- "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
- "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
- "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Http\\Promise\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Joel Wurtz",
- "email": "joel.wurtz@gmail.com"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com"
- }
- ],
- "description": "Promise used for asynchronous HTTP requests",
- "homepage": "http://httplug.io",
- "keywords": [
- "promise"
- ],
- "support": {
- "issues": "https://github.com/php-http/promise/issues",
- "source": "https://github.com/php-http/promise/tree/1.3.1"
- },
- "time": "2024-03-15T13:55:21+00:00"
- },
- {
- "name": "phpactor/test-utils",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpactor/test-utils.git",
- "reference": "049f6e11a3809d5f124dd683f53cb2ab00f99b2f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpactor/test-utils/zipball/049f6e11a3809d5f124dd683f53cb2ab00f99b2f",
- "reference": "049f6e11a3809d5f124dd683f53cb2ab00f99b2f",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "symfony/filesystem": "^4.2 || ^5.0 || ^6.0 || ^7.0"
- },
- "require-dev": {
- "dms/phpunit-arraysubset-asserts": "dev-master",
- "ergebnis/composer-normalize": "^2.0",
- "friendsofphp/php-cs-fixer": "^2.17",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "~0.12.0",
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Phpactor\\TestUtils\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Utilities for managing the test environment",
- "support": {
- "issues": "https://github.com/phpactor/test-utils/issues",
- "source": "https://github.com/phpactor/test-utils/tree/2.0.0"
- },
- "time": "2025-11-23T17:05:07+00:00"
- },
- {
- "name": "phpbench/container",
- "version": "2.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phpbench/container.git",
- "reference": "0c7b2d36c1ea53fe27302fb8873ded7172047196"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpbench/container/zipball/0c7b2d36c1ea53fe27302fb8873ded7172047196",
- "reference": "0c7b2d36c1ea53fe27302fb8873ded7172047196",
- "shasum": ""
- },
- "require": {
- "psr/container": "^1.0|^2.0",
- "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "php-cs-fixer/shim": "^3.89",
- "phpstan/phpstan": "^0.12.52",
- "phpunit/phpunit": "^8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpBench\\DependencyInjection\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "Simple, configurable, service container.",
- "support": {
- "issues": "https://github.com/phpbench/container/issues",
- "source": "https://github.com/phpbench/container/tree/2.2.3"
- },
- "time": "2025-11-06T09:05:13+00:00"
- },
- {
- "name": "phpbench/phpbench",
- "version": "1.6.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phpbench/phpbench.git",
- "reference": "661c8c6abbc7734986cf7bc6062c237fbb450461"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpbench/phpbench/zipball/661c8c6abbc7734986cf7bc6062c237fbb450461",
- "reference": "661c8c6abbc7734986cf7bc6062c237fbb450461",
- "shasum": ""
- },
- "require": {
- "doctrine/annotations": "^2.0",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "ext-tokenizer": "*",
- "php": "^8.2",
- "phpbench/container": "^2.2",
- "psr/log": "^1.1 || ^2.0 || ^3.0",
- "seld/jsonlint": "^1.1",
- "symfony/console": "^6.1 || ^7.0 || ^8.0",
- "symfony/filesystem": "^6.1 || ^7.0 || ^8.0",
- "symfony/finder": "^6.1 || ^7.0 || ^8.0",
- "symfony/options-resolver": "^6.1 || ^7.0 || ^8.0",
- "symfony/process": "^6.1 || ^7.0 || ^8.0",
- "webmozart/glob": "^4.6"
- },
- "require-dev": {
- "dantleech/invoke": "^2.0",
- "ergebnis/composer-normalize": "^2.39",
- "jangregor/phpstan-prophecy": "^1.0",
- "php-cs-fixer/shim": "^3.9",
- "phpspec/prophecy": "^1.22",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^11.5",
- "rector/rector": "^1.2",
- "sebastian/exporter": "^6.3.2",
- "symfony/error-handler": "^6.1 || ^7.0 || ^8.0",
- "symfony/var-dumper": "^6.1 || ^7.0 || ^8.0"
- },
- "suggest": {
- "ext-xdebug": "For Xdebug profiling extension."
- },
- "bin": [
- "bin/phpbench"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "files": [
- "lib/Report/Func/functions.php"
- ],
- "psr-4": {
- "PhpBench\\": "lib/",
- "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Leech",
- "email": "daniel@dantleech.com"
- }
- ],
- "description": "PHP Benchmarking Framework",
- "keywords": [
- "benchmarking",
- "optimization",
- "performance",
- "profiling",
- "testing"
- ],
- "support": {
- "issues": "https://github.com/phpbench/phpbench/issues",
- "source": "https://github.com/phpbench/phpbench/tree/1.6.1"
- },
- "funding": [
- {
- "url": "https://github.com/dantleech",
- "type": "github"
- }
- ],
- "time": "2026-03-22T10:27:20+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.6.5",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/90614c73d3800e187615e2dd236ad0e2a01bf761",
- "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.1",
- "ext-filter": "*",
- "php": "^7.4 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7|^2.0",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.5 || ~1.6.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-webmozart-assert": "^1.2",
- "phpunit/phpunit": "^9.5",
- "psalm/phar": "^5.26"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.5"
- },
- "time": "2025-11-27T19:50:05+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.12.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195",
- "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.18|^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0"
- },
- "time": "2025-11-21T15:09:14+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.22.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
- "reference": "35f1adb388946d92e6edab2aa2cb2b60e132ebd5",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2 || ^2.0",
- "php": "^7.4 || 8.0.* || 8.1.* || 8.2.* || 8.3.* || 8.4.*",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.40",
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpstan/phpstan": "^2.1.13",
- "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "dev",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.22.0"
- },
- "time": "2025-04-29T14:58:06+00:00"
- },
- {
- "name": "phpspec/prophecy-phpunit",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy-phpunit.git",
- "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/d3c28041d9390c9bca325a08c5b2993ac855bded",
- "reference": "d3c28041d9390c9bca325a08c5b2993ac855bded",
- "shasum": ""
- },
- "require": {
- "php": "^7.3 || ^8",
- "phpspec/prophecy": "^1.18",
- "phpunit/phpunit": "^9.1 || ^10.1 || ^11.0 || ^12.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.10"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\PhpUnit\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christophe Coevoet",
- "email": "stof@notk.org"
- }
- ],
- "description": "Integrating the Prophecy mocking library in PHPUnit test cases",
- "homepage": "http://phpspec.net",
- "keywords": [
- "phpunit",
- "prophecy"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy-phpunit/issues",
- "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.4.0"
- },
- "time": "2025-05-13T13:52:32+00:00"
- },
- {
- "name": "phpstan/extension-installer",
- "version": "1.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/extension-installer.git",
- "reference": "85e90b3942d06b2326fba0403ec24fe912372936"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936",
- "reference": "85e90b3942d06b2326fba0403ec24fe912372936",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^2.0",
- "php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.9.0 || ^2.0"
- },
- "require-dev": {
- "composer/composer": "^2.0",
- "php-parallel-lint/php-parallel-lint": "^1.2.0",
- "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "PHPStan\\ExtensionInstaller\\Plugin"
- },
- "autoload": {
- "psr-4": {
- "PHPStan\\ExtensionInstaller\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Composer plugin for automatic installation of PHPStan extensions",
- "keywords": [
- "dev",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpstan/extension-installer/issues",
- "source": "https://github.com/phpstan/extension-installer/tree/1.4.3"
- },
- "time": "2024-09-04T20:21:43+00:00"
- },
- {
- "name": "phpstan/phpdoc-parser",
- "version": "2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495",
- "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "doctrine/annotations": "^2.0",
- "nikic/php-parser": "^5.3.0",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpstan/phpstan-strict-rules": "^2.0",
- "phpunit/phpunit": "^9.6",
- "symfony/process": "^5.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPStan\\PhpDocParser\\": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
- "support": {
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0"
- },
- "time": "2025-08-30T15:50:23+00:00"
- },
- {
- "name": "phpstan/phpstan",
- "version": "2.1.32",
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227",
- "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227",
- "shasum": ""
- },
- "require": {
- "php": "^7.4|^8.0"
- },
- "conflict": {
- "phpstan/phpstan-shim": "*"
- },
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPStan - PHP Static Analysis Tool",
- "keywords": [
- "dev",
- "static analysis"
- ],
- "support": {
- "docs": "https://phpstan.org/user-guide/getting-started",
- "forum": "https://github.com/phpstan/phpstan/discussions",
- "issues": "https://github.com/phpstan/phpstan/issues",
- "security": "https://github.com/phpstan/phpstan/security/policy",
- "source": "https://github.com/phpstan/phpstan-src"
- },
- "funding": [
- {
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
- },
- {
- "url": "https://github.com/phpstan",
- "type": "github"
- }
- ],
- "time": "2025-11-11T15:18:17+00:00"
- },
- {
- "name": "phpstan/phpstan-phpunit",
- "version": "2.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan-phpunit.git",
- "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe",
- "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.1.32"
- },
- "conflict": {
- "phpunit/phpunit": "<7.0"
- },
- "require-dev": {
- "nikic/php-parser": "^5",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-deprecation-rules": "^2.0",
- "phpstan/phpstan-strict-rules": "^2.0",
- "phpunit/phpunit": "^9.6"
- },
- "type": "phpstan-extension",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon",
- "rules.neon"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "PHPStan\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPUnit extensions and rules for PHPStan",
- "support": {
- "issues": "https://github.com/phpstan/phpstan-phpunit/issues",
- "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.8"
- },
- "time": "2025-11-11T07:55:22+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "10.1.16",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.19.1 || ^5.1.0",
- "php": ">=8.1",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-text-template": "^3.0.1",
- "sebastian/code-unit-reverse-lookup": "^3.0.0",
- "sebastian/complexity": "^3.2.0",
- "sebastian/environment": "^6.1.0",
- "sebastian/lines-of-code": "^2.0.2",
- "sebastian/version": "^4.0.1",
- "theseer/tokenizer": "^1.2.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.1"
- },
- "suggest": {
- "ext-pcov": "PHP extension that provides line coverage",
- "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "10.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-08-22T04:31:57+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "4.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-08-31T06:24:48+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "4.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^10.0"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:56:09+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-08-31T14:07:24+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "6.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "6.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:57:52+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "10.5.58",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e24fb46da450d8e6a5788670513c1af1424f16ca",
- "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.4",
- "phar-io/manifest": "^2.0.4",
- "phar-io/version": "^3.2.1",
- "php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.16",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-invoker": "^4.0.0",
- "phpunit/php-text-template": "^3.0.1",
- "phpunit/php-timer": "^6.0.0",
- "sebastian/cli-parser": "^2.0.1",
- "sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.4",
- "sebastian/diff": "^5.1.1",
- "sebastian/environment": "^6.1.0",
- "sebastian/exporter": "^5.1.4",
- "sebastian/global-state": "^6.0.2",
- "sebastian/object-enumerator": "^5.0.0",
- "sebastian/recursion-context": "^5.0.1",
- "sebastian/type": "^4.0.0",
- "sebastian/version": "^4.0.1"
- },
- "suggest": {
- "ext-soap": "To be able to generate mocks based on WSDL files"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "10.5-dev"
- }
- },
- "autoload": {
- "files": [
- "src/Framework/Assert/Functions.php"
- ],
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.58"
- },
- "funding": [
- {
- "url": "https://phpunit.de/sponsors.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
- "type": "tidelift"
- }
- ],
- "time": "2025-09-28T12:04:46+00:00"
- },
- {
- "name": "psalm/phar",
- "version": "6.14.1",
- "source": {
- "type": "git",
- "url": "https://github.com/psalm/phar.git",
- "reference": "57ec52ce25ece3a00371a6d08ade8e36a61ca783"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/psalm/phar/zipball/57ec52ce25ece3a00371a6d08ade8e36a61ca783",
- "reference": "57ec52ce25ece3a00371a6d08ade8e36a61ca783",
- "shasum": ""
- },
- "require": {
- "php": "^8.2"
- },
- "conflict": {
- "vimeo/psalm": "*"
- },
- "bin": [
- "psalm.phar"
- ],
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Composer-based Psalm Phar",
- "support": {
- "issues": "https://github.com/psalm/phar/issues",
- "source": "https://github.com/psalm/phar/tree/6.14.1"
- },
- "time": "2025-12-10T09:38:52+00:00"
- },
- {
- "name": "psr/cache",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/cache.git",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Cache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for caching libraries",
- "keywords": [
- "cache",
- "psr",
- "psr-6"
- ],
- "support": {
- "source": "https://github.com/php-fig/cache/tree/3.0.0"
- },
- "time": "2021-02-03T23:26:27+00:00"
- },
- {
- "name": "psr/http-client",
- "version": "1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-client.git",
- "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
- "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP clients",
- "homepage": "https://github.com/php-fig/http-client",
- "keywords": [
- "http",
- "http-client",
- "psr",
- "psr-18"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-client"
- },
- "time": "2023-09-23T14:17:50+00:00"
- },
- {
- "name": "psr/http-factory",
- "version": "1.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-factory.git",
- "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
- "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1",
- "psr/http-message": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
- "keywords": [
- "factory",
- "http",
- "message",
- "psr",
- "psr-17",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-factory"
- },
- "time": "2024-04-15T12:06:14+00:00"
- },
- {
- "name": "psr/http-message",
- "version": "2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
- "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-message/tree/2.0"
- },
- "time": "2023-04-04T09:54:51+00:00"
- },
- {
- "name": "ralouphie/getallheaders",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ralouphie/getallheaders.git",
- "reference": "120b605dfeb996808c31b6477290a714d356e822"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
- "reference": "120b605dfeb996808c31b6477290a714d356e822",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^5 || ^6.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/getallheaders.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ralph Khattar",
- "email": "ralph.khattar@gmail.com"
- }
- ],
- "description": "A polyfill for getallheaders.",
- "support": {
- "issues": "https://github.com/ralouphie/getallheaders/issues",
- "source": "https://github.com/ralouphie/getallheaders/tree/develop"
- },
- "time": "2019-03-08T08:55:37+00:00"
- },
- {
- "name": "react/cache",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/cache.git",
- "reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
- "reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0",
- "react/promise": "^3.0 || ^2.0 || ^1.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\Cache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "Async, Promise-based cache interface for ReactPHP",
- "keywords": [
- "cache",
- "caching",
- "promise",
- "reactphp"
- ],
- "support": {
- "issues": "https://github.com/reactphp/cache/issues",
- "source": "https://github.com/reactphp/cache/tree/v1.2.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2022-11-30T15:59:55+00:00"
- },
- {
- "name": "react/child-process",
- "version": "v0.6.6",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/child-process.git",
- "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159",
- "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159",
- "shasum": ""
- },
- "require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.0",
- "react/event-loop": "^1.2",
- "react/stream": "^1.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
- "react/socket": "^1.16",
- "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\ChildProcess\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "Event-driven library for executing child processes with ReactPHP.",
- "keywords": [
- "event-driven",
- "process",
- "reactphp"
- ],
- "support": {
- "issues": "https://github.com/reactphp/child-process/issues",
- "source": "https://github.com/reactphp/child-process/tree/v0.6.6"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2025-01-01T16:37:48+00:00"
- },
- {
- "name": "react/dns",
- "version": "v1.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/dns.git",
- "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3",
- "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0",
- "react/cache": "^1.0 || ^0.6 || ^0.5",
- "react/event-loop": "^1.2",
- "react/promise": "^3.2 || ^2.7 || ^1.2.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
- "react/async": "^4.3 || ^3 || ^2",
- "react/promise-timer": "^1.11"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\Dns\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "Async DNS resolver for ReactPHP",
- "keywords": [
- "async",
- "dns",
- "dns-resolver",
- "reactphp"
- ],
- "support": {
- "issues": "https://github.com/reactphp/dns/issues",
- "source": "https://github.com/reactphp/dns/tree/v1.14.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2025-11-18T19:34:28+00:00"
- },
- {
- "name": "react/event-loop",
- "version": "v1.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/event-loop.git",
- "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
- "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
- },
- "suggest": {
- "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\EventLoop\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
- "keywords": [
- "asynchronous",
- "event-loop"
- ],
- "support": {
- "issues": "https://github.com/reactphp/event-loop/issues",
- "source": "https://github.com/reactphp/event-loop/tree/v1.6.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2025-11-17T20:46:25+00:00"
- },
- {
- "name": "react/promise",
- "version": "v3.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/promise.git",
- "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
- "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.0"
- },
- "require-dev": {
- "phpstan/phpstan": "1.12.28 || 1.4.10",
- "phpunit/phpunit": "^9.6 || ^7.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "React\\Promise\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "A lightweight implementation of CommonJS Promises/A for PHP",
- "keywords": [
- "promise",
- "promises"
- ],
- "support": {
- "issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v3.3.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2025-08-19T18:57:03+00:00"
- },
- {
- "name": "react/socket",
- "version": "v1.17.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/socket.git",
- "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08",
- "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08",
- "shasum": ""
- },
- "require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.0",
- "react/dns": "^1.13",
- "react/event-loop": "^1.2",
- "react/promise": "^3.2 || ^2.6 || ^1.2.1",
- "react/stream": "^1.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
- "react/async": "^4.3 || ^3.3 || ^2",
- "react/promise-stream": "^1.4",
- "react/promise-timer": "^1.11"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\Socket\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
- "keywords": [
- "Connection",
- "Socket",
- "async",
- "reactphp",
- "stream"
- ],
- "support": {
- "issues": "https://github.com/reactphp/socket/issues",
- "source": "https://github.com/reactphp/socket/tree/v1.17.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2025-11-19T20:47:34+00:00"
- },
- {
- "name": "react/stream",
- "version": "v1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/reactphp/stream.git",
- "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
- "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
- "shasum": ""
- },
- "require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.8",
- "react/event-loop": "^1.2"
- },
- "require-dev": {
- "clue/stream-filter": "~1.2",
- "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "React\\Stream\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
- }
- ],
- "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
- "keywords": [
- "event-driven",
- "io",
- "non-blocking",
- "pipe",
- "reactphp",
- "readable",
- "stream",
- "writable"
- ],
- "support": {
- "issues": "https://github.com/reactphp/stream/issues",
- "source": "https://github.com/reactphp/stream/tree/v1.4.0"
- },
- "funding": [
- {
- "url": "https://opencollective.com/reactphp",
- "type": "open_collective"
- }
- ],
- "time": "2024-06-11T12:45:25+00:00"
- },
- {
- "name": "rector/rector",
- "version": "2.2.9",
- "source": {
- "type": "git",
- "url": "https://github.com/rectorphp/rector.git",
- "reference": "0b8e49ec234877b83244d2ecd0df7a4c16471f05"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/0b8e49ec234877b83244d2ecd0df7a4c16471f05",
- "reference": "0b8e49ec234877b83244d2ecd0df7a4c16471f05",
- "shasum": ""
- },
- "require": {
- "php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.32"
- },
- "conflict": {
- "rector/rector-doctrine": "*",
- "rector/rector-downgrade-php": "*",
- "rector/rector-phpunit": "*",
- "rector/rector-symfony": "*"
- },
- "suggest": {
- "ext-dom": "To manipulate phpunit.xml via the custom-rule command"
- },
- "bin": [
- "bin/rector"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Instant Upgrade and Automated Refactoring of any PHP code",
- "homepage": "https://getrector.com/",
- "keywords": [
- "automation",
- "dev",
- "migration",
- "refactoring"
- ],
- "support": {
- "issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.2.9"
- },
- "funding": [
- {
- "url": "https://github.com/tomasvotruba",
- "type": "github"
- }
- ],
- "time": "2025-11-28T14:21:22+00:00"
- },
- {
- "name": "sebastian/cli-parser",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T07:12:49+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:58:43+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:59:15+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "5.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e",
- "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/diff": "^5.0",
- "sebastian/exporter": "^5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
- "type": "tidelift"
- }
- ],
- "time": "2025-09-07T05:25:07+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "3.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "68ff824baeae169ec9f2137158ee529584553799"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
- "reference": "68ff824baeae169ec9f2137158ee529584553799",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-21T08:37:17+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "6.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "6.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "https://github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-23T08:47:14+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "5.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "0735b90f4da94969541dac1da743446e276defa6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6",
- "reference": "0735b90f4da94969541dac1da743446e276defa6",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/recursion-context": "^5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "https://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
- "type": "tidelift"
- }
- ],
- "time": "2025-09-24T06:09:11+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "6.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "6.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "https://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T07:19:19+00:00"
- },
- {
- "name": "sebastian/lines-of-code",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
- "support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-21T08:38:20+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "5.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T07:08:32+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T07:06:18+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "5.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "https://github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- },
- {
- "url": "https://liberapay.com/sebastianbergmann",
- "type": "liberapay"
- },
- {
- "url": "https://thanks.dev/u/gh/sebastianbergmann",
- "type": "thanks_dev"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-10T07:50:56+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "4.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T07:10:45+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "4.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-07T11:34:05+00:00"
- },
- {
- "name": "seld/jsonlint",
- "version": "1.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2",
- "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2",
- "shasum": ""
- },
- "require": {
- "php": "^5.3 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.11",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
- },
- "bin": [
- "bin/jsonlint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Seld\\JsonLint\\": "src/Seld/JsonLint/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "https://seld.be"
- }
- ],
- "description": "JSON Linter",
- "keywords": [
- "json",
- "linter",
- "parser",
- "validator"
- ],
- "support": {
- "issues": "https://github.com/Seldaek/jsonlint/issues",
- "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0"
- },
- "funding": [
- {
- "url": "https://github.com/Seldaek",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
- "type": "tidelift"
- }
- ],
- "time": "2024-07-11T14:55:45+00:00"
- },
- {
- "name": "squizlabs/php_codesniffer",
- "version": "3.13.5",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
- "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4",
- "shasum": ""
- },
- "require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
- },
- "bin": [
- "bin/phpcbf",
- "bin/phpcs"
- ],
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Greg Sherwood",
- "role": "Former lead"
- },
- {
- "name": "Juliette Reinders Folmer",
- "role": "Current lead"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
- }
- ],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
- "keywords": [
- "phpcs",
- "standards",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
- "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
- "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
- "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
- },
- "funding": [
- {
- "url": "https://github.com/PHPCSStandards",
- "type": "github"
- },
- {
- "url": "https://github.com/jrfnl",
- "type": "github"
- },
- {
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
- },
- {
- "url": "https://thanks.dev/u/gh/phpcsstandards",
- "type": "thanks_dev"
- }
- ],
- "time": "2025-11-04T16:30:35+00:00"
- },
- {
- "name": "symfony/event-dispatcher",
- "version": "v6.4.25",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "b0cf3162020603587363f0551cd3be43958611ff"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b0cf3162020603587363f0551cd3be43958611ff",
- "reference": "b0cf3162020603587363f0551cd3be43958611ff",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/event-dispatcher-contracts": "^2.5|^3"
- },
- "conflict": {
- "symfony/dependency-injection": "<5.4",
- "symfony/service-contracts": "<2.5"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0|3.0"
- },
- "require-dev": {
- "psr/log": "^1|^2|^3",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/error-handler": "^5.4|^6.0|^7.0",
- "symfony/expression-language": "^5.4|^6.0|^7.0",
- "symfony/http-foundation": "^5.4|^6.0|^7.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.25"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-08-13T09:41:44+00:00"
- },
- {
- "name": "symfony/event-dispatcher-contracts",
- "version": "v3.6.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586",
- "reference": "59eb412e93815df44f05f342958efa9f46b1e586",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "psr/event-dispatcher": "^1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
- "branch-alias": {
- "dev-main": "3.6-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to dispatching event",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:21:43+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v7.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "e0be088d22278583a82da281886e8c3592fbf149"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149",
- "reference": "e0be088d22278583a82da281886e8c3592fbf149",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2"
- },
- "require-dev": {
- "symfony/filesystem": "^6.4|^7.0|^8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Finds files and directories via an intuitive fluent interface",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/finder/tree/v7.4.8"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-03-24T13:12:05+00:00"
- },
- {
- "name": "symfony/options-resolver",
- "version": "v7.4.8",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/options-resolver.git",
- "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
- "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\OptionsResolver\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an improved replacement for the array_replace PHP function",
- "homepage": "https://symfony.com",
- "keywords": [
- "config",
- "configuration",
- "options"
- ],
- "support": {
- "source": "https://github.com/symfony/options-resolver/tree/v7.4.8"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-03-24T13:12:05+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.36.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
- "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2026-04-10T16:19:22+00:00"
- },
- {
- "name": "symfony/polyfill-php81",
- "version": "v1.33.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/polyfill-php82",
- "version": "v1.33.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php82.git",
- "reference": "5d2ed36f7734637dacc025f179698031951b1692"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/5d2ed36f7734637dacc025f179698031951b1692",
- "reference": "5d2ed36f7734637dacc025f179698031951b1692",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php82\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php82/tree/v1.33.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/polyfill-php84",
- "version": "v1.33.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
- "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php84\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-06-24T13:30:11+00:00"
- },
- {
- "name": "symfony/stopwatch",
- "version": "v6.4.24",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/stopwatch.git",
- "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898",
- "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/service-contracts": "^2.5|^3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Stopwatch\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides a way to profile code",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.4.24"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-07-10T08:14:14+00:00"
- },
- {
- "name": "symfony/var-dumper",
- "version": "v6.4.26",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfae1497a2f1eaad78dbc0590311c599c7178d4a",
- "reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "conflict": {
- "symfony/console": "<5.4"
- },
- "require-dev": {
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/error-handler": "^6.3|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/uid": "^5.4|^6.0|^7.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.26"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-09-25T15:37:27+00:00"
- },
- {
- "name": "tbachert/spi",
- "version": "v1.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/Nevay/spi.git",
- "reference": "e7078767866d0a9e0f91d3f9d42a832df5e39002"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Nevay/spi/zipball/e7078767866d0a9e0f91d3f9d42a832df5e39002",
- "reference": "e7078767866d0a9e0f91d3f9d42a832df5e39002",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^2.0",
- "composer/semver": "^1.0 || ^2.0 || ^3.0",
- "php": "^8.1"
- },
- "require-dev": {
- "composer/composer": "^2.0",
- "infection/infection": "^0.27.9",
- "phpunit/phpunit": "^10.5",
- "psalm/phar": "^5.18"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Nevay\\SPI\\Composer\\Plugin",
- "branch-alias": {
- "dev-main": "1.0.x-dev"
- },
- "plugin-optional": true
- },
- "autoload": {
- "psr-4": {
- "Nevay\\SPI\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "description": "Service provider loading facility",
- "keywords": [
- "service provider"
- ],
- "support": {
- "issues": "https://github.com/Nevay/spi/issues",
- "source": "https://github.com/Nevay/spi/tree/v1.0.5"
- },
- "time": "2025-06-29T15:42:06+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
- "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2025-11-17T20:03:58+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "dev",
- "stability-flags": {
- "dms/phpunit-arraysubset-asserts": 20,
- "jetbrains/phpstorm-stubs": 20,
- "phpactor/tolerant-php-parser": 20
- },
- "prefer-stable": true,
- "prefer-lowest": false,
- "platform": {
- "php": "^8.2",
- "ext-mbstring": "*",
- "ext-posix": "*",
- "ext-tokenizer": "*"
- },
- "platform-dev": {},
- "platform-overrides": {
- "php": "8.2.0"
- },
- "plugin-api-version": "2.6.0"
-}
diff --git a/dev/bench/data.js b/dev/bench/data.js
new file mode 100644
index 0000000000..292840dd40
--- /dev/null
+++ b/dev/bench/data.js
@@ -0,0 +1,14568 @@
+window.BENCHMARK_DATA = {
+ "lastUpdate": 1787400017513,
+ "repoUrl": "https://github.com/phpactor/phpactor",
+ "entries": {
+ "Phpactor Benchmarks": [
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "e55467cb0a9c40e47df39051ab7b8dd34dc6ae17",
+ "message": "Do not use \"auto\" time unit",
+ "timestamp": "2026-03-21T18:28:34Z",
+ "tree_id": "ff700205cba0cdb57620af07493504f2f68ee723",
+ "url": "https://github.com/phpactor/phpactor/commit/e55467cb0a9c40e47df39051ab7b8dd34dc6ae17"
+ },
+ "date": 1774117829034,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.24696477495105,
+ "range": "± 2.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 164.27268884539728,
+ "range": "± 0.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3111193737768865,
+ "range": "± 0.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.724397260273932,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.03316234833659558,
+ "range": "± 1.67%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03457581213307178,
+ "range": "± 1.31%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05687369863013621,
+ "range": "± 1.10%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01967338551859104,
+ "range": "± 6.54%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09325831702543969,
+ "range": "± 1.00%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05740735812133071,
+ "range": "± 9.11%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.17440430528376,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 557,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1335,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.30799412915857,
+ "range": "± 0.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.474461839530354,
+ "range": "± 4.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09189119373776895,
+ "range": "± 2.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09140371819960985,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.0902465753424652,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09120665362035171,
+ "range": "± 1.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09108493150684895,
+ "range": "± 5.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08842270058708455,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09047788649706354,
+ "range": "± 3.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6785103718199648,
+ "range": "± 3.69%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.059771624266144026,
+ "range": "± 4.40%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1395929549902152,
+ "range": "± 6.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.14095107632093926,
+ "range": "± 11.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13458317025440306,
+ "range": "± 5.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1356673189823874,
+ "range": "± 7.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1127323,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08983757338551857,
+ "range": "± 13.15%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 344,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 308,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 291,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 77211.0782778865,
+ "range": "± 176.48%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 314905.8082191789,
+ "range": "± 0.25%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71474.36007827798,
+ "range": "± 0.77%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28731.281800390836,
+ "range": "± 0.52%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25043.837573385637,
+ "range": "± 0.35%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30168.066536203092,
+ "range": "± 0.41%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 818233.3933463655,
+ "range": "± 0.48%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 117079,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6322485322896445,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.093571428571465,
+ "range": "± 0.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17170.28180039191,
+ "range": "± 0.40%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 151.1743013698638,
+ "range": "± 0.31%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.85020352250413,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7440410958904213,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.114698630136989,
+ "range": "± 3.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.228949119373781,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9698923679060899,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4210726027397222,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.78,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 97.21092465753557,
+ "range": "± 0.45%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 103.44733365949232,
+ "range": "± 0.84%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 170094,
+ "range": "± 194.95%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 117093.4794520555,
+ "range": "± 0.86%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "e55467cb0a9c40e47df39051ab7b8dd34dc6ae17",
+ "message": "Do not use \"auto\" time unit",
+ "timestamp": "2026-03-21T18:28:34Z",
+ "tree_id": "ff700205cba0cdb57620af07493504f2f68ee723",
+ "url": "https://github.com/phpactor/phpactor/commit/e55467cb0a9c40e47df39051ab7b8dd34dc6ae17"
+ },
+ "date": 1774118058016,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.502767123287837,
+ "range": "± 1.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 166.3120489236794,
+ "range": "± 0.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.4262446183952635,
+ "range": "± 1.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.789095890411232,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.03311502935420781,
+ "range": "± 1.68%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03461295499021525,
+ "range": "± 1.71%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05718058708414852,
+ "range": "± 1.72%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.019633894324853268,
+ "range": "± 5.23%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09515561643835678,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05828387475538144,
+ "range": "± 3.57%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.708176125244634,
+ "range": "± 7.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 696,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1384,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.546602739725916,
+ "range": "± 1.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.97086301369847,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09316027397260257,
+ "range": "± 4.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09217436399217184,
+ "range": "± 3.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.0925978473581215,
+ "range": "± 3.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09245616438356105,
+ "range": "± 1.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09196712328767088,
+ "range": "± 2.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09176986301369928,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09084324853229069,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6995596868884482,
+ "range": "± 1.22%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05519804305283749,
+ "range": "± 3.30%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14638943248532274,
+ "range": "± 6.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.14667906066536193,
+ "range": "± 10.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13968493150684919,
+ "range": "± 7.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13923091976516622,
+ "range": "± 9.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1210551,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.0913131115459882,
+ "range": "± 13.13%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 311,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 300,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 310,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 79621.98043052838,
+ "range": "± 176.48%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 320762.6731898254,
+ "range": "± 1.24%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72635.78473581202,
+ "range": "± 0.81%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 29265.26418786697,
+ "range": "± 1.03%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25321.281800391207,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30741.24657534244,
+ "range": "± 1.58%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 826899.4794520579,
+ "range": "± 1.21%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 124099,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6655616438355918,
+ "range": "± 1.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.1330489236790764,
+ "range": "± 1.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17614.14872798441,
+ "range": "± 3.13%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 155.76130528375873,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 148.0355714285714,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.764739726027403,
+ "range": "± 2.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.1201174168297494,
+ "range": "± 2.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.259516634050895,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 1.0065356164383494,
+ "range": "± 1.88%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4530289628180002,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.896,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 102.82602739726302,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 108.50147162426403,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 180878.1937377691,
+ "range": "± 199.42%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 121508.528375734,
+ "range": "± 5.10%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "e55467cb0a9c40e47df39051ab7b8dd34dc6ae17",
+ "message": "Do not use \"auto\" time unit",
+ "timestamp": "2026-03-21T18:28:34Z",
+ "tree_id": "ff700205cba0cdb57620af07493504f2f68ee723",
+ "url": "https://github.com/phpactor/phpactor/commit/e55467cb0a9c40e47df39051ab7b8dd34dc6ae17"
+ },
+ "date": 1774123413475,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.263712328767085,
+ "range": "± 1.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 165.25783170254576,
+ "range": "± 0.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3455068493150266,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.68949315068472,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.033192876712328935,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03493295499021539,
+ "range": "± 1.09%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05695448140900139,
+ "range": "± 0.89%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.019638590998042743,
+ "range": "± 1.50%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09339272015655607,
+ "range": "± 1.36%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.057229119373776796,
+ "range": "± 10.11%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.201060273972573,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 543,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1338,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.418234833659564,
+ "range": "± 0.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.599330724070485,
+ "range": "± 5.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09219158512719997,
+ "range": "± 2.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09227690802348326,
+ "range": "± 1.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09163346379647738,
+ "range": "± 1.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09240039138943187,
+ "range": "± 2.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0908953033268101,
+ "range": "± 3.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09029589041095949,
+ "range": "± 1.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0914234833659499,
+ "range": "± 3.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6739019569471625,
+ "range": "± 1.29%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05543072407045029,
+ "range": "± 3.40%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1403424657534246,
+ "range": "± 5.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13986105675146762,
+ "range": "± 6.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13304500978473582,
+ "range": "± 7.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13411545988258314,
+ "range": "± 4.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1146360,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08787084148727935,
+ "range": "± 4.34%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 297,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 307,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 293,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 78819.12720156556,
+ "range": "± 176.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 316131.85714285664,
+ "range": "± 1.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72504.62426614464,
+ "range": "± 2.12%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28704.75929549909,
+ "range": "± 0.28%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25413.414872798883,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30440.75146771044,
+ "range": "± 0.80%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 817932.7534246517,
+ "range": "± 0.64%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 117827,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6044579256360212,
+ "range": "± 1.10%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.1161272015655275,
+ "range": "± 0.97%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17245.32876712324,
+ "range": "± 0.57%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 151.70543248532172,
+ "range": "± 0.40%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 145.80695499021522,
+ "range": "± 0.52%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7435499021526193,
+ "range": "± 0.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.1077260273972462,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2398786692759045,
+ "range": "± 0.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9736119373776734,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4278863013698688,
+ "range": "± 0.74%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 6.011,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 99.09261937377451,
+ "range": "± 0.69%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.74459197651753,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 170856,
+ "range": "± 194.65%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 118409.70450097825,
+ "range": "± 0.89%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "przepompownia@users.noreply.github.com",
+ "name": "Tomasz N",
+ "username": "przepompownia"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "77543faa924d1ea336a5284aa146789a3b63fbf0",
+ "message": "fix (BinaryExpressionResolver): null coalesce on undefined variable (#3031)",
+ "timestamp": "2026-03-21T21:25:17Z",
+ "tree_id": "e3117f5546654421addc99308fa2522ad4b43853",
+ "url": "https://github.com/phpactor/phpactor/commit/77543faa924d1ea336a5284aa146789a3b63fbf0"
+ },
+ "date": 1774128418061,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.677794520547955,
+ "range": "± 1.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 166.0490489236791,
+ "range": "± 2.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.367587084148717,
+ "range": "± 3.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.755446183952998,
+ "range": "± 0.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.03308602739726055,
+ "range": "± 1.66%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03479041095890356,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05701409001956958,
+ "range": "± 1.78%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.019654403131115484,
+ "range": "± 1.83%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.0929769863013701,
+ "range": "± 0.96%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.057063365949119677,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.17453855185901,
+ "range": "± 0.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 587,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1348,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.207334637964705,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.4304911937379,
+ "range": "± 0.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09020821917808175,
+ "range": "± 2.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09039178082191605,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09009452054794514,
+ "range": "± 2.61%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09173933463796334,
+ "range": "± 2.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09134011741683108,
+ "range": "± 2.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0909348336594913,
+ "range": "± 5.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09123972602739808,
+ "range": "± 1.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.671474168297457,
+ "range": "± 1.67%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05648884540117396,
+ "range": "± 8.01%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1400547945205479,
+ "range": "± 5.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13906457925635998,
+ "range": "± 11.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13301956947162422,
+ "range": "± 4.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13421917808219172,
+ "range": "± 6.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1143783,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08737573385518578,
+ "range": "± 6.25%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 290,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 300,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 307,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 77358.14090019569,
+ "range": "± 176.79%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 313523.83953033295,
+ "range": "± 1.42%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71220.28571428522,
+ "range": "± 0.53%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28487.65949119336,
+ "range": "± 0.50%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24829.876712328747,
+ "range": "± 4.20%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30424.655577299083,
+ "range": "± 0.37%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 815173.3600782793,
+ "range": "± 1.29%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 118617,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5998512720156342,
+ "range": "± 1.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.0432172211350412,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17012.365949119543,
+ "range": "± 0.93%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 149.98205479452085,
+ "range": "± 0.85%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.91742857142896,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7272857142857057,
+ "range": "± 2.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.068929549902121,
+ "range": "± 1.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2027358121330995,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9656375733855055,
+ "range": "± 0.75%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4074925636007758,
+ "range": "± 0.81%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.765,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 96.08085714285743,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 101.49212133072362,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 169425,
+ "range": "± 193.93%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 115327.46379647584,
+ "range": "± 0.76%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "cb25ad263b9d3aa87f98a6040bdc3194d715766c",
+ "message": "gh-3022: explictly specify byte order (#3033)\n\nIf ext-mbstring is not installed, then\nhttps://github.com/symfony/polyfill-mbstring will take over. The\npolyfill uses `iconv`\n\nThere is an off-by-one issue that happens when the ext-mbstring is not\nenabled.\n\n`mbstring` outputs UTF-16BE (first in screenshot) and `iconv` outputs UTF-16LE and also adds BOM (fffe).\n\nBy explicitly specifying the byte order we remove the ambiguity.",
+ "timestamp": "2026-03-21T21:25:34Z",
+ "tree_id": "dfd0bce59f7ac156b4ed6d2d6477b9d2342bc560",
+ "url": "https://github.com/phpactor/phpactor/commit/cb25ad263b9d3aa87f98a6040bdc3194d715766c"
+ },
+ "date": 1774128434259,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.243017612524469,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 164.44654207436338,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.350600782778854,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.38650097847323,
+ "range": "± 0.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.03294465753424704,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.0344785127201566,
+ "range": "± 1.94%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05667643835616438,
+ "range": "± 5.90%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.019685048923679116,
+ "range": "± 3.98%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09330027397260365,
+ "range": "± 0.99%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05751863013698617,
+ "range": "± 2.54%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.26336360078275,
+ "range": "± 4.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 564,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1348,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.383931506849326,
+ "range": "± 4.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.643782778864784,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09371819960861054,
+ "range": "± 2.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09061643835616437,
+ "range": "± 0.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09146105675146782,
+ "range": "± 6.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09048590998042941,
+ "range": "± 1.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09086497064579295,
+ "range": "± 3.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09096712328767119,
+ "range": "± 6.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09085048923679168,
+ "range": "± 1.55%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.684146966731908,
+ "range": "± 1.74%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.057526810176126,
+ "range": "± 2.46%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14279256360078268,
+ "range": "± 10.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1394109589041095,
+ "range": "± 10.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13397260273972597,
+ "range": "± 8.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13309197651663401,
+ "range": "± 8.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1142119,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08997064579256343,
+ "range": "± 10.32%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 313,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 290,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 297,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 78822.38551859099,
+ "range": "± 176.85%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 316471.7338551874,
+ "range": "± 0.52%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71948.1193737745,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 29019.136986301863,
+ "range": "± 1.31%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24943.92563600788,
+ "range": "± 0.34%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30382.87475538144,
+ "range": "± 0.36%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 822634.0684931572,
+ "range": "± 0.47%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 120976,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.619549902152654,
+ "range": "± 1.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.0846653620352247,
+ "range": "± 0.80%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17273.178082191676,
+ "range": "± 0.96%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 153.23224461839598,
+ "range": "± 0.30%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 146.69941487279704,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7439178082191793,
+ "range": "± 2.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.1178571428571296,
+ "range": "± 2.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2376399217221152,
+ "range": "± 2.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9702248532289631,
+ "range": "± 0.73%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4308273972602823,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.786,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 98.65015655577375,
+ "range": "± 0.74%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 105.02368590998172,
+ "range": "± 0.87%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 171456,
+ "range": "± 195.38%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 117940.12915851222,
+ "range": "± 1.73%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "613aa65ce2944b44c8fbb92281ce11bd8c9dfbd6",
+ "message": "Optimise index service and command (#3037)\n\nThis commit introduces a service to optimise the index.\n\nOptimising currently involces of iterating over all records and pruning\nany records that are defined in non-existing files and removing\n\n- Introduced index iterator\n- Optimizer\n- Add optimiser service that runs every hour by default\n- Add command to manually invoke the optimiser\n- Add LSP notification `phpactor/indexer/optimise` to manually invoke if\n necessary.",
+ "timestamp": "2026-04-13T22:22:49+01:00",
+ "tree_id": "ef2b52c248cda116c5ac9866d838659f54e835da",
+ "url": "https://github.com/phpactor/phpactor/commit/613aa65ce2944b44c8fbb92281ce11bd8c9dfbd6"
+ },
+ "date": 1776115474955,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.120994129158479,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 164.89672407044804,
+ "range": "± 0.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3416477495107273,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.488827788649985,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.02774054794520524,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.02945060665362051,
+ "range": "± 2.46%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.0510578473581215,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015338943248532563,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08825138943248646,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05772148727984227,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.27180313111546,
+ "range": "± 4.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 583,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1374,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.228802348336513,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.509851272015464,
+ "range": "± 1.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09142641878669341,
+ "range": "± 3.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09080234833659487,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09024794520547971,
+ "range": "± 1.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09093933463796396,
+ "range": "± 1.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0925344422700595,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09268610567514682,
+ "range": "± 15.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09159041095890276,
+ "range": "± 1.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.691036594911942,
+ "range": "± 1.48%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.055087671232876244,
+ "range": "± 3.58%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1373698630136985,
+ "range": "± 5.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13763796477495102,
+ "range": "± 5.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13242465753424648,
+ "range": "± 9.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1318160469667318,
+ "range": "± 9.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1170076,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08807045009784724,
+ "range": "± 7.20%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 299,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 334,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 299,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 323342.61056751467,
+ "range": "± 126.77%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5786868884540108,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.058835616438339,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17148.30919765151,
+ "range": "± 0.93%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 153.27115068493248,
+ "range": "± 0.47%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 147.4893796477463,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 74137.30724070473,
+ "range": "± 1.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 119540,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7289080234833791,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.0723483365949,
+ "range": "± 0.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.216870841487279,
+ "range": "± 2.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.832,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72445.87475538198,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28599.61643835641,
+ "range": "± 0.68%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24907.06066536205,
+ "range": "± 0.67%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30153.420743640534,
+ "range": "± 0.70%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 839516.1780821816,
+ "range": "± 1.07%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9748589041095872,
+ "range": "± 1.30%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4050326810176224,
+ "range": "± 0.81%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 173887.7925636008,
+ "range": "± 200.96%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 117496.27397260144,
+ "range": "± 1.33%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 93.93509393346353,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 100.61395303326775,
+ "range": "± 0.31%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "przepompownia@users.noreply.github.com",
+ "name": "Tomasz N",
+ "username": "przepompownia"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "77f9ff9b50c81300fdd4fecb6fe5f89067cf5cb0",
+ "message": "Cleanup after removing PHP 8.1 support (#3038)",
+ "timestamp": "2026-04-17T18:06:37+01:00",
+ "tree_id": "eb14d4c6199ebed69657adf29fbbec2eb78ba4ed",
+ "url": "https://github.com/phpactor/phpactor/commit/77f9ff9b50c81300fdd4fecb6fe5f89067cf5cb0"
+ },
+ "date": 1776445687060,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.532778864970545,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 139.16786301369848,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.9265753424657577,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 19.12568688845478,
+ "range": "± 1.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.015703326810176037,
+ "range": "± 1.48%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.0166421526418785,
+ "range": "± 1.79%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.036552093933464154,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007386810176125254,
+ "range": "± 3.09%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.0670994911937371,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.046162191780822065,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 14.957459491193763,
+ "range": "± 0.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 490,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1208,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.003994129158404,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.045146771037174,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07121291585127144,
+ "range": "± 2.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.06949178082191756,
+ "range": "± 1.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07142230919765043,
+ "range": "± 1.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07196673189823867,
+ "range": "± 1.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07116634050880613,
+ "range": "± 11.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07000489236790643,
+ "range": "± 1.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07134481409001836,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.4373628180039117,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.04874305283757334,
+ "range": "± 9.28%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.10993346379647743,
+ "range": "± 5.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1091369863013698,
+ "range": "± 5.36%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.10688062622309193,
+ "range": "± 8.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.10719178082191774,
+ "range": "± 4.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 965387,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.07403522504892278,
+ "range": "± 1.36%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 261,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 255,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 281,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 273317.22113502934,
+ "range": "± 127.32%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.2758864970645731,
+ "range": "± 1.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.5184207436399135,
+ "range": "± 0.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14681.682974559759,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 129.5318551859089,
+ "range": "± 0.42%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 124.34115264187753,
+ "range": "± 0.20%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 65357.767123288126,
+ "range": "± 0.77%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 101122,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.3887847358121328,
+ "range": "± 4.11%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.547518590998038,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.7998767123287571,
+ "range": "± 0.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.674,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 58853.36007827805,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 23541.547945205544,
+ "range": "± 0.70%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 20997.12328767142,
+ "range": "± 1.17%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 26879.43835616402,
+ "range": "± 0.37%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 671528.387475532,
+ "range": "± 0.16%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.7741129158512686,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.154981409001977,
+ "range": "± 0.44%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 134836,
+ "range": "± 204.50%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 93162.48532289639,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 76.74860469667334,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 81.55726027397215,
+ "range": "± 0.30%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "przepompownia@users.noreply.github.com",
+ "name": "Tomasz N",
+ "username": "przepompownia"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "4ad4307c8348df4eb525f3a20e5f8ce80a3c4623",
+ "message": "Fix PHP 8.5 issues (#2996)\n\nProblem: some phpunit tests fail on PHP 8.5\n\nSolution:\n- upgrade Psalm version\n- upgrade Monolog (avoid: deprecation on the one side, dependency conflicts on the other side)\n- increase test Psalm process timeout to 15 s\n- fix new deprecations\n- add 8.5 to CI matrix",
+ "timestamp": "2026-04-18T12:45:39+01:00",
+ "tree_id": "23810b35ce27120a535570957da9c4145a599185",
+ "url": "https://github.com/phpactor/phpactor/commit/4ad4307c8348df4eb525f3a20e5f8ce80a3c4623"
+ },
+ "date": 1776512839469,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.953017612524494,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 163.14431702543664,
+ "range": "± 0.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2445205479451777,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.398041095890257,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.027716673189823935,
+ "range": "± 1.89%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.02925303326810157,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05049033268101807,
+ "range": "± 1.09%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015377612524461891,
+ "range": "± 4.57%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08800861056751598,
+ "range": "± 1.16%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05697906066536204,
+ "range": "± 8.70%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.11344735812139,
+ "range": "± 2.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 586,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1385,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.932890410959116,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.074583170254256,
+ "range": "± 0.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.08929236790606704,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.08972230919765159,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08862994129158508,
+ "range": "± 1.23%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08887260273972601,
+ "range": "± 2.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0888857142857154,
+ "range": "± 2.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08910645792563528,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08934716242661354,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6944156555773005,
+ "range": "± 11.51%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.0570960861056747,
+ "range": "± 3.05%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13447945205479447,
+ "range": "± 9.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13359491193737763,
+ "range": "± 5.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.12902739726027396,
+ "range": "± 9.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1291526418786692,
+ "range": "± 4.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1124163,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08671428571428592,
+ "range": "± 7.59%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 291,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 311,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 315,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 317073.240704501,
+ "range": "± 127.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5629354207436637,
+ "range": "± 0.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.999716242661497,
+ "range": "± 0.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16231.571428571453,
+ "range": "± 0.93%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 150.56836790606735,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.20855185909414,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72099.23679060553,
+ "range": "± 0.29%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 117394,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.701450097847341,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.045121330724107,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.177178082191731,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.611,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 70660.02348336583,
+ "range": "± 0.51%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28050.958904109393,
+ "range": "± 0.37%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24754.133072406905,
+ "range": "± 0.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29742.117416829773,
+ "range": "± 3.19%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 815224.1448140729,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9402428571428627,
+ "range": "± 0.25%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.3795949119373652,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 157461,
+ "range": "± 198.21%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 109095.9784735787,
+ "range": "± 0.78%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 88.4603923679057,
+ "range": "± 2.26%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 95.46423972602852,
+ "range": "± 0.51%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "przepompownia@users.noreply.github.com",
+ "name": "Tomasz N",
+ "username": "przepompownia"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "6a46d386795040bc7974b1995108336488d90fd2",
+ "message": "Allow goto definition from first class callables (#3025)",
+ "timestamp": "2026-04-18T12:47:07+01:00",
+ "tree_id": "1d0f352ee7dd446f234eae329724fa9decd4a15b",
+ "url": "https://github.com/phpactor/phpactor/commit/6a46d386795040bc7974b1995108336488d90fd2"
+ },
+ "date": 1776512928115,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.436596868884452,
+ "range": "± 1.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 140.61432485322968,
+ "range": "± 1.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.9394931506849433,
+ "range": "± 1.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 19.223739726027397,
+ "range": "± 13.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.01564082191780805,
+ "range": "± 1.66%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.016819452054794588,
+ "range": "± 2.10%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.036789119373777136,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007395694716242696,
+ "range": "± 2.91%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.06670880626223151,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.04671534246575367,
+ "range": "± 2.03%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 15.03607397260273,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 499,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1184,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.009720156555845,
+ "range": "± 1.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.179788649706543,
+ "range": "± 0.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07208473581213193,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.0705835616438339,
+ "range": "± 1.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07162054794520585,
+ "range": "± 0.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07161369863013789,
+ "range": "± 1.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07150547945205557,
+ "range": "± 1.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07238121330724134,
+ "range": "± 2.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07142328767123278,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.4391643835616454,
+ "range": "± 1.23%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.0482181996086104,
+ "range": "± 1.78%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.11434050880626205,
+ "range": "± 17.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.11104892367906058,
+ "range": "± 10.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.10709001956947156,
+ "range": "± 1.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.10906457925636,
+ "range": "± 6.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 983652,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.07416046966731919,
+ "range": "± 6.22%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 263,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 254,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 252,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 277500.4520547945,
+ "range": "± 127.44%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.293937377690834,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.580371819960894,
+ "range": "± 1.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 13820.876712328765,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 130.26135616438165,
+ "range": "± 0.37%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 127.88866731898463,
+ "range": "± 0.47%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 66969.30528376,
+ "range": "± 0.64%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 102460,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.3882622309197623,
+ "range": "± 1.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.552338551859102,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.7994285714285747,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.681,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 59225.888454010914,
+ "range": "± 0.35%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 23710.068493150677,
+ "range": "± 0.55%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 21070.939334638606,
+ "range": "± 0.52%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 26617.129158512827,
+ "range": "± 0.30%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 676307.3561643874,
+ "range": "± 0.29%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.7821575342465766,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.156929941291596,
+ "range": "± 1.11%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 134346,
+ "range": "± 206.05%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 94251.53816047158,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 76.38162426614647,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 82.36578082191662,
+ "range": "± 0.98%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "32d4bb041374748dd623e31bfae66079fc2d88be",
+ "message": "gh-3039: Resolve additive stub paths consistently (#3040)\n\nUse the same, fully qualified, paths in both the validation listener and\nthe member provider",
+ "timestamp": "2026-04-21T11:52:10+01:00",
+ "tree_id": "71a86a5422524474833245eace7e275713191e7c",
+ "url": "https://github.com/phpactor/phpactor/commit/32d4bb041374748dd623e31bfae66079fc2d88be"
+ },
+ "date": 1776768830944,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.027684931506954,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 164.98643835616437,
+ "range": "± 3.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2911722113502373,
+ "range": "± 1.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.971904109588873,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.027568023483365938,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.02944814090019572,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05055170254403134,
+ "range": "± 7.18%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01522144814090023,
+ "range": "± 6.80%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08740054794520542,
+ "range": "± 20.58%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.057169354207436844,
+ "range": "± 1.43%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.51428884540117,
+ "range": "± 12.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 532,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1371,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.17629941291609,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.299285714285876,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09011369863013773,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.0918904109589062,
+ "range": "± 2.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08984227005870926,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08918238747553892,
+ "range": "± 1.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09114637964774733,
+ "range": "± 2.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08949569471624323,
+ "range": "± 1.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0892863013698634,
+ "range": "± 1.80%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6684410958904174,
+ "range": "± 1.39%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.057454207436398765,
+ "range": "± 3.51%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1354305283757338,
+ "range": "± 4.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13716829745596856,
+ "range": "± 6.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13046183953033264,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13106457925636,
+ "range": "± 6.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1132258,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08791389432485304,
+ "range": "± 5.38%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 294,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 288,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 305,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 325255.9178082192,
+ "range": "± 126.14%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.570391389432491,
+ "range": "± 3.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.058152641878703,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16663.64383561659,
+ "range": "± 0.80%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 151.9192113502936,
+ "range": "± 4.90%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.6169589041106,
+ "range": "± 0.77%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72629.96086105611,
+ "range": "± 0.54%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 116250,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6920450097847315,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.0768082191780595,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2129178082191685,
+ "range": "± 2.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.761,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71614,
+ "range": "± 0.84%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28517.794520548003,
+ "range": "± 0.53%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24700.003913894296,
+ "range": "± 0.86%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30003.3522504891,
+ "range": "± 0.67%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 815288.1682974603,
+ "range": "± 0.70%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9484747553816064,
+ "range": "± 0.71%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.3964344422700665,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 160596,
+ "range": "± 196.87%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 114321.39726027314,
+ "range": "± 0.98%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 91.6199070450092,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 99.3857142857132,
+ "range": "± 0.91%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "cweiske+github.com-2025@cweiske.de",
+ "name": "Christian Weiske",
+ "username": "cweiske"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "280ca4fbac604348ce4d9221678ea356c836eb48",
+ "message": "Add newline at end of .phpactor.json (#3047)\n\nThis allows us to \"cat .phpactor.json\" without indenting/breaking\nthe shell prompt.\n\nResolves: https://github.com/phpactor/phpactor/issues/3046",
+ "timestamp": "2026-05-14T17:58:45+01:00",
+ "tree_id": "9387d31381540eab6c4337a6a37562d6cc3ec038",
+ "url": "https://github.com/phpactor/phpactor/commit/280ca4fbac604348ce4d9221678ea356c836eb48"
+ },
+ "date": 1778778030881,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.322675146771038,
+ "range": "± 12.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.807798434442535,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.644763209393377,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 153.86276908023675,
+ "range": "± 0.80%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031228180039139183,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03279608610567508,
+ "range": "± 6.30%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05430692759295405,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.018489628180038867,
+ "range": "± 0.98%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08568735812133069,
+ "range": "± 1.76%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.054108062622309855,
+ "range": "± 1.36%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.504704109589255,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 551,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1365,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.667307240704492,
+ "range": "± 0.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 11.858790606653486,
+ "range": "± 0.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07528082191781027,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07492407045009819,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07482465753424712,
+ "range": "± 2.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.0751990215264183,
+ "range": "± 3.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0745663405088063,
+ "range": "± 13.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0744305283757343,
+ "range": "± 2.61%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07545283757338646,
+ "range": "± 2.23%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5963532289628122,
+ "range": "± 1.05%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05809041095890428,
+ "range": "± 2.55%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1075762,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09342465753424667,
+ "range": "± 6.24%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13623287671232873,
+ "range": "± 5.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13750684931506843,
+ "range": "± 5.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13824070450097842,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1372544031311154,
+ "range": "± 4.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 320,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 324,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 288,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 75461.91780821918,
+ "range": "± 176.22%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 288081.7162426652,
+ "range": "± 0.56%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6265420743639825,
+ "range": "± 3.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.9170117416829897,
+ "range": "± 1.16%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.098313111545949,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.717,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9197317025440304,
+ "range": "± 0.77%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.3351802348336557,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 107493,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15103.168297456166,
+ "range": "± 0.25%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 135.29490410959178,
+ "range": "± 0.50%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 129.23354794520677,
+ "range": "± 0.25%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.505565557729942,
+ "range": "± 21.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.8954696673189777,
+ "range": "± 1.30%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 61095.85909980555,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 26102.88062622257,
+ "range": "± 0.39%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22802.32876712313,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29000.727984344187,
+ "range": "± 0.40%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 739024.9001956973,
+ "range": "± 0.73%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 162355,
+ "range": "± 196.02%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 92.86864383561598,
+ "range": "± 0.45%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 100.80207729941314,
+ "range": "± 0.22%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 113543.88062622352,
+ "range": "± 0.65%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "2fa45fa34e28c96ced5653aa2ab7662c3ebff3dc",
+ "message": "Gh 3042: No stacking code actions / code-action concurrency (#3048)\n\n- Ensure that only one code-action resolution happens at one time and that any previous operation is cancelled...\n- ... run the action in a separate process so that it's non-blocking (and can therefore also be cancelled).",
+ "timestamp": "2026-05-23T07:59:20+01:00",
+ "tree_id": "fb63e305a412659316635a8c26576ba37e8b052f",
+ "url": "https://github.com/phpactor/phpactor/commit/2fa45fa34e28c96ced5653aa2ab7662c3ebff3dc"
+ },
+ "date": 1779519645614,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.9689823874755312,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 18.716682974559692,
+ "range": "± 9.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.816978473581054,
+ "range": "± 1.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 142.5283307240695,
+ "range": "± 0.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.01582739726027385,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.017007240704500694,
+ "range": "± 1.23%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.03731545988258358,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007376438356164418,
+ "range": "± 2.90%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.06851346379647681,
+ "range": "± 0.95%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.046895107632093286,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 15.567398825831711,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 521,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1242,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.174616438355988,
+ "range": "± 0.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.50975146771047,
+ "range": "± 0.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07332504892367785,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07355479452054807,
+ "range": "± 13.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07266849315068519,
+ "range": "± 2.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07176477495107586,
+ "range": "± 1.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07403091976516799,
+ "range": "± 1.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07299099804305209,
+ "range": "± 2.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0723275929549909,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.417425440313109,
+ "range": "± 1.63%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.04818904109589046,
+ "range": "± 11.44%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 992279,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.07512915851272016,
+ "range": "± 8.55%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.11147945205479448,
+ "range": "± 9.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.11146575342465746,
+ "range": "± 4.28%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.11381017612524451,
+ "range": "± 7.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.11348727984344413,
+ "range": "± 2.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 274,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 266,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 274,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 71071.38160469667,
+ "range": "± 175.62%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 274116.16046966705,
+ "range": "± 0.19%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.4049960861056698,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.5971761252445895,
+ "range": "± 0.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.8397573385518693,
+ "range": "± 0.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.844,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.7971802348336479,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.1701091976516662,
+ "range": "± 0.95%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 102623,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14126.727984344368,
+ "range": "± 1.28%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 132.06802739726012,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 126.03719960861135,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.3178238747553626,
+ "range": "± 1.23%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.5918160469667697,
+ "range": "± 1.36%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 59851.31311154552,
+ "range": "± 0.17%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 24375.28767123306,
+ "range": "± 0.84%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 21647.966731897483,
+ "range": "± 0.63%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 27143.138943248385,
+ "range": "± 0.73%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 673126.2074364037,
+ "range": "± 0.23%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 138957,
+ "range": "± 206.36%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 77.22594814090012,
+ "range": "± 15.37%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 83.51342563600798,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 95062.1369863002,
+ "range": "± 1.00%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "8b3644d038cefdd8d3e125db2f0675179c43aa89",
+ "message": "Update CL",
+ "timestamp": "2026-05-30T14:46:19+01:00",
+ "tree_id": "c8abbfa6859354d6cf26cde55f6cb0863f897e31",
+ "url": "https://github.com/phpactor/phpactor/commit/8b3644d038cefdd8d3e125db2f0675179c43aa89"
+ },
+ "date": 1780148887442,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.257767123287536,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 166.87138943248567,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.358318982387449,
+ "range": "± 1.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.802704500978518,
+ "range": "± 7.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.028396203522505232,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029691506849315367,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05136399217221141,
+ "range": "± 9.74%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015642739726027435,
+ "range": "± 5.31%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08959021526418756,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05794035225048935,
+ "range": "± 2.67%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.562893150684665,
+ "range": "± 1.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 567,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1354,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.423432485322838,
+ "range": "± 2.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.645187866927582,
+ "range": "± 2.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09114481409001997,
+ "range": "± 2.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09241115459882683,
+ "range": "± 2.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09223737769080055,
+ "range": "± 2.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09207475538160662,
+ "range": "± 1.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09087749510763089,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09175362035225096,
+ "range": "± 2.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09103150684931405,
+ "range": "± 2.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6536816046966696,
+ "range": "± 1.38%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05663170254403166,
+ "range": "± 2.72%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1178959,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14116438356164374,
+ "range": "± 4.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13963796477495102,
+ "range": "± 7.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.1337945205479452,
+ "range": "± 7.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13191976516634046,
+ "range": "± 1.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08655772994129073,
+ "range": "± 2.18%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 293,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 295,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 296,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 325196.2133072407,
+ "range": "± 127.96%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16699.181996086016,
+ "range": "± 0.99%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 155.25426810176359,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 147.51307045009779,
+ "range": "± 1.00%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 75163.6418786681,
+ "range": "± 1.09%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.788,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6093933463796475,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.1073972602738964,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 73177.09197651662,
+ "range": "± 0.62%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28910.13502935461,
+ "range": "± 1.05%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25451.205479452125,
+ "range": "± 1.14%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30038.448140900105,
+ "range": "± 0.50%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 835482.2054794456,
+ "range": "± 0.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.734035225048919,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.087545988258334,
+ "range": "± 0.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2053816046966865,
+ "range": "± 0.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 118722,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9565354207436434,
+ "range": "± 0.53%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.405953424657537,
+ "range": "± 0.71%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 91.43060469667236,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 99.16330919765171,
+ "range": "± 0.99%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 170505.9530332681,
+ "range": "± 199.60%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 114118.30919765276,
+ "range": "± 1.32%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "902d2f0cc0093cb80048e956abb9cf48745207b5",
+ "message": "Include deep-copy as a production dependency",
+ "timestamp": "2026-06-01T13:52:38+01:00",
+ "tree_id": "9848682b4802746063b5f4dca30d717084f67cc1",
+ "url": "https://github.com/phpactor/phpactor/commit/902d2f0cc0093cb80048e956abb9cf48745207b5"
+ },
+ "date": 1780318466827,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.445473581213355,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 137.96150489236916,
+ "range": "± 0.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.8994129158512751,
+ "range": "± 6.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 18.463260273972637,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.0157720547945205,
+ "range": "± 2.80%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.016906692759295343,
+ "range": "± 2.57%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.03673780821917822,
+ "range": "± 5.62%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007377651663405106,
+ "range": "± 2.43%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.06698164383561796,
+ "range": "± 0.72%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.04608176125244633,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 15.112683365949149,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 490,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1171,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 9.996050880625946,
+ "range": "± 0.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.032205479452024,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07152191780822013,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07056849315068489,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07140508806261987,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07149804305283765,
+ "range": "± 8.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0706772994129158,
+ "range": "± 2.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07169452054794574,
+ "range": "± 2.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.06996164383561561,
+ "range": "± 2.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.41392876712329,
+ "range": "± 1.74%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.047751467710371934,
+ "range": "± 3.05%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 964143,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.10932876712328761,
+ "range": "± 9.23%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1067534246575342,
+ "range": "± 5.09%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.1032583170254403,
+ "range": "± 1.23%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.10631506849315064,
+ "range": "± 11.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.07426810176125238,
+ "range": "± 10.84%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 265,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 280,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 271,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 273690.4442270059,
+ "range": "± 127.32%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 13778.013698630184,
+ "range": "± 0.28%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 128.14741291585136,
+ "range": "± 1.29%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 122.80767710372025,
+ "range": "± 0.51%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 65141.41095890408,
+ "range": "± 0.72%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.7,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.2863718199608656,
+ "range": "± 1.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.5002485322896173,
+ "range": "± 0.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 58531.722113503056,
+ "range": "± 0.45%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 23553.579256360452,
+ "range": "± 0.50%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 20958.424657534226,
+ "range": "± 1.90%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 26738.534246575415,
+ "range": "± 0.34%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 667181.8258316983,
+ "range": "± 0.20%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.4029471624266139,
+ "range": "± 0.97%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.556033268101731,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.8078414872798572,
+ "range": "± 0.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 100275,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.7752080234833698,
+ "range": "± 1.42%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.1365082191780729,
+ "range": "± 1.24%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 74.18417416829745,
+ "range": "± 0.77%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 80.88467808219217,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 133652,
+ "range": "± 203.23%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 91847.10763209351,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "63ed184aafd23eeac340e27884182081f4af4544",
+ "message": "Bump composer",
+ "timestamp": "2026-06-08T19:18:06+01:00",
+ "tree_id": "f15001989dd565a42f17d92abfd5b5f33c44f1b2",
+ "url": "https://github.com/phpactor/phpactor/commit/63ed184aafd23eeac340e27884182081f4af4544"
+ },
+ "date": 1780942802793,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.470015655577198,
+ "range": "± 4.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 167.57829354207541,
+ "range": "± 0.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3874716242661647,
+ "range": "± 2.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.745962818003825,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.02817851272015657,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029688062622309247,
+ "range": "± 9.58%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.0542113894324854,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015705988258317073,
+ "range": "± 3.29%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09346551859099876,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05780767123287653,
+ "range": "± 2.28%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.335314285714336,
+ "range": "± 0.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 566,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1355,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.287990215263976,
+ "range": "± 1.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.49547945205477,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.14427925636007627,
+ "range": "± 2.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.14565557729941286,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.14664500978473596,
+ "range": "± 3.16%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.14822328767123244,
+ "range": "± 1.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.1494731898238745,
+ "range": "± 3.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.15053835616438263,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.152057534246574,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6362571428571429,
+ "range": "± 1.72%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05610763209393355,
+ "range": "± 11.30%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1150691,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1372739726027396,
+ "range": "± 10.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13719765166340497,
+ "range": "± 7.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13294716242661433,
+ "range": "± 6.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.12999804305283755,
+ "range": "± 9.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08706849315068503,
+ "range": "± 18.77%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 298,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 334,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 300,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 325479.3659491194,
+ "range": "± 147.90%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16816.569471624563,
+ "range": "± 1.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 153.56690998043084,
+ "range": "± 0.75%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 147.18744814090002,
+ "range": "± 0.25%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 73269.6379647745,
+ "range": "± 0.78%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.763,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.587264187866939,
+ "range": "± 1.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.0650156555773393,
+ "range": "± 2.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71974.32681017614,
+ "range": "± 2.64%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28655.79843444217,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25206.054794520955,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30326.268101760455,
+ "range": "± 0.63%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 834246.0684931534,
+ "range": "± 0.23%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.729099804305276,
+ "range": "± 1.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.098095890410975,
+ "range": "± 1.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2409549902153056,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 118336,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9724534246575494,
+ "range": "± 0.52%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4259606653620127,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 92.70541780821912,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 101.64568688845131,
+ "range": "± 0.50%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 166043,
+ "range": "± 226.88%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 115641.54011741713,
+ "range": "± 1.48%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "3f51172968ce51cd5f4210a0db7e009ecbd897a7",
+ "message": "Revert \"Bump composer\"\n\nThis reverts commit 63ed184aafd23eeac340e27884182081f4af4544.",
+ "timestamp": "2026-06-11T17:04:32+01:00",
+ "tree_id": "9848682b4802746063b5f4dca30d717084f67cc1",
+ "url": "https://github.com/phpactor/phpactor/commit/3f51172968ce51cd5f4210a0db7e009ecbd897a7"
+ },
+ "date": 1781193983935,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.38375342465756,
+ "range": "± 2.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.58196086105681,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.715127201565618,
+ "range": "± 1.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 155.61467123287707,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.030885831702544074,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.032358082191780956,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.054339452054794436,
+ "range": "± 1.99%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01860583170254412,
+ "range": "± 2.18%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.085620000000001,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05491710371819961,
+ "range": "± 7.07%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.40497260273982,
+ "range": "± 1.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 603,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1389,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.977506849315391,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.124994129158488,
+ "range": "± 9.09%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07615988258317086,
+ "range": "± 2.33%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07729471624266028,
+ "range": "± 3.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07605088062622499,
+ "range": "± 2.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07594481409001884,
+ "range": "± 2.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.0770569471624254,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07722426614481301,
+ "range": "± 2.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07509628180039016,
+ "range": "± 2.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5765504892367852,
+ "range": "± 1.41%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05928532289628191,
+ "range": "± 9.34%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1106878,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13811350293542068,
+ "range": "± 9.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.14221917808219167,
+ "range": "± 8.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13517221135029342,
+ "range": "± 2.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13293150684931504,
+ "range": "± 0.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09423874755381614,
+ "range": "± 10.19%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 293,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 298,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 313,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9258747553816061,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.390265362035277,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.884,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 110670,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 61387.24070450058,
+ "range": "± 1.09%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 26352.62230919783,
+ "range": "± 0.46%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 23147.019569471526,
+ "range": "± 1.03%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29589.003913894318,
+ "range": "± 8.96%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 736329.8806262165,
+ "range": "± 0.78%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15157.722113502889,
+ "range": "± 2.79%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 140.85323287671233,
+ "range": "± 159.23%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 130.67705479451922,
+ "range": "± 0.66%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 292578.7984344419,
+ "range": "± 0.77%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.530904109589056,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.924383561643849,
+ "range": "± 2.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72534.74363992245,
+ "range": "± 0.85%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6394774951076374,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.982878669275928,
+ "range": "± 1.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.1422641878669557,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 167043,
+ "range": "± 202.10%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 97.9244598825858,
+ "range": "± 0.51%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.39433855185914,
+ "range": "± 3.12%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 118124.37769080214,
+ "range": "± 0.58%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "4f082b6b734af63286c41ed6e7e73dbde3cbc3b4",
+ "message": "Do not show client warning when code action process is killed (#3051)\n\n* Do not show client warning when code action process is killed\n\n* Update changelog",
+ "timestamp": "2026-06-11T17:18:30+01:00",
+ "tree_id": "9ac559e21eae46137f1a163ff8758ac1189f4a9e",
+ "url": "https://github.com/phpactor/phpactor/commit/4f082b6b734af63286c41ed6e7e73dbde3cbc3b4"
+ },
+ "date": 1781194811249,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2942152641878955,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.655708414872816,
+ "range": "± 2.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.059900195694683,
+ "range": "± 1.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 163.9765068493151,
+ "range": "± 1.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.02766273972602738,
+ "range": "± 2.44%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.02919941291585135,
+ "range": "± 1.93%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05087174168297426,
+ "range": "± 1.00%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015392211350293613,
+ "range": "± 2.32%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08844606653620378,
+ "range": "± 1.67%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05759123287671299,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.307652054794545,
+ "range": "± 3.09%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 602,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1379,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.336706457925814,
+ "range": "± 1.16%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.24473385518597,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09167318982387669,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09177455968688934,
+ "range": "± 2.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09146340508806236,
+ "range": "± 6.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09257808219178071,
+ "range": "± 2.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09056301369863005,
+ "range": "± 2.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08954266144814005,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08929393346379642,
+ "range": "± 1.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.640831506849316,
+ "range": "± 5.82%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.058904696673189864,
+ "range": "± 7.04%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1132596,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1376399217221134,
+ "range": "± 13.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13804305283757332,
+ "range": "± 7.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13200587084148718,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.15585518590997977,
+ "range": "± 10.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08735812133072397,
+ "range": "± 11.42%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 333,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 303,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 292,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 1.0120876712328732,
+ "range": "± 8.31%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.407212133072408,
+ "range": "± 1.00%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.826,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 118294,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72050.13894324847,
+ "range": "± 0.55%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28552.849315068335,
+ "range": "± 0.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25078.83953033245,
+ "range": "± 0.83%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30130.87671232852,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 817690.6340508802,
+ "range": "± 0.62%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16812.10958904054,
+ "range": "± 0.64%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 156.5851917808219,
+ "range": "± 156.99%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.99236594911807,
+ "range": "± 0.47%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 317521.6614481397,
+ "range": "± 1.17%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.593904109589056,
+ "range": "± 1.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.1000645792563364,
+ "range": "± 1.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 73569.79452054751,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7475909980430733,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.141346379647737,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2022818003913525,
+ "range": "± 1.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 162897,
+ "range": "± 199.76%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 92.38544618395491,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 98.89009197651717,
+ "range": "± 0.30%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 113993.03326810288,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "Marjo.vanLier@gmail.com",
+ "name": "Marjo",
+ "username": "MarjovanLier"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "1b0834ed333f4e4cce0c74e9e71a06a3ff44d72b",
+ "message": "feat(mago): Add Mago diagnostics integration (#3052)\n\nSurface diagnostics from the Mago toolchain (a Rust PHP linter,\nformatter and static analysis tool) in the language server, giving\nusers a fast alternative to the existing PHPStan and Psalm\nintegrations.\n\nTwo providers are registered as an optional extension: \"mago\" runs\n\"mago analyze\" for static analysis and \"mago-lint\" runs \"mago lint\"\nfor style and code smells. The current buffer is streamed to Mago on\nstdin so diagnostics update as you type, and the JSON report is mapped\nto LSP diagnostics with precise byte-offset ranges and related\ninformation for secondary spans.\n\nThe extension is disabled by default. When enabled, analysis is on and\nthe linter is opt-in. A suggestor offers to enable it when the\ncarthage-software/mago Composer package is present.\n\nSigned-off-by: Marjo Wenzel van Lier ",
+ "timestamp": "2026-06-25T08:52:20+01:00",
+ "tree_id": "da9069554949c96b393230b3bd6a42035e2582fe",
+ "url": "https://github.com/phpactor/phpactor/commit/1b0834ed333f4e4cce0c74e9e71a06a3ff44d72b"
+ },
+ "date": 1782374045041,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.4110665362035215,
+ "range": "± 2.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.993299412915203,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.030673189823828,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 158.17959491193685,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031236203522505116,
+ "range": "± 1.10%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03253502935420777,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.054747279843443804,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01845033268101729,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08681514677103727,
+ "range": "± 2.15%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05668003913894324,
+ "range": "± 6.67%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.93917181996091,
+ "range": "± 4.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 643,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1556,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.313614481408978,
+ "range": "± 3.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.452493150684967,
+ "range": "± 0.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07693150684931573,
+ "range": "± 2.11%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07793698630136874,
+ "range": "± 3.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07685401174168224,
+ "range": "± 2.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07712837573385603,
+ "range": "± 2.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07470939334637962,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07577221135029413,
+ "range": "± 2.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07624579256360017,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5976232876712455,
+ "range": "± 1.05%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05913561643835601,
+ "range": "± 8.74%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1121963,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14242661448140886,
+ "range": "± 5.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1405479452054794,
+ "range": "± 4.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13709980430528368,
+ "range": "± 8.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13585127201565553,
+ "range": "± 2.50%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09280821917808205,
+ "range": "± 9.93%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 307,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 304,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 312,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9468119373776904,
+ "range": "± 0.67%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.376963013698615,
+ "range": "± 0.73%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.916,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 111189,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 62583.01761252482,
+ "range": "± 0.99%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 26540.342465753478,
+ "range": "± 0.96%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 23276.835616438388,
+ "range": "± 0.77%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29736.373776908076,
+ "range": "± 4.07%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 755087.0215264314,
+ "range": "± 0.78%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15553.358121330599,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 144.5134481409002,
+ "range": "± 158.34%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 131.9270273972598,
+ "range": "± 0.95%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 295331.9941291603,
+ "range": "± 0.54%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5178219178082277,
+ "range": "± 1.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.9676164383561705,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 76437.44031311154,
+ "range": "± 0.72%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6674168297455696,
+ "range": "± 1.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.967682974559695,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.1325205479451674,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 167536,
+ "range": "± 205.02%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 97.58942465753404,
+ "range": "± 0.47%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 106.50963894324883,
+ "range": "± 0.67%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 119114.90802348354,
+ "range": "± 3.66%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "be959c4e1b9f3dcefeca0b5971cbcaddff2df3e0",
+ "message": "Bump CL",
+ "timestamp": "2026-06-26T22:40:56+01:00",
+ "tree_id": "6c0f9cc342b1a2984b93c6f9af6334cdf8e5a45a",
+ "url": "https://github.com/phpactor/phpactor/commit/be959c4e1b9f3dcefeca0b5971cbcaddff2df3e0"
+ },
+ "date": 1782510161568,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2920117416829813,
+ "range": "± 1.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.30415264187848,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.082225048923691,
+ "range": "± 1.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 165.584506849315,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.027727671232876668,
+ "range": "± 7.69%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029059060665361812,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.0508528375733855,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01531506849315079,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08874109589040982,
+ "range": "± 1.29%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05847569471624235,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.26415068493132,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 545,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1406,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.145727984344427,
+ "range": "± 0.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.231293542074294,
+ "range": "± 0.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.08930900195694559,
+ "range": "± 2.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.08910880626223042,
+ "range": "± 3.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.0887217221135018,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08874794520547863,
+ "range": "± 2.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.088483561643836,
+ "range": "± 0.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08894442270058453,
+ "range": "± 2.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08723542074363984,
+ "range": "± 4.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6088158512720203,
+ "range": "± 1.48%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05656301369862927,
+ "range": "± 2.54%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1140236,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13756164383561634,
+ "range": "± 5.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1372700587084148,
+ "range": "± 10.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13394520547945193,
+ "range": "± 6.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13036790606653614,
+ "range": "± 2.10%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08479843444226998,
+ "range": "± 6.10%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 299,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 293,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 294,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9539796477495088,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.41422407045011,
+ "range": "± 0.33%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 6.412,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 119884,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72485.75146771136,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28828.75146771086,
+ "range": "± 1.01%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25143.547945205482,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30034.074363992673,
+ "range": "± 0.35%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 827219.4990215079,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16634.42465753432,
+ "range": "± 0.79%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 157.08815851272016,
+ "range": "± 156.83%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.74752641878584,
+ "range": "± 0.51%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 317101.4520547934,
+ "range": "± 1.46%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5584833659491324,
+ "range": "± 1.13%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.0126066536203253,
+ "range": "± 0.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 74324.49119373773,
+ "range": "± 1.00%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6845107632093759,
+ "range": "± 1.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.061162426614489,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.1960489236790033,
+ "range": "± 1.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 165082.78669275928,
+ "range": "± 197.26%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 89.25950880626341,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 95.54915655577337,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 112370.17416829779,
+ "range": "± 0.79%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "hello@pietro.camp",
+ "name": "Pietro Campagnano",
+ "username": "fain182"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "3a98f8a111b9009cae3a78c9d5fbf013f8b23954",
+ "message": "Require posix extension and fail early when required extensions are missing (#3054)\n\nThe language server crashed mid-session with \"Call to undefined function\nposix_kill()\" on systems without the posix extension, because ext-posix was\nnot declared in composer.json and PHAR distributions bypass Composer's\nplatform checks.\n\n- Declare ext-posix in composer.json so Composer installations fail early\n- Check required extensions on startup in bin/phpactor and exit with a\n descriptive error instead of crashing during an LSP session\n\nFixes phpactor/phpactor#3053\n\n\nClaude-Session: https://claude.ai/code/session_014Lo55A9LG5DguN2KG792aj\n\nCo-authored-by: Claude ",
+ "timestamp": "2026-07-05T18:28:54+01:00",
+ "tree_id": "88b6670895c02b07e8e0bbc016618c814586a859",
+ "url": "https://github.com/phpactor/phpactor/commit/3a98f8a111b9009cae3a78c9d5fbf013f8b23954"
+ },
+ "date": 1783272641956,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3165322896281837,
+ "range": "± 5.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 21.974996086105666,
+ "range": "± 0.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.517739726027376,
+ "range": "± 1.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 152.35109393346187,
+ "range": "± 0.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.030767475538160692,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03256555772994134,
+ "range": "± 2.81%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05443589041095884,
+ "range": "± 3.06%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01854270058708425,
+ "range": "± 1.14%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08543365949119384,
+ "range": "± 3.19%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05501941291585158,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.059828571428536,
+ "range": "± 0.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 566,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1452,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.342465753424527,
+ "range": "± 1.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 11.836630136986365,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07576516634050943,
+ "range": "± 3.00%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07561565557729873,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07715322896281678,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07542407045009755,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07551506849315019,
+ "range": "± 7.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0767054794520559,
+ "range": "± 1.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07494285714285827,
+ "range": "± 2.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5537287671232953,
+ "range": "± 1.59%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.061711937377691144,
+ "range": "± 2.36%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1075723,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1400958904109587,
+ "range": "± 18.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1341506849315068,
+ "range": "± 1.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13111350293542068,
+ "range": "± 1.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1309667318982387,
+ "range": "± 4.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09116242661448158,
+ "range": "± 3.96%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 285,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 284,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 296,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9043835616438349,
+ "range": "± 0.79%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.32688493150685,
+ "range": "± 4.09%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.501,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 107567,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 59996.109589041385,
+ "range": "± 0.99%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 25856.09197651666,
+ "range": "± 1.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 23002.15655577337,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29074.569471624236,
+ "range": "± 0.33%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 739881.1311154747,
+ "range": "± 1.18%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14957.898238747504,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 139.63541291585128,
+ "range": "± 158.43%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 129.0475616438355,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 291936.28571429045,
+ "range": "± 0.89%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5237964774951487,
+ "range": "± 1.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.9308649706457746,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72378.93542074374,
+ "range": "± 7.53%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6185479452054787,
+ "range": "± 0.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.9079373776908177,
+ "range": "± 1.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.0662035225048836,
+ "range": "± 2.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 164084,
+ "range": "± 201.77%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 96.92652446184144,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 103.84588943248401,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 115437.33072406985,
+ "range": "± 1.24%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "0ba242dce76ebcb7df93dfa39d0d4a1fb05dabbb",
+ "message": "Add disclaimer",
+ "timestamp": "2026-07-16T22:27:21+01:00",
+ "tree_id": "145e102b37b54b769a8d53c85acc43eee2310038",
+ "url": "https://github.com/phpactor/phpactor/commit/0ba242dce76ebcb7df93dfa39d0d4a1fb05dabbb"
+ },
+ "date": 1784237352742,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.807788649706483,
+ "range": "± 6.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 152.3831898238753,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.34541095890409,
+ "range": "± 3.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.32214872798452,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031267788649706446,
+ "range": "± 4.66%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03279256360078228,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.055573581213307494,
+ "range": "± 2.33%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.018519178082191893,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08780399217221058,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05647812133072408,
+ "range": "± 4.90%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.762213307240653,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 641,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1454,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.86464383561647,
+ "range": "± 2.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.949,
+ "range": "± 1.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07602720156555613,
+ "range": "± 1.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07895694716242524,
+ "range": "± 4.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07593679060665427,
+ "range": "± 2.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07700587084148716,
+ "range": "± 3.52%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07868962818003954,
+ "range": "± 2.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0792808219178085,
+ "range": "± 4.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07722015655577291,
+ "range": "± 2.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5547485322896244,
+ "range": "± 1.82%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05809706457925636,
+ "range": "± 7.93%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1112973,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13936007827788632,
+ "range": "± 11.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1482739726027396,
+ "range": "± 16.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.15324657534246516,
+ "range": "± 6.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13128767123287668,
+ "range": "± 3.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09119178082191795,
+ "range": "± 8.46%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 290,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 313,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 353,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9206473581213317,
+ "range": "± 4.27%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.3318622309197627,
+ "range": "± 0.43%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15132.849315068466,
+ "range": "± 1.40%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 139.4257553816047,
+ "range": "± 159.75%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 128.8576575342469,
+ "range": "± 0.77%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 60913.21135029393,
+ "range": "± 0.82%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 27302.800391389042,
+ "range": "± 2.09%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22845.681017612485,
+ "range": "± 1.93%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30550.146771036554,
+ "range": "± 1.85%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 739320.5342465728,
+ "range": "± 0.99%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.985,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6398297455968822,
+ "range": "± 2.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.971138943248531,
+ "range": "± 1.83%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.1252974559687137,
+ "range": "± 2.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 76520.76320939271,
+ "range": "± 0.55%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5442074363992164,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.908240704500997,
+ "range": "± 2.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 290932.6477495176,
+ "range": "± 0.36%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 113827,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 115264.32289628158,
+ "range": "± 3.15%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 169630.72211350294,
+ "range": "± 195.38%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 97.90610371820003,
+ "range": "± 2.62%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.19043933463679,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "13ae9f1ca35b4bb0d35640c1989959341d593bd6",
+ "message": "Up",
+ "timestamp": "2026-07-16T22:28:06+01:00",
+ "tree_id": "8b21e135ac88f4c56a3c1fa74a6ef7168b1d71a9",
+ "url": "https://github.com/phpactor/phpactor/commit/13ae9f1ca35b4bb0d35640c1989959341d593bd6"
+ },
+ "date": 1784237391843,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.59809784735812,
+ "range": "± 2.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 152.29793737769063,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3517534246575633,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 21.92788258317004,
+ "range": "± 0.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031065205479451997,
+ "range": "± 3.01%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03268273972602718,
+ "range": "± 1.11%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05424626223091982,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01859178082191751,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08520778864970614,
+ "range": "± 1.26%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.055268180039139664,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 17.999845401174312,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 564,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1470,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.665424657534336,
+ "range": "± 2.61%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 11.770054794520576,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07613659491193829,
+ "range": "± 2.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07490136986301363,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.0749943248532289,
+ "range": "± 21.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.0763250489236813,
+ "range": "± 2.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07435988258317024,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07573581213307229,
+ "range": "± 2.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07426908023483349,
+ "range": "± 12.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.555475538160473,
+ "range": "± 5.35%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05875479452054777,
+ "range": "± 4.89%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1057080,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13589628180039132,
+ "range": "± 7.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13494129158512716,
+ "range": "± 3.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.12908219178082184,
+ "range": "± 4.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1301154598825831,
+ "range": "± 4.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09143052837573372,
+ "range": "± 11.96%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 316,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 288,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 295,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9019195694716221,
+ "range": "± 0.62%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.3139933463796516,
+ "range": "± 0.46%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14818.240704500991,
+ "range": "± 1.09%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 137.8949373776908,
+ "range": "± 159.27%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 128.37440704501145,
+ "range": "± 0.31%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 60321.52641878533,
+ "range": "± 0.68%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 25862.424657534015,
+ "range": "± 0.64%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22967.260273972097,
+ "range": "± 0.68%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 28920.44422700595,
+ "range": "± 0.81%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 725500.3561643853,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.429,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.602397260273974,
+ "range": "± 2.30%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.8882524461839596,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.066600782778866,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72332.67710371842,
+ "range": "± 0.47%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.4795596868884533,
+ "range": "± 1.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.869671232876744,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 285832.9178082163,
+ "range": "± 0.19%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 106893,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 113244.87671232982,
+ "range": "± 0.57%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 161597,
+ "range": "± 196.30%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 91.74155968688859,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 99.8837641878667,
+ "range": "± 0.26%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "3d9ca615c64df01df2e96b3c01b7ad55fff3d4db",
+ "message": "YMMV",
+ "timestamp": "2026-07-16T22:29:37+01:00",
+ "tree_id": "fe51bc35a417082e813da2a8bbc4c27a3fdd4ca2",
+ "url": "https://github.com/phpactor/phpactor/commit/3d9ca615c64df01df2e96b3c01b7ad55fff3d4db"
+ },
+ "date": 1784237506240,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.54060078277884,
+ "range": "± 2.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 168.76145792563509,
+ "range": "± 0.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.4912152641878658,
+ "range": "± 2.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 23.192311154598734,
+ "range": "± 1.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.028458082191780764,
+ "range": "± 1.63%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.030160039138943287,
+ "range": "± 3.50%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.052535968688846094,
+ "range": "± 1.48%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015612172211350252,
+ "range": "± 2.29%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.0929489628180033,
+ "range": "± 1.70%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.058555616438355634,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.6586794520549,
+ "range": "± 2.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 613,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1444,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 13.076861056751527,
+ "range": "± 3.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 13.367571428571434,
+ "range": "± 25.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09487964774951219,
+ "range": "± 1.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09278884540117414,
+ "range": "± 1.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09518825831702601,
+ "range": "± 1.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09323581213307304,
+ "range": "± 3.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09301369863013689,
+ "range": "± 20.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09219569471624382,
+ "range": "± 2.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0924931506849316,
+ "range": "± 7.47%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6261491193737703,
+ "range": "± 1.70%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.056698434442270185,
+ "range": "± 2.70%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1203789,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14495107632093915,
+ "range": "± 11.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1467201565557728,
+ "range": "± 5.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.14058904109589027,
+ "range": "± 8.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13894520547945194,
+ "range": "± 10.19%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.086700587084149,
+ "range": "± 4.36%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 365,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 317,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 322,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9914702544031404,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4968913894324731,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17094.264187866847,
+ "range": "± 1.49%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 164.36882583170257,
+ "range": "± 156.80%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 147.67078473581165,
+ "range": "± 0.66%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 73015.211350294,
+ "range": "± 1.36%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28893.68493150676,
+ "range": "± 1.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25357.536203522664,
+ "range": "± 0.28%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 31357.444227006374,
+ "range": "± 0.84%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 846090.315068488,
+ "range": "± 1.02%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 6.047,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.798970645792585,
+ "range": "± 1.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.1808512720156576,
+ "range": "± 2.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.316397260273983,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 78996.19960861074,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6444951076320973,
+ "range": "± 2.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.13954207436398,
+ "range": "± 1.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 323187.2954990186,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 123407,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 119961.71428571377,
+ "range": "± 4.72%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 178170.7964774951,
+ "range": "± 202.16%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 98.80685420743656,
+ "range": "± 0.57%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 109.33638747553633,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "c8e06992eb8bc55993e0e8bf04b1451190895061",
+ "message": "Updat README",
+ "timestamp": "2026-07-16T22:32:32+01:00",
+ "tree_id": "858ad4306124f71138b3a37c757a3b39b7349ca1",
+ "url": "https://github.com/phpactor/phpactor/commit/c8e06992eb8bc55993e0e8bf04b1451190895061"
+ },
+ "date": 1784237662178,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.590178082191859,
+ "range": "± 1.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 151.78755772994296,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2653502935420766,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.0360156555771,
+ "range": "± 0.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031046849315068323,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.0324877103718197,
+ "range": "± 1.54%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.054175499021525866,
+ "range": "± 0.83%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.018612720156555438,
+ "range": "± 1.03%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08537534246575439,
+ "range": "± 1.10%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05498966731898228,
+ "range": "± 3.95%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.017198043052897,
+ "range": "± 0.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 571,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1503,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.530722113503007,
+ "range": "± 0.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 11.721238747553732,
+ "range": "± 0.50%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07548904109589054,
+ "range": "± 11.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07514344422700547,
+ "range": "± 5.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07413346379647644,
+ "range": "± 1.28%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07416086105675258,
+ "range": "± 2.09%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07539275929550115,
+ "range": "± 1.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07635499021526405,
+ "range": "± 2.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0747653620352258,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5488246575342504,
+ "range": "± 1.29%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.058573972602739756,
+ "range": "± 9.22%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1129508,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14418982387475524,
+ "range": "± 14.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1382876712328766,
+ "range": "± 13.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.1332348336594911,
+ "range": "± 3.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1362935420743638,
+ "range": "± 4.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09204305283757329,
+ "range": "± 9.06%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 378,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 320,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 334,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9650195694716184,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.408073972602737,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15721.82191780808,
+ "range": "± 1.65%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 139.85716438356164,
+ "range": "± 159.01%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 129.01768493150703,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 60622.123287671464,
+ "range": "± 0.54%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 25844.135029354227,
+ "range": "± 0.95%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22812.729941291764,
+ "range": "± 0.31%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29090.42465753445,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 735192.8121330787,
+ "range": "± 0.56%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.529,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6293248532289617,
+ "range": "± 2.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.9140802348336545,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.0982093933464117,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72652.45596868917,
+ "range": "± 0.75%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.517475538160468,
+ "range": "± 1.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.994405088062652,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 291459.60273972474,
+ "range": "± 0.40%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 110196,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 113900.59491193743,
+ "range": "± 1.11%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 162697,
+ "range": "± 197.93%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 95.78158317025458,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.49149021526412,
+ "range": "± 0.39%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "anders@jenbo.dk",
+ "name": "Anders Jenbo",
+ "username": "AJenbo"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "cb40f25bed7cdd99d3c22d0652d7900f1563d8a9",
+ "message": "Code action to add #[Override] (#3056)",
+ "timestamp": "2026-07-21T08:46:01+01:00",
+ "tree_id": "2d04764ee807c70f102331c659b229cf0d148e26",
+ "url": "https://github.com/phpactor/phpactor/commit/cb40f25bed7cdd99d3c22d0652d7900f1563d8a9"
+ },
+ "date": 1784620056911,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.49085714285705,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 148.11889823874972,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.1563424657534247,
+ "range": "± 24.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 19.32651076320909,
+ "range": "± 0.61%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.01611217221135028,
+ "range": "± 2.56%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.01751185909980411,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.03808559686888406,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007475225048923644,
+ "range": "± 2.59%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.07070418786692763,
+ "range": "± 1.36%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.049468180039138984,
+ "range": "± 3.05%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 16.373804305283798,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 545,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1312,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.741013698630157,
+ "range": "± 7.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.812301369862864,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07399804305283662,
+ "range": "± 2.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.0736301369863018,
+ "range": "± 3.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07390136986301363,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07308493150684904,
+ "range": "± 2.59%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07447455968688957,
+ "range": "± 1.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0730136986301384,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07378747553816006,
+ "range": "± 2.00%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.3964600782778889,
+ "range": "± 1.56%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.04877632093933414,
+ "range": "± 2.73%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1051131,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.12005870841487262,
+ "range": "± 5.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.119665362035225,
+ "range": "± 5.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.12067123287671211,
+ "range": "± 8.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.12123483365949105,
+ "range": "± 5.79%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.07519373776908049,
+ "range": "± 7.61%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 285,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 299,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 286,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.8378700587084239,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.2458911937377686,
+ "range": "± 1.15%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14802.908023483398,
+ "range": "± 0.82%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 141.4456927592955,
+ "range": "± 156.68%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 132.85969080234852,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 61144.52837573382,
+ "range": "± 0.63%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 24874.305283757378,
+ "range": "± 1.07%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22136.868884540087,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 27808.745596868273,
+ "range": "± 0.26%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 690800.0547945185,
+ "range": "± 0.61%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.002,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.4683835616438279,
+ "range": "± 2.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.6617827788649593,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.8935107632093784,
+ "range": "± 1.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 72823.64774951147,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.3560919765166406,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.6488610567515063,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 285972.3972602791,
+ "range": "± 0.75%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 109860,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 106969.20939334668,
+ "range": "± 1.54%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 150477,
+ "range": "± 207.82%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 85.84050978473597,
+ "range": "± 0.52%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 93.2902583170284,
+ "range": "± 0.93%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "781aa80fd281bfa0c1d4aa973723f68e84c6e6c5",
+ "message": "Update CL",
+ "timestamp": "2026-07-21T08:47:54+01:00",
+ "tree_id": "ac6b3041dac6b1d9de8d92cb166d7d702aeb58bd",
+ "url": "https://github.com/phpactor/phpactor/commit/781aa80fd281bfa0c1d4aa973723f68e84c6e6c5"
+ },
+ "date": 1784620175897,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.962835616438271,
+ "range": "± 2.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 162.53335616438358,
+ "range": "± 1.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2644070450097584,
+ "range": "± 1.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.46880039138911,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.02794767123287644,
+ "range": "± 1.94%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029855225048923458,
+ "range": "± 1.79%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.0510071232876721,
+ "range": "± 1.31%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015402583170254499,
+ "range": "± 2.62%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.0884295890410952,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05808262230919697,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.142214481409457,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 538,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1394,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.121504892367943,
+ "range": "± 1.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.287655577299377,
+ "range": "± 2.97%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09057142857142864,
+ "range": "± 6.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.08876868884540166,
+ "range": "± 2.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08966947162426608,
+ "range": "± 7.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08904970645792501,
+ "range": "± 0.97%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.08905851272015647,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08927906066536198,
+ "range": "± 1.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08930489236790512,
+ "range": "± 1.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.628057534246574,
+ "range": "± 11.27%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.06180958904109533,
+ "range": "± 4.19%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1130089,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13879452054794514,
+ "range": "± 6.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1370136986301369,
+ "range": "± 7.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13149706457925628,
+ "range": "± 6.34%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13219178082191774,
+ "range": "± 17.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08532876712328787,
+ "range": "± 11.08%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 301,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 296,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 329,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9572150684931515,
+ "range": "± 1.03%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4110037181995856,
+ "range": "± 1.33%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16666.30136986327,
+ "range": "± 1.14%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 162.39160469667317,
+ "range": "± 155.80%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 144.29274755381653,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 72459.0058708414,
+ "range": "± 0.52%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28571.1506849315,
+ "range": "± 1.46%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25620.47749510732,
+ "range": "± 0.86%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30398.84344422709,
+ "range": "± 0.27%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 822448.0000000042,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.635,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.6828356164383456,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.0981487279843476,
+ "range": "± 5.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.166563600782787,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 74290.63209393554,
+ "range": "± 0.16%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5877945205479447,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.0214011741682696,
+ "range": "± 0.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 314577.32485322736,
+ "range": "± 0.55%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 116376,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 114999.55577299185,
+ "range": "± 1.35%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 164659,
+ "range": "± 197.32%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 92.29509393346481,
+ "range": "± 0.49%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 101.35176027397375,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "b327eec2cc4b7802b6ca0fcdfdacc2a812368b73",
+ "message": "gh-3058: Handle prematurely cancelled code action request (#3059)\n\nImplement cancellation for outsoutced diagnostics\n\nRest the workspace prior to using it",
+ "timestamp": "2026-07-21T23:20:54+01:00",
+ "tree_id": "e2693e49eabe46ab0c8f45ccf4ecd682d31c2dc9",
+ "url": "https://github.com/phpactor/phpactor/commit/b327eec2cc4b7802b6ca0fcdfdacc2a812368b73"
+ },
+ "date": 1784672566459,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.922068493150691,
+ "range": "± 1.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 140.17344227005938,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.090275929549914,
+ "range": "± 2.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 18.636771037182136,
+ "range": "± 0.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.015549001956947087,
+ "range": "± 2.85%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.016729393346379677,
+ "range": "± 3.47%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.03778630136986302,
+ "range": "± 2.08%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007483600782778811,
+ "range": "± 3.67%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.07000164383561619,
+ "range": "± 3.28%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.04762160469667285,
+ "range": "± 3.16%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 14.711305675146763,
+ "range": "± 2.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 574,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1232,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.53556947162421,
+ "range": "± 4.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.519180039138796,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07022857142857176,
+ "range": "± 4.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.06893111545988347,
+ "range": "± 2.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07085909980430576,
+ "range": "± 2.89%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.06991898238747515,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07126438356164304,
+ "range": "± 2.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.0712612524461839,
+ "range": "± 1.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.0688863013698626,
+ "range": "± 3.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.3515103718199626,
+ "range": "± 3.97%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.045326614481408685,
+ "range": "± 3.47%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 957775,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.11351663405088044,
+ "range": "± 7.10%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.11374755381604688,
+ "range": "± 6.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.11456555772994113,
+ "range": "± 4.04%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1168003913894324,
+ "range": "± 6.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.06965557729941318,
+ "range": "± 6.20%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 312,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 327,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 299,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.8313573385518694,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.2639622309197458,
+ "range": "± 2.08%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 14028.851272015589,
+ "range": "± 0.63%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 128.46775342465753,
+ "range": "± 157.94%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 121.21329354207498,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 61339.02935420636,
+ "range": "± 0.84%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 24344.15264187893,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 21745.283757338555,
+ "range": "± 0.44%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 26833.199608610375,
+ "range": "± 0.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 665625.992172211,
+ "range": "± 0.27%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.883,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.449804305283762,
+ "range": "± 4.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.733878669275935,
+ "range": "± 1.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.9091565557730292,
+ "range": "± 0.95%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 64767.25831702576,
+ "range": "± 0.53%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.3361937377690742,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.6506164383562014,
+ "range": "± 1.44%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 266429.6712328758,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 99349,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 102418.57142856886,
+ "range": "± 0.91%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 146163,
+ "range": "± 199.32%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 82.93996966731804,
+ "range": "± 0.71%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 89.55038160469663,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "1b3b0f3abfce8771d7cbc04eb73bf89294329994",
+ "message": "Bump CL",
+ "timestamp": "2026-07-22T21:41:58+01:00",
+ "tree_id": "ff0da3ad9c0f4189862b63be724ac7dd3d1621a4",
+ "url": "https://github.com/phpactor/phpactor/commit/1b3b0f3abfce8771d7cbc04eb73bf89294329994"
+ },
+ "date": 1784753052575,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.315103718199614,
+ "range": "± 2.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 165.00428767123282,
+ "range": "± 0.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.326956947162407,
+ "range": "± 1.10%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.476228962817814,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.028236908023483342,
+ "range": "± 8.50%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029841095890410962,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05093909980430554,
+ "range": "± 1.71%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015552876712328887,
+ "range": "± 2.75%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08947675146771014,
+ "range": "± 1.11%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.058539138943248505,
+ "range": "± 1.77%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.108851663405034,
+ "range": "± 0.64%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 593,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1443,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.296219178082145,
+ "range": "± 0.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.528835616438366,
+ "range": "± 6.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09200039138943301,
+ "range": "± 2.61%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09140939334637915,
+ "range": "± 2.28%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09172622309197727,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09084285714285768,
+ "range": "± 2.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09008219178082083,
+ "range": "± 2.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08893718199608648,
+ "range": "± 3.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09092876712328805,
+ "range": "± 3.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.64313972602741,
+ "range": "± 1.43%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.0645657534246573,
+ "range": "± 4.70%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1150325,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.1403718199608609,
+ "range": "± 8.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13695499021526414,
+ "range": "± 0.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13381996086105669,
+ "range": "± 6.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13238356164383555,
+ "range": "± 3.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.0987514677103722,
+ "range": "± 10.57%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 320,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 308,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 298,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9706943248532276,
+ "range": "± 0.42%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4774499021525964,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16886.956947161758,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 155.42415264187866,
+ "range": "± 156.92%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 145.5731819960876,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71938.38356164341,
+ "range": "± 0.51%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28650.553816047053,
+ "range": "± 0.94%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25403.050880626328,
+ "range": "± 1.00%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30331.545988258353,
+ "range": "± 1.60%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 832979.4285714325,
+ "range": "± 0.48%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.784,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7603483365949495,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.0660567514677086,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2524031311154165,
+ "range": "± 1.45%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 76208.64970645921,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.6160078277886438,
+ "range": "± 2.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.10696281800396,
+ "range": "± 0.73%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 318701.54794520605,
+ "range": "± 0.41%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 118811,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 117423.76320939497,
+ "range": "± 1.03%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 165823,
+ "range": "± 195.58%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 95.54645107631943,
+ "range": "± 0.67%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.23634246575203,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "721f3fb87d1a1a101140d9c0d52fb4ab024bb5fd",
+ "message": "Fix spelling mistakes in disclaimer",
+ "timestamp": "2026-07-22T22:00:39+01:00",
+ "tree_id": "b692e7db446cfd0879fe698ff4721def38254ae3",
+ "url": "https://github.com/phpactor/phpactor/commit/721f3fb87d1a1a101140d9c0d52fb4ab024bb5fd"
+ },
+ "date": 1784754167664,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.451675146770864,
+ "range": "± 1.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 167.7435068493145,
+ "range": "± 0.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.4109138943248696,
+ "range": "± 1.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.572780821917547,
+ "range": "± 1.20%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.027720156555772903,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029376829745596727,
+ "range": "± 3.10%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.051434637964774745,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015208180039138939,
+ "range": "± 7.75%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08945095890410965,
+ "range": "± 1.42%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.059109393346378866,
+ "range": "± 1.50%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.632850097847435,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 616,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1443,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.539045009784724,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.892272015655587,
+ "range": "± 5.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09035048923678886,
+ "range": "± 1.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.08984285714285584,
+ "range": "± 2.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08963972602739717,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08897534246575338,
+ "range": "± 1.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.08949823874755396,
+ "range": "± 15.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08787827788649732,
+ "range": "± 1.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08745362035225156,
+ "range": "± 1.72%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6033158512720154,
+ "range": "± 1.70%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05627827788649724,
+ "range": "± 3.43%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1151427,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13746183953033256,
+ "range": "± 9.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1401663405088061,
+ "range": "± 12.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13100782778864964,
+ "range": "± 2.00%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13617221135029337,
+ "range": "± 3.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08738160469667273,
+ "range": "± 4.81%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 320,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 293,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 308,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9671160469667475,
+ "range": "± 1.23%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.4546692759295565,
+ "range": "± 0.57%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16593.469667319092,
+ "range": "± 2.02%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 155.3619941291585,
+ "range": "± 156.92%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 143.56447945205574,
+ "range": "± 0.84%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 71233.56751467663,
+ "range": "± 0.34%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28131.356164383553,
+ "range": "± 1.04%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24657.452054794467,
+ "range": "± 1.22%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30051.101761252285,
+ "range": "± 0.83%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 822419.9452054802,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.851,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7153835616438513,
+ "range": "± 1.29%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.0819999999999816,
+ "range": "± 1.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.188223091976526,
+ "range": "± 3.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 74931.884540117,
+ "range": "± 0.87%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5886771037181742,
+ "range": "± 1.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.033027397260272,
+ "range": "± 1.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 312754.1017612546,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 115410,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 113830.14090019674,
+ "range": "± 0.96%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 162445,
+ "range": "± 200.63%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 94.082835616438,
+ "range": "± 0.55%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 100.37955479452052,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "dan.t.leech@gmail.com",
+ "name": "dantleech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "f28b5db32fd8f08ee169ecf08dc72ada61a4fb25",
+ "message": "Show Phpactor version in the status LSP call (#3060)",
+ "timestamp": "2026-08-01T16:30:54+01:00",
+ "tree_id": "881145599ffdbc6b65c47e8345507206ac0fb09f",
+ "url": "https://github.com/phpactor/phpactor/commit/f28b5db32fd8f08ee169ecf08dc72ada61a4fb25"
+ },
+ "date": 1785598362556,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.086254403131017,
+ "range": "± 1.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 165.77962230919704,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.3651448140900344,
+ "range": "± 3.18%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.50468101761224,
+ "range": "± 1.00%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.02784645792563597,
+ "range": "± 1.96%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029373072407044985,
+ "range": "± 1.34%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.051575577299412874,
+ "range": "± 2.89%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015633228962818272,
+ "range": "± 1.68%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08965256360078291,
+ "range": "± 10.42%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 593,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1522,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.058551506849315156,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.318046575342265,
+ "range": "± 0.68%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.162999999999963,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.343624266144776,
+ "range": "± 1.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.09070626223091935,
+ "range": "± 1.70%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09074285714285746,
+ "range": "± 2.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08954050880626165,
+ "range": "± 2.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09028512720156666,
+ "range": "± 1.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09016888454011807,
+ "range": "± 2.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09072739726027194,
+ "range": "± 1.46%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08986868884540004,
+ "range": "± 1.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.656187866927588,
+ "range": "± 3.06%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.055853424657534366,
+ "range": "± 4.13%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14124657534246557,
+ "range": "± 16.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1376986301369862,
+ "range": "± 13.96%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13725636007827777,
+ "range": "± 15.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1326399217221134,
+ "range": "± 4.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09232289628180028,
+ "range": "± 10.00%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1165101,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 325,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 300,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 304,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 331803.7142857143,
+ "range": "± 128.21%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9655379647749496,
+ "range": "± 1.14%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.474212720156525,
+ "range": "± 0.45%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 121630,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17053.512720156694,
+ "range": "± 1.18%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 153.9885264187864,
+ "range": "± 0.71%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 148.31040313111757,
+ "range": "± 0.61%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.847,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 73269.64774951094,
+ "range": "± 0.76%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28990.80430528401,
+ "range": "± 0.67%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 25557.39726027442,
+ "range": "± 0.86%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 30255.956947162296,
+ "range": "± 0.52%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 840429.5459882598,
+ "range": "± 0.74%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 76226.8121330725,
+ "range": "± 1.22%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7091545988258194,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.13630136986303,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2458571428571656,
+ "range": "± 1.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5930802348336497,
+ "range": "± 3.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.053322896281732,
+ "range": "± 0.94%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 161415,
+ "range": "± 198.38%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 111604.65753424671,
+ "range": "± 0.66%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 91.2330763209386,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 98.99594716242605,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "anders@jenbo.dk",
+ "name": "Anders Jenbo",
+ "username": "AJenbo"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "7eb622fdd48d3b1fae87503d271038bc82aac45a",
+ "message": "Fix worse:analyse not finding functions (#3061)",
+ "timestamp": "2026-08-11T08:28:19+01:00",
+ "tree_id": "fdb16960799a50947515ef452494deb4de4b129a",
+ "url": "https://github.com/phpactor/phpactor/commit/7eb622fdd48d3b1fae87503d271038bc82aac45a"
+ },
+ "date": 1786433393296,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 8.53499412915847,
+ "range": "± 1.80%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 134.35350489236905,
+ "range": "± 0.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.9418727984344362,
+ "range": "± 1.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 17.917825831702416,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.015278043052837505,
+ "range": "± 2.70%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.016388023483365873,
+ "range": "± 1.64%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.036865831702544115,
+ "range": "± 1.76%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.007512211350293557,
+ "range": "± 3.28%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.06742367906066486,
+ "range": "± 2.66%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 516,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1301,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.04652727984344433,
+ "range": "± 1.60%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 14.935765166340795,
+ "range": "± 0.50%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 10.058859099804137,
+ "range": "± 0.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 10.375344422700666,
+ "range": "± 3.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07032641878669178,
+ "range": "± 2.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.06816673189823784,
+ "range": "± 2.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.06829060665362002,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.06899589041095883,
+ "range": "± 2.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.06806125244618319,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.06869041095890477,
+ "range": "± 2.15%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.06802328767123106,
+ "range": "± 1.87%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.2821248532289597,
+ "range": "± 2.66%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.04533776908023493,
+ "range": "± 2.93%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.11279452054794513,
+ "range": "± 6.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.11110958904109586,
+ "range": "± 5.33%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.11139726027397254,
+ "range": "± 10.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.11200391389432474,
+ "range": "± 2.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.06981017612524447,
+ "range": "± 6.98%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 917973,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 274,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 287,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 283,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 479127.87279843446,
+ "range": "± 97.58%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.8011698630136972,
+ "range": "± 3.02%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.2129808219178082,
+ "range": "± 0.93%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 95362,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 13368.67710371835,
+ "range": "± 0.71%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 220.35738160469688,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 217.89388845401047,
+ "range": "± 0.45%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.706,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 57904.54403131135,
+ "range": "± 0.56%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 23527.3796477492,
+ "range": "± 0.63%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 20852.75538160453,
+ "range": "± 0.26%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 25710.798434442815,
+ "range": "± 0.48%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 639090.8669275965,
+ "range": "± 0.30%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 63984.45009784738,
+ "range": "± 11.26%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.3708590998043306,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.559863013698632,
+ "range": "± 0.78%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.8112837573385296,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.276123287671242,
+ "range": "± 2.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.5112054794520513,
+ "range": "± 2.63%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 137551,
+ "range": "± 198.42%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 97396.86692759255,
+ "range": "± 0.87%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 79.54355577299414,
+ "range": "± 0.74%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 87.24932191780987,
+ "range": "± 0.65%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "anders@jenbo.dk",
+ "name": "Anders Jenbo",
+ "username": "AJenbo"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "439aa091ad8a79eb4bf15c7f465159fe5ba0fe55",
+ "message": "Fix a few false positives from the analyzer (#3063)",
+ "timestamp": "2026-08-15T12:47:52+01:00",
+ "tree_id": "91d343bbca7601a24e1e16cc2a733a3d4ac30862",
+ "url": "https://github.com/phpactor/phpactor/commit/439aa091ad8a79eb4bf15c7f465159fe5ba0fe55"
+ },
+ "date": 1786794577772,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.4725303326809844,
+ "range": "± 2.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.92515068493213,
+ "range": "± 0.67%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 10.692692759295474,
+ "range": "± 1.77%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 173.83223483365697,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.0278805870841487,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029398356164383587,
+ "range": "± 1.62%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.05239080234833659,
+ "range": "± 2.18%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01540011741682973,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.09160136986301319,
+ "range": "± 2.34%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05912575342465738,
+ "range": "± 2.04%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 19.176480234833665,
+ "range": "± 7.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 592,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1477,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 12.991827788649825,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 13.2114637964775,
+ "range": "± 2.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.0951493150684931,
+ "range": "± 2.25%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.09494951076320848,
+ "range": "± 2.07%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.09394011741682873,
+ "range": "± 1.65%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.09489882583170461,
+ "range": "± 2.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.09428180039139145,
+ "range": "± 2.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.09541800391389424,
+ "range": "± 4.43%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.09442465753424478,
+ "range": "± 3.50%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6249205479451803,
+ "range": "± 1.33%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05686066536203538,
+ "range": "± 7.46%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.14732681017612517,
+ "range": "± 6.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.14663013698630128,
+ "range": "± 7.48%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.14627592954990207,
+ "range": "± 11.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.14551859099804296,
+ "range": "± 11.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1226603,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08770645792563612,
+ "range": "± 11.58%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 324,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 350,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 351,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 1.0579547945205656,
+ "range": "± 1.82%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.5626581213307358,
+ "range": "± 1.54%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 74286.8884540134,
+ "range": "± 0.87%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 29927.71037182035,
+ "range": "± 1.46%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 26388.48140900174,
+ "range": "± 1.28%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 31312.96086105657,
+ "range": "± 0.92%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 843072.4696673225,
+ "range": "± 0.55%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 6.036,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 17706.949119374098,
+ "range": "± 0.87%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 299.8582152641879,
+ "range": "± 132.39%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 285.6710136986249,
+ "range": "± 0.99%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 124574,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.63656164383563,
+ "range": "± 2.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.1955225048923728,
+ "range": "± 2.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 604003.350293546,
+ "range": "± 1.66%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.7475616438356227,
+ "range": "± 1.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.1584403131115235,
+ "range": "± 1.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.2808904109588837,
+ "range": "± 1.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 80995.67123287873,
+ "range": "± 0.58%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 119882.15068493197,
+ "range": "± 1.31%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 171055,
+ "range": "± 206.76%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 97.19107436399429,
+ "range": "± 0.97%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 104.27426027397217,
+ "range": "± 0.86%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "f67b7753b966c874735a064978dd89837a369f59",
+ "message": "Bump CL",
+ "timestamp": "2026-08-15T12:52:59+01:00",
+ "tree_id": "9bad45f8d35e20b583318510994f7ea0cc10a9b1",
+ "url": "https://github.com/phpactor/phpactor/commit/f67b7753b966c874735a064978dd89837a369f59"
+ },
+ "date": 1786794882189,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.2857866927592894,
+ "range": "± 4.97%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.326160469667318,
+ "range": "± 2.60%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.619393346379555,
+ "range": "± 1.30%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 152.32946183953027,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.031046966731898287,
+ "range": "± 3.64%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.03252481409002007,
+ "range": "± 1.04%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.054624266144813985,
+ "range": "± 1.15%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.01872003913894308,
+ "range": "± 1.07%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.0854095107632098,
+ "range": "± 1.20%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05552571428571411,
+ "range": "± 1.05%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.511599608610656,
+ "range": "± 0.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 571,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1628,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.69390802348333,
+ "range": "± 1.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.30820156555796,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.07685518590998028,
+ "range": "± 2.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.07507181996086165,
+ "range": "± 1.76%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.07574207436399097,
+ "range": "± 2.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.07548317025440282,
+ "range": "± 2.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.07456066536203401,
+ "range": "± 1.38%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.07553679060665237,
+ "range": "± 2.10%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.07524363992172096,
+ "range": "± 1.14%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.5997745596868893,
+ "range": "± 1.92%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.05856673189823858,
+ "range": "± 2.39%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13932093933463785,
+ "range": "± 5.21%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.1382172211350292,
+ "range": "± 5.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.13283757338551846,
+ "range": "± 4.53%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.13385127201565541,
+ "range": "± 9.03%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1106330,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.09315655577299418,
+ "range": "± 8.37%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 290,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 307,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 291,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9418041095890234,
+ "range": "± 0.68%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.381416829745604,
+ "range": "± 0.54%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 60484.479452054424,
+ "range": "± 0.45%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 25866.293542074294,
+ "range": "± 0.49%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 22960.81213307225,
+ "range": "± 0.51%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 28933.08610567508,
+ "range": "± 0.42%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 734517.0763209373,
+ "range": "± 0.35%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.553,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 15047.465753424687,
+ "range": "± 0.56%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 249.7459315068493,
+ "range": "± 135.64%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 240.51578669276236,
+ "range": "± 0.57%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 108225,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.4843033268101753,
+ "range": "± 1.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.8933111545988566,
+ "range": "± 0.88%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 535559.7592954956,
+ "range": "± 1.89%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.616998043052834,
+ "range": "± 3.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.908528375733849,
+ "range": "± 0.91%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.0759021526418975,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 75303.23287671375,
+ "range": "± 0.42%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 114751.45792563469,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 161639,
+ "range": "± 194.93%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 95.85225831702448,
+ "range": "± 1.40%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 101.25944814089934,
+ "range": "± 0.25%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "14860264+mamazu@users.noreply.github.com",
+ "name": "mamazu",
+ "username": "mamazu"
+ },
+ "committer": {
+ "email": "noreply@github.com",
+ "name": "GitHub",
+ "username": "web-flow"
+ },
+ "distinct": true,
+ "id": "cc377db7e1443a69fc3ba36a40884aa91f002fdd",
+ "message": "Adding override attribute to override code action (#3057)",
+ "timestamp": "2026-08-22T12:07:21+01:00",
+ "tree_id": "421a30086779ab051fa928127aad60d4ff635110",
+ "url": "https://github.com/phpactor/phpactor/commit/cc377db7e1443a69fc3ba36a40884aa91f002fdd"
+ },
+ "date": 1787396931484,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 1.7153796477494925,
+ "range": "± 4.75%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 15.852945205479392,
+ "range": "± 4.24%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 7.316706457925589,
+ "range": "± 2.39%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 121.59056164383476,
+ "range": "± 1.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.01324430528375726,
+ "range": "± 6.81%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.01403953033268093,
+ "range": "± 4.08%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.0315717808219177,
+ "range": "± 4.85%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.006236125244618378,
+ "range": "± 7.15%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.05803812133072425,
+ "range": "± 3.91%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.040121409001956834,
+ "range": "± 5.26%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 14.24403522504894,
+ "range": "± 5.84%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 502,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1143,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 9.33761839530326,
+ "range": "± 2.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 8.981246575342528,
+ "range": "± 3.99%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.059417416829745655,
+ "range": "± 5.32%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.06714050880626302,
+ "range": "± 6.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.06576731898238722,
+ "range": "± 6.81%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.06475185909980394,
+ "range": "± 4.98%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.06076027397260169,
+ "range": "± 2.86%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.05902250489236781,
+ "range": "± 6.85%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.05914520547945173,
+ "range": "± 4.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.2122412915851273,
+ "range": "± 6.50%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.04019452054794549,
+ "range": "± 4.59%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.09448727984344413,
+ "range": "± 7.74%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.09533463796477486,
+ "range": "± 7.42%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.1085655577299408,
+ "range": "± 8.02%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.09516438356164372,
+ "range": "± 5.17%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 837043,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.06143835616438372,
+ "range": "± 6.43%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 254,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 269,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 237,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.7309657534246456,
+ "range": "± 4.08%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.0796573385518624,
+ "range": "± 1.43%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 52705.20743639901,
+ "range": "± 2.36%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 21677.461839529955,
+ "range": "± 2.87%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 18515.39138943242,
+ "range": "± 4.86%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 24177.81017612495,
+ "range": "± 2.88%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 586023.6360078229,
+ "range": "± 2.12%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 4.137,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 11926.712328767051,
+ "range": "± 3.30%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 199.90479256360078,
+ "range": "± 136.75%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 197.00491389432727,
+ "range": "± 0.39%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 90788,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.260908023483331,
+ "range": "± 5.31%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 2.4509726027396592,
+ "range": "± 2.90%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 436380.2328767136,
+ "range": "± 3.34%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.234726027397246,
+ "range": "± 4.05%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 2.4692191780821515,
+ "range": "± 4.41%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 1.7645733855185513,
+ "range": "± 5.51%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 61890.97455968786,
+ "range": "± 1.47%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 92251.98630136959,
+ "range": "± 6.83%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 129305.94324853229,
+ "range": "± 198.32%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 72.81936692759284,
+ "range": "± 1.49%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 78.91089628180268,
+ "range": "± 2.24%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ },
+ {
+ "commit": {
+ "author": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "committer": {
+ "email": "daniel@dantleech.com",
+ "name": "Daniel Leech",
+ "username": "dantleech"
+ },
+ "distinct": true,
+ "id": "8dc44fd24a1e407ec0bf44a5f2cafb6f7ab5dc07",
+ "message": "code-builder: Attribute builder",
+ "timestamp": "2026-08-22T12:58:28+01:00",
+ "tree_id": "630b46988247c65ee2f2d284f4c8109955d4614c",
+ "url": "https://github.com/phpactor/phpactor/commit/8dc44fd24a1e407ec0bf44a5f2cafb6f7ab5dc07"
+ },
+ "date": 1787400016785,
+ "tool": "customSmallerIsBetter",
+ "benches": [
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (short)",
+ "value": 2.346050880626222,
+ "range": "± 10.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorseLocalVariableCompletorBench::benchComplete (long)",
+ "value": 22.2824794520548,
+ "range": "± 3.26%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (short)",
+ "value": 9.945720156555824,
+ "range": "± 1.01%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ClassMemberCompletorBench::benchComplete (long)",
+ "value": 163.2910430528389,
+ "range": "± 0.49%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfig",
+ "value": 0.027694168297455895,
+ "range": "± 1.20%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithBuilder",
+ "value": 0.029114363992172085,
+ "range": "± 1.75%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonLoadConfigWithNonExistingYaml",
+ "value": 0.050604540117416934,
+ "range": "± 4.04%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchJsonPlainPhp",
+ "value": 0.015340313111545913,
+ "range": "± 1.56%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "ConfigLoaderBench::benchYamlLoadConfig",
+ "value": 0.08845397260273956,
+ "range": "± 10.68%",
+ "unit": "ms",
+ "extra": "30 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchParse",
+ "value": 0.05831499021526464,
+ "range": "± 1.57%",
+ "unit": "ms",
+ "extra": "33 iterations, 50 revs"
+ },
+ {
+ "name": "PhpactorParserBench::benchAssert",
+ "value": 18.512535812133056,
+ "range": "± 0.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 5 revs"
+ },
+ {
+ "name": "LexerBench::benchLex",
+ "value": 556,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "LexerBench::benchLex (1)",
+ "value": 1466,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchDiagnostics",
+ "value": 11.94681800391386,
+ "range": "± 1.08%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ImportNameProviderBench::benchCodeActions",
+ "value": 12.226808219178274,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1)",
+ "value": 0.08829608610567405,
+ "range": "± 1.93%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 1001)",
+ "value": 0.08786927592955024,
+ "range": "± 1.22%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 2001)",
+ "value": 0.08912700587084137,
+ "range": "± 2.11%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 3001)",
+ "value": 0.08929256360078225,
+ "range": "± 2.11%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 4001)",
+ "value": 0.08782328767123235,
+ "range": "± 3.57%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 5001)",
+ "value": 0.08845362035224952,
+ "range": "± 0.82%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "WorkspaceIndexBench::benchUpdate (length: 6001)",
+ "value": 0.08748571428571468,
+ "range": "± 1.69%",
+ "unit": "ms",
+ "extra": "10 iterations, 10 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandTokenizedString",
+ "value": 1.6276704500978512,
+ "range": "± 1.82%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "TokenExpanderBench::benchExpandStringWithNoTokens",
+ "value": 0.055398238747553785,
+ "range": "± 6.71%",
+ "unit": "μs",
+ "extra": "33 iterations, 10000 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (A)",
+ "value": 0.13444031311154594,
+ "range": "± 9.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchBareFileSearch (Request)",
+ "value": 0.13472994129158508,
+ "range": "± 5.71%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (A)",
+ "value": 0.12992563600782767,
+ "range": "± 8.66%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "SearchBench::benchFullFileSearch (Request)",
+ "value": 0.1298199608610567,
+ "range": "± 6.58%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "IndexedReferenceFinderBench::benchBareFileSearch",
+ "value": 1128061,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ClassRecordShortNameBench::benchShortName",
+ "value": 0.08717808219178118,
+ "range": "± 5.30%",
+ "unit": "μs",
+ "extra": "33 iterations, 1000 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineCols",
+ "value": 313,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchLineColsUtf16Positions",
+ "value": 288,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "EfficientLineColsBench::benchIneffificentLineCols",
+ "value": 346,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchMethodsAndProperties",
+ "value": 0.9823767123287779,
+ "range": "± 0.63%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "SelfReflectClassBench::benchFrames",
+ "value": 1.438688649706456,
+ "range": "± 0.87%",
+ "unit": "ms",
+ "extra": "5 iterations, 10 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_missing_methods.test)",
+ "value": 70521.66731898225,
+ "range": "± 0.65%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_generic_objects.test)",
+ "value": 28294.44422700651,
+ "range": "± 1.02%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (lots_of_new_objects.test)",
+ "value": 24647.859099804147,
+ "range": "± 0.68%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (method_chain.test)",
+ "value": 29547.0821917809,
+ "range": "± 0.43%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "DiagnosticsBench::benchDiagnostics (phpstan.test)",
+ "value": 818260.802348312,
+ "range": "± 0.49%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectionStubsBench::test_classes_and_methods",
+ "value": 5.63,
+ "range": "± 0.00%",
+ "unit": "ms",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case",
+ "value": 16481.095890410852,
+ "range": "± 0.81%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_methods_and_properties",
+ "value": 280.5499647749511,
+ "range": "± 133.32%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "PhpUnitReflectClassBench::test_case_method_frames",
+ "value": 265.0161761252463,
+ "range": "± 0.41%",
+ "unit": "ms",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "AnalyserBench::benchAnalyse",
+ "value": 115183,
+ "range": "± 0.00%",
+ "unit": "μs",
+ "extra": "1 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property",
+ "value": 1.5778121330724033,
+ "range": "± 4.12%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectPropertyBench::property_return_type",
+ "value": 3.011172211350273,
+ "range": "± 1.27%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "YiiBench::benchMembers",
+ "value": 583091.6438356128,
+ "range": "± 0.75%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method",
+ "value": 1.735904109589062,
+ "range": "± 1.35%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_return_type",
+ "value": 3.056142857142783,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "ReflectMethodBench::method_inferred_return_type",
+ "value": 2.1879784735812975,
+ "range": "± 1.06%",
+ "unit": "ms",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CarbonReflectBench::benchCarbonReflection",
+ "value": 76907.63796477561,
+ "range": "± 0.59%",
+ "unit": "μs",
+ "extra": "5 iterations, 1 revs"
+ },
+ {
+ "name": "ClassSearchBench::benchClassSearch",
+ "value": 111467.56751467686,
+ "range": "± 1.54%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "CompleteBench::benchComplete",
+ "value": 162547,
+ "range": "± 198.63%",
+ "unit": "μs",
+ "extra": "10 iterations, 1 revs"
+ },
+ {
+ "name": "BaseLineBench::benchVersion",
+ "value": 91.87702152641907,
+ "range": "± 0.92%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ },
+ {
+ "name": "BaseLineBench::benchRpcEcho",
+ "value": 96.92484833659539,
+ "range": "± 1.19%",
+ "unit": "ms",
+ "extra": "4 iterations, 2 revs"
+ }
+ ]
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/dev/bench/index.html b/dev/bench/index.html
new file mode 100644
index 0000000000..6c887805e8
--- /dev/null
+++ b/dev/bench/index.html
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+ Benchmarks
+
+
+
+
+
+
+ Download data as JSON
+
+
+
+
+
+
+
+
+
diff --git a/doc/_ext/phpactor.py b/doc/_ext/phpactor.py
deleted file mode 100644
index f08c629505..0000000000
--- a/doc/_ext/phpactor.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from docutils import nodes
-from docutils.parsers.rst import Directive
-from docutils.parsers.rst import directives
-
-
-class GitHubRepoDirective(Directive):
- """Directive for Github Repositories."""
- required_arguments = 1
- optional_arguments = 0
- final_argument_whitespace = False
- has_content = False
-
- def run(self):
- repo = self.arguments[0]
- env = self.state.document.settings.env
-
- repo_link = nodes.reference('', repo, refuri='https://github.com/' + repo)
-
- title = nodes.paragraph(classes=['github-link'])
-
- github_icon = nodes.image(uri=directives.uri("/images/github.svg"),width="15px",height="15px")
- title += github_icon,
- title += nodes.emphasis(strong=True,text=' Github:')
- title += nodes.inline(text=' ')
- title += repo_link,
-
-
- new_nodes = [title]
-
- return new_nodes
-
-def setup(app):
- app.add_directive("github-link", GitHubRepoDirective)
-
- return {
- 'version': '0.1',
- 'parallel_read_safe': True,
- 'parallel_write_safe': True,
- }
diff --git a/doc/_static/custom.css b/doc/_static/custom.css
deleted file mode 100644
index 51f6470282..0000000000
--- a/doc/_static/custom.css
+++ /dev/null
@@ -1,28 +0,0 @@
-div.document {
- width: 1050px;
-}
-
-.github-link {
- padding: 10px;
- border-style: solid;
- border-width: 1px;
- border-color: #eee;
- border-color: #ddd;
-}
-
-@media screen and (max-width: 875px) {
- div.document {
- width: 100%;
- }
-}
-
-.logo h2 {
- text-align: center;
- font-family: sans-serif;
-}
-
-#contents, .toctree-wrapper {
- background-color: white;
- border-style: none;
- padding: 0px;
-}
diff --git a/doc/_static/logo.png b/doc/_static/logo.png
deleted file mode 100644
index f066570360..0000000000
Binary files a/doc/_static/logo.png and /dev/null differ
diff --git a/doc/_templates/about.html b/doc/_templates/about.html
deleted file mode 100644
index 3fd4d42535..0000000000
--- a/doc/_templates/about.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- {% if theme_logo_name|lower == 'true' %}
- {% endif %}
-
-
{{ project }}
-
-{{ theme_description }}
diff --git a/doc/_templates/navigation.html b/doc/_templates/navigation.html
deleted file mode 100644
index 55bd7ce52e..0000000000
--- a/doc/_templates/navigation.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-{{ toctree(collapse=False,includehidden=False) }}
-{% if theme_extra_nav_links %}
-
-
- {% for text, uri in theme_extra_nav_links.items() %}
- {{ text }}
- {% endfor %}
-
-{% endif %}
diff --git a/doc/_templates/searchbox.html b/doc/_templates/searchbox.html
deleted file mode 100644
index bb51612d68..0000000000
--- a/doc/_templates/searchbox.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{#
- basic/searchbox.html
- ~~~~~~~~~~~~~~~~~~~~
-
- Sphinx sidebar template: quick search box.
-
- :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
- :license: BSD, see LICENSE for details.
-#}
-{%- if pagename != "search" and builder != "singlehtml" %}
-
-
-{%- endif %}
diff --git a/doc/adr.rst b/doc/adr.rst
deleted file mode 100644
index 887d573766..0000000000
--- a/doc/adr.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-ADRs
-====
-
-.. toctree::
- :glob:
-
- adr/*
diff --git a/doc/adr/0001-package-structure-macro-packages.rst b/doc/adr/0001-package-structure-macro-packages.rst
deleted file mode 100644
index 6b58eed9eb..0000000000
--- a/doc/adr/0001-package-structure-macro-packages.rst
+++ /dev/null
@@ -1,112 +0,0 @@
-Package Structure: Macro Packages
-=================================
-
-**REJECTED**
-
-Context
--------
-
-Currently Phpactor is organized as follows:
-
-::
-
- Phpactor\\Extension\\Extension\\
- Phpactor\\Extension\\LanguageServerExtension\\
- Phpactor\\Extension\\RpcExtension\\
- Phpactor\\\\{Adapter|Bridge}\\
- Phpactor\\\\{Model|Core}\\
-
-- The ``Extension`` connects the ```` ``Model`` to the
- Phpactor container. There may be an Extension which is “pure”
- (abstract) and provide an extension point. Others will use the
- extension point to integrate adapters (concrete implementations).
-- The ``LanguageServer`` and (Phpactor) ``Rpc`` extensions provide
- handlers for these two RPC methods.
-- The adapters are the concrete implementations
- (e.g. ``WorseReflection`` for fulfilling the completion APIs).
-- The ``Model`` is the pure domain code and APIs.
-
-Each separate namespace has a special concern. Originally it was
-intended that package stability principles be followed and each package
-would live as a separate repository with a separate package (let’s call
-them micro-packages).
-
-This has led to a situation where there are far too many packages,
-integrating them all has become a huge problem and for the past year or
-more it has significantly slowed down development on Phpactor:
-
-- Adding new features would involve adding 3 packages (model, extension
- and adapter).
-- As packages are young and unstable, refactoring would often affect
- two or more packages.
-- Maintaining the metadata over so many packages (build processes,
- supported PHP versions, etc) becomes repetitive.
-
-Some steps were made towards a mono-repo with a sub-tree split but:
-
-- We would lose (or at least aim towards) semantic versioning without
- new tooling.
-- We risk cross-package contamination without new tooling.
-
-Decision
---------
-
-Keep separate repositories but combine extensions into the subject
-namespace.
-
-So:
-
-::
-
- Phpactor\\\\Extension\\
- Phpactor\\\\Adapter\\
- Phpactor\\\\Model\\
-
-In a single package. All extensions will live in the ``Extension``
-namespace, e.g.:
-
-::
-
- Phpactor\\\\Extension\\Extension
- Phpactor\\\\Extension\\RpcExtension
- Phpactor\\\\Extension\\LanguageServerExtension
-
-If it were the case that the ``Model`` never changed, and the abstract
-extension points never changed, it would be fine to have separate
-packages, but reality is not like this (even if the code never changes,
-PHP versions do).
-
-Consequences
-------------
-
-This should significantly reduce the maintenance overhead as all
-packages that change together are packaged together.
-
-Semantic versioning will not be as accurate as before - changes in the
-``LanguageServer`` or ``Rpc`` APIs will cause a BC break for one or the
-other but not both.
-
-The namespace changes from ``Phpactor\\Extension\\`` to
-``Phpactor\\\\Extension``, which means that all external
-extensions will have a BC break.
-
-Rejected
---------
-
-First of all, changing the namespace caused more trouble than
-anticipated. While we could have provided stubs in the old namespace in
-the packages, many packages exposed multiple public classes, so it
-wasn’t practical.
-
-We solved this by mapping ``Phpactor\\`` to ``lib/`` and move everything
-in to keep the same namespace structure as before.
-(e.g. ``Phpactor\\LanguageServer``,
-``Phpactor\\Extension\\LanguageServer``.
-
-But finally the **whole idea is flawed**: The “extension” dependencies
-were in ``require-dev``, which meant that packages depending on an
-extension, would need to explicitly require the package, the extensions
-and any other dependencies of the extension.
-
-As extensions often depend on multiple other extensions, this is
-completely unpractical.
diff --git a/doc/adr/0002-language-server-package-structure.rst b/doc/adr/0002-language-server-package-structure.rst
deleted file mode 100644
index 3f9e2f52c7..0000000000
--- a/doc/adr/0002-language-server-package-structure.rst
+++ /dev/null
@@ -1,75 +0,0 @@
-Language Server Package Structure
-=================================
-
-**ACCEPTED**
-
-Context
--------
-
-For reasons described in the rejected 0001 ADR we have an issue where
-adding language server features involves, if done properly, would
-involve the creation of many more separate packages, increasing the
-maintenance overhead significantly.
-
-The Language Server is made up of:
-
-- ``phpactor/language-server``: A generic language server package, not
- coupled to Phpactor.
-- ``phpactor/language-server-extension``: Command to launch the
- language server, hooks to register RPC handlers.
-- ``phpactor/language-server-completion-extension``: Handlers for
- completion (using the existing Phpactor implementations from other
- packages).
-- ``phpactor/language-server-reference-finder-extension``: As with the
- completion extension.
-- ``phpactor/language-server-hover-extension``: This package *did* add
- support for hover, but was recently merged into completion.
-
-In addition, there is the prospect of adding:
-
-- ``phpactor/language-server-indexer-extension``: Add the indexing
- service to the server.
-- ``phpactor/language-server-code-action-extension``: Integrate all the
- code-transform actions.
-- ``phpactor/language-server-worse-reflection-extension``: Add the
- workspace source-locator for worse reflection.
-- …
-
-Decision
---------
-
-Keep the generic language server package, but combine all the Phpactor
-extensions into a single package:
-
-- ``phpactor/language-server``: A generic language server package, not
- coupled to Phpactor.
-- ``phpactor/language-server-extension``: Macro package containing all
- the Phpactor Language Server extensions.
-
-The macro package will be organised with all extensions living in their
-own namespaces, i.e. \ ``lib/``:
-
-::
-
- lib/LanguageServer/
- lib/LanguageServerCompletion/
- lib/LanguageServerReferenceFinder/
- lib/...
-
-The namespace will be mapped as ``'Phpactor\\Extension\\' => 'lib/'`` -
-so the extensions namespaces remain unchanged.
-
-Tests will also be namespaces as before, but will require additional
-autoload mapping.
-
-Consequences
-------------
-
-Having all the language server functionality in one place makes it
-easier to refactor, and much easier to add new features.
-
-In the future it should still be possible to break micro-packages out of
-the macro-package.
-
-There is a risk that it is easier for packages to contaminate each
-other.
diff --git a/doc/adr/0003-generics.md b/doc/adr/0003-generics.md
deleted file mode 100644
index 7eef8621af..0000000000
--- a/doc/adr/0003-generics.md
+++ /dev/null
@@ -1,92 +0,0 @@
-Generics
-========
-
-- Resolve iterable type
-- Resolve method type
-- Accept input
-
-## Iterable
-
-Given:
-
-```php
-/**
- * @implements IteratorAggregate
- */
-class Foobar {
-}
-
-foreach ($foobar as $bar) {
-}
-```
-
-- Phpactor will call `resolveIterableValue` on the class type
-- **Resolve template map for** `Traversable`:
- 1. Foreach implement/extends reference
- 2. Map any template vars (e.g. if `TKey` were a parameter `implement IteratorAggregate` => `IteratoeAggregate`)
- 3. Is referenced class `Traversable`? Return template var map
- 4. Switch to referenced class
- 5. Goto 1
-- Return type for `TValue` from template var map
-
-## Method type
-
-Given:
-
-```php
-/** @template T */
-class Collection { /** @return T */public function foo() {} }
-
-/** @extends Collection */
-class Bar {}
-
-$foo = new Bar();
-$foo = $bar->foo();
-```
-
-- **Resolve template map for** method's declaring class `Collection`
-- Return type for template var `T` from template map
-
-## Param/Constructor injection
-
-```php
-/** @template T */
-class Foobar {
- /** @param T $input */
- public function __construct($input) {}
-}
-
-$foo = "hello";
-$foobar = new Foobar($foo); // Foobar
-```
-
-- **Resolve template map for** constructed class `Foobar` - `Map{T:}`
-- Map parameters to template map `Map{T:"hello"}`
-- Resolve new generic type `Foobar<"hello">`
--
-## Param/Constructor injection with inheritence
-
-```php
-/** @template T */
-class Barfoo {
-}
-
-/** @extends Barfoo */
-class Foobar extends Barfoo {
- /** @param T $input */
- public function __construct($input) {}
-}
-
-$foo = "hello";
-$foobar = new Foobar($foo); // Foobar
-```
-
-- **Resolve template map for** constructed class `Foobar` - `Map{T:}`
-- Map parameters to template map `Map{T:"hello"}`
-- Resolve new generic type `Foobar<"hello">`
-
-## Method Injection
-
-- Method template vars are local to the template.
-- Input parameters cannot mutate class-level generics unless the method is the
- constructor.
diff --git a/doc/completion.md b/doc/completion.md
deleted file mode 100644
index 71ae894e0e..0000000000
--- a/doc/completion.md
+++ /dev/null
@@ -1,140 +0,0 @@
-.. _completion:
-
-Completion
-==========
-
-Phpactor provides completion for:
-
-- **Class names**: All PSR compliant classes in the project and vendor tree.
-- **Class members**: Methods, constants, properties of auto-loadable classes.
-- **Functions**: Built-in and bootstrapped.
-- **Constants**: Built-in and bootstrapped.
-- **Parameters**: Will suggest appropriate local variables for method parameters.
-- **Array Keys**: For array-shapes (`array{key1:value1}`) complete the keys.
-
-Uniquely, Phpactor does not pre-index anything, completion happens in _real
-time_, file locations are guessed based on composer locations (or brute forced
-if not using composer). For non-autoloadable entities (e.g. functions) it is
-assumed that these are defined during bootstrap.
-
-Type inference
---------------
-
-Phpactors type inference is based on
-[WorseReflection](https://github.com/phpactor/worse-reflection).
-
-### Assert
-
-When encountering an `assert` with `instanceof` it will cast the variable
-to that type, or a union of that type. See also [#instanceof](#instanceof).
-
-```php
-assert($foo instanceof Hello);
-assert($foo instanceof Hello || $foo instanceof Goodbye)
-
-$foo-> // type: Hello|Goodbye
-```
-
-### Assignments
-
-Phpactor will track assignments:
-
-```php
-$a = 'hello';
-$b = $a;
-$b; // type: string
-```
-
-... and assignments from method calls, class properties, anything reflectable, etc.
-
-### Catch
-
-```php
-
-try {
- // something
-} catch (MyException $e) {
- $e-> // type: MyException
-}
-```
-
-### Foreach
-
-Understands `foreach` with the docblock array annotation:
-
-```php
-/** @var Hello[] $foos */
-$foos = [];
-
-foreach ($foos as $foo) {
- $foo-> // type:Hello
-}
-```
-
-Also understands simple generics:
-
-```php
-/** @var ArrayIterator $foos */
-$foos = new ArrayIterator([ new Hello() ]);
-
-foreach ($foos as $foo) {
- $foo-> // type:Hello
-}
-```
-
-### FunctionLike
-
-Understands anonymous functions:
-
-```php
-$barfoo = new Barfoo();
-$function = function (Foobar $foobar) use ($barfoo) {
- $foobar-> // type: Foobar
- $barfoo-> // type: Barfoo
-}
-```
-
-### InstanceOf
-
-`if` statements are evaluated, if they contain `instanceof` then the type is
-inferred:
-
-```php
-if ($foobar instanceof Hello) {
- $foobar-> // type: Hello
-}
-```
-
-```php
-if (false === $foobar instanceof Hello) {
- return;
-}
-
-$foobar-> // type: Hello
-```
-
-```php
-if ($foobar instanceof Hello || $foobar instanceof Goodbye) {
- $foobar-> // type: Hello|Goodbye
-}
-```
-
-### Variables
-
-Phpactor supports type injection via. docblock:
-
-```php
-/** @var Foobar $foobar */
-$foobar-> // type: Foobar
-```
-
-and inference from parameters:
-
-```php
-function foobar(Barfoo $foobar, $barbar = 'foofoo')
-{
- $foobar; // type: Barfoo
- $barbar; // type: foofoo
-}
-```
-
diff --git a/doc/conf.py b/doc/conf.py
deleted file mode 100644
index dd0b1af8a9..0000000000
--- a/doc/conf.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# This file only contains a selection of the most common options. For a full
-# list see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Path setup --------------------------------------------------------------
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-import os
-import sys
-
-sys.path.append(os.path.abspath("./_ext"))
-
-# -- Project information -----------------------------------------------------
-
-project = 'Phpactor'
-copyright = '2020, Phpactor Community'
-author = 'Phpactor Community'
-
-# The full version, including alpha/beta/rc tags
-release = 'latest'
-
-master_doc = 'contents'
-
-
-# -- General configuration ---------------------------------------------------
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- 'sphinx_tabs.tabs',
- 'phpactor'
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affec-ts html_static_path and html_extra_path.
-exclude_patterns = []
-
-
-# -- Options for HTML output -------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = 'alabaster'
-html_theme_options = {
- 'logo': 'logo.png',
- 'github_user': 'phpactor',
- 'github_repo': 'phpactor',
- 'description': 'Intelligent completion and refactoring tool for PHP',
- 'logo_name': True,
- 'logo_text_align': 'center',
- 'description_font_style': 'italic',
- 'github_banner': True,
- 'travis_button': True,
-}
-html_sidebars = {
- '**': [
- 'about.html',
- 'searchbox.html',
- 'navigation.html',
- 'relations.html',
- 'donate.html',
- ]
-}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
diff --git a/doc/contents.rst b/doc/contents.rst
deleted file mode 100644
index 7b86ff7d13..0000000000
--- a/doc/contents.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-Contents
-========
-
-.. toctree::
- :maxdepth: 2
-
- usage
- reference
- tips
- integrations
- development
- other
-
-.. toctree::
- :hidden:
-
- index
- vim
- adr
diff --git a/doc/development.rst b/doc/development.rst
deleted file mode 100644
index 4faec73771..0000000000
--- a/doc/development.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Development
-===========
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- development/*
-
diff --git a/doc/development/debugging.rst b/doc/development/debugging.rst
deleted file mode 100644
index 555d8719f8..0000000000
--- a/doc/development/debugging.rst
+++ /dev/null
@@ -1,93 +0,0 @@
-Debugging
-=========
-
-Var Dump Server
----------------
-
-Phpactor includes the Symfony Var Dumper, this allows you to inspect values
-while a server is running or an RPC request is being executed.
-
-Start the server in the Phpactor project root:
-
-::
-
- $ ./vendor/bin/var-dump-server
-
- Symfony Var Dumper Server
- =========================
-
- [OK] Server listening on tcp://127.0.0.1:9912
-
- // Quit the server with CONTROL-C
-
-You can use the `dump` function in the code and the variable will be shown in
-the console output of the server you started: `dump($var)`.
-
-Logging
--------
-
-Logging is disabled by default, but can provide some useful information
-(such as errors encountered when parsing files etc).
-
-Enable it as follows:
-
-::
-
- {
- "logging.enabled": true,
- "logging.level": "debug",
- "logging.path": "phpactor.log",
- }
-
-
-Legacy RPC
-----------
-
-.. note::
-
- You should probably be using the language server so this is not for
- you.
-
-When executing commands in an editor, it can be tricky to consistently
-reproduce errors, or to isolate and debug them in Phpactor.
-
-Thankfully there is a feature called RPC replay which allows you to
-replay the last RPC command received by Phpactor.
-
-Enable it in a Phpactor configuration file, for example
-``$HOME/.config/phpactor/phpactor.yml``:
-
-.. code:: yaml
-
- rpc.store_replay: true
-
-Now, after you execute an RPC command via. your editor, you can execute
-Phpactor from the shell and replay your last command:
-
-.. code:: bash
-
- $ phpactor rpc --replay
- {"action":"open_file","parameters":{"path":"\/home\/daniel\/www\/phpactor\/phpactor\/lib\/Extension\/Rpc\/Handler\/AbstractHandler.php","offset":447}}
-
-To see more information, including the initial request add the
-``--verbose`` option:
-
-.. code:: bash
-
- $ phpactor rpc --replay --verbose
- [2018-05-23T22:14:11.486488+02:00] phpactor.DEBUG: REQUEST {"action":"goto_definition","parameters":{"source":"[removed]","offset":1913,"path":"/home/daniel/somepath/SomeClass.php"}}
- [2018-05-23T22:14:11.494201+02:00] phpactor.DEBUG: Resolving: Microsoft\PhpParser\Node\Statement\ClassDeclaration [] []
- [2018-05-23T22:14:11.494545+02:00] phpactor.DEBUG: Resolving: Microsoft\PhpParser\Node\Parameter [] []
- ...[truncated]...
- [2018-05-23T22:14:11.508019+02:00] phpactor.DEBUG: RESPONSE {"action":"open_file","parameters":{"path":"/home/daniel/www/phpactor/phpactor/lib/Extension/Rpc/Handler/AbstractHandler.php","offset":447}} []
- {"action":"open_file","parameters":{"path":"\/home\/daniel\/www\/phpactor\/phpactor\/lib\/Extension\/Rpc\/Handler\/AbstractHandler.php","offset":447}}
-
-The next time you run a command, you will lose your replay, in order to
-consistently reproduce an action, you can copy the replay file and
-execute it consistently as many times as required:
-
-.. code:: bash
-
- $ cp ~/.local/share/phpactor/replay.json .
- $ cat replay.json | phpactor rpc --verbose
-
diff --git a/doc/development/developing.rst b/doc/development/developing.rst
deleted file mode 100644
index ae09ccea7e..0000000000
--- a/doc/development/developing.rst
+++ /dev/null
@@ -1,24 +0,0 @@
-General
-=======
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- language-server/*
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-Package Structure
------------------
-
-Phpactor is divided into _packages_. Each package occupies a directory in
-`lib/`. In addition there are extensions which integrate packages with
-Phpactor which are in `lib/Extension`.
-
-Tests and benchmarks are maintained in the package's directory, e.g.
-`lib/WorseReflection/Tests`.
-
diff --git a/doc/development/documentation.rst b/doc/development/documentation.rst
deleted file mode 100644
index fd1fcbc3c7..0000000000
--- a/doc/development/documentation.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-Documentation
-=============
-
-Phpactor Documentation
-~~~~~~~~~~~~~~~~~~~~~~
-
-Phpactor uses `Sphinx `_ (RST) for documentation.
-
-Docs are located in the ``docs``.
-
-A useful primer on RST can be found `here `_.
-
-.. tabs::
-
- .. tab:: Debian/Ubuntu
-
- ::
-
- $ apt-get install python3-sphinx
- $ pip install sphinx-tabs
-
-You can then build the docs with:
-
-
- ::
-
- make sphinx
-
-Or, to watch for changes (requires ``inotifywait``):
-
- ::
-
- make sphinxwatch
-
-VIM Help
-~~~~~~~~
-
-The VIM plugin is documented in the *generated* ``doc/phpactor.txt``
-file using `vimdoc `_.
-
-In order to add documentation just annotate properties / methods with
-comments, for example:
-
-.. code:: vim
-
- ""
- " Extract the selected expression and assign it to a variable before
- command! -buffer -range=% PhpactorExtractExpression call phpactor#ExtractExpression('v')
-
-See `vimdoc `_ for more information.
-
-Use the following command to both install vimdoc and build the documentation:
-
-.. code:: sh
-
- make vimdoc
diff --git a/doc/development/language-server.rst b/doc/development/language-server.rst
deleted file mode 100644
index 181a51e501..0000000000
--- a/doc/development/language-server.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-Language Server
-===============
-
-Phpactor provides many internal extension points for the language server.
-
-.. note::
-
- This documentation is incomplete.
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- language-server/code-action.rst
diff --git a/doc/development/language-server/code-action.rst b/doc/development/language-server/code-action.rst
deleted file mode 100644
index 167e10b75f..0000000000
--- a/doc/development/language-server/code-action.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-Code actions
-============
-
-What is a code action
----------------------
-
-A code action is an action that can be performed on the code. These can be
-subdivided into Quickfixes, Refactoring and source fixes. For more information
-on what the individual code action are doing please consult the documentation:
-`Code action kind documentation
-`_
-
-How to write a code action
---------------------------
-
-In order to implement a new code action you need the following classes:
-
-- ``CodeActionProvider``: Provides a list of ``CodeAction`` instances.
-- ``CodeAction``: Describes an action that should be performed, usually providing a callback to a command.
-- ``CodeActionCommand``: A command which can be executed from the language client.
-
-.. note::
-
- You can programmatically execute commands from the language client (e.g.
- neovim) but it's not very intuitive. Code actions provide hints which can
- normally be actioned through commands.
-
-Let's have a look at the concept by the example of the generate decorator
-functionality. First off we have the ``GenerateDecoratorProvider`` this class
-provides a list of ``CodeAction`` objects that are relevant to the file.
-
-The ``CodeAction`` list can then reference a command by name and provide arguments. The following is an example from the Phpactor ``GenerateDecoratorProvider.php`` class:
-
-.. code-block:: php
-
- uri,
- $interfaceFQN,
- ]
- )
- ),
- ];
-
-The command is defined in our example in the ``GenerateDecoratorCommand`` which
-will receive the arguments you pass and can effectively execute the action, typically in Phpactor we will delegate to a service - in much the same way you would with an MVC controller.
-
-In the case of the generate decorator command there is the
-``WorseGenerateDecorator`` service which contains the logic for generating the
-decorator or more generally to apply the code action.
diff --git a/doc/development/profiling.rst b/doc/development/profiling.rst
deleted file mode 100644
index 9bb63ce84d..0000000000
--- a/doc/development/profiling.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. _developing_blackfire_profiling:
-
-Profiling the Language Server
-=============================
-
-You can selectively profile the language server using `Blackfire `_.
-
-- Enable the blackfire via. :ref:`param_blackfire.enabled`
-- Call the LSP methods `blackfire/start` and `blackfire/finish`, for NVIM see
- :ref:`nvim_configuration_snippet_commands`
diff --git a/doc/dot/class-referenes.dot b/doc/dot/class-referenes.dot
deleted file mode 100644
index 28ae494998..0000000000
--- a/doc/dot/class-referenes.dot
+++ /dev/null
@@ -1,13 +0,0 @@
-
-digraph {
- Class [label="Acme\\AbstractServiceFactoryFactoryImpl"]
- File1 [label="lib/Acme/Engine:32"]
- File2 [label="lib/Acme/Entity/Car:100"]
- File3 [label="lib/Acme/Circulator:200"]
- File4 [label="lib/Acme/ContainerContainer:100,120,130"]
-
- File1 -> Class
- File2 -> Class
- File3 -> Class
- File4 -> Class
-}
diff --git a/doc/dot/components.dot b/doc/dot/components.dot
deleted file mode 100644
index 498fa37592..0000000000
--- a/doc/dot/components.dot
+++ /dev/null
@@ -1,26 +0,0 @@
-digraph {
- CodeBuilder [label="Code Builder"]
- Transform [label="Code Transform"]
- Reflection [label="Worse Reflection"]
- Filesystem [label="SC Filesystem"]
- ClassMover [label="Class Mover"]
- Phpactor [label="Phpactor"]
- ClassToFile [label="Class to File"]
- TestUtils [label="Test Utils"]
- PathFinder [label="Path Finder"]
-
- Transform -> Phpactor
- Reflection -> Phpactor
- Filesystem -> Phpactor
- ClassMover -> Phpactor
- Reflection -> Transform
- CodeBuilder -> Transform
- ClassToFile -> Phpactor
- PathFinder -> Phpactor
-
- Reflection -> TestUtils
- Phpactor -> TestUtils
- Transform -> TestUtils
- CodeBuilder -> TestUtils
- ClassMover -> TestUtils
-}
diff --git a/doc/images/components.png b/doc/images/components.png
deleted file mode 100644
index 63a42c295d..0000000000
Binary files a/doc/images/components.png and /dev/null differ
diff --git a/doc/images/github.svg b/doc/images/github.svg
deleted file mode 100644
index 53bd7b2d2a..0000000000
--- a/doc/images/github.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/doc/images/logo-small.png b/doc/images/logo-small.png
deleted file mode 100644
index 5c5c973503..0000000000
Binary files a/doc/images/logo-small.png and /dev/null differ
diff --git a/doc/images/risky.png b/doc/images/risky.png
deleted file mode 100644
index 367a8055f2..0000000000
Binary files a/doc/images/risky.png and /dev/null differ
diff --git a/doc/index.rst b/doc/index.rst
deleted file mode 100644
index bdef383ad1..0000000000
--- a/doc/index.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-.. Phpactor documentation master file, created by
- sphinx-quickstart on Fri May 1 16:57:28 2020.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
-
-Phpactor
-========
-
-Phpactor is a PHP :ref:`language_server` providing:
-
-- :ref:`completion`: Provides broad and accurate context aware code
- completion.
-- :ref:`navigation`: Jump to class and method definitions, find
- references, hover.
-- :ref:`refactoring`: Move classes, complete constructors, implement
- contracts, generate methods, etc.
-- :ref:`diagnostics`: Diagnostics related to code actions.
-- :ref:`integrations`: Integrates with popular tools and frameworks such as Symfony, PHPStan, etc.
-- :ref:`vim_plugin`: Lightweight VIM plugin.
-
-Proceed to the :doc:`usage/getting-started` guide to find out how to be getting
-started with Neovim, VS Code, and other editors.
diff --git a/doc/integrations.rst b/doc/integrations.rst
deleted file mode 100644
index c895ffae5d..0000000000
--- a/doc/integrations.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-.. _integrations:
-
-Integrations
-============
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- integrations/*
-
-
diff --git a/doc/integrations/behat.rst b/doc/integrations/behat.rst
deleted file mode 100644
index 4207f8e32b..0000000000
--- a/doc/integrations/behat.rst
+++ /dev/null
@@ -1,46 +0,0 @@
-Behat
-=====
-
-`Behat `_ is a BDD framework.
-
-Phpactor can provide goto definition and some completion support within feature files.
-
-Enabling
---------
-
-The extension must be via. :ref:`param_behat.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set behat.enabled true
-
-Symfony Integration
--------------------
-
-If you are using Symfony and dependency injection to manage your contexts you
-can specify the path to the XML debug file in
-:ref:`param_behat.symfony.di_xml_path`:
-
-For example:
-
-.. code-block:: bash
-
- $ phpactor config:set behat.symfony.di_xml_path "var/cache/test/App_KernelTestDebugContainer.xml"
-
-Language Server Support
------------------------
-
-This extension acts on cucumber files, you will need to configure your
-_client_ to ensure that it will call Phpactor when in the feature files.
-
-
-.. tabs::
-
- .. tab:: Neovim LSP (via. lspconfig)
-
- ::
-
- require'lspconfig'.phpactor.setup{
- -- ...
- filetypes = { 'php', 'cucumber' },
- }
diff --git a/doc/integrations/drupal8.rst b/doc/integrations/drupal8.rst
deleted file mode 100644
index d4690521d7..0000000000
--- a/doc/integrations/drupal8.rst
+++ /dev/null
@@ -1,134 +0,0 @@
-Drupal 8+
-=========
-
-Inc and module files
-^^^^^^^^^^^^^^^^^^^^
-
-By default Phpactor will not index `.inc` nor `.module` files.
-
-Run the following on your project to enable the indexing of `.inc` and `.module` files.
-
-```
-phpactor config:set indexer.supported_extensions '["php", "inc", "module"]'
-```
-
-```
-phpactor config:set indexer.include_patterns '["/**/*.php", "/**/*.inc", "/**/*.module"]'
-```
-
-Bootstrapping
-~~~~~~~~~~~~~
-
-Drupal automatically adds its modules to the autoloader during the
-kernel boot process. It is therefore necessary to either 1) boot the
-kernel to have a fully useful autoloader *or* 2) to use a different
-mechanism to add the modules to the Composer autoloader.
-
-Depending on your setup option 1 or 2 will be preferable.
-
-Option 1: Bootstrap Drupal on the fly to generate the autoloader
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Create the following bootstrap file ``phpactor_autoload.php``, in (for
-example) ``web/``:
-
-.. code:: php
-
- // web/phpactor_autoload.php
- locateRoot($root)) {
- die('DrupalConsole must be executed within a Drupal Site.');
- }
-
- chdir($drupalFinder->getDrupalRoot());
-
- $drupalKernel = DrupalKernel::createFromRequest(
- Request::createFromGlobals(),
- $autoload,
- 'dev',
- true,
- $drupalFinder->getDrupalRoot()
- );
- $drupalKernel->boot();
- chdir($root);
-
- return $autoload;
-
-Then edit ``.phpactor.yml`` to use that:
-
-.. code:: yaml
-
- # Use the special autoloader above
- composer.autoloader_path: web/phpactor_autoload.php
-
-The downside to this option is that it requires access to the DB from
-your current environment which may be tricky if you are running Drupal
-inside a VM.
-
-Option 2: Add the modules into the Composer autoloader
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This option requires merging in any modules (Drupal, contrib, custom)
-into the Composer autoloader via a discovery mechanism offered by the
-`Drupal Autoloader `__
-composer plugin.
-
-Full details are available in the README for this plugin, however, the
-short version is that you will need to put the following into your
-``composer.json`` file:
-
-.. code:: json
-
- {
- "require": {
- "fenetikm/autoload-drupal": "0.1"
- },
- "extra": {
- "autoload-drupal": {
- "modules": [
- "app/modules/contrib/",
- "app/modules/custom/",
- "app/core/modules/"
- ]
- }
- }
- }
-
-and then rebuild your Composer autoloader e.g.
-
-.. code:: sh
-
- composer autoload-dump
-
-The upside to this option is that it won’t require the relatively slow
-Drupal bootstrap (which will hit the DB) but the downside is that you
-will have to regenerate the autoloader every time you add / remove a
-module.
-
-Coding Standards
-^^^^^^^^^^^^^^^^
-
-Change your local ``.phpactor.yml`` to use 2 spaces for indentation:
-
-::
-
- # Drupal CS is 2 spaces
- code_transform.indentation: " "
-
-.. container:: alert alert-info
-
- Code will still be generated using the PSR-2 standard. It would be
- necessary to override twig templates in ``.phpactor/templates`` to
- rectify this (or just use a CS fixer).
-
-
diff --git a/doc/integrations/mago.rst b/doc/integrations/mago.rst
deleted file mode 100644
index 3a7605d78c..0000000000
--- a/doc/integrations/mago.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-Mago
-====
-
-`Mago `_ is a fast PHP linter, formatter and static analysis tool written in Rust.
-
-Phpactor can integrate with Mago and provide diagnostics in your IDE from two of its tools:
-
-- ``mago analyze`` (static analysis, the equivalent of PHPStan or Psalm), reported under the ``mago`` source.
-- ``mago lint`` (style and code smells), reported under the ``mago-lint`` source.
-
-To enable the integration set :ref:`param_language_server_mago.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set language_server_mago.enabled true
-
-Both tools are enabled by default once the extension is on. Toggle them independently with :ref:`param_language_server_mago.analyze.enabled` and :ref:`param_language_server_mago.lint.enabled`.
-
-- Specify the path to Mago if different to ``vendor/bin/mago`` via :ref:`param_language_server_mago.bin`. Mago is commonly installed globally, in which case set this to ``mago``.
-- Override the Mago configuration file with :ref:`param_language_server_mago.config`.
-- Adjust the run timeout (milliseconds) with :ref:`param_language_server_mago.timeout`.
-
-Phpactor sends the current buffer to Mago on standard input, so diagnostics update as you type without saving the file.
-
-.. note::
-
- Pointing :ref:`param_language_server_mago.config` at a ``mago.toml`` outside the project root may change how Mago resolves the relative paths declared inside that file.
diff --git a/doc/integrations/php-cs-fixer.rst b/doc/integrations/php-cs-fixer.rst
deleted file mode 100644
index 46b8209ea8..0000000000
--- a/doc/integrations/php-cs-fixer.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-PHP-CS-Fixer
-============
-
-`PHP-Cs-Fixer `_ is a tool
-fixes your code to follow standards; whether you want to follow PHP coding
-standards as defined in the PSR-1, PSR-2, etc., or other community driven ones
-like the Symfony one. You can also define your (team's) style through
-configuration.
-
-Phpactor can use PHP-CS-Fixer to:
-
-- format your code via the LSP `textDocument/formatting` action,
-- provide diagnostics for potential fixes,
-- provide `source.fixAll.phpactor.phpCsFixer` code action to allow auto-fixing on save.
-
-To do so you set :ref:`param_language_server_php_cs_fixer.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set language_server_php_cs_fixer.enabled true
-
-- Specify the path to PHP-CS-Fixer if different to ``/vendor/bin/php-cs-fixer`` via. :ref:`param_language_server_php_cs_fixer.bin`.
diff --git a/doc/integrations/phpcs.rst b/doc/integrations/phpcs.rst
deleted file mode 100644
index df6cb0f31e..0000000000
--- a/doc/integrations/phpcs.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-PHP_CodeSniffer
-===============
-
-`PHP_CodeSniffer ` is a set of
-two PHP scripts; the main phpcs script that tokenizes PHP, JavaScript and CSS
-files to detect violations of a defined coding standard, and a second phpcbf
-script to automatically correct coding standard violations. PHP_CodeSniffer is
-an essential development tool that ensures your code remains clean and
-consistent.
-
-Phpactor can use PHP_CodeSniffer to:
-
-- format your code via the LSP ``textDocument/formatting`` action,
-- provide diagnostics for potential fixes,
-
-To do so you set :ref:`param_php_code_sniffer.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set php_code_sniffer.enabled true
-
-- Specify the path to ``phpcs`` if different to ``/vendor/bin/phpcs`` via. :ref:`param_php_code_sniffer.bin`.
diff --git a/doc/integrations/phpstan.rst b/doc/integrations/phpstan.rst
deleted file mode 100644
index bd6a2e16df..0000000000
--- a/doc/integrations/phpstan.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-PHPStan
-=======
-
-`PHPStan `_ is a static analysis tool that can be used to expose bugs in your PHP code.
-
-Phpactor can integrate with PHPStan and provide diagnostics in your IDE.
-
-To do so you set :ref:`param_language_server_phpstan.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set language_server_phpstan.enabled true
-
-- Override the PHPStan level with :ref:`param_language_server_phpstan.level`
-- Specify the path to PHPStan if different to ``/vendor/bin/phpstan`` via. :ref:`param_language_server_phpstan.bin`.
-
-Keep in mind that Phpactor analyzes files with a temporary name, so defining a PHPStan baseline won't work as expected. All detected errors will be reported despite the baseline.
diff --git a/doc/integrations/phpunit.rst b/doc/integrations/phpunit.rst
deleted file mode 100644
index 6fb6beae09..0000000000
--- a/doc/integrations/phpunit.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-PHPUnit
-=======
-
-`PHPUnit `_ is a programmer-oriented
-testing framework for PHP. It is an instance of the xUnit architecture for
-unit testing frameworks.
-
-Phpactor can integrate with PHPUnit to provide:
-
-- Type inference from assertions.
-- Generate test case.
-
-To do so you set :ref:`param_phpunit.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set phpunit.enabled true
diff --git a/doc/integrations/prophecy.rst b/doc/integrations/prophecy.rst
deleted file mode 100644
index e4de7614e4..0000000000
--- a/doc/integrations/prophecy.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-Prophecy
-========
-
-`Prophecy `_ is a highly opinionated yet very powerful and flexible PHP object mocking framework. Though initially it was created to fulfil phpspec2 needs, it is flexible enough to be used inside any testing framework out there with minimal effort.
-
-Phpactor can integrate with Prophecy to provide completion for mocks.
-
-To do so you set :ref:`param_prophecy.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set prophecy.enabled true
diff --git a/doc/integrations/psalm.rst b/doc/integrations/psalm.rst
deleted file mode 100644
index 295e277448..0000000000
--- a/doc/integrations/psalm.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-Psalm
-=====
-
-`Psalm `_ is a static analysis tool that can be used to expose bugs in your PHP code.
-
-Phpactor can integrate with Psalm to provide diagnostics in your IDE.
-
-.. note::
-
- Currently this extension will only analyse saved files.
-
-To do so you set :ref:`param_language_server_psalm.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set language_server_psalm.enabled true
-
-- Specify the path to Psalm if different to ``/vendor/bin/psalm`` via. :ref:`param_language_server_psalm.bin`.
diff --git a/doc/integrations/symfony.rst b/doc/integrations/symfony.rst
deleted file mode 100644
index 03c5ed09fb..0000000000
--- a/doc/integrations/symfony.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-Symfony
-=======
-
-`Symfony `_ is a popular web framework.
-
-Phpactor can provide:
-
-- Service ID completion when using the container as a service locator.
-- Type inference when accessing services from the container.
-
-Enabling
---------
-
-The extension must be via. :ref:`param_symfony.enabled`:
-
-.. code-block:: bash
-
- $ phpactor config:set symfony.enabled true
-
-Dependency Injection Features
------------------------------
-
-When in development mode Symfony will dump an XML file which describes the
-current container. In Symfony 5.x this file is located in
-``var/cache/dev/App_KernelDevDebugContainer.xml`` but this may be different
-for earlier versions.
-
-You can set the path to this file with :ref:`param_symfony.xml_path`
-
-Troubeshooting
---------------
-
-### I don't get any completion suggestions or type inference.
-
-Ensure that your Symfony cache has been warmed up and that you are in
-development mode.
-
-Try running ``./bin/console cache:clear``
diff --git a/doc/language-server.rst b/doc/language-server.rst
deleted file mode 100644
index bcefcfacb8..0000000000
--- a/doc/language-server.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-Language Server
-===============
-
-See :ref:`language_server` for getting started instructions.
-
-.. toctree::
- :maxdepth: 2
-
- lsp/clients
- lsp/running
- lsp/support
- lsp/code-actions
diff --git a/doc/lsp/clients.rst b/doc/lsp/clients.rst
deleted file mode 100644
index 29b23dc577..0000000000
--- a/doc/lsp/clients.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-.. _language_server_clients:
-
-Clients
-=======
-
-.. toctree::
- :maxdepth: 2
-
- vim
- sublime
- vscode
- emacs
- helix
- nova
- zed
-
-.. toctree::
- :hidden:
-
- vim-lsp
diff --git a/doc/lsp/code-actions.rst b/doc/lsp/code-actions.rst
deleted file mode 100644
index 1fd5201070..0000000000
--- a/doc/lsp/code-actions.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _lsp_code_actions:
-
-LSP code actions
-================
-
-See `Language Server Specification (Code Action Request)`_ for details.
-
-List of currently available code actions:
-
-+---------------------------------------------+----------------------------------------+
-| Code Action | Kind |
-+=============================================+========================================+
-| :ref:`refactoring_import_missing_class` | ``quickfix.import_class`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`refactoring_complete_constructor` | ``quickfix.complete_constructor`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`refactoring_add_missing_assignements` | ``quickfix.add_missing_properties`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`implement_contracts` | ``quickfix.implement_contracts`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`refactoring_fix_namespace_and_class` | ``quickfix.fix_namespace_class_name`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_class_new` | ``quickfix.create_class`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_class_new` | ``quickfix.create_unresolvable_class`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_method` | ``quickfix.generate_method`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_extract_method` | ``quickfix.extract_method`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_extract_expression` | ``quickfix.extract_expression`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_extract_constant` | ``quickfix.extract_constant`` |
-+---------------------------------------------+----------------------------------------+
-| :ref:`generation_generate_accessors` | ``quickfix.generate_accessors`` |
-+---------------------------------------------+----------------------------------------+
-
-.. _Language Server Specification (Code Action Request): https://microsoft.github.io/language-server-protocol/specification#textDocument_codeAction
diff --git a/doc/lsp/emacs.rst b/doc/lsp/emacs.rst
deleted file mode 100644
index 3782a7011d..0000000000
--- a/doc/lsp/emacs.rst
+++ /dev/null
@@ -1,82 +0,0 @@
-Emacs
-=====
-
-Client Guides
--------------
-
-
-.. tabs::
-
- .. tab:: LSP Mode
-
- Install Phpactor with :ref:`installation_global` then install `LSP Mode
- `_. Please read `Installation - LSP Mode
- `_ for client installation.
- Installing ``lsp-ui`` in addition to lsp-mode integrates a rich UI for LSP into Emacs.
-
- For example: include it in your ``init.el``
-
- ::
-
- ;; Add lsp or lsp-deferred function call to functions for your php-mode customization
- (defun init-php-mode ()
- (lsp-deferred))
-
- (with-eval-after-load 'php-mode
- ;; If phpactor command is not installed as global, write the full path
- ;; (custom-set-variables '(lsp-phpactor-path "/path/to/phpactor"))
- (add-hook 'php-mode-hook #'init-php-mode))
-
- If you're using use-package or leaf.el, you can add it to the ``:hook`` or ``:init`` clauses
- of those blocks instead of ``with-eval-after-load``.
-
- Read `FAQ - LSP Mode
- `_
- if you have a language server other than Phpactor in your environment.
-
- .. tab:: Eglot
-
- Install Phpactor with :ref:`installation_global` then install `Eglot
- `_. Eglot installs in your Emacs by executing
- ``M-x package-install eglot`` commands.
-
- For example: include it in your ``init.el``
-
- ::
-
- ;; Add lsp or lsp-deferred function call to functions for your php-mode customization
- (defun init-php-mode ()
- (eglot-ensure))
-
- (with-eval-after-load 'php-mode
- ;; If phpactor command is not installed as global, remove next ;; and write the full path
- ;; (custom-set-variables '(lsp-phpactor-path "/path/to/phpactor"))
- (add-hook 'php-mode-hook #'init-php-mode))
-
- If you're using use-package or leaf.el, you can add it to the ``:hook`` or ``:init`` clauses
- of those blocks instead of ``with-eval-after-load``.
-
- .. tab:: lsp-bridge
-
- Install Phpactor with :ref:`installation_global` then install `lsp-bridge
- `_. Please read README for client installation.
-
- For example: include it in your ``init.el``
-
- ::
-
- ;;; When enabled in all major modes supported by lsp-bridge
- ;; (global-lsp-bridge-mode)
-
- ;;; When enabling lsp-bridge only for PHP Mode
-
- ;; Add lsp or lsp-deferred function call to functions for your php-mode customization
- (defun init-php-mode ()
- (lsp-bridge-mode +1))
-
- (with-eval-after-load 'php-mode
- (custom-set-variables '(lsp-bridge-php-lsp-server . "phpactor"))
- (add-hook 'php-mode-hook #'init-php-mode))
-
- If you're using use-package or leaf.el, you can add it to the ``:hook`` or ``:init`` clauses
- of those blocks instead of ``with-eval-after-load``.
diff --git a/doc/lsp/helix.rst b/doc/lsp/helix.rst
deleted file mode 100644
index f35eb4ef16..0000000000
--- a/doc/lsp/helix.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-.. _lsp_client_helix:
-
-Helix Editor
-============
-
-Install Phpactor with :ref:`installation_global` then add the
-Phpactor language server configuration in your `languages.toml`
-as follows:
-
-.. code:: toml
-
- # in /helix/languages.toml
-
- [language-server.phpactor]
- command = "phpactor"
- args = ["language-server"]
-
- [[language]]
- name = "php"
- scope = "source.php"
- injection-regex = "php"
- file-types = ["php", "inc", "php4", "php5", "phtml", "ctp"]
- shebangs = ["php"]
- roots = ["composer.json", "index.php"]
- comment-token = "//"
- language-servers = [ "phpactor" ]
- indent = { tab-width = 4, unit = " " }
diff --git a/doc/lsp/nova.rst b/doc/lsp/nova.rst
deleted file mode 100644
index 59a0382745..0000000000
--- a/doc/lsp/nova.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-.. _lsp_client_nova:
-
-Nova Code Editor
-================
-
-Download the Phpactor extension from the `Nova Extensions Library `_.
diff --git a/doc/lsp/running.rst b/doc/lsp/running.rst
deleted file mode 100644
index 9f336823fc..0000000000
--- a/doc/lsp/running.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-Manually Running the Server
----------------------------
-
-Typically you should never need to run the Language Server yourself, the
-following methods are useful for development.
-
-.. _lsp_running_stdio:
-
-STDIO
-~~~~~
-
-STDIO is typically used by clients and it the default mode.
-
-.. code:: bash
-
- $ phpactor language-server
-
-This is the method you should use when configuring an LSP client.
-
-Run with TCP Server
-~~~~~~~~~~~~~~~~~~~
-
-The TCP server is useful for debugging:
-
-.. code:: bash
-
- $ phpactor language-server --address=127.0.0.1:8888 -vvv
-
-You should see something like:
-
-::
-
- Starting TCP server, use -vvv for verbose output
- [2018-09-30 17:15:25] phpactor.INFO: listening on address 127.0.0.1:8888 [] []
- [2018-09-30 17:15:25] phpactor.INFO: starting language server with pid: 9286 [] []
-
-.. _Language Server Protocol: https://microsoft.github.io/language-server-protocol/specification
diff --git a/doc/lsp/sublime.rst b/doc/lsp/sublime.rst
deleted file mode 100644
index 136b3e2f71..0000000000
--- a/doc/lsp/sublime.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _lsp_client_sublime:
-
-Sublime Text
-============
-
-Install Phpactor with :ref:`installation_global` then navigate to `Preferences
-> Package Settings > LSP > Settings` and add the Phpactor language server
-configuration as follows:
-
-.. code:: javascript
-
- "clients":
- {
- "phpactor":
- {
- "command":
- [
- "phpactor",
- "language-server",
-
- ],
- "enabled": true,
- "languageId": "php",
- "scopes":
- [
- "source.php",
- "embedding.php"
- ],
- "syntaxes":
- [
- "Packages/PHP/PHP.sublime-syntax"
- ]
- }
- }
diff --git a/doc/lsp/support.rst b/doc/lsp/support.rst
deleted file mode 100644
index 8ae22c0a45..0000000000
--- a/doc/lsp/support.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-.. _lsp_support:
-
-LSP Support
-===========
-
-See the `Language Server Specification`_ for details.
-
-+-------------------------+---+-------------------------------------+
-| Feature | | |
-+=========================+===+=====================================+
-| Completion | ✔ | See :ref:`completion` |
-+-------------------------+---+-------------------------------------+
-| Hover | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Signature Help | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Goto Declaration | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Goto Type | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Goto Implementation | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Find References | ✔ | [#references]_ |
-+-------------------------+---+-------------------------------------+
-| Document Highlight | ✔ | Symbol highlighting |
-+-------------------------+---+-------------------------------------+
-| Workspace Symbols | ✔ | Classes, functions and constants |
-+-------------------------+---+-------------------------------------+
-| Document Symbol | ✔ | For structural elements |
-+-------------------------+---+-------------------------------------+
-| Selection Range | ✔ | |
-+-------------------------+---+-------------------------------------+
-| Code Action | ✔ | [#code]_ |
-+-------------------------+---+-------------------------------------+
-| Code Lens | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Document Link | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Document Color | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Color Presentation | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Formatting | ✔ | [#formatting]_ |
-+-------------------------+---+-------------------------------------+
-| Range Formatting | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Rename | ✔ | Variables and members [#rename]_ |
-+-------------------------+---+-------------------------------------+
-| Folding/Selection Range | ✘ | |
-+-------------------------+---+-------------------------------------+
-| Diagnostics | ✔ | [#diagnostics]_ |
-+-------------------------+---+-------------------------------------+
-
-.. _Language Server Specification: https://microsoft.github.io/language-server-protocol/specification
-
-.. [#rpc] Available through RPC (i.e. non-LSP client) LSP support should be added soon.
-.. [#code] See :doc:`/lsp/code-actions`.
-.. [#references] For class like references, functions and member accesses (static and object instances)
-.. [#rename] Native LSP support for renaming variables and class members, with support planned for renaming classes and namespaces. RPC fills the gap: :ref:`refactoring_rename_class`
-.. [#formatting] With php-cs-fixer :ref:`php-cs-fixer `.
-.. [#diagnostics] Basic PHP linting and also support for integrating with :ref:`phpstan `, :ref:`Psalm ` and :ref:`php-cs-fixer `.
diff --git a/doc/lsp/vim-lsp.rst b/doc/lsp/vim-lsp.rst
deleted file mode 100644
index dfaf9a8a22..0000000000
--- a/doc/lsp/vim-lsp.rst
+++ /dev/null
@@ -1,92 +0,0 @@
-NVIM LSP Configuration Snippets
-===============================
-
-This page contains some useful configuration snippets which are not guaranteed
-to work.
-
-Progress Notifications
-----------------------
-
-Neovim does not support LSP progress notifications out-of-the-box.
-
-Install a dedicated plugin such as `fidget `_
-
-.. _nvim_configuration_snippet_commands:
-
-Phpactor Commands
------------------
-
-.. note::
-
- This snippet depends on the "plenary" plugin (which is also required by
- "telescope")
-
-This configuration snippet enables the following commands:
-
-- ``:LspPhpactorReindex``: Reindex the current project
-- ``:LspPhpactorStatus``: Show some useful information and statistics
-- ``:LspPhpactorConfig``: Show the config in a floating window
-
-If you want to profile Phpactor for debugging purposes:
-
-- ``:LspPhpactorBlackfireStart``: Start :ref:`developing_blackfire_profiling` (if enabled with :ref:`param_blackfire.enabled`)
-- ``:LspPhpactorBlackfireFinish``: Finish profiling and get the profiling URL
-
-.. code-block:: text
-
- -- requires plenary (which is required by telescope)
- local Float = require "plenary.window.float"
-
- vim.cmd([[
- augroup LspPhpactor
- autocmd!
- autocmd Filetype php command! -nargs=0 LspPhpactorReindex lua vim.lsp.buf_notify(0, "phpactor/indexer/reindex",{})
- autocmd Filetype php command! -nargs=0 LspPhpactorConfig lua LspPhpactorDumpConfig()
- autocmd Filetype php command! -nargs=0 LspPhpactorStatus lua LspPhpactorStatus()
- autocmd Filetype php command! -nargs=0 LspPhpactorBlackfireStart lua LspPhpactorBlackfireStart()
- autocmd Filetype php command! -nargs=0 LspPhpactorBlackfireFinish lua LspPhpactorBlackfireFinish()
- autocmd Filetype php command! -nargs=0 LspPhpactorIndexOptimise lua vim.lsp.buf_notify(0, "phpactor/indexer/optimise",{})
- augroup END
- ]])
-
- local function showWindow(title, syntax, contents)
- local out = {};
- for match in string.gmatch(contents, "[^\n]+") do
- table.insert(out, match);
- end
-
- local float = Float.percentage_range_window(0.6, 0.4, { winblend = 0 }, {
- title = title,
- topleft = "┌",
- topright = "┐",
- top = "─",
- left = "│",
- right = "│",
- botleft = "└",
- botright = "┘",
- bot = "─",
- })
-
- vim.api.nvim_buf_set_option(float.bufnr, "filetype", syntax)
- vim.api.nvim_buf_set_lines(float.bufnr, 0, -1, false, out)
- end
-
- function LspPhpactorDumpConfig()
- local results, _ = vim.lsp.buf_request_sync(0, "phpactor/debug/config", {["return"]=true})
- for _, res in pairs(results or {}) do
- pcall(showWindow, 'Phpactor LSP Configuration', 'json', res['result'])
- end
- end
- function LspPhpactorStatus()
- local results, _ = vim.lsp.buf_request_sync(0, "phpactor/status", {["return"]=true})
- for _, res in pairs(results or {}) do
- pcall(showWindow, 'Phpactor Status', 'markdown', res['result'])
- end
- end
-
- function LspPhpactorBlackfireStart()
- local _, _ = vim.lsp.buf_request_sync(0, "blackfire/start", {})
- end
- function LspPhpactorBlackfireFinish()
- local _, _ = vim.lsp.buf_request_sync(0, "blackfire/finish", {})
- end
diff --git a/doc/lsp/vim.rst b/doc/lsp/vim.rst
deleted file mode 100644
index 36fb825b37..0000000000
--- a/doc/lsp/vim.rst
+++ /dev/null
@@ -1,153 +0,0 @@
-VIM / NeoVim
-============
-
-.. _lsp_client_vim:
-
-Client Guides
--------------
-
-
-.. tabs::
-
- .. tab:: Neovim LSP
-
- Prerequisites:
- - Neovim 0.11.0 or higher.
- - The ``phpactor`` binary is :ref:`installed` and executable in your path
-
- For example: include it in your ``init.lua``:
-
- ::
-
- vim.lsp.enable('phpactor')
-
- Then in ``~/.config/nvim/`` (or another `&runtimepath` component) create ``lsp/phpactor.lua``, for example:
-
- ::
-
- return {
- cmd = { 'phpactor', 'language-server' },
- filetypes = { 'php' },
- root_markers = { '.git', 'composer.json', '.phpactor.json', '.phpactor.yml' },
- workspace_required = true,
- init_options = {
- ["language_server_phpstan.enabled"] = false,
- ["language_server_psalm.enabled"] = false,
- }
- }
-
-
- The ``init_options`` key maps directly to Phpactors :ref:`ref_configuration`.
-
- Please refer to the (``:help lsp``).
-
- See :doc:`vim-lsp` for useful snippets (e.g. reindex, show config, etc).
-
- .. tab:: CoC
-
-
- Install Phpactor with :ref:`installation_global` then install `CoC
- `_:
-
- ::
-
- Plug 'neoclide/coc.nvim', {'branch': 'release'}
-
- Once you have both installed there are two ways of integrating `phpactor` into `coc`:
-
- - **Installing the coc phpactor extension**:
-
- Restart VIM and type ``:CocInstall coc-phpactor``.
-
- If Phpactor is already installed you can set ``phpactor.path`` in
- ``:CocConfig`` to point to the Phpactor binary.
-
- At the root level:
-
- ::
-
- {
- "phpactor.enable": true,
- "phpactor.path": "/home/vivo/phpactor/bin/phpactor"
- }
-
- - **Without phpactor extension**:
-
- Restart VIM and type `:CocConfig`, you can set up phpactor as a language server for php files directly to `coc-settings.json`:
-
- ::
-
- "languageserver": {
- "phpactor": {
- "command": "phpactor",
- "args": ["language-server"],
- "trace.server": "verbose",
- "filetypes": ["php"]
- }
- }
-
- I am using the following CoC key bindings and configuration:
-
- ::
-
- " Select range based on AST
- nmap r (coc-range-select)
- xmap r (coc-range-select)
-
- " Navigations
- nmap o (coc-definition)
- nmap O (coc-type-definition)
- nmap I (coc-implementation)
- nmap R (coc-references)
-
- " List code actions available for the current buffer
- nmap ca (coc-codeaction)
-
- " Use to validate completion (allows auto import on completion)
- inoremap pumvisible() ? "\" : "\u\"
-
- " Hover
- nmap K :call show_documentation()
- function! s:show_documentation()
- if (index(['vim','help'], &filetype) >= 0)
- execute 'h '.expand('')
- else
- call CocAction('doHover')
- endif
- endfunction
-
- " Text objects for functions and classes (uses document symbol provider)
- xmap if (coc-funcobj-i)
- omap if (coc-funcobj-i)
- xmap af (coc-funcobj-a)
- omap af (coc-funcobj-a)
- xmap ic (coc-classobj-i)
- omap ic (coc-classobj-i)
- xmap ac (coc-classobj-a)
- omap ac (coc-classobj-a)
- autocmd CursorHold * silent call CocActionAsync('highlight')
-
- See `coc-phpactor `_ for more
- information.
-
-Troubleshooting
----------------
-
-Two dollars on variables
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-This can happen because of the ``iskeyword`` setting in VIM.
-
-You can try adding ``$`` to the list of keywords to solve the problem:
-
-::
-
- autocmd FileType php set iskeyword+=$
-
-or configure Phpactor to trim the ``$`` prefix in ``.phpactor.json``:
-
-::
-
- {
- "language_server_completion.trim_leading_dollar": true
- }
diff --git a/doc/lsp/vscode.rst b/doc/lsp/vscode.rst
deleted file mode 100644
index 40463ebbf1..0000000000
--- a/doc/lsp/vscode.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-.. _lsp_client_vscode:
-
-VS Code
-=======
-
-Phpactor provides the `phpactor-vscode `_ extension.
diff --git a/doc/lsp/zed.rst b/doc/lsp/zed.rst
deleted file mode 100644
index 0ca2f6785c..0000000000
--- a/doc/lsp/zed.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-.. _lsp_client_zed:
-
-Zed
-===
-
-Phpactor is the default LSP for Zed. Install Zed's `PHP extension `_.
diff --git a/doc/other.rst b/doc/other.rst
deleted file mode 100644
index cbf073e9d6..0000000000
--- a/doc/other.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Other Topics
-============
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- other/*
-
diff --git a/doc/other/links.rst b/doc/other/links.rst
deleted file mode 100644
index d5bdb1c68e..0000000000
--- a/doc/other/links.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-Links and Resources
-===================
-
-This page collects links to resources about, or featuring, Phpactor.
-
-General
--------
-
-- `Extending
- Phpactor `__
-- `3 years of
- Phpactor `__
-
-VIM Guides
-----------
-
-- `VIM as an alternative to
- PHPStorm `__
-- `VIM for PHP `__
-- `Neovim and PHP `__
-- `VimでPHPを書くならPhpactorを使うと便利そう(入力補完・ジャンプ・リファクタリング) `__
-- `Switchig from VIM to
- Neovim `__
diff --git a/doc/other/rpc.rst b/doc/other/rpc.rst
deleted file mode 100644
index c24ebf4b67..0000000000
--- a/doc/other/rpc.rst
+++ /dev/null
@@ -1,495 +0,0 @@
-.. _rpc_protocol:
-
-RPC Protocol
-============
-
-.. container:: alert alert-danger
-
- This document should largely be correct but is a work-in-progress
-
-Phpactor communicates with the editor over its own RPC protocol which
-effectively allows the editor to instruct Phpactor to do things, and in
-turn Phpactor can also instruct the editor to do things.
-
-.. figure:: https://user-images.githubusercontent.com/530801/30521464-39743352-9bc0-11e7-92ac-06b3228adf67.png
- :alt: rpc
-
- rpc
-
-Requests can be sent via. ``stdin`` to the Phpactor ``rpc`` command
-
-.. code::
-
- $ echo '{"action": "echo", "parameters": { "message": "Hello" }}' | ./bin/phpactor rpc
-
-Above we use the somewhat pointless ``echo`` action, which simply
-returns a response asking the editor to echo a message. The result is
-sent over ``stdout``:
-
-.. code:: javascript
-
- {"action":"echo","parameters":{"message":"Hello"}}
-
-Responses contain an action which will be executed in the editor.
-
-Some responses will include callbacks to Phpactor. This allows Phpactor
-to ask for more information as required.
-
-Work-in-progress
-----------------
-
-This Protocol is a work-in-progress.
-
-TODO:
-
-- Parameters should not refer to file paths in class contexts: Although
- classes map 1-1 to files now, this may not always be the case and
- Phpactor can figure out a file-path from a class-name and vice-versa
- (so ``class`` instead of ``class_path``).
-
-Editor Actions
---------------
-
-``return``
-~~~~~~~~~~
-
-Return a value. This action should return the value immediately to the
-caller without further dispatches.
-
-- **Name**: ``return``
-- **Parameters**:
-
- - **Value**: Value to return.
-
-``return_choice``
-~~~~~~~~~~~~~~~~~
-
-The editor should render a dialog asking the user to select a choice:
-
-::
-
- 1) Do this
- 2) Do that
-
-It should then ``return`` the chosen value.
-
-- **Name**: ``return_choice``
-- **Parameters**:
-
- - ``choices``: Key to value list of choices, the key is the label
- for the choice, the value is the value to return.
-
-``echo``
-~~~~~~~~
-
-The editor should echo (or otherwise visibly display) a message.
-
-- **Name**: ``echo``
-- **Parameters**:
-
- - ``message``: Message to display.
-
-``error``
-~~~~~~~~~
-
-The editor should show an error.
-
-- **Name**: ``error``
-- **Parameters**:
-
- - ``message``: Error message to display.
-
-``collection``
-~~~~~~~~~~~~~~
-
-Collection of actions to be executed sequentially until there are no
-more or until a ``return`` is encountered.
-
-- **Name**: ``collection``
-- **Parameters**:
-
- - ``actions``: Array of actions to dispatch.
-
-``open_file``
-~~~~~~~~~~~~~
-
-Open a file in the editor.
-
-- **Name**: ``open_file``
-- **Parameters**:
-
- - ``path``: Path to file which should be opened.
- - ``offset``: Goto this offset after opening the file.
-
-``close_file``
-~~~~~~~~~~~~~~
-
-Close a file.
-
-- **Name**: ``close_file``
-- **Parameters**:
-
- - ``path``: Path to file which should be closed.
-
-``file_references``
-~~~~~~~~~~~~~~~~~~~
-
-List of files and references. The editor should populate a navigable
-list of the files and the references (in VIM this is a quick-fix list).
-
-- **Name**: ``file_references``
-- **Parameters**:
-
- - ``references``: Array containing file paths nested with
- references:
-
-Example of ``references`` parameter:
-
-.. code:: javascript
-
- {
- "file_references": [
- {
- "file": "/path/to/File.php",
- "references": [
- {
- "line_no": 1234,
- "col": 12
- },
- {
- "line_no": 1234,
- "col": 12
- }
- ]
- }
- ]
- }
-
-``input_callback``
-~~~~~~~~~~~~~~~~~~
-
-This action will provide a callback to Phpactor and inputs which the
-end-user will need to complete to populate the parameters of the
-callback.
-
-- **Name**: ``input_callback``
-- **Parameters**:
-
- - ``callback``:
-
- - ``action``: Callback command name for Phpactor.
- - ``parameters``: Array of parameters to pass.
-
- - ``inputs``: Array of inputs
-
-Example:
-
-.. code:: javascript
-
- {
- "callback": {
- "action": "hello",
- "parameters": {
- "greeting": "Hello",
- "first_name": "value1"
- }
- }
- "inputs": [
- {
- "name": "first_name",
- "type": "text",
- "parameters": {
- "default": "",
- }
- }
- ]
- }
-
-See the VIM plugin for the supported inputs.
-
-``information``
-~~~~~~~~~~~~~~~
-
-Show information in a persistent and unobtrusive way (in VIM as a
-preview window).
-
-- **Name**: ``information``
-- **Parameters**:
-
- - ``information``: Information to show (text)
-
-``replace_file_source``
-~~~~~~~~~~~~~~~~~~~~~~~
-
-Replace the source code in the current file.
-
-- **Name**: ``replace_file_source``
-- **Parameters**:
-
- - ``source``: Source code.
-
-Phpactor Commands
------------------
-
-In the following references all parameters are assumed to be required
-unless otherwise stated. *optional* parameters are optional, *eventually
-required* means the parameter is optional, but if not given Phpactor
-will ask for it (via. a callback).
-
-Note that after implementing a dispatcher for standard editor actions
-above it is not necessary to know the result of these commands, they
-will be handled by your editor.
-
-``complete``
-~~~~~~~~~~~~
-
-The complete RPC command returns a list of completions:
-
-.. code::
-
- $ echo '{"actions": [ {"action": "complete", "parameters": { "source": "", "offset": 37} }] }' | ./bin/phpactor rpc
-
-Example response:
-
-::
-
- {
- "actions": [
- {
- "action": "return",
- "parameters": {
- "value": [
- {
- "info": "pri __clone(): void",
- "name": "__clone",
- "type": "f"
- },
- {
- "info": "pub getMessage(): string",
- "name": "getMessage",
- "type": "f"
- },
- {
- "info": "pub getCode()",
- "name": "getCode",
- "type": "f"
- },
- ]
- }
- }
- ]
- }
-
-``class_search``
-~~~~~~~~~~~~~~~~
-
-Searches for a class with a given class name. No need for the fully qualified class name.
-
-- **Name**: ``class_search``
-- **Parameters**:
-
- - ``short_name``: Name of the class that you want to find
-
-.. code::
-
- $ echo '{"actions": [ {"action": "class_search", "parameters": { "short_name": "InputInterface" } }] }' | ./bin/phpactor rpc
-
-``goto_definition``
-~~~~~~~~~~~~~~~~~~~
-
-Open file and goto offset of symbol at the given offset in the given
-source code:
-
-- **Name**: ``goto_definition``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
-
-.. code::
-
- $ echo '{"actions": [ {"action": "goto_definition", "parameters": { "source": "getMessage()", "offset": 37} }] }' | ./bin/phpactor rpc
-
-Will return an action to open the file containing the definition and
-goto the offset.
-
-``copy_class``
-~~~~~~~~~~~~~~
-
-Copy a class to a new location and update its name accordingly:
-
-- **Name**: ``copy_class``
-- **Parameters**:
-
- - ``source_path``: File containing class to copy..
- - ``dest_path``: (eventually required) Destination path
-
-.. code::
-
- $ echo '{"actions": [ {"action": "copy_class", "parameters": { "source_path": "/path/to/class.php" } } ] }| ./bin/phpactor rpc
-
-Will return an action to open the new file.
-
-``move_class``
-~~~~~~~~~~~~~~
-
-Move a class and update all references to it in the project.
-
-- **Name**: ``move_class``
-- **Parameters**:
-
- - ``source_path``: File containing class to move.
- - ``dest_path``: (eventually required) File to move class to.
-
-Will eventually return an action to open the new file, and a command to
-forget about the old one.
-
-``offset_info``
-~~~~~~~~~~~~~~~
-
-Return debug information about the symbol and the state of the frame at
-the given offset.
-
-- **Name**: ``offset_info``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
-
-Returns an (information) action to show a pretty-printed JSON string
-containing the debug information.
-
-``transform``
-~~~~~~~~~~~~~
-
-Perform a transformation on the class in the given file.
-
-- **Name**: ``transform``
-- **Parameters**:
-
- - ``source``: Source
- - ``path``: Path for file containing class to transform (required
- only in order to reload the file in the editor later).
- - ``transform``: (eventually required) Name of transformation to
- make.
-
-If no transformation Phpactor will offer a choice of available
-transformations, then make the transformation and ask the editor to
-reload the file.
-
-``class_new``
-~~~~~~~~~~~~~
-
-Generate a new class.
-
-- **Name**: ``class_new``
-- **Parameters**:
-
- - ``current_path``: Path to current file (used as default for new
- path)
- - ``new_path``: (eventually required) Path to new class.
- - ``variant``: (eventually required) Variant to create.
- - ``overwrite``: (conditionally eventually required) If file already
- exists then this should be true in order that it is overwritten.
-
-Will return an action to open the new file.
-
-``class_inflect``
-~~~~~~~~~~~~~~~~~
-
-Generate a new class based on the current (given) class.
-
-- **Name**: ``class_new``
-- **Parameters**:
-
- - ``current_path``: Path to current file (used as default for new
- path)
- - ``new_path``: (eventually required) Path to new class.
- - ``variant``: (eventually required) Variant to create.
- - ``overwrite``: (conditionally eventually required) If file already
- exists then this should be true in order that it is overwritten.
-
-Will return an action to open the new file.
-
-``references``
-~~~~~~~~~~~~~~
-
-Find references to the symbol under the cursor.
-
-- **Name**: ``references``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
-
-Will return a file-list action, containing a list of all the files in
-which references can be found (and the position of all the references).
-
-``extract_constant``
-~~~~~~~~~~~~~~~~~~~~
-
-Extract a constant from the value at the given offset and replace all
-identical values with a reference to the constant.
-
-- **Name**: ``extract_constant``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
- - ``constant_name``: Name for constant.
- - ``constant_suggestion_name``: (optional) Use this as a suggestion
- when interactive.
-
-Will return an action to replace the file with the updated code.
-
-``generate_method``
-~~~~~~~~~~~~~~~~~~~
-
-Generate (or update) a method from the **method call** at the given
-offset in the given source.
-
-- **Name**: ``generate_method``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``path``: Path to source
- - ``offset``: Offset of symbol (int)
-
-Will return an action to replace the file with the updated code.
-
-``generate_accessor``
-~~~~~~~~~~~~~~~~~~~~~
-
-Generate (or update) an accessor for the property under the cursor.
-
-- **Name**: ``generate_accessor``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
-
-Will return an action to replace the file with the updated code.
-
-``context_menu``
-~~~~~~~~~~~~~~~~
-
-Return a menu for selecting an action to perform on the current symbol
-
-- **Name**: ``context_menu``
-- **Parameters**:
-
- - ``source``: Source code as a string
- - ``offset``: Offset of symbol (int)
-
-``navigate``
-~~~~~~~~~~~~
-
-Navigate to related source files.
-
-- **Name**: ``navigate``
-- **Parameters**:
-
- - ``source_path``: Source code as a string
- - ``destination``: (eventually required) Destination path
- - ``confirm_create``: (conditionally eventually required) Confirm
- file creation
diff --git a/doc/other/support.rst b/doc/other/support.rst
deleted file mode 100644
index 897f2a28ce..0000000000
--- a/doc/other/support.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Support
-=======
-
-Need help? Create a Github issue or ping the Phpactor Mastodon account:
-
-- `Github Issues `__
-- `Mastodon [@phpactor] `__
diff --git a/doc/phpactor.txt b/doc/phpactor.txt
deleted file mode 100644
index 661ccbd3f0..0000000000
--- a/doc/phpactor.txt
+++ /dev/null
@@ -1,280 +0,0 @@
-*phpactor.txt*
- *phpactor*
-
-==============================================================================
-CONTENTS *phpactor-contents*
- 1. Introduction.............................................|phpactor-intro|
- 2. Configuration...........................................|phpactor-config|
- 3. Completion..........................................|phpactor-completion|
- 4. Commands..............................................|phpactor-commands|
- 1. Window targets..............................|phpactor-window-targets|
- 5. Mappings..............................................|phpactor-mappings|
-
-==============================================================================
-INTRODUCTION *phpactor-intro*
-
-
-Phpactor is a auto-completion, refactoring and code-navigation tool for PHP.
-This is the help file for the VIM client. For more information see the
-official website: https://phpactor.github.io/phpactor/
-
-NOTE: This help is auto-generated from the VimScript using
-https://github.com/google/vimdoc. See
-https://phpactor.github.io/phpactor/developing.html#vim-help
-
-==============================================================================
-CONFIGURATION *phpactor-config*
-
- *g:phpactorPhpBin*
-Path to the PHP binary used by Phpactor
-
- *g:phpactorBranch*
-The Phpactor branch to use when calling |:PhpactorUpdate|
-
- *g:phpactorOmniAutoClassImport*
-Automatically import classes when using VIM native omni-completion
-
- *g:phpactorCompletionIgnoreCase*
-Ignore case when suggestion completion results
-
- *g:phpactorQuickfixStrategy*
-Function to use when populating a list of code references. The default is to
-use the VIM quick-fix list.
-
- *g:phpactorInputListStrategy*
-Function to use when presenting a user with a choice of options. The default
-is to use the VIM inputlist.
-
- *g:phpactorUseOpenWindows*
-When jumping to a file location: if the target file open in a window, switch
-to that window instead of switching buffers. The default is false.
-
- *g:PhpactorRootDirectoryStrategy*
-Each Phpactor request requires the project's root directory to be known. By
-default it will assume the directory in which you started VIM, but this may
-not suit all workflows.
-
-This setting allows |Funcref| to be specified. This function should return the
-working directory in whichever way is required. No arguments are passed to
-this function.
-
-==============================================================================
-COMPLETION *phpactor-completion*
-
-
-You will need to explicitly configure Phpactor to provide completion
-capabilities.
-
-OMNI-COMPLETION
-
-Use VIMs native omni-completion (|compl-omni|)
-
-Enable omni-completion for PHP files:
->
-
- autocmd FileType php setlocal omnifunc=phpactor#Complete
-
-<
-For case sensitive searching see |g:phpactorCompletionIgnoreCase|
-
-NCM2
-
-Nvim Completion Manager is a completion manager for Neovim.
-
-Install the integration plugin to get started:
-https://github.com/phpactor/ncm2-phpactor
-
-DEOPLETE
-
-Deoplete is another completion plugin.
-
-Install the Deoplete Phpactor integration to get started:
-https://github.com/kristijanhusak/deoplete-phpactor
-
-==============================================================================
-COMMANDS *phpactor-commands*
-
-:[range][N]PhpactorExtractMethod *:PhpactorExtractMethod*
- Extract a new method from the current selection
-
-:[range][N]PhpactorExtractExpression *:PhpactorExtractExpression*
- Extract the selected expression and assign it to a variable before (placing
- it before the current statement)
-
-:[N]PhpactorExtractConstant *:PhpactorExtractConstant*
- Extract a constant from a literal
-
-:[N]PhpactorImportClass *:PhpactorImportClass*
- Import the name under the cursor. If multiple options are available, you are
- able to choose one.
-
-:[N]PhpactorImportMissingClasses *:PhpactorImportMissingClasses*
- Attempt to import all non-resolvable classes in the current class (based on
- offset position)
-
-:[N]PhpactorHover *:PhpactorHover*
- Show information about the symbol under the cursor.
-
-:[N]PhpactorContextMenu *:PhpactorContextMenu*
- Show the context menu for the current cursor position.
-
-:[N]PhpactorCopyFile *:PhpactorCopyFile*
- Copy the current file - updating the namespace and class name according to
- the new file location and name
-
-:[N]PhpactorCopyClassName *:PhpactorCopyClassName*
- Copy the current class FQN (based on current filename) to the clipboard
-
-:[N]PhpactorMoveFile *:PhpactorMoveFile*
- Move the current file - updating the namespace and class name according to
- the new file location and name
-
-:[N]PhpactorClassInflect *:PhpactorClassInflect*
- Inflect a new class from the current class (e.g. generate an interface for
- the current class)
-
-:[N]PhpactorFindReferences *:PhpactorFindReferences*
- Attempt to find all references to the class name or method under the cursor.
- The results will be loaded into the quik-fix list
-
-:[N]PhpactorNavigate *:PhpactorNavigate*
- Navigate - jump to the parent class, interface, or any of the relationships
- defined in `navigation.destinations`
- https://phpactor.github.io/phpactor/configuration.html#reference
-
-:[N]PhpactorChangeVisibility *:PhpactorChangeVisibility*
- Rotate the visiblity of the method under the cursor
-
-:[N]PhpactorGenerateAccessors *:PhpactorGenerateAccessors*
- Generate accessors for the current class
-
-:[N]PhpactorGenerateMutators *:PhpactorGenerateMutators*
- Generate mutators for the current class
-
-:[N]PhpactorTransform *:PhpactorTransform*
- Automatically add any missing properties to a class
-
-:[N]PhpactorTrust *:PhpactorTrust*
- Trust configuration in the current working directory
-
-:PhpactorUpdate *:PhpactorUpdate*
- Update Phpactor to the latest version using the branch defined with
- |g:phpactorBranch|
-
-:PhpactorCacheClear *:PhpactorCacheClear*
- Clear the entire cache - this will take effect for all projects.
-
-:PhpactorStatus *:PhpactorStatus*
- Show some information about Phpactor's status
-
-:PhpactorConfig *:PhpactorConfig*
- Dump Phpactor's configuration
-
-:PhpactorClassExpand *:PhpactorClassExpand*
- Expand the class name under the cursor to it's fully-qualified-name
-
-:PhpactorClassNew *:PhpactorClassNew*
- Create a new class. You will be offered a choice of templates.
-
-:PhpactorGotoDefinition [target] *:PhpactorGotoDefinition*
- [target] is `edit` if omitted.
-
- Goto the definition of the symbol under the cursor. Opens in the [target]
- window, see |phpactor-window-target| for the list of possible targets.
- || can be provided to the command to change how the window will be
- opened.
-
- Examples:
->
- " Opens in the current buffer
- PhpactorGotoDefinition
-
- " Opens in a vertical split opened on the right side
- botright PhpactorGotoDefinition vsplit
- vertical botright PhpactorGotoDefinition split
-
- " Opens in a new tab
- PhpactorGotoDefinition tabnew
-<
-
-:PhpactorGotoDefinitionVsplit *:PhpactorGotoDefinitionVsplit*
- deprecated, use |:PhpactorGotoDefinition| instead
-
- As with |:PhpactorGotoDefinition| but open in a vertical split.
-
-:PhpactorGotoDefinitionHsplit *:PhpactorGotoDefinitionHsplit*
- deprecated, use |:PhpactorGotoDefinition| instead
-
- As with |:PhpactorGotoDefinition| but open in an horizontal split.
-
-:PhpactorGotoDefinitionTab *:PhpactorGotoDefinitionTab*
- deprecated, use |:PhpactorGotoDefinition| instead
-
- As with |:PhpactorGotoDefinition| but open in a new tab.
-
-:PhpactorGotoType [target] *:PhpactorGotoType*
-
- Same as |:PhpactorGotoDefinition| but goto the type of the symbol under the
- cursor.
-
-:PhpactorGotoImplementations [target] *:PhpactorGotoImplementations*
-
- Same as |:PhpactorGotoDefinition| but goto the implementation of the symbol
- under the cursor.
-
- If there is more than one result the quickfix strategy will be used and
- [target] will be ignored, see |g:phpactorQuickfixStrategy|.
-
-==============================================================================
-WINDOW TARGETS *phpactor-window-targets*
-
-
-Phpactor provide a few window targets to use with some commands. See
-|:PhpactorGotoDefinition| for an example of how to use them.
-
-Possible values are:
- * `e`, `edit`, `ex`
- * `new`, `vne`, `vnew`
- * `sp`, `split`, `vs`, `vsplit`
- * `vie`, `view`, `sv`, `sview`, `splitview`
- * `tabe`, `tabedit`, `tabnew`
-
-==============================================================================
-MAPPINGS *phpactor-mappings*
-
-
-Phpactor does not assume any mappings automatically, the following mappings
-are available for you to copy:
->
-
- augroup PhpactorMappings
- au!
- au FileType php nmap u :PhpactorImportClass
- au FileType php nmap e :PhpactorClassExpand
- au FileType php nmap ua :PhpactorImportMissingClasses
- au FileType php nmap mm :PhpactorContextMenu
- au FileType php nmap nn :PhpactorNavigate
- au FileType php,cucumber nmap o
- \ :PhpactorGotoDefinition edit
- au FileType php nmap K :PhpactorHover
- au FileType php nmap tt :PhpactorTransform
- au FileType php nmap cc :PhpactorClassNew
- au FileType php nmap ci :PhpactorClassInflect
- au FileType php nmap fr :PhpactorFindReferences
- au FileType php nmap mf :PhpactorMoveFile
- au FileType php nmap cf :PhpactorCopyFile
- au FileType php nmap ee
- \ :PhpactorExtractExpression
- au FileType php vmap ee
- \ :PhpactorExtractExpression
- au FileType php vmap em
- \ :PhpactorExtractMethod
- augroup END
-<
-
-Note: the cucumber mappings are for the Behat extension:
-
- https://github.com/phpactor/behat-extension
-
-
-vim:tw=78:ts=8:ft=help:norl:
diff --git a/doc/reference.rst b/doc/reference.rst
deleted file mode 100644
index 2d74f87375..0000000000
--- a/doc/reference.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Reference
-=========
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- reference/*
- language-server
diff --git a/doc/reference/completion.rst b/doc/reference/completion.rst
deleted file mode 100644
index 3f49982186..0000000000
--- a/doc/reference/completion.rst
+++ /dev/null
@@ -1,328 +0,0 @@
-.. _completion:
-
-Completion
-==========
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-Completors
-----------
-
-.. note::
-
- Completors can be enabled or disabled in configuration f.e. :ref:`param_completion_worse.completor.worse_parameter.enabled` configuration.
-
-``worse_parameter``
-~~~~~~~~~~~~~~~~~~~
-
-Provides suggestions for arguments.
-
-If there are suitable variables in the current scope they will be given
-priority if they match the type of the method parameter.
-
-.. code:: php
-
- `` ``$foobar`` will be suggested with a higher
-priority than ``$barfoo`` and the parameter index will be shown in the
-completion description.
-
-``worse_constructor``
-~~~~~~~~~~~~~~~~~~~~~
-
-As with ``worse_parameter`` but for constructor arguments.
-
-``worse_class_member``
-~~~~~~~~~~~~~~~~~~~~~~
-
-Provides class member (methods, properties and constants) suggestions.
-Triggered on ``::`` and ``->``.
-
-``indexed_name``
-~~~~~~~~~~~~~~~~
-
-Provides class and function name completion from the :ref:`indexer`.
-
-``scf_class``
-~~~~~~~~~~~~~
-
-This completor will provide class names by *scanning the vendor directory* and
-transposing the file names into class names.
-
-This completor is disabled by default when using the :ref:`language_server`.
-
-``worse_local_variable``
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Provide completion for local variables in a scope. Triggered on ``$``.
-
-``declared_function``
-~~~~~~~~~~~~~~~~~~~~~
-
-Provide function name completion based on functions defined at _runtime_ in the
-Phpactor process.
-
-Note that any functions which are not loaded when _Phpactor_
-loads will not be available. So this is mainly useful for built-in functions.
-
-This completor is disabled by default when using the :ref:`language_server`.
-
-``declared_constant``
-~~~~~~~~~~~~~~~~~~~~~~
-
-Provide constant name completion based on constants defined at _runtime_ in the
-Phpactor process.
-
-This is mainly useful for built-in constants (e.g. ``JSON_PRETTY_PRINT`` or
-``PHP_INT_MAX``).
-
-``worse_class_alias``
-~~~~~~~~~~~~~~~~~~~~~~
-
-Provide suggestions for any classes imported into the current class with
-aliases.
-
-
-``declared_class``
-~~~~~~~~~~~~~~~~~~
-
-Provide completion for class names from class names defined in the Phpactor
-process.
-
-This is mainly useful when used with the ``scf_class`` completor to provide
-built-in classes.
-
-This completor is disabled by default when using the :ref:`language_server`.
-
-Type inference
---------------
-
-Assert
-~~~~~~
-
-When encountering an ``assert`` with ``instanceof`` it will cast the
-variable to that type, or a union of that type. See also
-`#instanceof <#instanceof>`__.
-
-.. code:: php
-
- // type: Hello|Goodbye
-
-Assignments
-~~~~~~~~~~~
-
-Phpactor will track assignemnts:
-
-.. code:: php
-
- // type: MyException
- }
-
-Docblocks
-~~~~~~~~~
-
-Docblocks are supported for method parameters, return types, class properties
-and inline declartaions
-
-.. code:: php
-
-
- */
- private $iterableOfMyThing;
-
-
-Foreach
-~~~~~~~
-
-Understands ``foreach`` with the docblock array annotation:
-
-.. code:: php
-
- // type:Hello
- }
-
-Also understands simple generics:
-
-.. code:: php
-
- $foos */
- $foos = new ArrayIterator([ new Hello() ]);
-
- foreach ($foos as $foo) {
- $foo-> // type:Hello
- }
-
-FunctionLike
-~~~~~~~~~~~~
-
-Understands anonymous functions:
-
-.. code:: php
-
- // type: Foobar
- $barfoo-> // type: Barfoo
- }
-
-InstanceOf
-~~~~~~~~~~
-
-``if`` statements are evaluated, if they contain ``instanceof`` then the
-type is inferred:
-
-.. code:: php
-
- // type: Hello
- }
-
-.. code:: php
-
- // type: Hello
-
-.. code:: php
-
- // type: Hello|Goodbye
- }
-
-Variables
-~~~~~~~~~
-
-Phpactor supports type injection via docblock:
-
-.. code:: php
-
- // type: Foobar
-
-and inference from parameters:
-
-.. code:: php
-
-
- */
- interface ReflectionCollection extends \IteratorAggregate, \Countable
- {
- }
-
- /**
- * @template T of ReflectionMember
- * @extends ReflectionCollection
- */
- interface ReflectionMemberCollection extends ReflectionCollection
- {
- /**
- * @return ReflectionMemberCollection
- */
- public function byName(string $name): ReflectionMemberCollection;
-
- /**
- * @return ReflectionMemberCollection
- */
- public function byMemberType(string $type): ReflectionMemberCollection;
- }
-
- interface ReflectionClassLike
- {
- public function members(): ReflectionMemberCollection;
- }
-
-
- /** @var ReflectionClassLike $reflection */
- $reflection;
- foreach ($reflection->members()->byMemberType('fii')->byName('__construct') as $constructor) {
- $reflection-><>
- }
diff --git a/doc/reference/configuration.rst b/doc/reference/configuration.rst
deleted file mode 100644
index d41a2f243d..0000000000
--- a/doc/reference/configuration.rst
+++ /dev/null
@@ -1,2680 +0,0 @@
-.. _ref_configuration:
-
-Configuration
-=============
-
-
-.. This document is generated via the `development:generate-documentation` command
-
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-
-.. _CoreExtension:
-
-
-CoreExtension
--------------
-
-
-.. _param_console_dumper_default:
-
-
-``console_dumper_default``
-""""""""""""""""""""""""""
-
-
-Name of the "dumper" (renderer) to use for some CLI commands
-
-
-**Default**: ``"indented"``
-
-
-.. _param_xdebug_disable:
-
-
-``xdebug_disable``
-""""""""""""""""""
-
-
-If XDebug should be automatically disabled
-
-
-**Default**: ``true``
-
-
-.. _param_command:
-
-
-``command``
-"""""""""""
-
-
-Internal use only - name of the command which was executed
-
-
-**Default**: ``null``
-
-
-.. _param_core.min_memory_limit:
-
-
-``core.min_memory_limit``
-"""""""""""""""""""""""""
-
-
-Ensure that PHP has a memory_limit of at least this amount in bytes
-
-
-**Default**: ``1610612736``
-
-
-.. _param_$schema:
-
-
-``$schema``
-"""""""""""
-
-
-Path to JSON schema, which can be used for config autocompletion, use phpactor config:initialize to update
-
-
-**Default**: ``""``
-
-
-.. _param_core.project_config_candidates:
-
-
-``core.project_config_candidates``
-""""""""""""""""""""""""""""""""""
-
-
-(internal) list of potential project-level configuration files
-
-
-**Default**: ``[]``
-
-
-.. _param_core.trust:
-
-
-``core.trust``
-""""""""""""""
-
-
-(internal) map of trusted project directories
-
-
-**Default**: ``{"trust":[],"path":null}``
-
-
-.. _param_core.trusted:
-
-
-``core.trusted``
-""""""""""""""""
-
-
-(internal) if the configuration is trusted
-
-
-**Default**: ``false``
-
-
-.. _ClassToFileExtension:
-
-
-ClassToFileExtension
---------------------
-
-
-.. _param_class_to_file.project_root:
-
-
-``class_to_file.project_root``
-""""""""""""""""""""""""""""""
-
-
-Root path of the project (e.g. where composer.json is)
-
-
-**Default**: ``"%project_root%"``
-
-
-.. _param_class_to_file.brute_force_conversion:
-
-
-``class_to_file.brute_force_conversion``
-""""""""""""""""""""""""""""""""""""""""
-
-
-If composer not found, fallback to scanning all files (very time consuming depending on project size)
-
-
-**Default**: ``true``
-
-
-.. _CodeTransformExtension:
-
-
-CodeTransformExtension
-----------------------
-
-
-.. _param_code_transform.class_new.variants:
-
-
-``code_transform.class_new.variants``
-"""""""""""""""""""""""""""""""""""""
-
-
-Variants which should be suggested when class-create is invoked
-
-
-**Default**: ``[]``
-
-
-.. _param_code_transform.template_paths:
-
-
-``code_transform.template_paths``
-"""""""""""""""""""""""""""""""""
-
-
-Paths in which to look for code templates
-
-
-**Default**: ``["%project_config%\/templates","%config%\/templates"]``
-
-
-.. _param_code_transform.indentation:
-
-
-``code_transform.indentation``
-""""""""""""""""""""""""""""""
-
-
-Indentation chars to use in code generation and transformation
-
-
-**Default**: ``" "``
-
-
-.. _param_code_transform.refactor.generate_accessor.prefix:
-
-
-``code_transform.refactor.generate_accessor.prefix``
-""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Prefix to use for generated accessors
-
-
-**Default**: ``""``
-
-
-.. _param_code_transform.refactor.generate_accessor.upper_case_first:
-
-
-``code_transform.refactor.generate_accessor.upper_case_first``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-If the first letter of a generated accessor should be made uppercase
-
-
-**Default**: ``false``
-
-
-.. _param_code_transform.refactor.generate_mutator.prefix:
-
-
-``code_transform.refactor.generate_mutator.prefix``
-"""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Prefix to use for generated mutators
-
-
-**Default**: ``"set"``
-
-
-.. _param_code_transform.refactor.generate_mutator.upper_case_first:
-
-
-``code_transform.refactor.generate_mutator.upper_case_first``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-If the first letter of a generated mutator should be made uppercase
-
-
-**Default**: ``true``
-
-
-.. _param_code_transform.refactor.generate_mutator.fluent:
-
-
-``code_transform.refactor.generate_mutator.fluent``
-"""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-If the mutator should be fluent
-
-
-**Default**: ``false``
-
-
-.. _param_code_transform.import_globals:
-
-
-``code_transform.import_globals``
-"""""""""""""""""""""""""""""""""
-
-
-Import functions even if they are in the global namespace
-
-
-**Default**: ``false``
-
-
-.. _param_code_transform.refactor.object_fill.hint:
-
-
-``code_transform.refactor.object_fill.hint``
-""""""""""""""""""""""""""""""""""""""""""""
-
-
-Object fill refactoring: show hint as a comment
-
-
-**Default**: ``true``
-
-
-.. _param_code_transform.refactor.object_fill.named_parameters:
-
-
-``code_transform.refactor.object_fill.named_parameters``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Object fill refactoring: use named parameters
-
-
-**Default**: ``true``
-
-
-.. _CompletionWorseExtension:
-
-
-CompletionWorseExtension
-------------------------
-
-
-.. _param_completion_worse.completor.doctrine_annotation.enabled:
-
-
-``completion_worse.completor.doctrine_annotation.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``doctrine_annotation`` completor.
-
-Completion for annotations provided by the Doctrine annotation library.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.imported_names.enabled:
-
-
-``completion_worse.completor.imported_names.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``imported_names`` completor.
-
-Completion for names imported into the current namespace.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.worse_parameter.enabled:
-
-
-``completion_worse.completor.worse_parameter.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``worse_parameter`` completor.
-
-Completion for method or function parameters.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.named_parameter.enabled:
-
-
-``completion_worse.completor.named_parameter.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``named_parameter`` completor.
-
-Completion for named parameters.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.constructor.enabled:
-
-
-``completion_worse.completor.constructor.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``constructor`` completor.
-
-Completion for constructors.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.class_member.enabled:
-
-
-``completion_worse.completor.class_member.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``class_member`` completor.
-
-Completion for class members.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.scf_class.enabled:
-
-
-``completion_worse.completor.scf_class.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``scf_class`` completor.
-
-Brute force completion for class names (not recommended).
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.local_variable.enabled:
-
-
-``completion_worse.completor.local_variable.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``local_variable`` completor.
-
-Completion for local variables.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.subscript.enabled:
-
-
-``completion_worse.completor.subscript.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``subscript`` completor.
-
-Completion for subscript (array access from array shapes).
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.declared_function.enabled:
-
-
-``completion_worse.completor.declared_function.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``declared_function`` completor.
-
-Completion for functions defined in the Phpactor runtime.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.declared_constant.enabled:
-
-
-``completion_worse.completor.declared_constant.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``declared_constant`` completor.
-
-Completion for constants defined in the Phpactor runtime.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.declared_class.enabled:
-
-
-``completion_worse.completor.declared_class.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``declared_class`` completor.
-
-Completion for classes defined in the Phpactor runtime.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.expression_name_search.enabled:
-
-
-``completion_worse.completor.expression_name_search.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``expression_name_search`` completor.
-
-Completion for class names, constants and functions at expression positions that are located in the index.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.use.enabled:
-
-
-``completion_worse.completor.use.enabled``
-""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``use`` completor.
-
-Completion for use imports.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.attribute.enabled:
-
-
-``completion_worse.completor.attribute.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``attribute`` completor.
-
-Completion for attribute class names.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.class_like.enabled:
-
-
-``completion_worse.completor.class_like.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``class_like`` completor.
-
-Completion for class like contexts.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.type.enabled:
-
-
-``completion_worse.completor.type.enabled``
-"""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``type`` completor.
-
-Completion for scalar types.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.keyword.enabled:
-
-
-``completion_worse.completor.keyword.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``keyword`` completor.
-
-Completion for keywords (not very accurate).
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.docblock.enabled:
-
-
-``completion_worse.completor.docblock.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the ``docblock`` completor.
-
-Docblock completion.
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.completor.constant.enabled:
-
-
-``completion_worse.completor.constant.enabled``
-"""""""""""""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``false``
-
-
-.. _param_completion_worse.completor.class.limit:
-
-
-``completion_worse.completor.class.limit``
-""""""""""""""""""""""""""""""""""""""""""
-
-
-Suggestion limit for the filesystem based SCF class_completor
-
-
-**Default**: ``100``
-
-
-.. _param_completion_worse.name_completion_priority:
-
-
-``completion_worse.name_completion_priority``
-"""""""""""""""""""""""""""""""""""""""""""""
-
-
-Strategy to use when ordering completion results for classes and functions:
-
-- `proximity`: Classes and functions will be ordered by their proximity to the text document being edited.
-- `none`: No ordering will be applied.
-
-
-**Default**: ``"proximity"``
-
-
-.. _param_completion_worse.snippets:
-
-
-``completion_worse.snippets``
-"""""""""""""""""""""""""""""
-
-
-Enable or disable completion snippets
-
-
-**Default**: ``true``
-
-
-.. _param_completion_worse.experimantal:
-
-
-``completion_worse.experimantal``
-"""""""""""""""""""""""""""""""""
-
-
-Enable experimental functionality
-
-
-**Default**: ``false``
-
-
-.. _param_completion_worse.debug:
-
-
-``completion_worse.debug``
-""""""""""""""""""""""""""
-
-
-Include debug info in completion results
-
-
-**Default**: ``false``
-
-
-.. _CompletionExtension:
-
-
-CompletionExtension
--------------------
-
-
-.. _param_completion.dedupe:
-
-
-``completion.dedupe``
-"""""""""""""""""""""
-
-
-If results should be de-duplicated
-
-
-**Default**: ``true``
-
-
-.. _param_completion.dedupe_match_fqn:
-
-
-``completion.dedupe_match_fqn``
-"""""""""""""""""""""""""""""""
-
-
-If ``completion.dedupe``, consider the class FQN in addition to the completion suggestion
-
-
-**Default**: ``true``
-
-
-.. _param_completion.limit:
-
-
-``completion.limit``
-""""""""""""""""""""
-
-
-Sets a limit on the number of completion suggestions for any request
-
-
-**Default**: ``null``
-
-
-.. _param_completion.label_formatter:
-
-
-``completion.label_formatter``
-""""""""""""""""""""""""""""""
-
-
-Definition of how to format entries in the completion list
-
-
-**Default**: ``"helpful"``
-
-
-**Allowed values**: "helpful", "fqn"
-
-
-.. _NavigationExtension:
-
-
-NavigationExtension
--------------------
-
-
-.. _param_navigator.destinations:
-
-
-``navigator.destinations``
-""""""""""""""""""""""""""
-
-
-**Default**: ``[]``
-
-
-.. _param_navigator.autocreate:
-
-
-``navigator.autocreate``
-""""""""""""""""""""""""
-
-
-**Default**: ``[]``
-
-
-.. _RpcExtension:
-
-
-RpcExtension
-------------
-
-
-.. _param_rpc.store_replay:
-
-
-``rpc.store_replay``
-""""""""""""""""""""
-
-
-Should replays be stored?
-
-
-**Default**: ``false``
-
-
-.. _param_rpc.replay_path:
-
-
-``rpc.replay_path``
-"""""""""""""""""""
-
-
-Path where the replays should be stored
-
-
-**Default**: ``"%cache%\/replay.json"``
-
-
-.. _SourceCodeFilesystemExtension:
-
-
-SourceCodeFilesystemExtension
------------------------------
-
-
-.. _param_source_code_filesystem.project_root:
-
-
-``source_code_filesystem.project_root``
-"""""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``"%project_root%"``
-
-
-.. _WorseReflectionExtension:
-
-
-WorseReflectionExtension
-------------------------
-
-
-.. _param_language_server_code_transform.import_globals:
-
-
-``language_server_code_transform.import_globals``
-"""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Show hints for non-imported global classes and functions
-
-
-**Default**: ``false``
-
-
-.. _param_worse_reflection.enable_cache:
-
-
-``worse_reflection.enable_cache``
-"""""""""""""""""""""""""""""""""
-
-
-If reflection caching should be enabled
-
-
-**Default**: ``true``
-
-
-.. _param_worse_reflection.cache_lifetime:
-
-
-``worse_reflection.cache_lifetime``
-"""""""""""""""""""""""""""""""""""
-
-
-If caching is enabled, limit the amount of time a cache entry can stay alive
-
-
-**Default**: ``1``
-
-
-.. _param_worse_reflection.enable_context_location:
-
-
-``worse_reflection.enable_context_location``
-""""""""""""""""""""""""""""""""""""""""""""
-
-
-If source code is passed to a ``Reflector`` then temporarily make it available as a
-source location. Note this should NOT be enabled if the source code can be
-located in another (e.g. when running a Language Server)
-
-
-**Default**: ``true``
-
-
-.. _param_worse_reflection.cache_dir:
-
-
-``worse_reflection.cache_dir``
-""""""""""""""""""""""""""""""
-
-
-Cache directory for stubs
-
-
-**Default**: ``"%cache%\/worse-reflection"``
-
-
-.. _param_worse_reflection.stub_dir:
-
-
-``worse_reflection.stub_dir``
-"""""""""""""""""""""""""""""
-
-
-Location of the core PHP stubs - these will be scanned and cached on the first request
-
-
-**Default**: ``"%application_root%\/vendor\/jetbrains\/phpstorm-stubs"``
-
-
-.. _param_worse_reflection.additive_stubs:
-
-
-``worse_reflection.additive_stubs``
-"""""""""""""""""""""""""""""""""""
-
-
-Additive stubs files relative to the project root. These stubs augment existing defininitions.
-
-
-**Default**: ``[]``
-
-
-.. _param_worse_reflection.diagnostics.undefined_variable.suggestion_levenshtein_disatance:
-
-
-``worse_reflection.diagnostics.undefined_variable.suggestion_levenshtein_disatance``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Type: integer
-
-
-Levenshtein distance to use when suggesting corrections for variable names
-
-
-**Default**: ``4``
-
-
-.. _FilePathResolverExtension:
-
-
-FilePathResolverExtension
--------------------------
-
-
-.. _param_file_path_resolver.project_root:
-
-
-``file_path_resolver.project_root``
-"""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``"\/home\/daniel\/www\/phpactor\/phpactor"``
-
-
-.. _param_file_path_resolver.app_name:
-
-
-``file_path_resolver.app_name``
-"""""""""""""""""""""""""""""""
-
-
-**Default**: ``"phpactor"``
-
-
-.. _param_file_path_resolver.application_root:
-
-
-``file_path_resolver.application_root``
-"""""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _param_file_path_resolver.enable_cache:
-
-
-``file_path_resolver.enable_cache``
-"""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``true``
-
-
-.. _param_file_path_resolver.enable_logging:
-
-
-``file_path_resolver.enable_logging``
-"""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``true``
-
-
-.. _LoggingExtension:
-
-
-LoggingExtension
-----------------
-
-
-.. _param_logging.enabled:
-
-
-``logging.enabled``
-"""""""""""""""""""
-
-
-Type: boolean
-
-
-**Default**: ``false``
-
-
-.. _param_logging.fingers_crossed:
-
-
-``logging.fingers_crossed``
-"""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-**Default**: ``false``
-
-
-.. _param_logging.path:
-
-
-``logging.path``
-""""""""""""""""
-
-
-Type: string
-
-
-**Default**: ``"application.log"``
-
-
-.. _param_logging.level:
-
-
-``logging.level``
-"""""""""""""""""
-
-
-Type: string
-
-
-**Default**: ``"warning"``
-
-
-**Allowed values**: "emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"
-
-
-.. _param_logger.name:
-
-
-``logger.name``
-"""""""""""""""
-
-
-Type: string
-
-
-**Default**: ``"logger"``
-
-
-.. _param_logging.formatter:
-
-
-``logging.formatter``
-"""""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _ComposerAutoloaderExtension:
-
-
-ComposerAutoloaderExtension
----------------------------
-
-
-.. _param_composer.enable:
-
-
-``composer.enable``
-"""""""""""""""""""
-
-
-Include of the projects autoloader to facilitate class location. Note that when including an autoloader code _may_ be executed. This option may be disabled when using the indexer
-
-
-**Default**: ``true``
-
-
-.. _param_composer.autoloader_path:
-
-
-``composer.autoloader_path``
-""""""""""""""""""""""""""""
-
-
-Path to project's autoloader, can be an array
-
-
-**Default**: ``"%project_root%\/vendor\/autoload.php"``
-
-
-.. _param_composer.autoload_deregister:
-
-
-``composer.autoload_deregister``
-""""""""""""""""""""""""""""""""
-
-
-Immediately de-register the autoloader once it has been included (prevent conflicts with Phpactor's autoloader). Some platforms may require this to be disabled
-
-
-**Default**: ``true``
-
-
-.. _param_composer.class_maps_only:
-
-
-``composer.class_maps_only``
-""""""""""""""""""""""""""""
-
-
-Register the composer class maps only, do not register the autoloader - RECOMMENDED
-
-
-**Default**: ``true``
-
-
-.. _ConsoleExtension:
-
-
-ConsoleExtension
-----------------
-
-
-.. _param_console.verbosity:
-
-
-``console.verbosity``
-"""""""""""""""""""""
-
-
-Verbosity level
-
-
-**Default**: ``32``
-
-
-**Allowed values**: 16, 32, 64, 128, 256
-
-
-.. _param_console.decorated:
-
-
-``console.decorated``
-"""""""""""""""""""""
-
-
-Whether to decorate messages (null for auto-guessing)
-
-
-**Default**: ``null``
-
-
-**Allowed values**: true, false, null
-
-
-.. _PhpExtension:
-
-
-PhpExtension
-------------
-
-
-.. _param_php.version:
-
-
-``php.version``
-"""""""""""""""
-
-
-Consider this value to be the project\'s version of PHP (e.g. `7.4`). If omitted
-it will check `composer.json` (by the configured platform then the PHP requirement) before
-falling back to the PHP version of the current process.
-
-
-**Default**: ``null``
-
-
-.. _LanguageServerExtension:
-
-
-LanguageServerExtension
------------------------
-
-
-.. _param_language_server.catch_errors:
-
-
-``language_server.catch_errors``
-""""""""""""""""""""""""""""""""
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.enable_workspace:
-
-
-``language_server.enable_workspace``
-""""""""""""""""""""""""""""""""""""
-
-
-If workspace management / text synchronization should be enabled (this isn't required for some language server implementations, e.g. static analyzers)
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.session_parameters:
-
-
-``language_server.session_parameters``
-""""""""""""""""""""""""""""""""""""""
-
-
-Phpactor parameters (config) that apply only to the language server session
-
-
-**Default**: ``[]``
-
-
-.. _param_language_server.method_alias_map:
-
-
-``language_server.method_alias_map``
-""""""""""""""""""""""""""""""""""""
-
-
-Allow method names to be re-mapped. Useful for maintaining backwards compatibility
-
-
-**Default**: ``[]``
-
-
-.. _param_language_server.diagnostic_sleep_time:
-
-
-``language_server.diagnostic_sleep_time``
-"""""""""""""""""""""""""""""""""""""""""
-
-
-Amount of time to wait before analyzing the code again for diagnostics
-
-
-**Default**: ``1000``
-
-
-.. _param_language_server.diagnostics_on_update:
-
-
-``language_server.diagnostics_on_update``
-"""""""""""""""""""""""""""""""""""""""""
-
-
-Perform diagnostics when the text document is updated
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.diagnostics_on_save:
-
-
-``language_server.diagnostics_on_save``
-"""""""""""""""""""""""""""""""""""""""
-
-
-Perform diagnostics when the text document is saved
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.diagnostics_on_open:
-
-
-``language_server.diagnostics_on_open``
-"""""""""""""""""""""""""""""""""""""""
-
-
-Perform diagnostics when opening a text document
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.diagnostic_providers:
-
-
-``language_server.diagnostic_providers``
-""""""""""""""""""""""""""""""""""""""""
-
-
-Specify which diagnostic providers should be active (default to all)
-
-
-**Default**: ``null``
-
-
-.. _param_language_server.diagnostic_outsource:
-
-
-``language_server.diagnostic_outsource``
-""""""""""""""""""""""""""""""""""""""""
-
-
-If applicable diagnostics should be "outsourced" to a different process
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.code_action_outsource:
-
-
-``language_server.code_action_outsource``
-"""""""""""""""""""""""""""""""""""""""""
-
-
-Code actions will be "outsourced" to a different process
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.diagnostic_exclude_paths:
-
-
-``language_server.diagnostic_exclude_paths``
-""""""""""""""""""""""""""""""""""""""""""""
-
-
-List of paths to exclude from diagnostics, e.g. `vendor/**/*`
-
-
-**Default**: ``[]``
-
-
-.. _param_language_server.diagnostic_ignore_codes:
-
-
-``language_server.diagnostic_ignore_codes``
-"""""""""""""""""""""""""""""""""""""""""""
-
-
-Ignore diagnostics that have the codes listed here, e.g. ["fix_namespace_class_name"]. The codes match those shown in the LSP client.
-
-
-**Default**: ``[]``
-
-
-.. _param_language_server.enable_trust_check:
-
-
-``language_server.enable_trust_check``
-""""""""""""""""""""""""""""""""""""""
-
-
-Check to see if project path is trusted before loading configurations from it
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.file_events:
-
-
-``language_server.file_events``
-"""""""""""""""""""""""""""""""
-
-
-Register to receive file events
-
-
-**Default**: ``true``
-
-
-.. _param_language_server.file_event_globs:
-
-
-``language_server.file_event_globs``
-""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``["**\/*.php"]``
-
-
-.. _param_language_server.profile:
-
-
-``language_server.profile``
-"""""""""""""""""""""""""""
-
-
-Logs timing information for incoming LSP requests
-
-
-**Default**: ``false``
-
-
-.. _param_language_server.trace:
-
-
-``language_server.trace``
-"""""""""""""""""""""""""
-
-
-Log incoming and outgoing messages (needs log formatter to be set to ``json``)
-
-
-**Default**: ``false``
-
-
-.. _param_language_server.shutdown_grace_period:
-
-
-``language_server.shutdown_grace_period``
-"""""""""""""""""""""""""""""""""""""""""
-
-
-Amount of time (in milliseconds) to wait before responding to a shutdown notification
-
-
-**Default**: ``200``
-
-
-.. _param_language_server.phpactor_bin:
-
-
-``language_server.phpactor_bin``
-""""""""""""""""""""""""""""""""
-
-
-Internal use only - name path to Phpactor binary
-
-
-**Default**: ``"\/home\/daniel\/www\/phpactor\/phpactor\/lib\/Extension\/LanguageServer\/..\/..\/..\/bin\/phpactor"``
-
-
-.. _param_language_server.self_destruct_timeout:
-
-
-``language_server.self_destruct_timeout``
-"""""""""""""""""""""""""""""""""""""""""
-
-
-Wait this amount of time (in milliseconds) after a shutdown request before self-destructing
-
-
-**Default**: ``2500``
-
-
-.. _param_language_server.diagnostic_outsource_timeout:
-
-
-``language_server.diagnostic_outsource_timeout``
-""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Kill the diagnostics or code action processes if they outlive this timeout
-
-
-**Default**: ``5``
-
-
-.. _LanguageServerCompletionExtension:
-
-
-LanguageServerCompletionExtension
----------------------------------
-
-
-.. _param_language_server_completion.trim_leading_dollar:
-
-
-``language_server_completion.trim_leading_dollar``
-""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-If the leading dollar should be trimmed for variable completion suggestions
-
-
-**Default**: ``false``
-
-
-.. _LanguageServerReferenceFinderExtension:
-
-
-LanguageServerReferenceFinderExtension
---------------------------------------
-
-
-.. _param_language_server_reference_reference_finder.reference_timeout:
-
-
-``language_server_reference_reference_finder.reference_timeout``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Stop searching for references after this time (in seconds) has expired
-
-
-**Default**: ``60``
-
-
-.. _param_language_server_reference_finder.soft_timeout:
-
-
-``language_server_reference_finder.soft_timeout``
-"""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Interupt and ask for confirmation to continue after this timeout (in seconds)
-
-
-**Default**: ``10``
-
-
-.. _LanguageServerWorseReflectionExtension:
-
-
-LanguageServerWorseReflectionExtension
---------------------------------------
-
-
-.. _param_language_server_worse_reflection.workspace_index.update_interval:
-
-
-``language_server_worse_reflection.workspace_index.update_interval``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Minimum interval to update the workspace index as documents are updated (in milliseconds)
-
-
-**Default**: ``100``
-
-
-.. _param_language_server_worse_reflection.inlay_hints.enable:
-
-
-``language_server_worse_reflection.inlay_hints.enable``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable inlay hints (experimental)
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_worse_reflection.inlay_hints.types:
-
-
-``language_server_worse_reflection.inlay_hints.types``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Show inlay type hints for variables
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_worse_reflection.inlay_hints.params:
-
-
-``language_server_worse_reflection.inlay_hints.params``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Show inlay hints for parameters
-
-
-**Default**: ``true``
-
-
-.. _param_language_server_worse_reflection.diagnostics.enable:
-
-
-``language_server_worse_reflection.diagnostics.enable``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable diagnostics
-
-
-**Default**: ``true``
-
-
-.. _LanguageServerIndexerExtension:
-
-
-LanguageServerIndexerExtension
-------------------------------
-
-
-.. _param_language_server_indexer.workspace_symbol_search_limit:
-
-
-``language_server_indexer.workspace_symbol_search_limit``
-"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-**Default**: ``250``
-
-
-.. _param_language_server_indexer.reindex_timeout:
-
-
-``language_server_indexer.reindex_timeout``
-"""""""""""""""""""""""""""""""""""""""""""
-
-
-Unconditionally reindex modified files every N seconds
-
-
-**Default**: ``300``
-
-
-.. _param_language_server_indexer.optimiser_timeout:
-
-
-``language_server_indexer.optimiser_timeout``
-"""""""""""""""""""""""""""""""""""""""""""""
-
-
-Type: integer
-
-
-Optimise the index every N seconds
-
-
-**Default**: ``3600``
-
-
-.. _LanguageServerCodeTransformExtension:
-
-
-LanguageServerCodeTransformExtension
-------------------------------------
-
-
-.. _param_language_server_code_transform.import_name.report_non_existing_names:
-
-
-``language_server_code_transform.import_name.report_non_existing_names``
-""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Show an error if a diagnostic name cannot be resolved - can produce false positives
-
-
-**Default**: ``true``
-
-
-.. _LanguageServerConfigurationExtension:
-
-
-LanguageServerConfigurationExtension
-------------------------------------
-
-
-.. _param_language_server_configuration.auto_config:
-
-
-``language_server_configuration.auto_config``
-"""""""""""""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Prompt to enable extensions which apply to your project on language server start
-
-
-**Default**: ``true``
-
-
-.. _IndexerExtension:
-
-
-IndexerExtension
-----------------
-
-
-.. _param_indexer.enabled_watchers:
-
-
-``indexer.enabled_watchers``
-""""""""""""""""""""""""""""
-
-
-Type: array
-
-
-List of allowed watchers. The first watcher that supports the current system will be used
-
-
-**Default**: ``["inotify","watchman","find","php"]``
-
-
-.. _param_indexer.index_path:
-
-
-``indexer.index_path``
-""""""""""""""""""""""
-
-
-Type: string
-
-
-Path where the index should be saved
-
-
-**Default**: ``"%cache%\/index\/%project_id%"``
-
-
-.. _param_indexer.include_patterns:
-
-
-``indexer.include_patterns``
-""""""""""""""""""""""""""""
-
-
-Type: array
-
-
-Glob patterns to include while indexing
-
-
-**Default**: ``["\/**\/*.php","\/**\/*.phar"]``
-
-
-.. _param_indexer.exclude_patterns:
-
-
-``indexer.exclude_patterns``
-""""""""""""""""""""""""""""
-
-
-Type: array
-
-
-Glob patterns to exclude while indexing
-
-
-**Default**: ``["\/vendor\/**\/Tests\/**\/*","\/vendor\/**\/tests\/**\/*","\/vendor\/composer\/**\/*","\/vendor\/rector\/rector\/stubs-rector"]``
-
-
-.. _param_indexer.stub_paths:
-
-
-``indexer.stub_paths``
-""""""""""""""""""""""
-
-
-Type: array
-
-
-Paths to external folders to index. They will be indexed only once, if you want to take any changes into account you will have to reindex your project manually.
-
-
-**Default**: ``[]``
-
-
-.. _param_indexer.poll_time:
-
-
-``indexer.poll_time``
-"""""""""""""""""""""
-
-
-Type: integer
-
-
-For polling indexers only: the time, in milliseconds, between polls (e.g. filesystem scans)
-
-
-**Default**: ``5000``
-
-
-.. _param_indexer.buffer_time:
-
-
-``indexer.buffer_time``
-"""""""""""""""""""""""
-
-
-Type: integer
-
-
-For real-time indexers only: the time, in milliseconds, to buffer the results
-
-
-**Default**: ``500``
-
-
-.. _param_indexer.follow_symlinks:
-
-
-``indexer.follow_symlinks``
-"""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-To allow indexer to follow symlinks
-
-
-**Default**: ``false``
-
-
-.. _param_indexer.max_filesize_to_index:
-
-
-``indexer.max_filesize_to_index``
-"""""""""""""""""""""""""""""""""
-
-
-Type: integer
-
-
-Files larger than this will not be indexed. (Size in bytes)
-
-
-**Default**: ``1000000``
-
-
-.. _param_indexer.project_root:
-
-
-``indexer.project_root``
-""""""""""""""""""""""""
-
-
-Type: string
-
-
-The root path to use for scanning the index
-
-
-**Default**: ``"%project_root%"``
-
-
-.. _param_indexer.reference_finder.deep:
-
-
-``indexer.reference_finder.deep``
-"""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Recurse over class implementations to resolve all references
-
-
-**Default**: ``true``
-
-
-.. _param_indexer.implementation_finder.deep:
-
-
-``indexer.implementation_finder.deep``
-""""""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Recurse over class implementations to resolve all class implementations (not just the classes directly implementing the subject)
-
-
-**Default**: ``true``
-
-
-.. _param_indexer.supported_extensions:
-
-
-``indexer.supported_extensions``
-""""""""""""""""""""""""""""""""
-
-
-Type: array
-
-
-File extensions (e.g. `php`) for files that should be indexed
-
-
-**Default**: ``["php","phar"]``
-
-
-.. _param_indexer.search_include_patterns:
-
-
-``indexer.search_include_patterns``
-"""""""""""""""""""""""""""""""""""
-
-
-Type: array
-
-
-When searching the index exclude records whose fully qualified names match any of these regex patterns (use to exclude suggestions from search results). Namespace separators must be escaped as `\\\\` for example `^Foo\\\\` to include all namespaces whose first segment is `Foo`
-
-
-**Default**: ``[]``
-
-
-.. _ObjectRendererExtension:
-
-
-ObjectRendererExtension
------------------------
-
-
-.. _param_object_renderer.template_paths.markdown:
-
-
-``object_renderer.template_paths.markdown``
-"""""""""""""""""""""""""""""""""""""""""""
-
-
-Paths in which to look for templates for hover information.
-
-
-**Default**: ``["%project_config%\/templates\/markdown","%config%\/templates\/markdown"]``
-
-
-.. _LanguageServerPhpstanExtension:
-
-
-LanguageServerPhpstanExtension
-------------------------------
-
-
-.. _param_language_server_phpstan.enabled:
-
-
-``language_server_phpstan.enabled``
-"""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_phpstan.bin:
-
-
-``language_server_phpstan.bin``
-"""""""""""""""""""""""""""""""
-
-
-Path to the PHPStan executable
-
-
-**Default**: ``"%project_root%\/vendor\/bin\/phpstan"``
-
-
-.. _param_language_server_phpstan.severity:
-
-
-``language_server_phpstan.severity``
-""""""""""""""""""""""""""""""""""""
-
-
-Severity at which PHPStan diagnostics should be reported. Ranges from 1 (error) to 4 (hint).
-
-
-**Default**: ``1``
-
-
-.. _param_language_server_phpstan.level:
-
-
-``language_server_phpstan.level``
-"""""""""""""""""""""""""""""""""
-
-
-Override the PHPStan level
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_phpstan.config:
-
-
-``language_server_phpstan.config``
-""""""""""""""""""""""""""""""""""
-
-
-Override the PHPStan configuration file
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_phpstan.mem_limit:
-
-
-``language_server_phpstan.mem_limit``
-"""""""""""""""""""""""""""""""""""""
-
-
-Override the PHPStan memory limit
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_phpstan.tmp_file_disabled:
-
-
-``language_server_phpstan.tmp_file_disabled``
-"""""""""""""""""""""""""""""""""""""""""""""
-
-
-Disable the use of temporary files when. This prevents as-you-type diagnostics, but ensures paths in phpstan config are respected. See https://github.com/phpactor/phpactor/issues/2763
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_phpstan.editor_mode:
-
-
-``language_server_phpstan.editor_mode``
-"""""""""""""""""""""""""""""""""""""""
-
-
-DEPRECATED. Editor mode of Phpstan is used automatically when it's supported.
-
-
-**Default**: ``false``
-
-
-.. _LanguageServerPsalmExtension:
-
-
-LanguageServerPsalmExtension
-----------------------------
-
-
-.. _param_language_server_psalm.enabled:
-
-
-``language_server_psalm.enabled``
-"""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_psalm.bin:
-
-
-``language_server_psalm.bin``
-"""""""""""""""""""""""""""""
-
-
-Type: string
-
-
-Path to psalm if different from vendor/bin/psalm
-
-
-**Default**: ``"%project_root%\/vendor\/bin\/psalm"``
-
-
-.. _param_language_server_psalm.config:
-
-
-``language_server_psalm.config``
-""""""""""""""""""""""""""""""""
-
-
-Type: string
-
-
-Path to psalm config. Like %project_root%/psalm.xml
-
-
-**Default**: ``""``
-
-
-.. _param_language_server_psalm.show_info:
-
-
-``language_server_psalm.show_info``
-"""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-If infos from psalm should be displayed
-
-
-**Default**: ``true``
-
-
-.. _param_language_server_psalm.use_cache:
-
-
-``language_server_psalm.use_cache``
-"""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-If the Psalm cache should be used (see the `--no-cache` option)
-
-
-**Default**: ``true``
-
-
-.. _param_language_server_psalm.error_level:
-
-
-``language_server_psalm.error_level``
-"""""""""""""""""""""""""""""""""""""
-
-
-Override level at which Psalm should report errors (lower => more errors)
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_psalm.threads:
-
-
-``language_server_psalm.threads``
-"""""""""""""""""""""""""""""""""
-
-
-Type: integer
-
-
-Set the number of threads Psalm should use. Warning: NULL will use as many as possible and may crash your computer
-
-
-**Default**: ``1``
-
-
-.. _param_language_server_psalm.timeout:
-
-
-``language_server_psalm.timeout``
-"""""""""""""""""""""""""""""""""
-
-
-Type: integer
-
-
-Kill the psalm process after this number of seconds
-
-
-**Default**: ``15``
-
-
-.. _LanguageServerMagoExtension:
-
-
-LanguageServerMagoExtension
----------------------------
-
-
-.. _param_language_server_mago.enabled:
-
-
-``language_server_mago.enabled``
-""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_mago.bin:
-
-
-``language_server_mago.bin``
-""""""""""""""""""""""""""""
-
-
-Path to the Mago executable
-
-
-**Default**: ``"%project_root%\/vendor\/bin\/mago"``
-
-
-.. _param_language_server_mago.config:
-
-
-``language_server_mago.config``
-"""""""""""""""""""""""""""""""
-
-
-Override the Mago configuration file (mago.toml)
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_mago.timeout:
-
-
-``language_server_mago.timeout``
-""""""""""""""""""""""""""""""""
-
-
-Maximum time in milliseconds to wait for a Mago run
-
-
-**Default**: ``10000``
-
-
-.. _param_language_server_mago.analyze.enabled:
-
-
-``language_server_mago.analyze.enabled``
-""""""""""""""""""""""""""""""""""""""""
-
-
-Show diagnostics from `mago analyze` (static analysis)
-
-
-**Default**: ``true``
-
-
-.. _param_language_server_mago.lint.enabled:
-
-
-``language_server_mago.lint.enabled``
-"""""""""""""""""""""""""""""""""""""
-
-
-Show diagnostics from `mago lint` (style and code smells)
-
-
-**Default**: ``true``
-
-
-.. _LanguageServerPhpCsFixerExtension:
-
-
-LanguageServerPhpCsFixerExtension
----------------------------------
-
-
-.. _param_language_server_php_cs_fixer.enabled:
-
-
-``language_server_php_cs_fixer.enabled``
-""""""""""""""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_language_server_php_cs_fixer.bin:
-
-
-``language_server_php_cs_fixer.bin``
-""""""""""""""""""""""""""""""""""""
-
-
-Path to the php-cs-fixer executable
-
-
-**Default**: ``"%project_root%\/vendor\/bin\/php-cs-fixer"``
-
-
-.. _param_language_server_php_cs_fixer.version:
-
-
-``language_server_php_cs_fixer.version``
-""""""""""""""""""""""""""""""""""""""""
-
-
-Arbitrary version (if not provided, phpactor tries to detect it - only to run it on unsupported PHP versions)
-
-
-**Default**: ``null``
-
-
-.. _param_language_server_php_cs_fixer.env:
-
-
-``language_server_php_cs_fixer.env``
-""""""""""""""""""""""""""""""""""""
-
-
-Environment for PHP CS Fixer
-
-
-**Default**: ``{"XDEBUG_MODE":"off"}``
-
-
-.. _param_language_server_php_cs_fixer.show_diagnostics:
-
-
-``language_server_php_cs_fixer.show_diagnostics``
-"""""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Whether PHP CS Fixer diagnostics are shown
-
-
-**Default**: ``true``
-
-
-.. _param_language_server_php_cs_fixer.config:
-
-
-``language_server_php_cs_fixer.config``
-"""""""""""""""""""""""""""""""""""""""
-
-
-Set custom PHP CS config path. Ex., %project_root%/.php-cs-fixer.php
-
-
-**Default**: ``null``
-
-
-.. _LanguageServerHighlightExtension:
-
-
-LanguageServerHighlightExtension
---------------------------------
-
-
-.. _param_language_server_highlight.enabled:
-
-
-``language_server_highlight.enabled``
-"""""""""""""""""""""""""""""""""""""
-
-
-Enable or disable the highlighter (can be expensive on large documents)
-
-
-**Default**: ``true``
-
-
-.. _PhpCodeSnifferExtension:
-
-
-PhpCodeSnifferExtension
------------------------
-
-
-.. _param_php_code_sniffer.enabled:
-
-
-``php_code_sniffer.enabled``
-""""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_php_code_sniffer.bin:
-
-
-``php_code_sniffer.bin``
-""""""""""""""""""""""""
-
-
-Path to the phpcs executable
-
-
-**Default**: ``"%project_root%\/vendor\/bin\/phpcs"``
-
-
-.. _param_php_code_sniffer.env:
-
-
-``php_code_sniffer.env``
-""""""""""""""""""""""""
-
-
-Environment for PHP_CodeSniffer (e.g. to set XDEBUG_MODE)
-
-
-**Default**: ``{"XDEBUG_MODE":"off"}``
-
-
-.. _param_php_code_sniffer.show_diagnostics:
-
-
-``php_code_sniffer.show_diagnostics``
-"""""""""""""""""""""""""""""""""""""
-
-
-Whether PHP_CodeSniffer diagnostics are shown
-
-
-**Default**: ``true``
-
-
-.. _param_php_code_sniffer.args:
-
-
-``php_code_sniffer.args``
-"""""""""""""""""""""""""
-
-
-Additional arguments to pass to the PHPCS process
-
-
-**Default**: ``[]``
-
-
-.. _param_php_code_sniffer.cwd:
-
-
-``php_code_sniffer.cwd``
-""""""""""""""""""""""""
-
-
-Working directory for PHPCS
-
-
-**Default**: ``null``
-
-
-.. _LanguageServerBlackfireExtension:
-
-
-LanguageServerBlackfireExtension
---------------------------------
-
-
-.. _param_blackfire.enabled:
-
-
-``blackfire.enabled``
-"""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _ProphecyExtension:
-
-
-ProphecyExtension
------------------
-
-
-.. _param_prophecy.enabled:
-
-
-``prophecy.enabled``
-""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _OpenTelemetryExtension:
-
-
-OpenTelemetryExtension
-----------------------
-
-
-.. _param_open_telemetry.enabled:
-
-
-``open_telemetry.enabled``
-""""""""""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _BehatExtension:
-
-
-BehatExtension
---------------
-
-
-.. _param_behat.enabled:
-
-
-``behat.enabled``
-"""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_behat.config_path:
-
-
-``behat.config_path``
-"""""""""""""""""""""
-
-
-Path to the main behat.yml (including the filename behat.yml)
-
-
-**Default**: ``"%project_root%\/behat.yml"``
-
-
-.. _param_behat.symfony.di_xml_path:
-
-
-``behat.symfony.di_xml_path``
-"""""""""""""""""""""""""""""
-
-
-If using Symfony, set this path to the XML container dump to find contexts which are defined as services
-
-
-**Default**: ``null``
-
-
-.. _SymfonyExtension:
-
-
-SymfonyExtension
-----------------
-
-
-.. _param_symfony.enabled:
-
-
-``symfony.enabled``
-"""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
-
-.. _param_symfony.xml_path:
-
-
-``symfony.xml_path``
-""""""""""""""""""""
-
-
-Path to the Symfony container XML dump file
-
-
-**Default**: ``"%project_root%\/var\/cache\/dev\/App_KernelDevDebugContainer.xml"``
-
-
-.. _param_completion_worse.completor.symfony.enabled:
-
-
-``completion_worse.completor.symfony.enabled``
-""""""""""""""""""""""""""""""""""""""""""""""
-
-
-Enable/disable the Symfony completor - depends on Symfony extension being enabled
-
-
-**Default**: ``true``
-
-
-.. _param_public_services_only:
-
-
-``public_services_only``
-""""""""""""""""""""""""
-
-
-Only consider public services when providing analysis for the service locator
-
-
-**Default**: ``false``
-
-
-.. _PHPUnitExtension:
-
-
-PHPUnitExtension
-----------------
-
-
-.. _param_phpunit.enabled:
-
-
-``phpunit.enabled``
-"""""""""""""""""""
-
-
-Type: boolean
-
-
-Enable or disable this extension
-
-
-**Default**: ``false``
-
diff --git a/doc/reference/diagnostic.rst b/doc/reference/diagnostic.rst
deleted file mode 100644
index 9de2f4e5ef..0000000000
--- a/doc/reference/diagnostic.rst
+++ /dev/null
@@ -1,1011 +0,0 @@
-.. _diagnostics:
-
-Diagnostics
-===========
-
-
-.. This document is generated via the `development:generate-documentation` command
-
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-
-MissingMemberProvider
----------------------
-
-Report if trying to call a class method which does not exist.
-
-.. tabs::
-
- .. tab:: missing method on instance
-
- .. code-block:: php
-
- bar();
-
- Diagnostic(s):
-
- - ``ERROR``: ``Method "bar" does not exist on class "Foobar"``
-
- .. tab:: missing method for static invocation
-
- .. code-block:: php
-
- foo = 12;
- $f->barfoo = 'string';
-
-DocblockMissingReturnTypeProvider
----------------------------------
-
-Report when a method has a return type should be augmented by a docblock tag
-
-.. tabs::
-
- .. tab:: method without return type
-
- .. code-block:: php
-
-
- */
- private array $foobar,
- private array $barfoo
- ) {
- }
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Method "__construct" is missing @param $barfoo``
-
-AssignmentToMissingPropertyProvider
------------------------------------
-
-Report when assigning to a missing property definition.
-
-.. tabs::
-
- .. tab:: to non-existing property
-
- .. code-block:: php
-
- bar = 'foo';
- }
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Property "bar" has not been defined``
-
-MissingReturnTypeProvider
--------------------------
-
-Report if a method is missing a return type.
-
-.. tabs::
-
- .. tab:: missing return type
-
- .. code-block:: php
-
- deprecated();
- $this->notDeprecated();
- }
-
- /** @deprecated This is deprecated */
- public function deprecated(): void {}
-
- public function notDeprecated(): void {}
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Call to deprecated method "deprecated": This is deprecated``
-
- .. tab:: deprecated on trait
-
- .. code-block:: php
-
- deprecated();
- $this->notDeprecated();
- }
-
- public function notDeprecated(): void {}
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Call to deprecated method "deprecated": This is deprecated``
-
- .. tab:: deprecated on property
-
- .. code-block:: php
-
- deprecated;
- $ba = $this->notDeprecated;
- }
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Call to deprecated property "deprecated": This is deprecated``
-
-UndefinedVariableProvider
--------------------------
-
-Report if a variable is undefined and suggest variables with similar names.
-
-.. tabs::
-
- .. tab:: undefined variable
-
- .. code-block:: php
-
- $data) {
- $list[$index] = $data;
- }
-
- return $list;
-
-DocblockMissingExtendsTagProvider
----------------------------------
-
-Report when a class extends a generic class but does not provide an @extends tag.
-
-.. tabs::
-
- .. tab:: extends class requiring generic annotation
-
- .. code-block:: php
-
- ```
-
- .. tab:: does not provide enough arguments
-
- .. code-block:: php
-
-
- */
- class Foobar extends NeedGeneric
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Generic tag `@extends NeedGeneric` should be compatible with `@extends NeedGeneric```
-
- .. tab:: does not provide any arguments
-
- .. code-block:: php
-
- ```
-
- .. tab:: provides empty arguments
-
- .. code-block:: php
-
-
- */
- class Foobar extends NeedGeneric
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Missing generic tag `@extends NeedGeneric```
-
- .. tab:: wrong class
-
- .. code-block:: php
-
-
- */
- class Foobar extends NeedGeneric
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Missing generic tag `@extends NeedGeneric```
-
- .. tab:: does not provide multiple arguments
-
- .. code-block:: php
-
-
- */
- class Foobar extends NeedGeneric
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Generic tag `@extends NeedGeneric` should be compatible with `@extends NeedGeneric```
-
-DocblockMissingImplementsTagProvider
-------------------------------------
-
-Report when a class extends a generic class but does not provide an @extends tag.
-
-.. tabs::
-
- .. tab:: implements class requiring generic annotation
-
- .. code-block:: php
-
- ```
-
- .. tab:: does not provide enough arguments
-
- .. code-block:: php
-
-
- */
- class Foobar implements NeedGeneric
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Generic tag `@implements NeedGeneric` should be compatible with `@implements NeedGeneric```
-
- .. tab:: provides one but not another
-
- .. code-block:: php
-
-
- */
- class Foobar implements NeedGeneric1, NeedGeneric2
- {
- }
-
- Diagnostic(s):
-
- - ``WARN``: ``Missing generic tag `@implements NeedGeneric2```
-
\ No newline at end of file
diff --git a/doc/reference/images/class-referenes.png b/doc/reference/images/class-referenes.png
deleted file mode 100644
index c67437fe99..0000000000
Binary files a/doc/reference/images/class-referenes.png and /dev/null differ
diff --git a/doc/reference/images/risky.png b/doc/reference/images/risky.png
deleted file mode 100644
index 367a8055f2..0000000000
Binary files a/doc/reference/images/risky.png and /dev/null differ
diff --git a/doc/reference/indexer.rst b/doc/reference/indexer.rst
deleted file mode 100644
index 657e6c400e..0000000000
--- a/doc/reference/indexer.rst
+++ /dev/null
@@ -1,193 +0,0 @@
-.. _indexer:
-
-Indexer
-=======
-
-The indexer scans your project directory and records meta-information about
-classes and functions in your project.
-
-The indexer required only for some features (such as
-:ref:`navigation_goto_implementation`).
-
-.. _indexer_building:
-
-Building the index
-------------------
-
-It will be *automatically enabled* when used with the language server but can
-also be used with RPC if run manually.
-
-.. tabs::
-
- .. tab:: CLI
-
- Build index and watch for changes
-
- .. code:: sh
-
- $ phpactor index:build --watch
-
- Build from scratch
-
- .. code:: sh
-
- $ phpactor index:build --reset
-
- .. tab:: Language Server CoC
-
- The index is built automatically on LS initialize and subsequently
- updated as necessary.
-
- You can however force a reindex:
-
- Build from scratch:
-
- .. code:: sh
-
- :CocCommand phpactor.reindex
-
- .. tab:: Language Server General
-
- Make a request to `indexer/reindex`.
-
-
-.. _watcher:
-
-Watching
---------
-
-File watchers are used to keep the index up-to-date.
-
-Several watching systems can be used, by default Phpactor will choose the
-first supported one:
-
-lsp
-~~~
-
-**Any platform**
-
-This watcher depends on file events from the LSP client (e.g. VSCode).
-
-inotifywait
-~~~~~~~~~~~
-
-**Linux** only, react immediately to file changes.
-
-Installation
-
-.. tabs::
-
- .. tab:: Debian/Ubuntu
-
- .. code-block:: bash
-
- apt install inotify-tools
-
-watchman
-~~~~~~~~
-
-**Linux/Mac** cross platform, reacts immediately to file changes, see Watchman_ documentation.
-
-Watchman is the recommended watcher.
-
-Installation:
-
-.. tabs::
-
- .. tab:: Debian/Ubuntu
-
- .. code-block:: bash
-
- apt install watchman
-
- .. tab:: MacOS
-
- .. code-block:: bash
-
- brew install watchman
-
-find
-~~~~
-
-**Linux/Mac/POSIX** Poll the system for changes every 5 seconds.
-
-This tool should be installed by default.
-
-php
-~~~
-
-**Any system**: Poll system using PHP (slow) every 5 seconds.
-
-.. _indexer_querying:
-
-Querying from the CLI
----------------------
-
-You can query the index from the CLI:
-
-.. tabs::
-
- .. tab:: Show class index information
-
- .. code:: sh
-
- $ phpactor index:query "Symfony\\Component\\Console\\Output\\OutputInterface"
-
- .. tab:: Show function information
-
- .. code:: sh
-
- $ phpactor index:query "sprintf"
-
- .. tab:: Show member information
-
- .. code:: sh
-
- $ phpactor index:query "method#createFoobar"
- $ phpactor index:query "property#createFoobar"
- $ phpactor index:query "constant#createFoobar"
-
-Note that this information is primarily intended for the indexer and is not
-yet intended to provide a true "querying" facility.
-
-Configuration
--------------
-
-List the possible configuration options with ``phpactor config:dump | grep
-indexer``, explanations of some important ones:
-
-- :ref:`param_indexer.enabled_watchers`: List of watchers to enable (e.g. `inotify`,
- `find`).
-- :ref:`param_indexer.include_patterns`: List of glob patterns to include
-- :ref:`param_indexer.exclude_patterns`: List of glob patterns to exclude
-- :ref:`param_indexer.stub_paths`: List of external paths to index
-- :ref:`param_indexer.poll_time`: Poll time used for polling watchers (e.g. ``find``, ``php``)
-- :ref:`param_indexer.buffer_time`: Time to wait to collect batch messages from
- "realtime" watchers (e.g. ``inotify``)
-
-Troubleshooting
----------------
-
-Inotify: Why isn't ``inotifywait`` used when I'm on Linux?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-It may not be installed, on Debian/Ubuntu
-
-.. code:: sh
-
- $ sudo apt install inotify-tools
-
-Inotify: ``inotify`` limit reached
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The default number of watchers is quite low by default, try increasing the
-number of watchers:
-
-.. code:: sh
-
- $ sudo sysctl fs.inotify.max_user_watches=100000
-
-Note this still may not be sufficient, so increase as necessary, make the
-change permanent by writing to ``/etc/sysctl.conf``
-
-.. _Watchman: https://facebook.github.io/watchman/
diff --git a/doc/reference/navigation.rst b/doc/reference/navigation.rst
deleted file mode 100644
index 6ebf0345ca..0000000000
--- a/doc/reference/navigation.rst
+++ /dev/null
@@ -1,305 +0,0 @@
-.. _navigation:
-
-Navigation
-==========
-
-Phpactor provides some functionality for navigating to (and generating)
-contextually relevant files such as parent classes, definitions, unit
-tests, references etc.
-
-.. contents::
- :depth: 1
- :backlinks: none
- :local:
-
-.. _navigation_class_references:
-
-Class References
-----------------
-
-Navigate / list all references to a given class.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block:: sh
-
- $ phpactor references:class path/to/Class.php
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Find references*.
-
- .. tab:: VIM Plugin
-
- .. code:: sh
-
- :PhpactorFindReferences
-
- .. tab:: LSP
-
- Supported via. the `textDocument/references` action.
-
-Description
-~~~~~~~~~~~
-
-Keep track of where a class is being used or perform an initial survey
-before deciding to rename a class.
-
-The VIM plugin will load the class references into a quick fix list
-which you can navigate through (see ``:help quickfix``).
-
-The CLI command will list the references and show a highlighted line
-where the references were found.
-
-.. figure:: images/class-referenes.png
- :alt: Class references
-
- Class references
-
-.. _navigation_class_member_references:
-
-Class Member References
------------------------
-
-Navigate / list all references to a given class member (method, property
-or constant).
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block:: sh
-
- $ phpactor references:member path/to/Class.php memberName
-
- .. tab:: VIM Context Menu
-
- *Member context menu > Find references*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorFindReferences
-
- .. tab:: Language Server
-
- Supported via. the `textDocument/references` action.
-
-.. _description-1:
-
-Description
-~~~~~~~~~~~
-
-Scan for all references to a class member in the project.
-
-This functionality is very similar to `Class
-References <#class-references>`__ with the exception that it is possible
-that not all members will be found as PHP is a loosely typed language
-and it may not be possible to determine all the class types of methods
-matching the query.
-
-Hover
------
-
-While not a navigation function as such, this RPC command will show
-brief information about the symbol underneath the cursor.
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- *Context menu* > Hover_.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorHover
-
- .. tab:: LSP
-
- Supported via. the `textDocument/hover` action.
-
-
-Jump to definition
-------------------
-
-Jump to the definition of a class or class member.
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- *Member/class context menu > Goto definition*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorGotoDefinition
-
- .. tab:: LSP
-
- Supported via. the `textDocument/definition` action.
-
-
-.. _description-2:
-
-Description
-~~~~~~~~~~~
-
-Open the file containing the class or class member under the cursor and
-move the cursor to the place where class or class member is defined.
-
-This feature is **extremely useful**! Be sure to map it to a keyboard
-shortcut and use it often to quickly navigate through your source code.
-
-Jump to type
-------------
-
-Jump to the type of the symbol under the cursor.
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- \_Member/class context menu > Goto type.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorGotoType()
-
- .. tab:: LSP
-
- Supported via. the `textDocument/typeDefinition` action.
-
-.. _description-3:
-
-Description
-~~~~~~~~~~~
-
-Sometimes you will want to jump to the type (i.e. the class) of a
-symbol, for example if you reference a property in code,
-``$this->locator``, you can invoke *goto type* on the property and jump
-to the, for example, ``Locator`` type.
-
-.. _navigation_goto_implementation:
-
-Jump to Implementation
-----------------------
-
-Jump to the implementatoin(s) of an interface or class
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- *Member/class context menu > Goto implementation*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorGotoImplementations
-
- .. tab:: LSP
-
- Supported via. the `textDocument/implementation` action.
-
-
-Jump to implementations of the interface or class under the cursor.
-
-Note that this feature only works when used with the :ref:`indexer`.
-
-Jump to or generate related file
---------------------------------
-
-Jump to a related file (e.g. parent class, interfaces, unit test,
-integration test, benchmark), and optionally generate it if it doesn't
-exist (where supported).
-
-Jumping
-~~~~~~~
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Navigate*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorNavigate
-
-You specify the jump patterns in ``.phpactor.json`` with :ref:`param_navigator.destinations`:
-
-::
-
- {
- "navigator.destinations":
- {
- "source": "lib/.php",
- "unit_test": "tests/Unit/Test.php"
- }
- }
-
-This would enable you to jump from
- ``lib/Acme/Post.php`` to ``tests/Unit/Acme/Post.php`` and vice-versa.
-
-Generating
-~~~~~~~~~~
-
-If the file doesn't exist you automatically create it by mapping the
-navigation targets to template :ref:`variants `:
-
-::
-
- {
- "code_transform.class_new.variants":
- {
- "source": "default",
- "unit_test": "phpunit_test",
- "exception": "exception",
- "symfony_command": "symfony_command"
- }
- }
-
-Now Phpactor should prompt you to create the navigation target if it doesn't exist.
-
-.. _description-4:
-
-Description
-~~~~~~~~~~~
-
-Often classes will have a one-to-one relationship with another class,
-for example a single class will often have a matching unit test.
-
-Phpactor provides a way to define this relationship:
-
-.. code:: yaml
-
- # .phpactor.yml
- navigator.destinations:
- source: lib/.php
- unit_test: tests/Unit/Test.php
-
- navigator.autocreate:
- source: default
- unit_test: phpunit_test
-
-Above we define a pattern which will match the source code of the
-project (and assign it an identifier ``source``). We also identify a
-pattern to identify ``unit_test`` classes.
-
-When you are in a ``source`` file, the navigate option will offer you
-the possibility of jumping to the unit test, and vice-versa.
-
-Above we additionally (and optionally) tell Phpactor that it can
-auto generate these classes based on `templates `__.
diff --git a/doc/reference/refactorings.rst b/doc/reference/refactorings.rst
deleted file mode 100644
index fabd824411..0000000000
--- a/doc/reference/refactorings.rst
+++ /dev/null
@@ -1,1852 +0,0 @@
-.. _refactoring:
-
-Refactoring
-***********
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-Fixes
-=====
-
-.. _refactoring_add_missing_assignements:
-
-Add Missing Assignments
------------------------
-
-Automatically add any missing properties to a class.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/Class.php --transform=add_missing_assignments
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Transform > Add missing properties*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
-
-Motivation
-~~~~~~~~~~
-
-When authoring a class it is redundant effort to add a property and
-documentation tag when making an assignment. This refactoring will scan
-for any assignments which have do not have corresponding properties and
-add the required properties with docblocks based on inferred types where
-possible.
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- blog = new Blog();
- }
- }
-
-Becomes:
-
-.. code:: php
-
- blog = new Blog();
- }
- }
-
-.. _refactoring_add_missing_docblock:
-
-Add Missing Docblock
---------------------
-
-This refactoring will add docblocks:
-
-- If there is an array return type and an iterator value can be inferred from
- the function's return statement.
-- If there is an class return type and a generic type can be inferred from the
- function's return statement.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/Class.php --transform=add_missing_docblocks
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Transform > Add missing docblocks*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
- .. tab:: Language Server
-
- Request code actions when there is a candidate
-
-.. _refactoring_complete_constructor:
-
-Add Missing Return Types
-------------------------
-
-This refactoring add missing return types.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/Class.php --transform=add_missing_return_types
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Transform > Add missing return types*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
- .. tab:: Language Server
-
- Request code actions when there is a candidate
-
-.. _refactoring_add_override_attribute:
-
-Add Override Attribute
-----------------------
-
-Add the ``#[\Override]`` attribute to methods which override a method from a
-parent class or implemented interface. Only applies when the project's PHP
-version is 8.3 or higher.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/Class.php --transform=add_override_attribute
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
- .. tab:: Language Server
-
- Request code actions when there is a candidate
-
-Complete Constructor
---------------------
-
-Complete the assignments and add properties for an incomplete
-constructor.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/class.php --transform=complete_constructor
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Transform > Complete Constructor*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
-
-.. _motivation-5:
-
-Motivation
-~~~~~~~~~~
-
-When authoring a new class, it is often required to:
-
-1. Create a constructor method with typed arguments.
-2. Assign the arguments to class properties.
-3. Create the class properties with docblocks.
-
-This refactoring will automatically take care of 2 and 3.
-
-.. _before-and-after-5:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- hello = $hello;
- $this->goodbye = $goodbye;
- }
- }
-
-.. _refactoring_fix_namespace_and_class:
-
-Fix Namespace or Class Name
----------------------------
-
-Update a file’s namespace (and/or class name) based on the composer
-configuration.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor class:transform path/to/class.php --transform=fix_namespace_class_name
-
- .. tab:: VIM Context Menu
-
- *Class context menu > Transform > Fix namespace or class name*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
-.. warning::
-
- This refactoring will currently only work fully on Composer based
- projects.
-
-.. _motivation-6:
-
-Motivation
-~~~~~~~~~~
-
-Phpactor already has the possibility of generating new classes, and
-moving classes. But sometimes your project may get into a state where
-class-containing files have an incorrect namespace or class name.
-
-This refactoring will:
-
-- Update the namespace based on the file path (and the autoloading
- config).
-- Update the class name.
-- When given an empty file, it will generate a PHP tag and the
- namespace.
-
-.. _before-and-after-6:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- // lib/Barfoo/Hello.php
- Generate accessor*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorGenerateAccessor
-
-
-.. _motivation-11:
-
-Motivation
-~~~~~~~~~~
-
-When creating entities and value objects it is frequently necessary to
-add accessors.
-
-This refactoring automates the generation of accessors.
-
-.. _before-and-after-11:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- bar
- {
- /**
- * @var Barfoo
- */
- private $barfoo;
- }
-
-After selecting `one or more
-accessors `__
-
-.. code:: php
-
- barfoo;
- }
- }
-
-Note the accessor template can be customized see
-`Templates `__.
-
-.. _generation_method:
-
-Generate Method
----------------
-
-Generate or update a method based on the method call under the cursor.
-
-.. tabs::
-
- .. tab:: CLI
-
- *RPC only*
-
- .. tab:: VIM Context Menu
-
- *Method context menu > Generate method*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-
-.. _motivation-12:
-
-Motivation
-~~~~~~~~~~
-
-When initially authoring a package you will often write a method call
-which doesn't exist and then add the method to the corresponding class.
-
-This refactoring will automatically generate the method inferring any
-type information that it can.
-
-.. _before-and-after-12:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- barfoo->good<>bye($hello);
- }
- }
-
- class Barfoo
- {
- }
-
-After generating the method:
-
-.. code:: php
-
- barfoo->goodbye($hello);
- }
- }
-
- class Barfoo
- {
- public function goodbye(Hello $hello)
- {
- }
- }
-
-.. _generateo_constructor:
-
-Generate Constructor
---------------------
-
-Generate a constructor from a new object instance expression
-
-.. tabs::
-
- .. tab:: LSP
-
- Invoke code action on new class expression for class with no constructor
-
-
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Assuming `MyFancyObject` exists and has no constructor.
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- FancyObject($barfoo, 'foobar', 1234);
-
-After choosing the "Generate Constructor" code action the `MyFancyObject`
-class should have a constructor:
-
-.. code:: php
-
- Transform > Implement contracts*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorTransform
-
-.. _motivation-13:
-
-Motivation
-~~~~~~~~~~
-
-It can be very tiresome to manually implement contracts for interfaces
-and abstract classes, especially interfaces with many methods
-(e.g. ``ArrayAccess``).
-
-This refactoring will automatically add the required methods to your
-class. If the interface uses any foreign classes, the necessary ``use``
-statements will also be added.
-
-.. _before-and-after-13:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- `_.
-
-.. tabs::
-
- .. tab:: LSP
-
- Invoke code action on a class which has implemented no methods and
- implements one or more interfaces.
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- innerCounter = $innerCounter;
- }
-
- public function count(): int
- {
- return $this->innerCounter->count();
- }
- }
-
-.. _refactoring_import_missing_class:
-
-Import Class
-------------
-
-Import a class into the current namespace based on the class name under
-the cursor.
-
-.. tabs::
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorImportClass
-
-.. _motivation-14:
-
-Motivation
-~~~~~~~~~~
-
-It is easy to remember the name of a class, but more difficult to
-remember its namespace, and certainly it is time consuming to manually
-code class imports:
-
-Manually one would:
-
-1. Perform a fuzzy search for the class by its short name.
-2. Identify the class you want to import.
-3. Copy the namespace.
-4. Paste it into your current file
-5. Add the class name to the new ``use`` statement.
-
-This refactoring covers steps 1, 3, 4 and 5.
-
-.. _before-and-after-14:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- quest $request)
- {
- }
-
- }
-
-After selecting ``Symfony\Component\HttpFoundation\Request`` from the
-list of candidates:
-
-.. code:: php
-
- ``:
-
-.. code:: php
-
- ToNewUser::class
- ];
- }
-
-After selecting ``App\Listeners\AssignDefaultRoleToNewUser`` from the
-list of candidates:
-
-.. code:: php
-
- Import Missing*
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorImportMissingClasses
-
-
-.. _motivation-16:
-
-Motivation
-~~~~~~~~~~
-
-You may copy and paste some code from one file to another and
-subsequently need to import all the foreign classes into the current
-namespace. This refactoring will identify all unresolvable classes and
-import them.
-
-Fill Object
------------
-
-Fill a new objects constructor with default arguments.
-
-.. tabs::
-
- .. tab:: LSP
-
- Invoke code action on new class expression with no constructor arguments
-
-
-Motivation
-~~~~~~~~~~
-
-This refactoring is especially useful if you need to either create or map a
-DTO (data transfer object).
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- FancyDTO();
-
-After choosing the "Fill Object" code action:
-
-.. code:: php
-
- Override method*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-**Multiple selection**: Supports selecting multiple methods.
-
-.. _motivation-17:
-
-Motivation
-~~~~~~~~~~
-
-Sometimes it is expected or necessary that you override a parent class's
-method (for example when authoring a Symfony Command class).
-
-This refactoring will allow you to select a method to override and
-generate that method in your class.
-
-.. _before-and-after-16:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- New Class*
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorClassNew
-
-.. _motivation-4:
-
-Motivation
-~~~~~~~~~~
-
-Creating classes is one of the most general actions we perform:
-
-1. Create a new file.
-2. Code the namespace, ensuring that it is compatible with the
- autoloading scheme.
-3. Code the class name, ensuring that it is the same as the file name.
-
-This refactoring will perform steps 1, 2 and 3 for:
-
-- Any given file name.
-- Any given class name.
-- A class name under the cursor.
-
-It is also possible to choose a class template, see
-`templates `__ for more information.
-
-.. _before-and-after-4:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. container:: alert alert-success
-
- This example is from an existing, empty, file. Note that you can also
- use the context menu to generate classes from non-existing class
- names in the current file
-
-Given a new file:
-
-.. code:: php
-
- # src/Blog/Post.php
-
-After invoking *class new* using the ``default`` variant:
-
-.. code:: php
-
- Copy Class*
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorCopyFile
-
-.. _motivation-1:
-
-Motivation
-~~~~~~~~~~
-
-Sometimes you find that an existing class is a good starting point for a
-new class. In this situation you may:
-
-1. Copy the class to a new file location.
-2. Update the class name and namespace.
-3. Adjust the copied class as necessary.
-
-This refactoring performs steps 1 and 2.
-
-.. _before-and-after-1:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- # src/Blog/Post.php
- Inflect > Extract interface*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorClassInflect
-
-
-.. _motivation-10:
-
-Motivation
-~~~~~~~~~~
-
-It is sometimes unwise to preemptively create interfaces for all your
-classes, as doing so adds maintenance overhead, and the interfaces may
-never be needed.
-
-This refactoring allows you to generate an interface from an existing
-class. All public methods will be added to generated interface.
-
-.. _before-and-after-10:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- Change Visibility*
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorChangeVisibility
-
-
-Currently this will cycle through the 3 visibilities: ``public``,
-``protected`` and ``private``.
-
-.. _motivation-2:
-
-Motivation
-~~~~~~~~~~
-
-Sometimes you may want to extract a class from an existing class in
-order to isolate some of it’s responsibility. When doing this you may:
-
-1. Create a new class using `Class New <#class-new>`__.
-2. Copy the method(s) which you want to extract to the new class.
-3. Change the visibility of the main method from ``private`` to
- ``public``.
-
-.. _before-and-after-2:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- # src/Blog/FoobarResolver.php
-
- }
- }
-
-After invoking “change visibility” on or within the method.
-
-.. code:: php
-
- # src/Blog/FoobarResolver.php
- Move Class*
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorMoveFile
-
-.. _motivation-3:
-
-Motivation
-~~~~~~~~~~
-
-When authoring classes, it is often difficult to determine really
-appropriate names and namespaces, this is unfortunate as a class name
-can quickly propagate through your code, making the class name harder to
-change as time goes on.
-
-This problem is multiplied if you have chosen an incorrect namespace.
-
-This refactoring will move either a class, class-containing-file or
-folder to a new location, updating the classes namespace and all
-references to that class where possible in a given *scope* (i.e. files
-known by GIT: ``git``, files known by Composer: ``composer``, or all PHP
-files under the current CWD: ``simple``).
-
-If you have defined file relationships with
-`navigator.destinations `__,
-then you have the option to move the related files in addition to the
-specified file. If using the command then specify ``--related``, or if
-using the RPC interface (f.e. VIM) you will be prompted.
-
-.. container:: alert alert-danger
-
- This is a dangerous refactoring! Ensure that you commit your work
- before executing it and be aware that success is not guaranteed
- (e.g. class references in non-PHP files or docblocks are not
- currently updated).
-
- This refactoring works best when you have a well tested code base.
-
-.. _before-and-after-3:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-.. code:: php
-
- # src/Blog/Post.php
- Extract Constant*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-.. _motivation-7:
-
-Motivation
-~~~~~~~~~~
-
-Each time a value is duplicated in a class a fairy dies. Duplicated
-values increase the fragility of your code. Replacing them with a
-constant helps to ensure runtime integrity.
-
-This refactoring includes `Replace Magic Number with Symbolic
-Constant `__
-(Fowler, Refactoring).
-
-.. _before-and-after-7:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- es') {
- return true;
- }
-
- return false;
- }
-
- public function yes()
- {
- return 'yes';
- }
- }
-
-After:
-
-.. code:: php
-
- ``:
-
-.. code:: php
-
- 1 + 2 + 3 + 5 === 6) {
- echo 'You win!';
- }
-
-After (entering ``$hasWon`` as a variable name):
-
-.. code:: php
-
- 1 + 2 + 3 + 5<> === 6) {
- echo 'You win!';
- }
-
-After (using ``$winningCombination`` as a variable name):
-
-.. code:: php
-
- `__ or invoke it manually.
-
-.. _motivation-9:
-
-Motivation
-~~~~~~~~~~
-
-This is one of the most common refactorings. Decomposing code into
-discrete methods helps to make code understandable and maintainable.
-
-Extracting a method manually involves:
-
-1. Creating a new method
-2. Moving the relevant block of code to that method.
-3. Scanning the code for variables which are from the original code.
-4. Adding these variables as parameters to your new method.
-5. Calling the new method in place of the moved code.
-
-This refactoring takes care of steps 1 through 5 and:
-
-- If a *single* variable that is declared in the selection which is
- used in the parent scope, it will be returned.
-- If *multiple* variables are used, the extracted method will return a
- tuple.
-- In both cases the variable(s) will be assigned at the point of
- extraction.
-- Any class parameters which are not already imported, will be
- imported.
-
-.. _before-and-after-9:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Selection shown between the two ``<>`` markers:
-
-.. code:: php
-
-
- if ($foobar) {
- return 'yes';
- }
-
- return $foobar;
- <>
-
- }
- }
-
-After extracting method ``newMethod``:
-
-.. code:: php
-
- newMethod($foobar);
-
- }
-
- private function newMethod(string $foobar)
- {
- if ($foobar) {
- return 'yes';
- }
-
- return $foobar;
- }
- }
-
-.. _refactoring_rename_variable:
-
-Rename Variable
----------------
-
-Rename a variable in the local or class scope.
-
-.. tabs::
-
- .. tab:: VIM Context Menu
-
- *Variable context menu > Rename*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-.. _motivation-18:
-
-Motivation
-~~~~~~~~~~
-
-Having meaningful and descriptive variable names makes the intention of
-code clearer and therefore easier to maintain. Renaming variables is a
-frequent refactoring, but doing this with a simple search and replace
-can often have unintended consequences (e.g. renaming the variable
-``$class`` also changes the ``class`` keyword).
-
-This refactoring will rename a variable, and only variables, in either
-the method scope or the class scope.
-
-.. _before-and-after-17:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- os)
- {
- foreach ($hellos as $greeting) {
- echo $greeting;
- }
-
- return $hellos;
- }
-
- }
-
-Rename the variable ``$hellos`` to ``$foobars`` in the local scope:
-
-.. code:: php
-
- Replace references*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-.. _motivation-19:
-
-Motivation
-~~~~~~~~~~
-
-This refactoring is *similar* to `Move Class <#class-move>`__, but
-without renaming the file. This is a useful refactoring when a dependant
-library has changed a class name and you need to update that class name
-in your project.
-
-.. _before-and-after-18:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- lo
- {
- public function say()
- {
-
- }
-
- }
-
- $hello = new Hello();
- $hello->say();
-
-Rename ``Hello`` to ``Goodbye``
-
-.. code:: php
-
- say();
-
-.. container:: alert alert-danger
-
- When renaming classes in your project use Class Move.
-
-.. _refactoring_rename_member:
-
-Rename Class Member
--------------------
-
-Rename a class member.
-
-.. tabs::
-
- .. tab:: CLI
-
- .. code-block::
-
- $ phpactor references:member path/to/Class.php memberName --type="method" --replace="newMemberName"
-
- Class FQNs are also accepted
-
- .. tab:: VIM Context Menu
-
- *Member context menu > Replace references*.
-
- .. tab:: VIM Plugin
-
- .. code-block::
-
- :PhpactorContextMenu
-
-.. _motivation-20:
-
-Motivation
-~~~~~~~~~~
-
-Having an API which is expressive of the intent of the class is
-important, and contributes to making your code more consistent and
-maintainable.
-
-When renaming members global search and replace can be used, but is a
-shotgun approach and you may end up replacing many things you did not
-mean to replace (e.g. imagine renaming the method ``name()``).
-
-This refactoring will:
-
-1. Scan for files in your project which contain the member name text.
-2. Parse all of the candidate files.
-3. Identify the members, and try and identify the containing class.
-4. Replace only the members which certainly belong to the target class.
-
-When replacing *private* and *protected* members, only the related
-classes will be updated.
-
-Due to the loosely typed nature of PHP this refactoring may not find all
-of the member accesses for the given class. Run your tests before and
-after applying this refactoring.
-
-.. container:: alert alert-info
-
- Hint: Use the CLI command to list all of the risky references. Risky
- references are those member accesses which match the query but whose
- containing classes could not be resolved.
-
-.. figure:: images/risky.png
- :alt: Risky references
-
- Risky references
-
-.. _before-and-after-19:
-
-Before and After
-~~~~~~~~~~~~~~~~
-
-Cursor position shown as ``<>``:
-
-.. code:: php
-
- y()
- {
-
- }
-
- }
-
- $hello = new Hello();
- $hello->say();
-
-Rename ``Hello#say()`` to ``Hello#speak()``
-
-.. code:: php
-
- speak();
-
diff --git a/doc/reference/rpc_command.rst b/doc/reference/rpc_command.rst
deleted file mode 100644
index 05bb682176..0000000000
--- a/doc/reference/rpc_command.rst
+++ /dev/null
@@ -1,1366 +0,0 @@
-Legacy RPC Commands
-===================
-
-
-.. This document is generated via the `development:generate-documentation` command
-
-
-.. contents::
- :depth: 2
- :backlinks: none
- :local:
-
-
-.. _RpcHandler_status:
-
-
-_RpcHandler_status
-------------------
-
-
-.. _RpcCommand_status_type:
-
-
-``type``
-""""""""
-
-
-**Default**: ``"formatted"``
-
-
-.. _RpcHandler_trust:
-
-
-_RpcHandler_trust
------------------
-
-
-.. _RpcCommand_trust_trust:
-
-
-``trust``
-"""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_file_info:
-
-
-_RpcHandler_file_info
----------------------
-
-
-.. _RpcCommand_file_info_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_references:
-
-
-_RpcHandler_references
-----------------------
-
-
-.. _RpcCommand_references_mode:
-
-
-``mode``
-""""""""
-
-
-**Default**: ``"find"``
-
-
-.. _RpcCommand_references_filesystem:
-
-
-``filesystem``
-""""""""""""""
-
-
-**Default**: ``"git"``
-
-
-.. _RpcCommand_references_replacement:
-
-
-``replacement``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_references_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_references_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_references_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_copy_class:
-
-
-_RpcHandler_copy_class
-----------------------
-
-
-.. _RpcCommand_copy_class_dest_path:
-
-
-``dest_path``
-"""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_copy_class_source_path:
-
-
-``source_path``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_move_class:
-
-
-_RpcHandler_move_class
-----------------------
-
-
-.. _RpcCommand_move_class_dest_path:
-
-
-``dest_path``
-"""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_move_class_confirmed:
-
-
-``confirmed``
-"""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_move_class_move_related:
-
-
-``move_related``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_move_class_source_path:
-
-
-``source_path``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_class_inflect:
-
-
-_RpcHandler_class_inflect
--------------------------
-
-
-.. _RpcCommand_class_inflect_new_path:
-
-
-``new_path``
-""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_inflect_variant:
-
-
-``variant``
-"""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_inflect_overwrite_existing:
-
-
-``overwrite_existing``
-""""""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_inflect_current_path:
-
-
-``current_path``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_class_new:
-
-
-_RpcHandler_class_new
----------------------
-
-
-.. _RpcCommand_class_new_new_path:
-
-
-``new_path``
-""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_new_variant:
-
-
-``variant``
-"""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_new_overwrite_existing:
-
-
-``overwrite_existing``
-""""""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_class_new_current_path:
-
-
-``current_path``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_transform:
-
-
-_RpcHandler_transform
----------------------
-
-
-.. _RpcCommand_transform_transform:
-
-
-``transform``
-"""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_transform_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_transform_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_extract_constant:
-
-
-_RpcHandler_extract_constant
-----------------------------
-
-
-.. _RpcCommand_extract_constant_constant_name:
-
-
-``constant_name``
-"""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_constant_constant_name_suggestion:
-
-
-``constant_name_suggestion``
-""""""""""""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_constant_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_constant_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_constant_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_extract_method:
-
-
-_RpcHandler_extract_method
---------------------------
-
-
-.. _RpcCommand_extract_method_method_name:
-
-
-``method_name``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_method_offset_start:
-
-
-``offset_start``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_method_offset_end:
-
-
-``offset_end``
-""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_method_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_method_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_generate_accessor:
-
-
-_RpcHandler_generate_accessor
------------------------------
-
-
-.. _RpcCommand_generate_accessor_names:
-
-
-``names``
-"""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_accessor_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_accessor_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_accessor_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_generate_mutator:
-
-
-_RpcHandler_generate_mutator
-----------------------------
-
-
-.. _RpcCommand_generate_mutator_names:
-
-
-``names``
-"""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_mutator_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_mutator_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_mutator_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_generate_method:
-
-
-_RpcHandler_generate_method
----------------------------
-
-
-.. _RpcCommand_generate_method_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_method_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_generate_method_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_import_class:
-
-
-_RpcHandler_import_class
-------------------------
-
-
-.. _RpcCommand_import_class_qualified_name:
-
-
-``qualified_name``
-""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_import_class_alias:
-
-
-``alias``
-"""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_import_class_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_import_class_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_import_class_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_rename_variable:
-
-
-_RpcHandler_rename_variable
----------------------------
-
-
-.. _RpcCommand_rename_variable_name:
-
-
-``name``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_rename_variable_name_suggestion:
-
-
-``name_suggestion``
-"""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_rename_variable_scope:
-
-
-``scope``
-"""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_rename_variable_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_rename_variable_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_rename_variable_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_change_visibility:
-
-
-_RpcHandler_change_visibility
------------------------------
-
-
-.. _RpcCommand_change_visibility_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_change_visibility_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_change_visibility_offset:
-
-
-``offset``
-""""""""""
-
-
-Type: integer
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_override_method:
-
-
-_RpcHandler_override_method
----------------------------
-
-
-.. _RpcCommand_override_method_method_name:
-
-
-``method_name``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_override_method_class_name:
-
-
-``class_name``
-""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_override_method_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_override_method_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_extract_expression:
-
-
-_RpcHandler_extract_expression
-------------------------------
-
-
-.. _RpcCommand_extract_expression_variable_name:
-
-
-``variable_name``
-"""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_expression_offset_start:
-
-
-``offset_start``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_expression_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_expression_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_extract_expression_offset_end:
-
-
-``offset_end``
-""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_import_missing_classes:
-
-
-_RpcHandler_import_missing_classes
-----------------------------------
-
-
-.. _RpcCommand_import_missing_classes_path:
-
-
-``path``
-""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_import_missing_classes_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_hover:
-
-
-_RpcHandler_hover
------------------
-
-
-.. _RpcCommand_hover_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_hover_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_complete:
-
-
-_RpcHandler_complete
---------------------
-
-
-.. _RpcCommand_complete_type:
-
-
-``type``
-""""""""
-
-
-**Default**: ``"php"``
-
-
-.. _RpcCommand_complete_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_complete_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_navigate:
-
-
-_RpcHandler_navigate
---------------------
-
-
-.. _RpcCommand_navigate_source_path:
-
-
-``source_path``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_navigate_destination:
-
-
-``destination``
-"""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_navigate_confirm_create:
-
-
-``confirm_create``
-""""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_context_menu:
-
-
-_RpcHandler_context_menu
-------------------------
-
-
-.. _RpcCommand_context_menu_action:
-
-
-``action``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_context_menu_current_path:
-
-
-``current_path``
-""""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_context_menu_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_context_menu_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_echo:
-
-
-_RpcHandler_echo
-----------------
-
-
-.. _RpcCommand_echo_message:
-
-
-``message``
-"""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_class_search:
-
-
-_RpcHandler_class_search
-------------------------
-
-
-.. _RpcCommand_class_search_short_name:
-
-
-``short_name``
-""""""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_offset_info:
-
-
-_RpcHandler_offset_info
------------------------
-
-
-.. _RpcCommand_offset_info_offset:
-
-
-``offset``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_offset_info_source:
-
-
-``source``
-""""""""""
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_goto_definition:
-
-
-_RpcHandler_goto_definition
----------------------------
-
-
-.. _RpcCommand_goto_definition_language:
-
-
-``language``
-""""""""""""
-
-
-Type: string
-
-
-Language of the current file
-
-
-**Default**: ``"php"``
-
-
-.. _RpcCommand_goto_definition_target:
-
-
-``target``
-""""""""""
-
-
-Type: string
-
-
-Where should the reference be opened
-
-
-**Default**: ``"focused_window"``
-
-
-**Allowed values**: "focused_window", "vsplit", "hsplit", "new_tab"
-
-
-.. _RpcCommand_goto_definition_offset:
-
-
-``offset``
-""""""""""
-
-
-Type: integer
-
-
-Number of character into the buffer
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_definition_source:
-
-
-``source``
-""""""""""
-
-
-Content of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_definition_path:
-
-
-``path``
-""""""""
-
-
-Path of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_goto_type:
-
-
-_RpcHandler_goto_type
----------------------
-
-
-.. _RpcCommand_goto_type_language:
-
-
-``language``
-""""""""""""
-
-
-Type: string
-
-
-Language of the current file
-
-
-**Default**: ``"php"``
-
-
-.. _RpcCommand_goto_type_target:
-
-
-``target``
-""""""""""
-
-
-Type: string
-
-
-Where should the reference be opened
-
-
-**Default**: ``"focused_window"``
-
-
-**Allowed values**: "focused_window", "vsplit", "hsplit", "new_tab"
-
-
-.. _RpcCommand_goto_type_offset:
-
-
-``offset``
-""""""""""
-
-
-Type: integer
-
-
-Number of character into the buffer
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_type_source:
-
-
-``source``
-""""""""""
-
-
-Content of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_type_path:
-
-
-``path``
-""""""""
-
-
-Path of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_goto_implementation:
-
-
-_RpcHandler_goto_implementation
--------------------------------
-
-
-.. _RpcCommand_goto_implementation_language:
-
-
-``language``
-""""""""""""
-
-
-Type: string
-
-
-Language of the current file
-
-
-**Default**: ``"php"``
-
-
-.. _RpcCommand_goto_implementation_target:
-
-
-``target``
-""""""""""
-
-
-Type: string
-
-
-Where should the reference be opened
-
-
-**Default**: ``"focused_window"``
-
-
-**Allowed values**: "focused_window", "vsplit", "hsplit", "new_tab"
-
-
-.. _RpcCommand_goto_implementation_offset:
-
-
-``offset``
-""""""""""
-
-
-Type: integer
-
-
-Number of character into the buffer
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_implementation_source:
-
-
-``source``
-""""""""""
-
-
-Content of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcCommand_goto_implementation_path:
-
-
-``path``
-""""""""
-
-
-Path of the current file
-
-
-**Default**: ``null``
-
-
-.. _RpcHandler_index:
-
-
-_RpcHandler_index
------------------
-
-
-.. _RpcCommand_index_watch:
-
-
-``watch``
-"""""""""
-
-
-**Default**: ``false``
-
-
-.. _RpcCommand_index_interval:
-
-
-``interval``
-""""""""""""
-
-
-Type: integer
-
-
-**Default**: ``5000``
-
diff --git a/doc/reference/stubs.rst b/doc/reference/stubs.rst
deleted file mode 100644
index 1fb019a1e5..0000000000
--- a/doc/reference/stubs.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-.. _stubs:
-
-Stubs
-=====
-
-Phpactor has two types of "stubs":
-
-PHP Core Stubs
---------------
-
-These stubs fill in for definitions (classes, functions and constants) that are
-defined in the PHP core or in PHP extensions. Phpactor expects the path to be a
-single directory and that directory is configured by default to be the one
-containing the `PHPStorm stubs `_
-that are bundled with Phpactor.
-
-You probably do **not** want to change this setting, but the directory *can* be
-changed at as :ref:`param_worse_reflection.additive_stubs`.
-
-Additive Stubs
---------------
-
-These stubs **augment** existing classes. For example, in Laravel you may use the `Laravel IDE Helper `_ package to provide missing "magic" methods and properties. New definitions cannot be provided with additive stubs.
-
-
-You can specify these stub files with :ref:`param_worse_reflection.additive_stubs` and the stubs will merge onto the existing definitions.
-
-.. note::
-
- Additive stubs should *not* be indexed as Phpactor will be unable to
- determine which definition is the canonical one. If you use additive stubs
- ensure that you also manually specify which directories contain your project code (typically `src` and `tests`).
-
- The indexer include patterns can be specified with :ref:`param_indexer.include_patterns`.
diff --git a/doc/reference/templates.rst b/doc/reference/templates.rst
deleted file mode 100644
index a60f59f586..0000000000
--- a/doc/reference/templates.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-.. _template_variants:
-
-Templates
-=========
-
-Phpactor allows you to provide your own templates for some class and
-code generation.
-
-When :ref:`generating a new class ` you can specify a **variant**.
-
-Variants are registered in ``.phpactor.yml`` with
-:ref:`param_code_transform.class_new.variants`:
-
-.. code:: yaml
-
- code_transform.class_new.variants:
- unit: phpunit_test
-
-This will make the variant ``unit`` available.
-
-Implement the templates by placing template files in
-``.phpactor/templates/phpunit_test``:
-
-.. code:: twig
-
- `_
-- `PHPStan Types `_
-- `Psalm Types `_
-
-Basic Types
------------
-
-.. table::
- :align: left
-
- ============== ================== ========= ========
- Name Example PHP Phpactor
- ============== ================== ========= ========
- Array ``array`` ``*`` ✔
- Boolean ``bool`` ``*`` ✔
- Float ``float`` ``*`` ✔
- Int ``int`` ``*`` ✔
- Resource (internal type) ``*`` ✔
- String ``string`` ``*`` ✔
- Self ``self`` ``*`` ✔
- Parent ``parent`` ``*`` ✔
- Callable ``callable`` ``*`` ✔
- Iterable ``iterable`` ``7.1`` ✔
- Nullable ``?Foor`` ``7.1`` ✔
- Object ``object`` ``7.2`` ✔
- Union ``Foo|Bar`` ``8.0`` ✔
- Mixed ``mixed`` ``8.0`` ✔
- Intersection ``Foo&Bar`` ``8.1`` ✔
- ============== ================== ========= ========
-
-Return Only Types
-~~~~~~~~~~~~~~~~~
-
-.. table::
- :align: left
-
- ============== ================== ========= ======== ========================
- Name Example PHP Phpactor Notes
- ============== ================== ========= ======== ========================
- Void ``void`` ``7.4+`` ✔
- Static ``static`` ``8.0`` ✔
- Never ``never`` ``8.1+`` ✔
- False ``false`` ``8.2+`` ✔ Pseudo-type before 8.2
- Null ``null`` ``8.2+`` ✔
- ============== ================== ========= ======== ========================
-
-Docblock Types
-~~~~~~~~~~~~~~
-
-.. table::
- :align: left
-
- =============== ============================== ========
- Name Example Phpactor
- =============== ============================== ========
- Array Key ``array-key`` ✔
- Array Literal ``array{string,int}`` ✔
- Array Shape ``array{foo:string,baz:int}`` ✔
- List Syntax ``string[]`` ✔
- Class String ``class-string`` ✔
- Closure ``Closure(string, int): void`` ✔
- Float Literal ``1234.12`` ✔
- Generics ``Foobar`` ✔
- Int Literal ``1234`` ✔
- Int Range ``int<0,max>`` ✔
- Int Positive ``positive-int`` ✔
- Int Negative ``negative-int`` ✔
- List ``list`` ✔
- Parenthesized ``(Foo&Bar)|object`` ✔
- String Literal ``"hello"`` ✔
- This ``$this`` (same as ``static``) ✔
- =============== ============================== ========
-
-Integer Types
--------------
-
-.. table::
- :align: left
-
- ============== ============= ========= ===========
- Example PHP Supported Description
- ============== ============= ========= ===========
- ``123`` ``*`` ✔ Integer
- ``0b0110`` ``*`` ✔ Binary type
- ``0x1a`` ``*`` ✔ Hexidecimal
- ``0123`` ``*`` ✔ Octal
- ``123_123`` ``7.4`` ✔ Decimal
- ``0o123`` ``8.1`` ✘ Octal
- ============== ============= ========= ===========
-
-Conditional Types
------------------
-
-Phpactor undestands conditional return types of the form:
-
-
-.. code-block:: php
-
- /**
- * @return (
- * $array is array
- * ? int
- * : ($array is array
- * ? float
- * : float|int
- * )
- * )
- */
- function array_some(array $array) {
- return array_sum($array);
- }
-
-Generic Types
--------------
-
-Phpactor understands Generic (or templated) types. See `PHPStan `_ or
-`Psalm `_
-documentation for what these are and how they work.
-
-Phpactor supports:
-
-- ``@implements`` and ``@extends`` in addition to ``@template-extends`` and
- ``@template-implements``.
-- ``@template`` and ``@template T of Foo``
-- Injecting template variables into the constructor.
-- Method level template vars.
-- ``class-string``
-
-For example:
-
-.. code-block:: php
-
- a = $a;
- }
-
- /**
- * @return T
- */
- public function a()
- {
- return $this->a;
- }
- }
-
- $f = new Foo(new Bar());
- $bar = $f->a(); // Phpactor now knows that `$bar` is Bar
-
-In addition Phpactor supports `class-string` which allows you to capture a
-class type from a class string (e.g. ``MyClass::class`` is interpreted as a
-`class-string`. The following extract is from the Phpactor Container.
-
-.. code-block:: php
-
- |string $id
- * @return ($id is class-string ? T : mixed)
- */
- public function get($id);
- }
-
-The conditional type enables the return value of ``get`` to be an object of
-class ``T`` if the ``$id`` is a ``class-string`` or ``mixed`` in any other
-case.
diff --git a/doc/tips.rst b/doc/tips.rst
deleted file mode 100644
index 41a102614e..0000000000
--- a/doc/tips.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Tips
-====
-
-.. toctree::
- :maxdepth: 2
-
- tips/performance
diff --git a/doc/tips/performance.rst b/doc/tips/performance.rst
deleted file mode 100644
index 84427e9be3..0000000000
--- a/doc/tips/performance.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-Performance
-===========
-
-Large Files
------------
-
-Phpactor is not currently very performant as a **language server** when used on
-large and complex files. This is due to the (blocking) static analysis overhead
-from diagnostics.
-
-You can improve performance by :
-
-- :ref:`disabling diagnostics` when documents are _updated_
-- :ref:`disabling document highlighting` when documents are _updated_
-
-You can disable both settings with:
-
-.. code-block:: bash
-
- $ phpactor config:set language_server.diagnostics_on_update false
- $ phpactor config:set language_server_highlight.enabled false
-
-Indexing
---------
-
-The Phpactor indexer will include all files that satisfy the :ref:`include globs` and exclude any files in the :ref:`exclude globs`.
-
-Depending on your project you may want to customize this, for example, in a **Symfony** project you can avoid indexing the `var/cache` directory by excluding `/var/cache/**/*`.
-
-The following command (run in the project root) will update ``.phpactor.json`` to exclude cache and other common directories:
-
-.. code-block:: bash
-
- $ phpactor config:set indexer.exclude_patterns '["/vendor/**/Tests/**/*","/vendor/**/tests/**/*","/var/cache/**/*","/vendor/composer/**/*"]'
-
diff --git a/doc/usage.rst b/doc/usage.rst
deleted file mode 100644
index ed607886fd..0000000000
--- a/doc/usage.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Usage
-=====
-
-.. toctree::
- :maxdepth: 2
-
- usage/getting-started
- usage/standalone
- usage/configuration
- usage/language-server
- usage/vim-plugin
diff --git a/doc/usage/configuration.rst b/doc/usage/configuration.rst
deleted file mode 100644
index 9187fdf931..0000000000
--- a/doc/usage/configuration.rst
+++ /dev/null
@@ -1,71 +0,0 @@
-.. _configuration:
-
-Configuration
-=============
-
-**Trusted** configuration files are loaded from your current directory, and then
-from the XDG standard user and system directories, for example:
-
-- ``/home/daniel/www/phpactor/phpactor/.phpactor.json``
-- ``/home/daniel/.config/phpactor/phpactor.json``
-- ``/etc/xdg/phpactor/phpactor.json``
-
-Phpactor will merge configuration files, with more specific
-configurations overriding the less specific ones.
-
-Initializing
-------------
-
-To create a new configuration file with a reference to the JSON schema use:
-
-.. code:: bash
-
- $ phpactor config:init
-
-Trusting Configuration
-----------------------
-
-By default Phpactor will not load configuration files from the project root or
-current working directory as a maliciously placed configuration file in a project
-would allow arbitrary code execution. Therefore directories must be **trusted**.
-
-When using the langauge server a dialog will show up asking if you trust the configuration
-file if one is present. On the CLI you can use the `phpactor config:trust` command.
-
-Config Dump
------------
-
-Use the ``config:dump`` command to show the currently loaded
-configuration files and all of the current settings:
-
-.. code:: bash
-
- $ phpactor config:dump
- Config files:
- [✔] /home/daniel/workspace/myproject/.phpactor.json
- [✔] /home/daniel/.config/phpactor/phpactor.json
- [𐄂] /etc/xdg/phpactor/phpactor.yml
-
- code_transform.class_new.variants:
- exception:exception
-
- # ... etc
-
-File Paths
-----------
-
-Configured file paths can make use of some special tokens, for example
-``%cache%/foobar`` will expand to ``/home/user/.cache/phpactor/foobar``:
-
-- ``%cache%``: The absolute path to the phpactor cache dir (e.g.
- ``/home/user/.cache/phpactor``).
-- ``%project_root%``: Will expand to the project root (e.g. the current
- working directory or the value provided by ``--working-dir``).
-- ``%config%``: The path to Phpactor’s config dir
- (e.g. ``/home/user/.config/phpactor``).
-- ``%application_root%``: The path to Phpactor’s own root directory.
-
-Reference
----------
-
-See: :doc:`../reference/configuration`
diff --git a/doc/usage/getting-started.rst b/doc/usage/getting-started.rst
deleted file mode 100644
index 4c09388f1b..0000000000
--- a/doc/usage/getting-started.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-Getting Started
-===============
-
-How you start depends on your editor.
-
-.. tabs::
-
- .. tab:: VIM or Neovim
-
- Configure the :doc:`Language Server<../lsp/vim>` and optionally the legacy :doc:`vim-plugin` for some additional functionality
-
- .. tab:: VS Code
-
- Install the `vscode-phpactor`_ extension
-
- .. tab:: Nova Code Editor
-
- Install the `Nova`_ extension
-
- .. tab:: Other Editor
-
- Phpactor is known to work as a language server for Emacs_, Kate_, Sublime_, Helix_ and many others, feel free to contribute setup guides for these editors to this documentation.
-
-.. _vscode-phpactor: https://github.com/phpactor/vscode-phpactor
-.. _Nova: https://extensions.panic.com/extensions/emran-mr/emran-mr.phpactor/
-.. _Emacs: https://github.com/emacs-lsp/lsp-mode
-.. _Helix: https://helix-editor.com/
-.. _Sublime: https://www.sublimetext.com/
-.. _Kate: https://kate-editor.org/en-gb/
diff --git a/doc/usage/language-server.rst b/doc/usage/language-server.rst
deleted file mode 100644
index 5cac387907..0000000000
--- a/doc/usage/language-server.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. _language_server:
-
-Language Server
-===============
-
-Phpactor implements the `Language Server Protocol`_
-which is supported by many text editors and IDEs.
-
-See :doc:`/lsp/support` for the list of supported features.
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- ../lsp/clients
-
-.. _Language Server Protocol: https://microsoft.github.io/language-server-protocol/specification
diff --git a/doc/usage/standalone.rst b/doc/usage/standalone.rst
deleted file mode 100644
index e4d0c68b38..0000000000
--- a/doc/usage/standalone.rst
+++ /dev/null
@@ -1,80 +0,0 @@
-.. _installation:
-
-Installation
-============
-
-Requirements
-------------
-
-Phpactor requires PHP 8.2.
-
-.. _installation_phar:
-
-PHAR Installation
------------------
-
-You can download ``phpactor.phar`` as follows:
-
-.. code-block:: bash
-
- $ curl -Lo phpactor.phar https://github.com/phpactor/phpactor/releases/latest/download/phpactor.phar
-
-Then make it executable and symlink it somewhere in your PATH_:
-
-.. code:: bash
-
- $ chmod a+x phpactor.phar
- $ mv phpactor.phar ~/.local/bin/phpactor
-
-.. _installation_global:
-
-Manual Installation
--------------------
-
-You can checkout the project and then create a symlink.
-
-.. code:: bash
-
- $ cd ~/home/you/somewhere
- $ git clone https://github.com/phpactor/phpactor.git
- $ cd phpactor
- $ composer install
- $ cd /usr/local/bin
- $ sudo ln -s ~/your/projects/phpactor/bin/phpactor phpactor
-
-This is the best approach for bleeding edge and local development.
-
-Arch Linux (AUR)
-----------------
-
-Also available in the AUR:
-
-.. code:: bash
-
- $ yay -S phpactor
-
-Nix/OS
-------
-
-Phpactor is available in NixOS.
-
-.. code-block:: bash
-
- $ nix-shell -p phpactor
-
-
-Health Check
-------------
-
-Phpactor works best when used with Composer, and is slightly better when
-used with Git.
-
-Check support using the ``status`` command:
-
-::
-
- $ phpactor status
- ✔ Composer detected - faster class location and more features!
- ✔ Git detected - enables faster refactorings in your repository scope!
-
-.. _PATH: https://en.wikipedia.org/wiki/PATH_(variable)
diff --git a/doc/usage/vim-plugin.rst b/doc/usage/vim-plugin.rst
deleted file mode 100644
index c578100e0b..0000000000
--- a/doc/usage/vim-plugin.rst
+++ /dev/null
@@ -1,108 +0,0 @@
-.. _vim_plugin:
-
-VIM RPC Plugin
-==============
-
-This is the original VIM plugin, and is bundled with Phpactor by default.
-
-.. note::
- Using the RPC part of phpactor is deprecated. Most of it's features have been implemented as part of the LSP which should be used instead.
-
-
-Installation
-------------
-
-**Prerequisites**:
-
-- `Composer `__
-- PHP 8.0
-- `VIM 8 `__ or
- `Neovim `__
-
-Using the `vim-plug `__ plugin
-manager add the following in your VIM configuration (e.g. ``~/.vimrc``
-or ``~/.config/nvim/init.vim`` when using Neovim):
-
-::
-
- Plug 'phpactor/phpactor', {'for': 'php', 'tag': '*', 'do': 'composer install --no-dev -o'}
-
-Reload VIM (or ``:source ~/.vimrc``) then update your plugins:
-
-::
-
- :PlugInstall
-
-If you need to install the dependencies manually, then:
-
-::
-
- $ cd ~/.vim/plugged/phpactor
- $ composer install
-
-Now open a PHP file and issue the following command ``:PhpactorStatus``:
-
-::
-
- Support
- -------
- [✔] Composer detected - faster class location and more features!
- [✔] Git detected - enables faster refactorings in your repository scope!
- [✔] XDebug is disabled. XDebug has a negative effect on performance.
-
- Config files
- ------------
- [✔] /home/daniel/www/phpactor/phpactor/.phpactor.yml
- [✔] /home/daniel/.config/phpactor/phpactor.yml
- [✘] /etc/xdg/phpactor/phpactor.yml
-
-To find out more about the plugin type ``:help phpactor``
-
-Troubleshooting
-~~~~~~~~~~~~~~~
-
-``E492: Not an editor command: PhpactorStatus``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-You need to open a PHP file before using Phpactor.
-
-``Phpactor requires at least PHP 8.0``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-If you run an older version of PHP by default, you will need to install
-another version and set ``:phpactorPhpBin`` in your ``.vimrc`` (or equivalent):
-
-.. code:: vim
-
- let g:phpactorPhpBin = "/usr/bin/php7.3"
-
-``Composer not found** or **Git not detected``
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-The Git and Composer checks are referring to the current “workspace”
-(i.e. where you started Vim from). If you've already setup Git and
-Composer for your project, ensure you are starting Vim from the project
-directory to enable detection.
-
-Usage and Configuration
------------------------
-
-To find out how to use the plugin type ``:help phpactor`` or view the
-:doc:`../vim-plugin/man`.
-
-Complementary Plugins
----------------------
-
-The following plugins add more functionality to Phpactor
-
-- `ncm2-phpactor `__:
- Integrates with the `ncm2 `__
- autocompletion manager (for Neovim).
-- `deoplete-phpactor `__:
- Integrates with
- `deoplete `__
-- `coc-phpactor `__:
- Integrates with
- `CoC `__
-- `phpactor-mappings `__:
- Provides sensible default key mappings for Phpactor.
diff --git a/doc/vim-plugin/experimental.rst b/doc/vim-plugin/experimental.rst
deleted file mode 100644
index 85036f3522..0000000000
--- a/doc/vim-plugin/experimental.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-Experimental
-============
-
-FZF and BAT
------------
-
-Experimental functionality with FZF and BAT depends on:
-
-- `fzf `__
-- `bat `__
-
-In addition FZF support requires the FZF VIM plugin:
-
-`fzf.vim `__
-
-FZF Choice Selection
-~~~~~~~~~~~~~~~~~~~~
-
-Some refactorings will allow you to select multiple entires (for example
-`override
-method `__.
-
-FZF provides a fuzzy search interface and the possiblity to select
-multiple entries at once.
-
-Use ```` to toggle selection and CTRL-A/CTRL-D to select all/select
-none.
-
-See the `Fzf `__ documentation for more
-details.
-
-Enable this feature by configuring FZF as the ``inputlist`` strategy in
-your \`.vimrc’:
-
-::
-
- let g:phpactorInputListStrategy = 'phpactor#input#list#fzf'
-
-FZF Qucikfix with BAT preview
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The VIM quickfix list is used to navigate through a set of references
-(where a reference is a file / character position).
-
-The FZF strategy provides a layer on top this to allow you to
-efficiently filter, preview and select only those entries you want to
-navigate to to the quickfix list.
-
-Enable it as follows:
-
-::
-
- let g:phpactorQuickfixStrategy = 'phpactor#quickfix#fzf'
diff --git a/doc/vim-plugin/man.rst b/doc/vim-plugin/man.rst
deleted file mode 100644
index 1f732220bd..0000000000
--- a/doc/vim-plugin/man.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Help
-====
-
-You can view this manual in VIM by typing ``:help phpactor``
-
-.. include:: ../phpactor.txt
- :literal:
diff --git a/doc/vim.rst b/doc/vim.rst
deleted file mode 100644
index 756f81f86d..0000000000
--- a/doc/vim.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-VIM Plugin
-==========
-
-.. toctree::
- :maxdepth: 2
- :glob:
-
- vim-plugin/man
- vim-plugin/experimental
-
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index 778e1d400c..0000000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-services:
- php:
- build:
- dockerfile: ./docker/Dockerfile
- context: ./
- command: sleep infinity
- environment:
- XDG_CACHE_HOME: /phpactor/build/.cache
- COLUMNS: 100
- volumes:
- - ./:/phpactor:delegated
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 100644
index f01bc0efd3..0000000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-FROM php:8.2-cli
-RUN apt-get update && apt-get install -y python3-pip wget git inotify-tools libzip-dev
-RUN echo "$(curl -sS https://composer.github.io/installer.sig) -" > composer-setup.php.sig \
- && curl -sS https://getcomposer.org/installer | tee composer-setup.php | sha384sum -c composer-setup.php.sig \
- && php composer-setup.php && rm composer-setup.php* \
- && chmod +x composer.phar && mv composer.phar /usr/bin/composer
-RUN docker-php-ext-install pcntl zip
-RUN wget https://github.com/google/vimdoc/releases/download/v0.7.1/vimdoc_0.7.1-1_all.deb && \
- dpkg -i vimdoc_0.7.1-1_all.deb
-COPY requirements.txt ./
-COPY docker/php.ini /usr/local/etc/php/conf.d/
-RUN pip3 install -r requirements.txt --break-system-packages
-RUN git config --global init.defaultBranch master
-WORKDIR /phpactor
diff --git a/docker/php.ini b/docker/php.ini
deleted file mode 100644
index 7999e96156..0000000000
--- a/docker/php.ini
+++ /dev/null
@@ -1 +0,0 @@
-memory_limit = -1
diff --git a/flake.lock b/flake.lock
deleted file mode 100644
index 570692e78b..0000000000
--- a/flake.lock
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "nodes": {
- "flake-parts": {
- "inputs": {
- "nixpkgs-lib": "nixpkgs-lib"
- },
- "locked": {
- "lastModified": 1736143030,
- "narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
- "owner": "hercules-ci",
- "repo": "flake-parts",
- "rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
- "type": "github"
- },
- "original": {
- "id": "flake-parts",
- "type": "indirect"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1737879851,
- "narHash": "sha256-H+FXIKj//kmFHTTW4DFeOjR7F1z2/3eb2iwN6Me4YZk=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "5d3221fd57cc442a1a522a15eb5f58230f45a304",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixpkgs-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "nixpkgs-lib": {
- "locked": {
- "lastModified": 1735774519,
- "narHash": "sha256-CewEm1o2eVAnoqb6Ml+Qi9Gg/EfNAxbRx1lANGVyoLI=",
- "type": "tarball",
- "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
- },
- "original": {
- "type": "tarball",
- "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
- }
- },
- "root": {
- "inputs": {
- "flake-parts": "flake-parts",
- "nixpkgs": "nixpkgs"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/flake.nix b/flake.nix
deleted file mode 100644
index dd94f97029..0000000000
--- a/flake.nix
+++ /dev/null
@@ -1,73 +0,0 @@
-# this is a WIP flake for development and experimentation only
-{
- description = "phpactor/phpactor";
-
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- };
-
- outputs = inputs @ {
- self,
- flake-parts,
- ...
- }:
- flake-parts.lib.mkFlake {inherit inputs;} {
- # This flake is for Linux (x86) and Apple (darwin) systems
- # If you need more systems, inspect `nixpkgs.lib.systems.flakeExposed` and
- # add them to this list.
- #
- # $ nix repl ""
- # nix-repl> lib.systems.flakeExposed
- systems = ["x86_64-linux" "aarch64-linux"];
-
- perSystem = {
- pkgs,
- system,
- ...
- }: let
- jaeger = pkgs.stdenv.mkDerivation {
- pname = "jaeger";
- version = "1.49.0";
- src = pkgs.fetchurl {
- url = "https://github.com/jaegertracing/jaeger/releases/download/v1.73.0/jaeger-2.10.0-linux-amd64.tar.gz";
- hash = "sha256-/hqgg1MNAqlBWOUJSjM0NikYLKye6GQAM3KinfHAUNM=";
- };
- phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
- installPhase = ''
- mkdir -p $out/bin
- install ./jaeger $out/bin
- '';
- };
- phpWithXdebug = (pkgs.php84.buildEnv {
- extensions = ({ enabled, all }: enabled ++ (with all; [
- xdebug
- opentelemetry
- ]));
- extraConfig = ''
- xdebug.mode=debug
- '';
- });
- in {
- # Run `nix fmt` to reformat the nix files
- formatter = pkgs.alejandra;
-
- # Run `nix develop` to enter the development shell
- devShells.default = pkgs.mkShellNoCC {
- name = "php-devshell";
-
- buildInputs = [
- jaeger
- pkgs.python3
- phpWithXdebug
- pkgs.php84.packages.composer
-
- ];
- shellHook = ''
- if [ ! -d ".venv" ]; then
- python3 -m venv .venv;
- fi
- source .venv/bin/activate;'';
- };
- };
- };
-}
diff --git a/ftplugin/php.vim b/ftplugin/php.vim
deleted file mode 100644
index b6fb4ba2f0..0000000000
--- a/ftplugin/php.vim
+++ /dev/null
@@ -1,7 +0,0 @@
-augroup PhpactorInit
- autocmd! *
- autocmd CompleteDone call phpactor#_completeImportClass(v:completed_item)
-augroup END
-
-
-" vim: et ts=4 sw=4 fdm=marker
diff --git a/ftplugin/php/commands.vim b/ftplugin/php/commands.vim
deleted file mode 100644
index 304f9b758a..0000000000
--- a/ftplugin/php/commands.vim
+++ /dev/null
@@ -1,82 +0,0 @@
-""
-" Extract a new method from the current selection
-command! -buffer -range=% PhpactorExtractMethod call phpactor#ExtractMethod()
-
-""
-" Extract the selected expression and assign it to a variable before (placing
-" it before the current statement)
-command! -buffer -range=% PhpactorExtractExpression call phpactor#ExtractExpression('v')
-
-""
-" Extract a constant from a literal
-command! -buffer -nargs=0 PhpactorExtractConstant call phpactor#ExtractConstant()
-
-""
-" Import the name under the cursor. If multiple options are available, you
-" are able to choose one.
-command! -buffer -nargs=0 PhpactorImportClass call phpactor#ImportClass()
-
-""
-" Attempt to import all non-resolvable classes in the current class (based
-" on offset position)
-command! -buffer -nargs=0 PhpactorImportMissingClasses call phpactor#ImportMissingClasses()
-
-""
-" Show information about the symbol under the cursor.
-command! -buffer -nargs=0 PhpactorHover call phpactor#Hover()
-
-""
-" Show the context menu for the current cursor position.
-command! -buffer -nargs=0 PhpactorContextMenu call phpactor#ContextMenu()
-
-""
-" Copy the current file - updating the namespace and class name according to
-" the new file location and name
-command! -buffer -nargs=0 PhpactorCopyFile call phpactor#CopyFile()
-
-""
-" Copy the current class FQN (based on current filename) to the clipboard
-command! -buffer -nargs=0 PhpactorCopyClassName call phpactor#CopyFullClassName()
-
-""
-" Move the current file - updating the namespace and class name according to
-" the new file location and name
-command! -buffer -nargs=0 PhpactorMoveFile call phpactor#MoveFile()
-
-""
-" Inflect a new class from the current class (e.g. generate an interface for
-" the current class)
-command! -buffer -nargs=0 PhpactorClassInflect call phpactor#ClassInflect()
-
-""
-" Attempt to find all references to the class name or method under the cursor.
-" The results will be loaded into the quik-fix list
-command! -buffer -nargs=0 PhpactorFindReferences call phpactor#FindReferences()
-
-""
-" Navigate - jump to the parent class, interface, or any of the relationships
-" defined in `navigation.destinations` https://phpactor.github.io/phpactor/configuration.html#reference
-command! -buffer -nargs=0 PhpactorNavigate call phpactor#Navigate()
-
-""
-" Rotate the visiblity of the method under the cursor
-command! -buffer -nargs=0 PhpactorChangeVisibility call phpactor#ChangeVisibility()
-
-""
-" Generate accessors for the current class
-command! -buffer -nargs=0 PhpactorGenerateAccessors call phpactor#GenerateAccessors()
-
-""
-" Generate mutators for the current class
-command! -buffer -nargs=0 PhpactorGenerateMutators call phpactor#GenerateMutators()
-
-""
-" Automatically add any missing properties to a class
-command! -buffer -nargs=0 PhpactorTransform call phpactor#Transform()
-
-""
-" Trust configuration in the current working directory
-command! -buffer -nargs=0 PhpactorTrust call phpactor#Trust()
-
-" Revoke trust in the current working directory
-command! -buffer -nargs=0 PhpactorUntrust call phpactor#Untrust()
diff --git a/ftplugin/php/mappings.vim b/ftplugin/php/mappings.vim
deleted file mode 100644
index f4c406707d..0000000000
--- a/ftplugin/php/mappings.vim
+++ /dev/null
@@ -1,34 +0,0 @@
-""
-" @section Mappings
-"
-" Phpactor does not assume any mappings automatically, the following mappings
-" are available for you to copy: >
-"
-" augroup PhpactorMappings
-" au!
-" au FileType php nmap u :PhpactorImportClass
-" au FileType php nmap e :PhpactorClassExpand
-" au FileType php nmap ua :PhpactorImportMissingClasses
-" au FileType php nmap mm :PhpactorContextMenu
-" au FileType php nmap nn :PhpactorNavigate
-" au FileType php,cucumber nmap o
-" \ :PhpactorGotoDefinition edit
-" au FileType php nmap K :PhpactorHover
-" au FileType php nmap tt :PhpactorTransform
-" au FileType php nmap cc :PhpactorClassNew
-" au FileType php nmap ci :PhpactorClassInflect
-" au FileType php nmap fr :PhpactorFindReferences
-" au FileType php nmap mf :PhpactorMoveFile
-" au FileType php nmap cf :PhpactorCopyFile
-" au FileType php nmap ee
-" \ :PhpactorExtractExpression
-" au FileType php vmap