phpstan-mcp-mx 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,31 @@
3
3
  All notable changes per version. Generated by semantic-release from the commit
4
4
  history since 0.10.0; the versions before that were written by hand.
5
5
 
6
+ # [0.20.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.19.0...v0.20.0) (2026-09-11)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * close five gaps found reviewing the unreleased features ([9d0a4c5](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/9d0a4c57b4bb43009512d26ad5be79e5bea78a18))
12
+
13
+
14
+ ### Features
15
+
16
+ * add compareTo to show what a fix solved and what it broke ([1cbcac0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/1cbcac052a513439d3fb586cddda62576740fbdc))
17
+ * add onlyIn to limit a page to files or directories ([8f75ef7](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/8f75ef756b60a5864aff1ff5e581a6109a204624))
18
+ * add scope project to analyse_changed for breakage in other files ([bcd4633](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/bcd46333cf9fd3ac1d13c6b5122dcef5dd6330f1))
19
+ * count inline [@phpstan-ignore](https://codeberg.org/phpstan-ignore) comments in baseline_summary ([4ec1a17](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/4ec1a17b536ecc842b2b2b10e87044f4f8b67583))
20
+ * group repeated messages in the summary with byMessage ([581e1ff](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/581e1fff01f8a4c98f365c891dc1e77174d23226))
21
+ * report a framework whose PHPStan extension is not loaded ([6c3ef8e](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/6c3ef8e5719b8d074aef73a61c9b7451ae690fbe))
22
+ * report Composer scripts that run PHPStan in diagnose_project ([fff2f09](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/fff2f09c8a29b73d5e38993c73e3d2bbf07ead7d))
23
+
24
+ # [0.19.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.18.0...v0.19.0) (2026-09-11)
25
+
26
+
27
+ ### Features
28
+
29
+ * add inspect_type to show the type PHPStan infers at a line ([07bf412](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/07bf41229d90dd83597bfff0e8258c240cf3741a))
30
+
6
31
  # [0.18.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.17.0...v0.18.0) (2026-09-10)
7
32
 
8
33
 
package/README.md CHANGED
@@ -415,15 +415,18 @@ expect as `project`.
415
415
  | `memoryLimit` | no | e.g. `1G`, if PHPStan hits the PHP memory limit |
416
416
  | `timeoutSeconds` | no | 300 by default |
417
417
  | `identifiers` | no | only these identifiers in the page, e.g. `["argument.type"]` |
418
+ | `onlyIn` | no | only findings in these files or directories, e.g. `["app/Models"]` |
418
419
  | `offset` / `limit` | no | which part of the findings you get back |
419
420
  | `runId` | no | from an earlier response: the next page from the same result (see [What you get back](#what-you-get-back)) |
421
+ | `compareTo` | no | the `runId` from before your fix: a new analysis that also lists what was fixed and what is new (see [Comparing with an earlier analysis](#comparing-with-an-earlier-analysis)) |
420
422
 
421
423
  `config` goes through the same path check as `project`. That is not a formality: a `.neon`
422
424
  can point to `bootstrapFiles` and extensions, so a freely chosen config path would be a way
423
425
  to have arbitrary PHP code executed around the whitelist.
424
426
 
425
- `identifiers` only filters the *page*; the summary keeps counting everything, so you can
426
- still see what you left out. A value matches exactly (`argument.type`) or as a group
427
+ `identifiers` and `onlyIn` only filter the *page*; the summary keeps counting everything, so
428
+ you can still see what you left out. A directory in `onlyIn` matches up to a `/`: `app/Model`
429
+ does not match `app/Models/User.php`. A value matches exactly (`argument.type`) or as a group
427
430
  (`missingType` matches `missingType.return` and `missingType.parameter`, but `argument` does
428
431
  not match `argumentx.something`).
429
432
 
@@ -444,6 +447,7 @@ filling up with what has been there for years.
444
447
  | `base` | no | commit, branch or tag to compare against (`HEAD` by default) |
445
448
  | `staged` | no | only what is staged (`git diff --cached`), for a check before a commit |
446
449
  | `onlyChangedLines` | no | only findings on lines that were changed |
450
+ | `scope` | no | `"project"` analyses what your config covers, as `analyse_project` does, and marks which findings are in the changed files |
447
451
 
448
452
  Otherwise the same arguments as `analyse_project`, except `paths`. With `base=main` you get
449
453
  the whole branch instead of just your uncommitted work.
@@ -454,6 +458,29 @@ without that distinction you either start fixing those or stop too early. Keep i
454
458
  finding on an unchanged line can still follow from your change — a modified signature causes
455
459
  errors at the call sites, and you didn't touch those lines.
456
460
 
461
+ Those call sites are often in files you didn't change at all, and then this tool doesn't even
462
+ analyse them: change `greet(string $name)` to `greet(string $name, int $times)` and it reports
463
+ "No findings." while every caller is broken. With `scope: "project"` it analyses everything your config covers
464
+ instead and marks each file you didn't change:
465
+
466
+ ```
467
+ 0 on a line you changed (marked with +), 0 elsewhere in the changed files, 4 in files you did
468
+ not change. …
469
+
470
+ src/Use.php (not changed)
471
+ 4 arguments.count Function greet invoked with 1 parameter, 2 required.
472
+ ```
473
+
474
+ PHPStan then analyses the `paths` from your config. A changed file outside them — a test in a
475
+ project that only analyses `src` — isn't covered by that, and the response names it; leave out
476
+ `scope` to analyse the changed files themselves.
477
+
478
+ That is slower — with a warm result cache one to five seconds on real projects, depending on
479
+ how many files depend on what you changed — and noisier: in a project without a baseline,
480
+ every old error shows up under "not changed" too. One analysis cannot tell which of those your
481
+ change caused; a finding that names what you changed is the strongest hint. After a fix,
482
+ `compareTo` tells exactly what is new.
483
+
457
484
  Two things it includes that are easy to miss: **new files not yet added to git** (`git diff`
458
485
  doesn't know them, so there is a second query for them) and **nothing from
459
486
  `resources/views`** — a `.blade.php` ends in `.php`, but it is a template that PHPStan never
@@ -473,6 +500,44 @@ is the only thing that changed does not count as new. The notice doesn't pass ju
473
500
  ignore can be justified, the point is that it doesn't happen silently. Ignored errors that
474
501
  disappeared from the baseline are listed too.
475
502
 
503
+ ### `inspect_type`
504
+
505
+ Shows the type PHPStan infers for one or more expressions at a given line — what you need
506
+ before fixing a type error, and exactly what PHPStan's own guidance asks you not to override
507
+ with a cast, `assert()` or an inline `@var`.
508
+
509
+ | Argument | Required | Meaning |
510
+ | --- | --- | --- |
511
+ | `project` | yes | absolute path to the project root |
512
+ | `path` | yes | one PHP file inside the project |
513
+ | `line` | yes | the types are those right before this line runs |
514
+ | `expressions` | yes | 1 to 10 PHP expressions, e.g. `["$user", "$request->input('id')"]` |
515
+ | `config` | no | a different config file; must lie inside the project |
516
+ | `memoryLimit` / `timeoutSeconds` | no | as with the analysis tools |
517
+
518
+ ```
519
+ Types right before line 37 of src/Actions/Contract/BuildContractRowsAction.php:
520
+ - $index: int<0, max>
521
+ - $accessory['price'] ?? null: float|int|numeric-string|null
522
+ - $nope: *ERROR*
523
+ variable.undefined: Undefined variable: $nope
524
+ ```
525
+
526
+ The project is not changed. The server inserts `\PHPStan\dumpType(<expression>);` before
527
+ `line` in a temporary copy of the file — one line per expression — and has PHPStan read that
528
+ copy in place of the original (PHPStan's editor mode, `--tmp-file` and `--instead-of`). The
529
+ copy lives in the server's temp directory, or with `PHPSTAN_MCP_RUNNERS` in the temp
530
+ directory of that environment, like the config of `unmatched_ignores`. Only that one file is
531
+ analysed, so it also works for a file outside the `paths` of your config and doesn't need a
532
+ warm result cache; on a real project it took one to two seconds.
533
+
534
+ `line` has to be the first line of a statement inside a function or method. Anywhere else —
535
+ in the middle of an array literal that spans several lines, directly in a class body — the
536
+ inserted line breaks the file, and you get PHPStan's parse errors back instead of types, with
537
+ the line numbers of your original file. A file under `excludePaths` fails with the reason
538
+ `nothing_to_analyse`. Editor mode needs a recent PHPStan; an older one fails with a message
539
+ that says to update it.
540
+
476
541
  ### `server_config`
477
542
 
478
543
  Returns what *this* server is running with: the project directories in reach, the default
@@ -532,6 +597,38 @@ The level shows up here even when it is set in a shared config from `vendor/`, a
532
597
  directory is the one `clear_result_cache` clears. If the application doesn't boot (Larastan
533
598
  without the extensions the app needs), this part is missing, with the reason stated.
534
599
 
600
+ Last come the Composer scripts that run PHPStan, and how they differ from the way this server
601
+ runs it — the reason a developer can see different results than the server does:
602
+
603
+ ```
604
+ Composer scripts that run PHPStan:
605
+ - code:analyze: vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit 1G
606
+ sets --memory-limit 1G, the server none (PHP's own limit); pass memoryLimit: "1G", or set it for this project in PHPSTAN_MCP_PROJECTS
607
+ - code:analyze:strict: vendor/bin/phpstan analyse --configuration=phpstan-strict.neon --memory-limit 1G
608
+ uses the config phpstan-strict.neon, the server phpstan.neon; pass config: "phpstan-strict.neon" to analyse the same way
609
+ sets --memory-limit 1G, …
610
+ ```
611
+
612
+ If a framework is installed whose magic PHPStan can't see without an extension, and that
613
+ extension isn't loaded, that comes first — it explains more than anything else:
614
+
615
+ ```
616
+ Missing PHPStan extensions:
617
+ - laravel/framework is installed, but larastan/larastan is not loaded, so PHPStan does not see Laravel's magic (Eloquent properties and relations, facades, the container). That shows up as false positives, such as undefined properties and methods. larastan/larastan is installed but not included: add its neon to the config's includes, or install phpstan/extension-installer.
618
+ ```
619
+
620
+ That covers Laravel (Larastan), Doctrine ORM (`phpstan/phpstan-doctrine`) and Symfony
621
+ (`phpstan/phpstan-symfony`). Test tools such as PHPUnit and Mockery are deliberately left out:
622
+ they are in nearly every project, often as a dependency of a dependency, and a notice on every
623
+ project is noise. What is loaded comes from PHPStan's own diagnosis, so an extension included by
624
+ hand counts too.
625
+
626
+ Scripts are recognised by their command, not their name, and are only read — never run. A
627
+ script that goes through `make` or another script can't be read without running it, so it is
628
+ left out. Only what changes the result is compared: the config, the memory limit, the level,
629
+ explicit paths and `--autoload-file`. The server never takes these over by itself: that would
630
+ let the project decide how the server starts PHPStan.
631
+
535
632
  ### `clear_result_cache`
536
633
 
537
634
  Clears PHPStan's result cache, so the next analysis recomputes everything. Useful when a
@@ -560,6 +657,21 @@ Note the distinction: what is in here is exactly what `analyse_project` does *no
560
657
  project that includes its baseline only reports the errors that are new — PHPStan already
561
658
  makes that comparison itself.
562
659
 
660
+ It also counts the inline `@phpstan-ignore` comments in the code — the third place where
661
+ errors get hidden, next to the baseline and `ignoreErrors` in the config, and the only one
662
+ nothing counted until now:
663
+
664
+ ```
665
+ 18 inline @phpstan-ignore comment(s) in 14 file(s) — counted in all PHP files git knows, also outside the analysed paths. These are hidden too, and a new baseline does not touch them.
666
+ 11 have no identifier (@phpstan-ignore-line, -next-line): they ignore every error on their line.
667
+ 1 name an identifier but give no reason in parentheses.
668
+ ```
669
+
670
+ That is counted with `git grep`, so `vendor/`, ignored files and Blade templates stay out,
671
+ and files not yet added to git count. Without git, the baseline part still works and the
672
+ response says why the inline comments were not counted — `null`, not zero, because zero
673
+ would claim nothing is hidden.
674
+
563
675
  With `path` (e.g. `"app/Models/User.php"`) you also get the entries for that one file: per
564
676
  entry the identifier, the count and the pattern. That file doesn't have to exist any more —
565
677
  it is precisely a deleted file that the entries doing nothing belong to.
@@ -680,7 +792,8 @@ you can act on.
680
792
 
681
793
  `reason` comes from a closed set, so you can match on it without reading the text:
682
794
  `no_roots_configured`, `project_outside_roots`, `project_not_found`, `path_outside_project`,
683
- `path_not_found`, `phpstan_missing`, `config_missing`, `bootstrap_failed`,
795
+ `path_not_found`, `invalid_argument`, `nothing_to_analyse`, `phpstan_missing`,
796
+ `config_missing`, `bootstrap_failed`,
684
797
  `baseline_unreadable`, `invalid_setting`, `memory_limit`, `timeout`, `cancelled`,
685
798
  `git_missing`, `not_a_git_repository`, `unknown_base`, `unsupported_with_runner`,
686
799
  `unusable_output` and `phpstan_failed`.
@@ -710,6 +823,20 @@ src/Support/Filters/DealFilters.php
710
823
  42 argument.type Parameter #1 $id expects int, string given.
711
824
  ```
712
825
 
826
+ A message that occurs more than once gets its own line under the counts, because the same
827
+ message in several places often has one cause:
828
+
829
+ ```
830
+ Same message more than once (one fix may cover several; check that they point to the same code):
831
+ 4 argument.type Parameter #1 $activeFilters of static method …\PartAccessoryBikeModelFilter::options() expects … (in 4 files)
832
+ 3 argument.type Parameter #1 $query of method …\OrderByEnum::apply() expects … (in 3 files)
833
+ ```
834
+
835
+ On one real project, the top two lines pointed to the same method signature: 8 of its 25
836
+ findings. Messages are compared exactly, without normalising names or numbers away — and a
837
+ generic message such as `Possibly invalid array key type mixed.` can still have separate
838
+ causes, so it is a pointer, not a promise.
839
+
713
840
  When there are more results, the text ends with the literal follow-up call:
714
841
 
715
842
  ```
@@ -719,13 +846,39 @@ then comes from this result instead of a new analysis.
719
846
 
720
847
  With that `runId`, the next page comes from the same result. Without it, every page would be a
721
848
  new analysis, and if you change a file in between you get pages with different totals. Only
722
- `offset`, `limit`, `identifiers` and `onlyChangedLines` may differ. If the `runId` belongs to
849
+ `offset`, `limit`, `identifiers`, `onlyIn` and `onlyChangedLines` may differ so one analysis
850
+ of the whole project can be read directory by directory without running PHPStan again. If the `runId` belongs to
723
851
  different arguments, has expired (after ten minutes) or is unknown, a new analysis follows
724
852
  with a notice instead of an error.
725
853
 
726
854
  A page from an earlier result states how old that result is. So after a fix, analyse
727
855
  *without* `runId`: otherwise you see the result from before the fix.
728
856
 
857
+ ### Comparing with an earlier analysis
858
+
859
+ Pass the `runId` from before your fix as `compareTo` instead. That is a new analysis, and the
860
+ response also says what was fixed and what is new since then:
861
+
862
+ ```
863
+ Compared with the analysis of 95s ago (runId 7Ysv9hRE): 1 fixed, 1 new, 2 still open.
864
+ Fixed (line numbers from that analysis):
865
+ src/A.php:4 return.type Function a() should return string but returns int.
866
+ New:
867
+ src/A.php:10 return.type Function d() should return bool but returns int.
868
+ ```
869
+
870
+ Findings are matched on file, identifier and message, not on line number: a fix shifts the
871
+ lines below it, and PHPStan's own baseline ignores lines for the same reason. When a message
872
+ occurs several times in a file and only the count changed, all its lines are listed, with a
873
+ note that which one it is cannot be told apart.
874
+
875
+ The comparison counts over all findings, not just the page, and only needs the same arguments
876
+ as the earlier analysis (`offset`, `limit` and `identifiers` may differ). With
877
+ `analyse_changed`, a file that only one of the two analyses covered is not compared — touch a
878
+ second file while fixing, and its existing errors would otherwise show up as new. Those are
879
+ counted separately. A `runId` stays usable for comparing for an hour, longer than for paging:
880
+ the fixing itself sits between the two analyses.
881
+
729
882
  ### Cancelling
730
883
 
731
884
  If your client cancels the request, PHPStan's whole process group is cleaned up instead of
@@ -799,6 +952,14 @@ How many were left out is in `omitted`, and in the text as "N more message(s) no
799
952
  different environment. The Claude app, for example, starts it without `TMPDIR`, and then the
800
953
  per-project cache lives under `/tmp/phpstan-mcp/` instead of under your shell's temp
801
954
  directory.
955
+ - **Claude Desktop gives up on a tool call after 60 seconds,** whatever `timeoutSeconds` says,
956
+ and that limit can't be configured (reported in
957
+ [anthropics/claude-code#43791](https://github.com/anthropics/claude-code/issues/43791)).
958
+ Claude Code has no such practical limit. On the projects this server was measured on, a cold
959
+ full analysis took 3 to 8 seconds, so it rarely matters; on a very large project in Desktop,
960
+ analyse part of it (`paths`, `analyse_changed`) instead. A client built on the MCP SDK
961
+ cancels the request when it gives up, and the server then stops PHPStan instead of letting
962
+ it run on.
802
963
 
803
964
  ## Development
804
965
 
package/dist/changed.d.ts CHANGED
@@ -46,6 +46,41 @@ export interface IgnoreAddition {
46
46
  * Zonder die tweede mist juist het bestand dat net is aangemaakt.
47
47
  */
48
48
  export declare function changedPhpFiles(project: ResolvedProject, base?: string, staged?: boolean): Promise<ChangedFiles>;
49
+ /** De `@phpstan-ignore`-regels die nu in het project staan, geteld. */
50
+ export interface InlineIgnores {
51
+ /** Aantal commentaarregels met een ignore. */
52
+ readonly total: number;
53
+ readonly files: number;
54
+ /** `@phpstan-ignore-line` en `-next-line` zonder identifier: die zetten álles op hun regel weg. */
55
+ readonly withoutIdentifier: number;
56
+ /** Met een identifier maar zonder reden tussen haakjes. */
57
+ readonly withoutReason: number;
58
+ /** Een ignore met twee identifiers telt bij allebei. */
59
+ readonly byIdentifier: readonly {
60
+ identifier: string;
61
+ count: number;
62
+ }[];
63
+ readonly byPath: readonly {
64
+ path: string;
65
+ count: number;
66
+ }[];
67
+ }
68
+ /**
69
+ * Telt de `@phpstan-ignore`-regels in het project. De derde bron van wat er verstopt wordt,
70
+ * naast de baseline en `ignoreErrors` in de config — en de enige die nog niemand telde:
71
+ * `analyse_changed` ziet alleen de nieuwe.
72
+ *
73
+ * Via `git grep`, dat `vendor/` en genegeerde bestanden al overslaat; met `--untracked`
74
+ * zodat een bestand dat nog niet toegevoegd is meetelt, net als bij `analyse_changed`.
75
+ * Templates (`.blade.php`) niet: die analyseert PHPStan niet. Wel alle andere PHP-bestanden,
76
+ * ook buiten de `paths` uit de config — nagemeten stond op vier echte projecten elke ignore
77
+ * binnen die paden, en beperken zou een PHPStan-run kosten die bij een project dat op de
78
+ * host niet start mislukt. De tekst zegt het erbij.
79
+ *
80
+ * `-z` omdat een pad een dubbele punt kan bevatten. Exit 1 is hier geen fout maar "niets
81
+ * gevonden"; daarom niet via `git()`, dat elke andere exitcode dan 0 als storing leest.
82
+ */
83
+ export declare function countInlineIgnores(project: ResolvedProject): Promise<InlineIgnores>;
49
84
  /** Per bestand de ignores op toegevoegde en op weggehaalde regels. */
50
85
  export interface IgnoreChanges {
51
86
  readonly added: {
package/dist/changed.js CHANGED
@@ -115,6 +115,80 @@ function ignoreIn(content) {
115
115
  text: (match[2] ?? '').replace(/\*\/.*$/, '').trim(),
116
116
  };
117
117
  }
118
+ /** Hoeveel regels de tellingen van inline ignores hoogstens tonen. */
119
+ const INLINE_ROWS = 10;
120
+ /**
121
+ * Telt de `@phpstan-ignore`-regels in het project. De derde bron van wat er verstopt wordt,
122
+ * naast de baseline en `ignoreErrors` in de config — en de enige die nog niemand telde:
123
+ * `analyse_changed` ziet alleen de nieuwe.
124
+ *
125
+ * Via `git grep`, dat `vendor/` en genegeerde bestanden al overslaat; met `--untracked`
126
+ * zodat een bestand dat nog niet toegevoegd is meetelt, net als bij `analyse_changed`.
127
+ * Templates (`.blade.php`) niet: die analyseert PHPStan niet. Wel alle andere PHP-bestanden,
128
+ * ook buiten de `paths` uit de config — nagemeten stond op vier echte projecten elke ignore
129
+ * binnen die paden, en beperken zou een PHPStan-run kosten die bij een project dat op de
130
+ * host niet start mislukt. De tekst zegt het erbij.
131
+ *
132
+ * `-z` omdat een pad een dubbele punt kan bevatten. Exit 1 is hier geen fout maar "niets
133
+ * gevonden"; daarom niet via `git()`, dat elke andere exitcode dan 0 als storing leest.
134
+ */
135
+ export async function countInlineIgnores(project) {
136
+ // --no-color, --no-column en -F zetten vast wat de gebruikersconfig anders bepaalt, net als
137
+ // bij `diff -U0`. Nagemeten: met `grep.column=true` komt er een kolomnummer tussen pad en
138
+ // inhoud en telde deze functie 0; met `color.grep=always` staan er escapecodes in beide.
139
+ const args = [
140
+ 'grep', '--no-color', '--no-column', '-F', '-z', '-n', '-I', '--untracked',
141
+ '-e', '@phpstan-ignore', '--', '*.php', ':(exclude)*.blade.php',
142
+ ];
143
+ const result = await execute(project.path, args);
144
+ const nietsGevonden = result.spawnError === null && result.code === 1 && result.stderr.trim() === '';
145
+ if (!nietsGevonden)
146
+ throwIfFailed(project.path, args, result);
147
+ const perIdentifier = new Map();
148
+ const perPath = new Map();
149
+ let total = 0;
150
+ let withoutIdentifier = 0;
151
+ let withoutReason = 0;
152
+ for (const record of result.stdout.split('\n')) {
153
+ const [path, , content] = record.split('\0');
154
+ if (path === undefined || content === undefined)
155
+ continue;
156
+ const ignore = ignoreIn(content);
157
+ if (ignore === null)
158
+ continue;
159
+ total++;
160
+ perPath.set(path, (perPath.get(path) ?? 0) + 1);
161
+ // Alleen de kale `@phpstan-ignore` neemt identifiers. Wat achter `-line` of `-next-line`
162
+ // staat is gewoon commentaar ("because …"), en zou anders als identifier meetellen.
163
+ const identifiers = ignore.kind === '@phpstan-ignore'
164
+ ? ignore.text
165
+ .replace(/\(.*$/, '')
166
+ .split(/[\s,]+/)
167
+ .filter((part) => /^[\w.-]+$/.test(part))
168
+ : [];
169
+ if (identifiers.length === 0) {
170
+ withoutIdentifier++;
171
+ continue;
172
+ }
173
+ // Een openend haakje met tekst erachter is genoeg: een lange reden loopt soms door op
174
+ // de volgende regel, en dan staat het sluitende haakje hier niet.
175
+ if (!/\(\s*[^\s)]/.test(ignore.text))
176
+ withoutReason++;
177
+ for (const identifier of identifiers)
178
+ perIdentifier.set(identifier, (perIdentifier.get(identifier) ?? 0) + 1);
179
+ }
180
+ return {
181
+ total,
182
+ files: perPath.size,
183
+ withoutIdentifier,
184
+ withoutReason,
185
+ byIdentifier: topRows(perIdentifier).map(([identifier, count]) => ({ identifier, count })),
186
+ byPath: topRows(perPath).map(([path, count]) => ({ path, count })),
187
+ };
188
+ }
189
+ function topRows(counts) {
190
+ return [...counts.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, INLINE_ROWS);
191
+ }
118
192
  /**
119
193
  * Waaraan een ignore herkend wordt als dezelfde: de soort en de identifiers, zonder de
120
194
  * reden. Nagemeten op een echt project: een commit die alleen de reden van een
@@ -351,7 +425,12 @@ function lines(output) {
351
425
  .filter((line) => line !== '');
352
426
  }
353
427
  async function git(cwd, args) {
354
- const { code, stdout, stderr, spawnError } = await execute(cwd, args);
428
+ const execution = await execute(cwd, args);
429
+ throwIfFailed(cwd, args, execution);
430
+ return execution.stdout;
431
+ }
432
+ /** Gooit de GitError die bij deze uitvoering hoort, of niets als hij geslaagd is. */
433
+ function throwIfFailed(cwd, args, { code, stderr, spawnError }) {
355
434
  if (spawnError !== null) {
356
435
  throw new GitError(spawnError.code === 'ENOENT'
357
436
  ? 'git was not found. Pass paths to analyse_project to work without git.'
@@ -366,7 +445,6 @@ async function git(cwd, args) {
366
445
  : 'git_missing';
367
446
  throw new GitError(describeGitFailure(cwd, args, stderr, code), reden, { exitCode: code });
368
447
  }
369
- return stdout;
370
448
  }
371
449
  function describeGitFailure(cwd, args, stderr, code) {
372
450
  const details = stderr.trim().slice(0, 1000);
@@ -1 +1 @@
1
- {"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { AnalysisResult } from './phpstan.js';
2
+ /** Hoeveel groepen een lijst (opgelost of nieuw) hoogstens noemt; de rest als aantal. */
3
+ export declare const MAX_COMPARED_ENTRIES = 20;
4
+ /**
5
+ * Eén groep bevindingen met dezelfde melding in hetzelfde bestand, waarvan er `count`
6
+ * opgelost of nieuw zijn.
7
+ */
8
+ export interface ComparedEntry {
9
+ readonly file: string;
10
+ readonly identifier: string | null;
11
+ readonly message: string;
12
+ readonly count: number;
13
+ /**
14
+ * De regels van álle bevindingen met deze melding in dit bestand: bij een opgeloste in
15
+ * de eerdere analyse, bij een nieuwe in deze. Is `count` kleiner, dan is niet te zeggen
16
+ * welke van die regels het is.
17
+ */
18
+ readonly lines: readonly (number | null)[];
19
+ }
20
+ /** Hoe deze analyse zich verhoudt tot een eerdere. */
21
+ export interface Comparison {
22
+ /** De runId van de eerdere analyse. */
23
+ readonly comparedTo: string;
24
+ /** Hoe oud die was op het moment van vergelijken. */
25
+ readonly ageSeconds: number;
26
+ readonly fixed: number;
27
+ readonly new: number;
28
+ readonly remaining: number;
29
+ readonly fixedFindings: readonly ComparedEntry[];
30
+ readonly newFindings: readonly ComparedEntry[];
31
+ /** Hoeveel groepen er niet genoemd zijn omdat het er te veel waren. */
32
+ readonly omitted: {
33
+ readonly fixed: number;
34
+ readonly new: number;
35
+ };
36
+ /** Bevindingen in bestanden die maar één van beide analyses dekte. */
37
+ readonly notCompared: {
38
+ readonly findings: number;
39
+ readonly files: readonly string[];
40
+ };
41
+ }
42
+ /** Eén kant van de vergelijking: de uitslag en wat er geanalyseerd is. */
43
+ export interface ComparedRun {
44
+ readonly result: AnalysisResult;
45
+ /** De geanalyseerde paden, of null als de config dat bepaalde. */
46
+ readonly scope: readonly string[] | null;
47
+ }
48
+ /**
49
+ * Legt een analyse naast een eerdere en telt wat er opgelost, nieuw en nog open is.
50
+ *
51
+ * Gekoppeld op bestand, identifier en melding — niet op het regelnummer: een reparatie
52
+ * verschuift regels, en dan zou elke bevinding eronder als opgelost én nieuw tellen.
53
+ * Om die reden negeert PHPStans eigen baseline de regel ook. Nagemeten: drie lege regels
54
+ * bovenin het drukste bestand van `lasouris-lease-shared` verschoven alle elf bevindingen
55
+ * en veranderden geen enkele melding.
56
+ *
57
+ * Een melding die zelf een regelnummer bevat (een anonieme klasse heet
58
+ * `class@anonymous/pad.php:12`) telt na zo'n verschuiving wel als opgelost én nieuw. Geen
59
+ * eigen normalisering daarvoor: die zou bij elke PHPStan-release verder afdrijven.
60
+ *
61
+ * Alleen bestanden die beide analyses dekten doen mee. Bij `analyse_changed` volgt de
62
+ * lijst uit git: wie tijdens een reparatie een tweede bestand aanraakt, krijgt dat bestand
63
+ * erbij, en diens bestaande fouten zouden anders als nieuw tellen — een antwoord dat klopt
64
+ * maar misleidt.
65
+ */
66
+ export declare function compareRuns(project: string, before: ComparedRun, after: ComparedRun, meta: {
67
+ readonly comparedTo: string;
68
+ readonly ageSeconds: number;
69
+ }): Comparison;