phpstan-mcp-mx 0.19.0 → 0.21.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.21.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.20.0...v0.21.0) (2026-09-11)
7
+
8
+
9
+ ### Features
10
+
11
+ * compare scope project with the project before a one-file change ([6c01658](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/6c0165873930e4b215969fcc7cb12dcdafbf96e8))
12
+
13
+ # [0.20.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.19.0...v0.20.0) (2026-09-11)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * close five gaps found reviewing the unreleased features ([9d0a4c5](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/9d0a4c57b4bb43009512d26ad5be79e5bea78a18))
19
+
20
+
21
+ ### Features
22
+
23
+ * add compareTo to show what a fix solved and what it broke ([1cbcac0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/1cbcac052a513439d3fb586cddda62576740fbdc))
24
+ * add onlyIn to limit a page to files or directories ([8f75ef7](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/8f75ef756b60a5864aff1ff5e581a6109a204624))
25
+ * add scope project to analyse_changed for breakage in other files ([bcd4633](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/bcd46333cf9fd3ac1d13c6b5122dcef5dd6330f1))
26
+ * count inline [@phpstan-ignore](https://codeberg.org/phpstan-ignore) comments in baseline_summary ([4ec1a17](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/4ec1a17b536ecc842b2b2b10e87044f4f8b67583))
27
+ * group repeated messages in the summary with byMessage ([581e1ff](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/581e1fff01f8a4c98f365c891dc1e77174d23226))
28
+ * report a framework whose PHPStan extension is not loaded ([6c3ef8e](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/6c3ef8e5719b8d074aef73a61c9b7451ae690fbe))
29
+ * report Composer scripts that run PHPStan in diagnose_project ([fff2f09](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/fff2f09c8a29b73d5e38993c73e3d2bbf07ead7d))
30
+
6
31
  # [0.19.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.18.0...v0.19.0) (2026-09-11)
7
32
 
8
33
 
package/README.md CHANGED
@@ -154,7 +154,7 @@ echo '' | env -i PATH=/usr/bin:/bin \
154
154
  ```
155
155
 
156
156
  ```
157
- phpstan-mcp 0.17.0 listening on stdio, 0 root(s) configured, at most 2 at a time
157
+ phpstan-mcp 0.20.0 listening on stdio, 0 root(s) configured, at most 2 at a time
158
158
  ```
159
159
 
160
160
  (Zero roots is correct here: `env -i` also throws away `PHPSTAN_MCP_ROOTS`. All that matters
@@ -257,7 +257,7 @@ An unusable value is rejected instead of silently replaced by the default, and s
257
257
  `WARNING` in the startup line:
258
258
 
259
259
  ```
260
- phpstan-mcp 0.17.0 listening on stdio, 1 root(s) configured, at most 2 at a time
260
+ phpstan-mcp 0.20.0 listening on stdio, 1 root(s) configured, at most 2 at a time
261
261
  ```
262
262
 
263
263
  ### `PHPSTAN_MCP_TMPDIR` (optional)
@@ -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,42 @@ 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 every old error in the project shows up under
480
+ "not changed" too. **With exactly one changed file, the server therefore also analyses the
481
+ project as it was before your change** — that one file replaced by its version at `base`, via
482
+ PHPStan's editor mode — and compares the two:
483
+
484
+ ```
485
+ Compared with the project before your change (src/Lib.php at HEAD): 0 fixed, 1 new, 3 still open.
486
+ New:
487
+ src/Use.php:4 arguments.count Function greet invoked with 1 parameter, 2 required.
488
+ ```
489
+
490
+ On a real project, adding a required parameter to a method called in four other files gave
491
+ exactly those four calls as new, and the 25 findings that were already there as still open.
492
+ That costs a second run. With more than one changed file it can't be done — editor mode
493
+ replaces one file per run — and then one analysis cannot tell which findings your change
494
+ caused; a finding that names what you changed is the strongest hint, and after a fix
495
+ `compareTo` tells exactly what is new. A `compareTo` you pass yourself takes precedence.
496
+
457
497
  Two things it includes that are easy to miss: **new files not yet added to git** (`git diff`
458
498
  doesn't know them, so there is a second query for them) and **nothing from
459
499
  `resources/views`** — a `.blade.php` ends in `.php`, but it is a template that PHPStan never
@@ -518,7 +558,7 @@ memory limit, how many analyses may run at once, where temporary files go and wh
518
558
  writing tools are enabled.
519
559
 
520
560
  ```
521
- phpstan-mcp 0.17.0
561
+ phpstan-mcp 0.20.0
522
562
 
523
563
  Project directories:
524
564
  /Users/you/projects
@@ -570,6 +610,38 @@ The level shows up here even when it is set in a shared config from `vendor/`, a
570
610
  directory is the one `clear_result_cache` clears. If the application doesn't boot (Larastan
571
611
  without the extensions the app needs), this part is missing, with the reason stated.
572
612
 
613
+ Last come the Composer scripts that run PHPStan, and how they differ from the way this server
614
+ runs it — the reason a developer can see different results than the server does:
615
+
616
+ ```
617
+ Composer scripts that run PHPStan:
618
+ - code:analyze: vendor/bin/phpstan analyse --configuration=phpstan.neon --memory-limit 1G
619
+ sets --memory-limit 1G, the server none (PHP's own limit); pass memoryLimit: "1G", or set it for this project in PHPSTAN_MCP_PROJECTS
620
+ - code:analyze:strict: vendor/bin/phpstan analyse --configuration=phpstan-strict.neon --memory-limit 1G
621
+ uses the config phpstan-strict.neon, the server phpstan.neon; pass config: "phpstan-strict.neon" to analyse the same way
622
+ sets --memory-limit 1G, …
623
+ ```
624
+
625
+ If a framework is installed whose magic PHPStan can't see without an extension, and that
626
+ extension isn't loaded, that comes first — it explains more than anything else:
627
+
628
+ ```
629
+ Missing PHPStan extensions:
630
+ - 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.
631
+ ```
632
+
633
+ That covers Laravel (Larastan), Doctrine ORM (`phpstan/phpstan-doctrine`) and Symfony
634
+ (`phpstan/phpstan-symfony`). Test tools such as PHPUnit and Mockery are deliberately left out:
635
+ they are in nearly every project, often as a dependency of a dependency, and a notice on every
636
+ project is noise. What is loaded comes from PHPStan's own diagnosis, so an extension included by
637
+ hand counts too.
638
+
639
+ Scripts are recognised by their command, not their name, and are only read — never run. A
640
+ script that goes through `make` or another script can't be read without running it, so it is
641
+ left out. Only what changes the result is compared: the config, the memory limit, the level,
642
+ explicit paths and `--autoload-file`. The server never takes these over by itself: that would
643
+ let the project decide how the server starts PHPStan.
644
+
573
645
  ### `clear_result_cache`
574
646
 
575
647
  Clears PHPStan's result cache, so the next analysis recomputes everything. Useful when a
@@ -598,6 +670,21 @@ Note the distinction: what is in here is exactly what `analyse_project` does *no
598
670
  project that includes its baseline only reports the errors that are new — PHPStan already
599
671
  makes that comparison itself.
600
672
 
673
+ It also counts the inline `@phpstan-ignore` comments in the code — the third place where
674
+ errors get hidden, next to the baseline and `ignoreErrors` in the config, and the only one
675
+ nothing counted until now:
676
+
677
+ ```
678
+ 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.
679
+ 11 have no identifier (@phpstan-ignore-line, -next-line): they ignore every error on their line.
680
+ 1 name an identifier but give no reason in parentheses.
681
+ ```
682
+
683
+ That is counted with `git grep`, so `vendor/`, ignored files and Blade templates stay out,
684
+ and files not yet added to git count. Without git, the baseline part still works and the
685
+ response says why the inline comments were not counted — `null`, not zero, because zero
686
+ would claim nothing is hidden.
687
+
601
688
  With `path` (e.g. `"app/Models/User.php"`) you also get the entries for that one file: per
602
689
  entry the identifier, the count and the pattern. That file doesn't have to exist any more —
603
690
  it is precisely a deleted file that the entries doing nothing belong to.
@@ -749,6 +836,20 @@ src/Support/Filters/DealFilters.php
749
836
  42 argument.type Parameter #1 $id expects int, string given.
750
837
  ```
751
838
 
839
+ A message that occurs more than once gets its own line under the counts, because the same
840
+ message in several places often has one cause:
841
+
842
+ ```
843
+ Same message more than once (one fix may cover several; check that they point to the same code):
844
+ 4 argument.type Parameter #1 $activeFilters of static method …\PartAccessoryBikeModelFilter::options() expects … (in 4 files)
845
+ 3 argument.type Parameter #1 $query of method …\OrderByEnum::apply() expects … (in 3 files)
846
+ ```
847
+
848
+ On one real project, the top two lines pointed to the same method signature: 8 of its 25
849
+ findings. Messages are compared exactly, without normalising names or numbers away — and a
850
+ generic message such as `Possibly invalid array key type mixed.` can still have separate
851
+ causes, so it is a pointer, not a promise.
852
+
752
853
  When there are more results, the text ends with the literal follow-up call:
753
854
 
754
855
  ```
@@ -758,13 +859,39 @@ then comes from this result instead of a new analysis.
758
859
 
759
860
  With that `runId`, the next page comes from the same result. Without it, every page would be a
760
861
  new analysis, and if you change a file in between you get pages with different totals. Only
761
- `offset`, `limit`, `identifiers` and `onlyChangedLines` may differ. If the `runId` belongs to
862
+ `offset`, `limit`, `identifiers`, `onlyIn` and `onlyChangedLines` may differ so one analysis
863
+ of the whole project can be read directory by directory without running PHPStan again. If the `runId` belongs to
762
864
  different arguments, has expired (after ten minutes) or is unknown, a new analysis follows
763
865
  with a notice instead of an error.
764
866
 
765
867
  A page from an earlier result states how old that result is. So after a fix, analyse
766
868
  *without* `runId`: otherwise you see the result from before the fix.
767
869
 
870
+ ### Comparing with an earlier analysis
871
+
872
+ Pass the `runId` from before your fix as `compareTo` instead. That is a new analysis, and the
873
+ response also says what was fixed and what is new since then:
874
+
875
+ ```
876
+ Compared with the analysis of 95s ago (runId 7Ysv9hRE): 1 fixed, 1 new, 2 still open.
877
+ Fixed (line numbers from that analysis):
878
+ src/A.php:4 return.type Function a() should return string but returns int.
879
+ New:
880
+ src/A.php:10 return.type Function d() should return bool but returns int.
881
+ ```
882
+
883
+ Findings are matched on file, identifier and message, not on line number: a fix shifts the
884
+ lines below it, and PHPStan's own baseline ignores lines for the same reason. When a message
885
+ occurs several times in a file and only the count changed, all its lines are listed, with a
886
+ note that which one it is cannot be told apart.
887
+
888
+ The comparison counts over all findings, not just the page, and only needs the same arguments
889
+ as the earlier analysis (`offset`, `limit` and `identifiers` may differ). With
890
+ `analyse_changed`, a file that only one of the two analyses covered is not compared — touch a
891
+ second file while fixing, and its existing errors would otherwise show up as new. Those are
892
+ counted separately. A `runId` stays usable for comparing for an hour, longer than for paging:
893
+ the fixing itself sits between the two analyses.
894
+
768
895
  ### Cancelling
769
896
 
770
897
  If your client cancels the request, PHPStan's whole process group is cleaned up instead of
@@ -838,6 +965,14 @@ How many were left out is in `omitted`, and in the text as "N more message(s) no
838
965
  different environment. The Claude app, for example, starts it without `TMPDIR`, and then the
839
966
  per-project cache lives under `/tmp/phpstan-mcp/` instead of under your shell's temp
840
967
  directory.
968
+ - **Claude Desktop gives up on a tool call after 60 seconds,** whatever `timeoutSeconds` says,
969
+ and that limit can't be configured (reported in
970
+ [anthropics/claude-code#43791](https://github.com/anthropics/claude-code/issues/43791)).
971
+ Claude Code has no such practical limit. On the projects this server was measured on, a cold
972
+ full analysis took 3 to 8 seconds, so it rarely matters; on a very large project in Desktop,
973
+ analyse part of it (`paths`, `analyse_changed`) instead. A client built on the MCP SDK
974
+ cancels the request when it gives up, and the server then stops PHPStan instead of letting
975
+ it run on.
841
976
 
842
977
  ## Development
843
978
 
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: {
@@ -81,6 +116,13 @@ export interface BaselineChange {
81
116
  * weg en kwam er niets bij — beide kanten zijn dus het vermelden waard.
82
117
  */
83
118
  export declare function baselineChanges(project: ResolvedProject, base?: string, staged?: boolean): Promise<BaselineChange[]>;
119
+ /**
120
+ * De inhoud van een gewijzigd bestand zoals het bij `base` was, voor het "vóór" van
121
+ * `analyse_changed`. Leeg voor een bestand dat daar nog niet bestond (nieuw, of hernoemd:
122
+ * dan staat het onder een ander pad) — dat is een uitkomst, geen fout. Via `:./pad`, dus
123
+ * relatief aan het project en niet aan de repositoryroot.
124
+ */
125
+ export declare function fileAtBase(project: ResolvedProject, changed: ChangedFiles, file: string): Promise<string>;
84
126
  /**
85
127
  * Of een bevinding op een regel staat die in deze wijziging zit. Een bevinding zonder
86
128
  * regelnummer in een inhoudelijk gewijzigd bestand telt mee: uitsluiten kan dan niet,
package/dist/changed.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ToolFailure } from './failure.js';
2
2
  import { spawn } from 'node:child_process';
3
3
  import { readFileSync } from 'node:fs';
4
- import { join } from 'node:path';
4
+ import { join, relative, sep } from 'node:path';
5
5
  import { includedBaselineFiles, parseBaseline } from './baseline.js';
6
6
  import { ProjectError, resolveWithin } from './project.js';
7
7
  /** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
@@ -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
@@ -263,6 +337,16 @@ async function gitShow(cwd, object) {
263
337
  return '';
264
338
  return git(cwd, ['show', '--end-of-options', object]);
265
339
  }
340
+ /**
341
+ * De inhoud van een gewijzigd bestand zoals het bij `base` was, voor het "vóór" van
342
+ * `analyse_changed`. Leeg voor een bestand dat daar nog niet bestond (nieuw, of hernoemd:
343
+ * dan staat het onder een ander pad) — dat is een uitkomst, geen fout. Via `:./pad`, dus
344
+ * relatief aan het project en niet aan de repositoryroot.
345
+ */
346
+ export async function fileAtBase(project, changed, file) {
347
+ const pad = relative(project.path, file).split(sep).join('/');
348
+ return gitShow(project.path, `${checkBase(changed.base)}:./${pad}`);
349
+ }
266
350
  /**
267
351
  * Of een bevinding op een regel staat die in deze wijziging zit. Een bevinding zonder
268
352
  * regelnummer in een inhoudelijk gewijzigd bestand telt mee: uitsluiten kan dan niet,
@@ -351,7 +435,12 @@ function lines(output) {
351
435
  .filter((line) => line !== '');
352
436
  }
353
437
  async function git(cwd, args) {
354
- const { code, stdout, stderr, spawnError } = await execute(cwd, args);
438
+ const execution = await execute(cwd, args);
439
+ throwIfFailed(cwd, args, execution);
440
+ return execution.stdout;
441
+ }
442
+ /** Gooit de GitError die bij deze uitvoering hoort, of niets als hij geslaagd is. */
443
+ function throwIfFailed(cwd, args, { code, stderr, spawnError }) {
355
444
  if (spawnError !== null) {
356
445
  throw new GitError(spawnError.code === 'ENOENT'
357
446
  ? 'git was not found. Pass paths to analyse_project to work without git.'
@@ -366,7 +455,6 @@ async function git(cwd, args) {
366
455
  : 'git_missing';
367
456
  throw new GitError(describeGitFailure(cwd, args, stderr, code), reden, { exitCode: code });
368
457
  }
369
- return stdout;
370
458
  }
371
459
  function describeGitFailure(cwd, args, stderr, code) {
372
460
  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,75 @@
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
+ /**
23
+ * `run`: een eerdere analyse (`compareTo`). `base`: hetzelfde project met het ene gewijzigde
24
+ * bestand zoals het bij `base` was — het echte "vóór" van `analyse_changed`.
25
+ */
26
+ readonly basis: 'run' | 'base';
27
+ /** De runId van de eerdere analyse, of bij `base` het bestand en de base (`src/A.php at HEAD`). */
28
+ readonly comparedTo: string;
29
+ /** Hoe oud de eerdere analyse was; null bij `base`, die is net gedraaid. */
30
+ readonly ageSeconds: number | null;
31
+ readonly fixed: number;
32
+ readonly new: number;
33
+ readonly remaining: number;
34
+ readonly fixedFindings: readonly ComparedEntry[];
35
+ readonly newFindings: readonly ComparedEntry[];
36
+ /** Hoeveel groepen er niet genoemd zijn omdat het er te veel waren. */
37
+ readonly omitted: {
38
+ readonly fixed: number;
39
+ readonly new: number;
40
+ };
41
+ /** Bevindingen in bestanden die maar één van beide analyses dekte. */
42
+ readonly notCompared: {
43
+ readonly findings: number;
44
+ readonly files: readonly string[];
45
+ };
46
+ }
47
+ /** Eén kant van de vergelijking: de uitslag en wat er geanalyseerd is. */
48
+ export interface ComparedRun {
49
+ readonly result: AnalysisResult;
50
+ /** De geanalyseerde paden, of null als de config dat bepaalde. */
51
+ readonly scope: readonly string[] | null;
52
+ }
53
+ /**
54
+ * Legt een analyse naast een eerdere en telt wat er opgelost, nieuw en nog open is.
55
+ *
56
+ * Gekoppeld op bestand, identifier en melding — niet op het regelnummer: een reparatie
57
+ * verschuift regels, en dan zou elke bevinding eronder als opgelost én nieuw tellen.
58
+ * Om die reden negeert PHPStans eigen baseline de regel ook. Nagemeten: drie lege regels
59
+ * bovenin het drukste bestand van `lasouris-lease-shared` verschoven alle elf bevindingen
60
+ * en veranderden geen enkele melding.
61
+ *
62
+ * Een melding die zelf een regelnummer bevat (een anonieme klasse heet
63
+ * `class@anonymous/pad.php:12`) telt na zo'n verschuiving wel als opgelost én nieuw. Geen
64
+ * eigen normalisering daarvoor: die zou bij elke PHPStan-release verder afdrijven.
65
+ *
66
+ * Alleen bestanden die beide analyses dekten doen mee. Bij `analyse_changed` volgt de
67
+ * lijst uit git: wie tijdens een reparatie een tweede bestand aanraakt, krijgt dat bestand
68
+ * erbij, en diens bestaande fouten zouden anders als nieuw tellen — een antwoord dat klopt
69
+ * maar misleidt.
70
+ */
71
+ export declare function compareRuns(project: string, before: ComparedRun, after: ComparedRun, meta: {
72
+ readonly comparedTo: string;
73
+ readonly ageSeconds: number | null;
74
+ readonly basis?: 'run' | 'base';
75
+ }): Comparison;