Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tools/.phpstan/composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"require-dev": {
"phpstan/phpstan": "^2.1.56",
"phpstan/phpstan": "^2.2.1",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan-strict-rules": "^2.0.11",
"tomasvotruba/type-coverage": "^2.2.1",
Expand Down
21 changes: 16 additions & 5 deletions tools/.phpstan/composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 16 additions & 5 deletions tools/.phpstan/vendor/composer/installed.json
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,12 @@
},
{
"name": "phpstan/phpstan",
"version": "2.1.56",
"version_normalized": "2.1.56.0",
"version": "2.2.1",
"version_normalized": "2.2.1.0",
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/93a603c9fc3be8c3c93bbc8d22170ad766685537",
"reference": "93a603c9fc3be8c3c93bbc8d22170ad766685537",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/dea9c8f2d25cc849391042b71e429c1a4bf82660",
"reference": "dea9c8f2d25cc849391042b71e429c1a4bf82660",
"shasum": ""
},
"require": {
Expand All @@ -237,7 +237,7 @@
"conflict": {
"phpstan/phpstan-shim": "*"
},
"time": "2026-05-26T17:04:57+00:00",
"time": "2026-05-28T14:44:12+00:00",
"bin": [
"phpstan",
"phpstan.phar"
Expand All @@ -253,6 +253,17 @@
"license": [
"MIT"
],
"authors": [
{
"name": "Ondřej Mirtes"
},
{
"name": "Markus Staab"
},
{
"name": "Vincent Langlet"
}
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
Expand Down
10 changes: 5 additions & 5 deletions tools/.phpstan/vendor/composer/installed.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
'name' => '__root__',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => '0398c8400327a363191c3004854396b29281256e',
'reference' => 'a030e5333a106e9bdb041358cbf1d03e323656a0',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
Expand All @@ -13,7 +13,7 @@
'__root__' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => '0398c8400327a363191c3004854396b29281256e',
'reference' => 'a030e5333a106e9bdb041358cbf1d03e323656a0',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
Expand Down Expand Up @@ -47,9 +47,9 @@
'dev_requirement' => true,
),
'phpstan/phpstan' => array(
'pretty_version' => '2.1.56',
'version' => '2.1.56.0',
'reference' => '93a603c9fc3be8c3c93bbc8d22170ad766685537',
'pretty_version' => '2.2.1',
'version' => '2.2.1.0',
'reference' => 'dea9c8f2d25cc849391042b71e429c1a4bf82660',
'type' => 'library',
'install_path' => __DIR__ . '/../phpstan/phpstan',
'aliases' => array(),
Expand Down
115 changes: 115 additions & 0 deletions tools/.phpstan/vendor/phpstan/phpstan/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# PHPStan - PHP Static Analysis Tool

## Project Overview

PHPStan finds errors in PHP code without running it. It catches bugs before tests are written, moving PHP closer to compiled languages. This is the **distribution repository** — the compiled PHAR and supporting infrastructure. The actual source code lives at [phpstan/phpstan-src](https://github.com/phpstan/phpstan-src).

- **Website:** https://phpstan.org/
- **Documentation:** https://phpstan.org/user-guide/getting-started
- **API Reference:** https://apiref.phpstan.org/

## Repository Structure

```
├── phpstan # CLI entry point (shell script loading the PHAR)
├── phpstan.phar # Compiled PHAR archive (~26 MB)
├── phpstan.phar.asc # GPG signature for the PHAR
├── bootstrap.php # PHAR autoloader with PHP version polyfills
├── composer.json # Package definition (requires PHP ^7.4|^8.0)
├── .phar-checksum # MD5 + SHA1 checksums for reproducible builds
├── conf/
│ └── bleedingEdge.neon # Bleeding edge configuration profile
├── e2e/ # End-to-end tests (~67 test scenarios)
├── docker/ # Dockerfiles for PHP 8.0–8.4
├── identifier-extractor/ # Tool to extract error identifiers from rule source code
├── playground-api/ # AWS Lambda API for the online playground (TypeScript)
├── playground-runner/ # AWS Lambda runner for the playground (PHP/Bref)
├── website/ # phpstan.org static site (Eleventy + Vite + TailwindCSS)
└── .github/workflows/ # CI/CD workflows
```

## Key Concepts

### Distribution Model

This repository distributes a pre-built PHAR archive. The source code is in [phpstan/phpstan-src](https://github.com/phpstan/phpstan-src), which is on PHP 8.1+ internally but the PHAR build is downgraded to support PHP 7.4+. The `phpstan` script loads the PHAR and delegates to the bundled binary.

### PHP Version Support

- **This distribution package:** PHP ^7.4|^8.0 (defined in composer.json)
- **phpstan-src internally:** PHP 8.1+ (downgraded during PHAR build)
- **Other extension repositories** (phpstan-strict-rules, phpstan-doctrine, phpstan-symfony, etc.): still support PHP 7.4+
- **E2E tests run on:** PHP 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5 (Linux + Windows)

### Bleeding Edge

The `conf/bleedingEdge.neon` configuration enables experimental/strict checks before they become defaults. Users opt in by including this config.

### Error Identifiers

Every PHPStan error has a unique identifier (e.g., `argument.type`, `deadCode.unreachable`). The `identifier-extractor/` tool scans all PHPStan repositories to extract these identifiers, producing JSON used to generate documentation on the website.

## Development


### CI Workflows

Key workflows in `.github/workflows/`:

- **`tests.yml`** — Runs e2e tests on PHP 7.4–8.5, Linux + Windows. Triggered on changes to `e2e/**`, `phpstan`, `.phar-checksum`, `bootstrap.php`.
- **`other-tests.yml`** — Additional integration tests (PHP-Parser, React Promise, etc.)
- **`integration-tests.yml`** — Tests against major projects (Rector, Larastan, Carbon, etc.)
- **`extension-tests.yml`** — Tests 1st-party PHPStan extensions (PHPUnit, Doctrine, Symfony, etc.)
- **`release.yml`** — Creates GitHub release on tag push, uploads `phpstan.phar` and signature
- **`docker-stable.yml`** / **`docker-nightly.yml`** — Builds multi-arch Docker images (arm64 + amd64) pushed to ghcr.io
- **`extract-identifiers.yml`** — Extracts error identifiers from all PHPStan repos
- **`website.yml`** — Builds and deploys phpstan.org
- **`generate-error-docs.lock.yml`** — Generates error documentation using Claude

### Current Branch

The main development branch for this repository is `2.2.x`.

## Website

The website (phpstan.org) lives in `website/` and has its own `website/CLAUDE.md` with detailed instructions. Key points:

- Built with Eleventy (11ty) + Vite + TailwindCSS
- Two-stage build: `npm run build:11ty` then `npm run build:vite`
- Deployed to AWS S3 + CloudFront
- Error documentation in `website/errors/` is auto-generated (see `website/errors/CLAUDE.md`)

## Playground

The online playground at https://phpstan.org/try consists of two AWS Lambda services:

- **playground-api/** — TypeScript API that orchestrates analysis across multiple PHP versions
- **playground-runner/** — PHP Lambda (via Bref) that executes PHPStan against submitted code

Both are deployed via the Serverless Framework to eu-west-1.

## Docker

Dockerfiles in `docker/` build images for PHP 8.0–8.4, based on `php:*-cli-alpine`. Images are published to `ghcr.io` as multi-architecture (arm64 + amd64). The images install PHPStan via Composer and use `phpstan` as the entrypoint.

## Related Repositories

- [phpstan/phpstan-src](https://github.com/phpstan/phpstan-src) — Main source code (PHP 8.1+, downgraded for PHAR)
- [phpstan/phpstan-strict-rules](https://github.com/phpstan/phpstan-strict-rules) — Additional strict rules
- [phpstan/phpstan-deprecation-rules](https://github.com/phpstan/phpstan-deprecation-rules) — Deprecation detection
- [phpstan/phpstan-doctrine](https://github.com/phpstan/phpstan-doctrine) — Doctrine integration
- [phpstan/phpstan-symfony](https://github.com/phpstan/phpstan-symfony) — Symfony integration
- [phpstan/phpstan-phpunit](https://github.com/phpstan/phpstan-phpunit) — PHPUnit integration
- [phpstan/phpstan-nette](https://github.com/phpstan/phpstan-nette) — Nette integration
- [phpstan/phpstan-webmozart-assert](https://github.com/phpstan/phpstan-webmozart-assert) — Webmozart Assert integration
- [phpstan/phpdoc-parser](https://github.com/phpstan/phpdoc-parser) — PHPDoc parser library

Extension repositories support PHP 7.4+ and some support multiple versions of the libraries they analyse.

## Making Changes

- **Source code changes** belong in [phpstan/phpstan-src](https://github.com/phpstan/phpstan-src), not here
- **E2E tests** can be added or modified in `e2e/`
- **Website content** is in `website/src/` (see `website/CLAUDE.md`)
- **Error documentation** is in `website/errors/` (see `website/errors/CLAUDE.md`)
- Configuration uses NEON format (Nette Object Notation), similar to YAML
6 changes: 2 additions & 4 deletions tools/.phpstan/vendor/phpstan/phpstan/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Want your logo here? [Learn more »](https://phpstan.org/sponsor)
<br>
<a href="https://zol.fr?utm_source=phpstan"><img src="website/src/images/sponsor/zol.png" alt="ZOL" width="283" height="64"></a>
&nbsp;&nbsp;&nbsp;
<a href="https://www.edgenext.com/"><img src="website/src/images/sponsor/edgenext.png" alt="EdgeNext" width="283" height="64"></a>
<a href="https://inviqa.com/"><img src="website/src/images/sponsor/inviqa.png" alt="Inviqa" width="254" height="65"></a>
<br>
<a href="https://route4me.com/"><img src="website/src/images/sponsor/route4me.png" alt="Route4Me: Route Optimizer and Route Planner Software" width="283" height="64"></a>
&nbsp;&nbsp;&nbsp;
Expand All @@ -78,10 +78,8 @@ Want your logo here? [Learn more »](https://phpstan.org/sponsor)
<a href="https://www.campoint.net/"><img src="website/src/images/sponsor/campoint.png" alt="campoint AG" width="283" height="64"></a>
<br>
<a href="https://www.crisp.nl/"><img src="website/src/images/sponsor/crisp.png" alt="Crisp.nl" width="283" height="64"></a>
&nbsp;&nbsp;&nbsp;
<a href="https://inviqa.com/"><img src="website/src/images/sponsor/inviqa.png" alt="Inviqa" width="254" height="65"></a>
<br>

<a href="https://www.netrouting.com/"><img src="website/src/images/sponsor/netrouting.png" alt="Netrouting" width="254" height="65"></a>


[**You can sponsor my open-source work on PHPStan through GitHub Sponsors and also directly.**](https://phpstan.org/sponsor)
Expand Down
11 changes: 11 additions & 0 deletions tools/.phpstan/vendor/phpstan/phpstan/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@
"name": "phpstan/phpstan",
"description": "PHPStan - PHP Static Analysis Tool",
"license": ["MIT"],
"authors": [
{
"name": "Ondřej Mirtes"
},
{
"name": "Markus Staab"
},
{
"name": "Vincent Langlet"
}
],
"keywords": ["dev", "static analysis"],
"require": {
"php": "^7.4|^8.0"
Expand Down
Binary file modified tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar
Binary file not shown.
26 changes: 13 additions & 13 deletions tools/.phpstan/vendor/phpstan/phpstan/phpstan.phar.asc
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmoV0nsACgkQUcZzBf/C
5cCg9g/+NXlFA76CXI1399Y3bXRuHLLZ0IEadW39coDRb1siXu35PLOA/I9PsfbZ
v8QJretHdZbC+VF+AhRuOyVtEBVzNB+otg+AUzSToFPonwgyItCFnjUHAtJWxa1/
nCcIUpi9Tn6wtNSKgDoIQk88K9AOrfWQsGl0M0rjakpknhwRzTMahkMTt68y1ibO
CoEP5/Qo4AddjsdNekx+0ucG1zSzQviDiRX6/+Me7SUpVYfG5uboOCRlIo9wFgMC
4xvKY5ZcRF11iLZZHSwF+8NnXKcEOvL6Lx8GzCj6QW8GNha/ujKYlPI3ig2XZq8K
rI0SYiMLIZNDoOYSQRCGpuhTeY+BVXLf7ULsgf2sKCaC932K+V7ithU8w69z/R7E
48/HODcW4THe4YM0w+tCVMjf0CfDAzwA7WtlIVnw3TEZSCcMIXXlbyLPqQQn0TOy
FNUPAXwr9jFnYjbPFr8IuksxIRW1NgjCAehqhdTDkDsfcMn3Hjd0lwjyD4SYDI5f
hcJlEn+AM4njrJX5F0mlTXw+HxpHepH95xCpTpln+BdARbaOLmjnlUf/9gUFUnOJ
U07YwYGmg0wm63qT5BE6dxsGBymAUIAbKQCDwG2PD4l5VZh66xkDXUG5mjeQBdrS
mglwLRAVOujenyUObhwVkO2vDo0gl1YwAsjNJev0gxC5Vv1kRcw=
=RYYj
iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmoYVHoACgkQUcZzBf/C
5cCNbQ//Qfg4uJdInIhv/ug2A9cnSlKWqMkqMrwTF+QhJtq1+3oLL126K26sdalu
5oLkbW0QG6TfoDZXGffv4/bPt4PUM91KM/tqDxRIzHZuwbHqMTkF0q/MiqLCUFCM
X9j8W34vmCwwVupyCUQ4fy7EXsNIapvq/DZ/MjklkTT3fzlfm9A6aLBCLsSjHo07
DEO/OmL9p9aKofobhGD1I2M5hi+rIIr3Jv/pC75tzmweWSChOzJ14nYV4gRyyFUf
OZ8fzewzdgQ4PsX+PeCas4OD45QpHPkpbmmLLpIuQKiYLtPddY8qXf/h+QulHouJ
Kx2dTyjRsOgV9zrg6LXb2FDWMEuHnctGnhbYPZRdtRdwyjmrXnEe/NEQVILu0rZt
TG/5fR9mF+Jzig9x0JeF5X6ofdRc8EIOXMurhD6um/EZ2N7u4hfRPOO67cox5vm+
iYefdBBcBm5o4Qq0ol3ytXirfMWVMlo9i7G9n4rwcPh+GAgVhsN09fqQl/6WkY35
TtoscNBAAC4nLhlYJevX0WKnbCn1gkJ8irG+hRIO8Fm+PV8xoxsuJE2V/BlTXjwj
vwq2nIKLmfiXT7qkY+JfgAEBxq9uYqKzEIDvhTKe5sqydrwCbi8X9mgVA4rku7Hb
1k2FZqlyqhTjVw9cg6DJQTpvRITv3jHSGgNAgeGfFA2tdVf91Zc=
=qSrZ
-----END PGP SIGNATURE-----
Loading