phpstan-mcp-mx 0.10.1 → 0.11.1
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 +21 -0
- package/README.md +68 -0
- package/dist/baseline.d.ts +4 -1
- package/dist/baseline.js +5 -1
- package/dist/baseline.js.map +1 -1
- package/dist/changed.d.ts +4 -1
- package/dist/changed.js +13 -3
- package/dist/changed.js.map +1 -1
- package/dist/failure.d.ts +37 -0
- package/dist/failure.js +16 -0
- package/dist/failure.js.map +1 -0
- package/dist/phpstan/error.d.ts +4 -1
- package/dist/phpstan/error.js +5 -1
- package/dist/phpstan/error.js.map +1 -1
- package/dist/phpstan/output.d.ts +13 -2
- package/dist/phpstan/output.js +69 -7
- package/dist/phpstan/output.js.map +1 -1
- package/dist/phpstan.js +109 -23
- package/dist/phpstan.js.map +1 -1
- package/dist/project.d.ts +6 -1
- package/dist/project.js +23 -8
- package/dist/project.js.map +1 -1
- package/dist/report.d.ts +6 -0
- package/dist/report.js +6 -0
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +42 -0
- package/dist/runner.js +87 -0
- package/dist/runner.js.map +1 -0
- package/dist/tmpdir.d.ts +4 -1
- package/dist/tmpdir.js +5 -1
- package/dist/tmpdir.js.map +1 -1
- package/dist/tools/inspect.js +7 -2
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/shared.d.ts +14 -2
- package/dist/tools/shared.js +39 -14
- package/dist/tools/shared.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,27 @@ Alle noemenswaardige wijzigingen per versie. Vanaf 0.10.0 gegenereerd door
|
|
|
4
4
|
semantic-release uit de commit-historie; de versies daarvoor zijn met de hand
|
|
5
5
|
geschreven.
|
|
6
6
|
|
|
7
|
+
## [0.11.1](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.11.0...v0.11.1) (2026-09-10)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* haal de release-URL niet uit package.json ([8abdbca](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/8abdbca70405be2c67b26fd5171efe510977237b))
|
|
13
|
+
|
|
14
|
+
# [0.11.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.10.1...v0.11.0) (2026-09-10)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* ontdubbel de kopieën die parallelle workers achterlaten ([6419583](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/6419583dfdc8fd4acc337871c47a2ea604ff0263))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* geef elke mislukking een reden uit een gesloten verzameling ([b3ef4c7](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/b3ef4c736dda2ecc86c822f64881ccf3f4627871))
|
|
25
|
+
* houd PHPStans aanwijzingen apart van de waarschuwingen ([eb34805](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/eb3480596c5f89276a2563f7b5f26058f2442471))
|
|
26
|
+
* laat PHPStan per project in een eigen omgeving draaien ([2afaa98](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/2afaa98b9d13cfe969a08252fd54621526c1b530))
|
|
27
|
+
|
|
7
28
|
## [0.10.1](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.10.0...v0.10.1) (2026-09-10)
|
|
8
29
|
|
|
9
30
|
|
package/README.md
CHANGED
|
@@ -236,6 +236,36 @@ Kies `shared` als je wil dat de server dezelfde cache gebruikt als je terminal,
|
|
|
236
236
|
zetten van `TMPDIR` iets in je project stoort — bij Larastan draait er een hele
|
|
237
237
|
Laravel-applicatie in hetzelfde proces mee.
|
|
238
238
|
|
|
239
|
+
### `PHPSTAN_MCP_RUNNERS` (optioneel)
|
|
240
|
+
|
|
241
|
+
Sommige projecten zijn op de host niet te analyseren. Larastan start je Laravel-applicatie
|
|
242
|
+
écht op, en mist de host bijvoorbeeld `ext-redis`, dan klapt de bootstrap en stopt de analyse
|
|
243
|
+
— terwijl dezelfde repo in zijn container probleemloos doorloopt.
|
|
244
|
+
|
|
245
|
+
Met deze variabele zeg je per project waar PHPStan gedraaid moet worden:
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"/Users/jij/projecten/admin": {
|
|
250
|
+
"command": ["docker", "exec", "-w", "/var/www/html", "admin-app"],
|
|
251
|
+
"workdir": "/var/www/html"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
`command` is het commando dat ervóór komt; `workdir` is het pad waarop diezelfde projectmap
|
|
257
|
+
in die omgeving staat. Dat tweede is geen detail: paden die je meegeeft worden ernaartoe
|
|
258
|
+
vertaald, en de bestandspaden in het antwoord komen terug als host-paden — anders krijg je
|
|
259
|
+
`/var/www/html/app/User.php` terug en kun je dat bestand niet openen.
|
|
260
|
+
|
|
261
|
+
`list_projects` vermeldt per project welke omgeving geldt, en met een runner hoeft er op de
|
|
262
|
+
host geen `vendor/bin/phpstan` te staan.
|
|
263
|
+
|
|
264
|
+
**Het commando komt uit de serverconfiguratie, nooit uit een tool-aanroep.** Net als de roots
|
|
265
|
+
is dit iets wat een mens één keer vastlegt: een model kiest alleen een project, en of daar
|
|
266
|
+
een omgeving bij hoort ligt dan al vast. Zou een aanroeper het commando mogen meegeven, dan
|
|
267
|
+
bepaalt die wat er uitgevoerd wordt en is de whitelist zinloos.
|
|
268
|
+
|
|
239
269
|
### Waarom die lijst verplicht is
|
|
240
270
|
|
|
241
271
|
PHPStan is geen passieve parser. Het laadt de autoloader van het project, voert
|
|
@@ -434,6 +464,32 @@ includes:
|
|
|
434
464
|
- phpstan-baseline.neon
|
|
435
465
|
```
|
|
436
466
|
|
|
467
|
+
## Als een tool mislukt
|
|
468
|
+
|
|
469
|
+
Een mislukte aanroep geeft twee blokken terug: de melding in gewone taal, en een JSON-blok
|
|
470
|
+
met velden waarop je kunt sturen.
|
|
471
|
+
|
|
472
|
+
```json
|
|
473
|
+
{
|
|
474
|
+
"ok": false,
|
|
475
|
+
"reason": "bootstrap_failed",
|
|
476
|
+
"exitCode": 1,
|
|
477
|
+
"cause": "Class \"Redis\" not found",
|
|
478
|
+
"causeOrigin": "vendor/laravel/framework/…/PhpRedisConnector.php(34)",
|
|
479
|
+
"hint": "Draai diagnose_project op dit project: …"
|
|
480
|
+
}
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
`reason` komt uit een gesloten verzameling, zodat je erop kunt matchen zonder de tekst te
|
|
484
|
+
lezen: `no_roots_configured`, `project_outside_roots`, `project_not_found`,
|
|
485
|
+
`path_outside_project`, `path_not_found`, `phpstan_missing`, `config_missing`,
|
|
486
|
+
`bootstrap_failed`, `baseline_unreadable`, `invalid_setting`, `memory_limit`, `timeout`,
|
|
487
|
+
`cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `unusable_output` en
|
|
488
|
+
`phpstan_failed`.
|
|
489
|
+
|
|
490
|
+
De velden staan bewust in `content` en niet in `structuredContent`: dat laatste wordt door
|
|
491
|
+
MCP-clients gevalideerd tegen het schema van het *geslaagde* antwoord.
|
|
492
|
+
|
|
437
493
|
## Wat je terugkrijgt
|
|
438
494
|
|
|
439
495
|
Een analyse levert eerst tellingen over álle bevindingen en daarna één pagina met de
|
|
@@ -489,6 +545,18 @@ Dat is het verschil tussen "geen bevindingen" en "geen bevindingen, plus duizend
|
|
|
489
545
|
gemeld worden". De check kijkt of je config het bestand echt includeert — een baseline die
|
|
490
546
|
naast `phpstan.neon` ligt zonder erin te staan, doet niets.
|
|
491
547
|
|
|
548
|
+
PHPStans eigen aanwijzingen bij het lezen van bevindingen staan apart in `instructions` en
|
|
549
|
+
worden onder het rapport getoond:
|
|
550
|
+
|
|
551
|
+
```
|
|
552
|
+
PHPStan zegt hierbij:
|
|
553
|
+
Do not add `@phpstan-ignore` comments … to suppress the error.
|
|
554
|
+
Do not add type casts just to silence errors.
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
Dat blok is elke run hetzelfde en zegt niets over déze analyse, dus het telt niet mee als
|
|
558
|
+
waarschuwing — en het wordt niet afgekapt, want een half blok aanwijzingen helpt niemand.
|
|
559
|
+
|
|
492
560
|
Het `warnings`-veld staat los van `generalErrors`: dat tweede is PHPStans eigen
|
|
493
561
|
`errors`-array uit de JSON. Beide lijsten zijn begrensd op tien meldingen van elk hoogstens
|
|
494
562
|
1000 tekens — een mislukte Laravel-bootstrap levert anders een lap tekst op die het hele
|
package/dist/baseline.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { FailureDetails, FailureReason } from './failure.js';
|
|
2
|
+
import { ToolFailure } from './failure.js';
|
|
1
3
|
import type { ResolvedProject } from './project.js';
|
|
2
4
|
/** Eén genegeerde fout uit een baseline-bestand. */
|
|
3
5
|
export interface BaselineEntry {
|
|
@@ -31,7 +33,8 @@ export interface BaselineSummary {
|
|
|
31
33
|
}[];
|
|
32
34
|
}
|
|
33
35
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
34
|
-
export declare class BaselineError extends
|
|
36
|
+
export declare class BaselineError extends ToolFailure {
|
|
37
|
+
constructor(message: string, reason?: FailureReason, details?: FailureDetails);
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
40
|
* Zoekt de baseline-bestanden in de projectroot. Alleen daar en niet dieper: een
|
package/dist/baseline.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { ToolFailure } from './failure.js';
|
|
1
2
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
2
3
|
import { join } from 'node:path';
|
|
3
4
|
/** Hoeveel regels de samenvattingslijsten hoogstens tonen. */
|
|
4
5
|
const SUMMARY_ROWS = 15;
|
|
5
6
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
6
|
-
export class BaselineError extends
|
|
7
|
+
export class BaselineError extends ToolFailure {
|
|
8
|
+
constructor(message, reason = 'baseline_unreadable', details = {}) {
|
|
9
|
+
super(message, reason, details);
|
|
10
|
+
}
|
|
7
11
|
}
|
|
8
12
|
/**
|
|
9
13
|
* Zoekt de baseline-bestanden in de projectroot. Alleen daar en niet dieper: een
|
package/dist/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
package/dist/changed.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { FailureDetails, FailureReason } from './failure.js';
|
|
2
|
+
import { ToolFailure } from './failure.js';
|
|
1
3
|
import type { ResolvedProject } from './project.js';
|
|
2
4
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
3
|
-
export declare class GitError extends
|
|
5
|
+
export declare class GitError extends ToolFailure {
|
|
6
|
+
constructor(message: string, reason?: FailureReason, details?: FailureDetails);
|
|
4
7
|
}
|
|
5
8
|
/** Waartegen standaard vergeleken wordt: de laatste commit van deze werkboom. */
|
|
6
9
|
export declare const DEFAULT_BASE = "HEAD";
|
package/dist/changed.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { ToolFailure } from './failure.js';
|
|
1
2
|
import { spawn } from 'node:child_process';
|
|
2
3
|
import { ProjectError, resolveWithin } from './project.js';
|
|
3
4
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
4
|
-
export class GitError extends
|
|
5
|
+
export class GitError extends ToolFailure {
|
|
6
|
+
constructor(message, reason = 'git_missing', details = {}) {
|
|
7
|
+
super(message, reason, details);
|
|
8
|
+
}
|
|
5
9
|
}
|
|
6
10
|
/** Waartegen standaard vergeleken wordt: de laatste commit van deze werkboom. */
|
|
7
11
|
export const DEFAULT_BASE = 'HEAD';
|
|
@@ -103,10 +107,16 @@ async function git(cwd, args) {
|
|
|
103
107
|
if (spawnError !== null) {
|
|
104
108
|
throw new GitError(spawnError.code === 'ENOENT'
|
|
105
109
|
? 'git is niet gevonden. Geef paths mee aan analyse_project om zonder git te werken.'
|
|
106
|
-
: `git kon niet gestart worden in ${cwd}: ${spawnError.message}
|
|
110
|
+
: `git kon niet gestart worden in ${cwd}: ${spawnError.message}`, 'git_missing');
|
|
107
111
|
}
|
|
108
112
|
if (code !== 0) {
|
|
109
|
-
|
|
113
|
+
const details = stderr.trim();
|
|
114
|
+
const reden = /not a git repository/i.test(details)
|
|
115
|
+
? 'not_a_git_repository'
|
|
116
|
+
: /unknown revision|bad revision|ambiguous argument/i.test(details)
|
|
117
|
+
? 'unknown_base'
|
|
118
|
+
: 'git_missing';
|
|
119
|
+
throw new GitError(describeGitFailure(cwd, args, stderr, code), reden, { exitCode: code });
|
|
110
120
|
}
|
|
111
121
|
return stdout;
|
|
112
122
|
}
|
package/dist/changed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waarom een tool-aanroep mislukt is, als **gesloten** verzameling.
|
|
3
|
+
*
|
|
4
|
+
* Het faalpad gaf tot nu toe alleen proza: één Nederlandse zin plus een blob ruwe
|
|
5
|
+
* tekst. Een aanroeper kon daaruit niet aflezen wát voor soort mislukking het was —
|
|
6
|
+
* ligt het aan het project, aan deze server, of aan de aanroep zelf — en moest dus
|
|
7
|
+
* op woorden gaan matchen.
|
|
8
|
+
*
|
|
9
|
+
* Met een code uit deze lijst kan een aanroeper zelf herstellen: bij
|
|
10
|
+
* `bootstrap_failed` uitwijken naar een omgeving waar de applicatie wél start, bij
|
|
11
|
+
* `config_missing` om paden vragen, bij `timeout` opnieuw met meer tijd. Breid deze
|
|
12
|
+
* lijst uit met beleid, niet met vrije tekst — een code die maar één keer voorkomt
|
|
13
|
+
* helpt niemand.
|
|
14
|
+
*/
|
|
15
|
+
export type FailureReason = 'no_roots_configured' | 'project_outside_roots' | 'project_not_found' | 'path_outside_project' | 'path_not_found' | 'phpstan_missing' | 'config_missing' | 'bootstrap_failed' | 'baseline_unreadable' | 'invalid_setting' | 'memory_limit' | 'timeout' | 'cancelled' | 'git_missing' | 'not_a_git_repository' | 'unknown_base' | 'unusable_output' | 'phpstan_failed';
|
|
16
|
+
/** Wat er naast de reden bekend is. Alles optioneel: niet elke fout weet dit. */
|
|
17
|
+
export interface FailureDetails {
|
|
18
|
+
/** Exit code van het proces, als er een proces was. */
|
|
19
|
+
readonly exitCode?: number | null;
|
|
20
|
+
/** De regel die de oorzaak noemt, bijvoorbeeld `Class "Redis" not found`. */
|
|
21
|
+
readonly cause?: string;
|
|
22
|
+
/** Waar die oorzaak vandaan komt: het eerste frame van de stack trace. */
|
|
23
|
+
readonly causeOrigin?: string;
|
|
24
|
+
/** Wat de aanroeper hierna kan doen, in gewone taal. */
|
|
25
|
+
readonly hint?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Basis voor elke fout die als tool-resultaat teruggaat in plaats van als crash.
|
|
29
|
+
*
|
|
30
|
+
* De subklassen blijven bestaan omdat ze op verschillende plekken gegooid worden en
|
|
31
|
+
* `instanceof` in de tests leesbaar houdt; de reden en de details zitten hier.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ToolFailure extends Error {
|
|
34
|
+
readonly reason: FailureReason;
|
|
35
|
+
readonly details: FailureDetails;
|
|
36
|
+
constructor(message: string, reason: FailureReason, details?: FailureDetails);
|
|
37
|
+
}
|
package/dist/failure.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Basis voor elke fout die als tool-resultaat teruggaat in plaats van als crash.
|
|
3
|
+
*
|
|
4
|
+
* De subklassen blijven bestaan omdat ze op verschillende plekken gegooid worden en
|
|
5
|
+
* `instanceof` in de tests leesbaar houdt; de reden en de details zitten hier.
|
|
6
|
+
*/
|
|
7
|
+
export class ToolFailure extends Error {
|
|
8
|
+
reason;
|
|
9
|
+
details;
|
|
10
|
+
constructor(message, reason, details = {}) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.reason = reason;
|
|
13
|
+
this.details = details;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AAkDA;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGzB;IACA;IAHX,YACE,OAAe,EACN,MAAqB,EACrB,UAA0B,EAAE;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAe;QACrB,YAAO,GAAP,OAAO,CAAqB;IAGvC,CAAC;CACF"}
|
package/dist/phpstan/error.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { FailureDetails, FailureReason } from '../failure.js';
|
|
2
|
+
import { ToolFailure } from '../failure.js';
|
|
1
3
|
/**
|
|
2
4
|
* Fout die als bruikbare melding naar het model teruggaat, niet als crash.
|
|
3
5
|
*
|
|
4
6
|
* Staat in een eigen module omdat zowel phpstan.ts als de queue hem gooit, en
|
|
5
7
|
* queue.ts importeren vanuit phpstan.ts zou een cyclus zijn.
|
|
6
8
|
*/
|
|
7
|
-
export declare class PhpstanError extends
|
|
9
|
+
export declare class PhpstanError extends ToolFailure {
|
|
10
|
+
constructor(message: string, reason?: FailureReason, details?: FailureDetails);
|
|
8
11
|
}
|
package/dist/phpstan/error.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { ToolFailure } from '../failure.js';
|
|
1
2
|
/**
|
|
2
3
|
* Fout die als bruikbare melding naar het model teruggaat, niet als crash.
|
|
3
4
|
*
|
|
4
5
|
* Staat in een eigen module omdat zowel phpstan.ts als de queue hem gooit, en
|
|
5
6
|
* queue.ts importeren vanuit phpstan.ts zou een cyclus zijn.
|
|
6
7
|
*/
|
|
7
|
-
export class PhpstanError extends
|
|
8
|
+
export class PhpstanError extends ToolFailure {
|
|
9
|
+
constructor(message, reason = 'phpstan_failed', details = {}) {
|
|
10
|
+
super(message, reason, details);
|
|
11
|
+
}
|
|
8
12
|
}
|
|
9
13
|
//# sourceMappingURL=error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/phpstan/error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/phpstan/error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAY,OAAe,EAAE,SAAwB,gBAAgB,EAAE,UAA0B,EAAE;QACjG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF"}
|
package/dist/phpstan/output.d.ts
CHANGED
|
@@ -21,15 +21,24 @@ type PhpstanOutput = z.infer<typeof outputSchema>;
|
|
|
21
21
|
* associatieve array nu eenmaal als JSON-array.
|
|
22
22
|
*/
|
|
23
23
|
export declare function tryParse(stdout: string): PhpstanOutput | null;
|
|
24
|
+
/** Wat er op stderr stond, uit elkaar getrokken naar wat het is. */
|
|
25
|
+
export interface StderrInhoud {
|
|
26
|
+
/** Meldingen over de run zelf, zoals "Result is incomplete". */
|
|
27
|
+
readonly warnings: string[];
|
|
28
|
+
/** PHPStans vaste aanwijzingen bij het lezen van de bevindingen. */
|
|
29
|
+
readonly instructions: string[];
|
|
30
|
+
}
|
|
24
31
|
/**
|
|
25
32
|
* Haalt uit stderr wat het model moet weten bij een gelúkte analyse. Dit werd eerder
|
|
26
33
|
* helemaal weggegooid zodra de JSON parseerde — en juist daar staat PHPStans
|
|
27
34
|
* "Result is incomplete because of severe errors.": geldige JSON die het project niet
|
|
28
35
|
* volledig dekt. Zonder deze regels leest een model een schone uitslag die dat niet is.
|
|
36
|
+
*
|
|
37
|
+
* Het instructieblok wordt apart gehouden: dat zegt niets over déze run.
|
|
29
38
|
*/
|
|
30
|
-
export declare function collectWarnings(stderr: string):
|
|
39
|
+
export declare function collectWarnings(stderr: string): StderrInhoud;
|
|
31
40
|
/** Zet PHPStans uitvoer om in het interne resultaat, met de waarschuwingen erbij. */
|
|
32
|
-
export declare function toResult(project: string, output: PhpstanOutput,
|
|
41
|
+
export declare function toResult(project: string, output: PhpstanOutput, stderr: StderrInhoud): AnalysisResult;
|
|
33
42
|
/** Eén bevinding van PHPStan, gekoppeld aan een bestand. */
|
|
34
43
|
export interface Finding {
|
|
35
44
|
/** Absoluut pad zoals PHPStan het rapporteert. */
|
|
@@ -49,6 +58,8 @@ export interface AnalysisResult {
|
|
|
49
58
|
readonly generalErrors: readonly string[];
|
|
50
59
|
/** Wat PHPStan naast de JSON op stderr zei; leeg als er niets bijzonders was. */
|
|
51
60
|
readonly warnings: readonly string[];
|
|
61
|
+
/** PHPStans vaste aanwijzingen bij het lezen van bevindingen. */
|
|
62
|
+
readonly instructions: readonly string[];
|
|
52
63
|
readonly totals: {
|
|
53
64
|
readonly fileErrors: number;
|
|
54
65
|
readonly generalErrors: number;
|
package/dist/phpstan/output.js
CHANGED
|
@@ -39,20 +39,38 @@ export function tryParse(stdout) {
|
|
|
39
39
|
* niet kennen, en die stil laten vallen is precies de fout die dit moet voorkomen.
|
|
40
40
|
*/
|
|
41
41
|
const HARMLESS_STDERR = [/^Note: /];
|
|
42
|
+
/**
|
|
43
|
+
* PHPStan zet bij een analyse een blok aanwijzingen op stderr: hoe je een
|
|
44
|
+
* error-identifier opzoekt, en dat je fouten bij de bron hoort te repareren in
|
|
45
|
+
* plaats van ze met `@phpstan-ignore` of een baseline weg te drukken.
|
|
46
|
+
*
|
|
47
|
+
* Dat is geen waarschuwing maar begeleiding, en het is elke run dezelfde tekst.
|
|
48
|
+
* Het werd hiervoor als waarschuwing geteld, waarna de limiet van tien meldingen
|
|
49
|
+
* het middenin afkapte — dertien regels, drie "weggelaten", en dus een half signaal
|
|
50
|
+
* waar niemand iets mee kon.
|
|
51
|
+
*/
|
|
52
|
+
const INSTRUCTIE_KOP = /^Instructions for interpreting errors/i;
|
|
42
53
|
/**
|
|
43
54
|
* Haalt uit stderr wat het model moet weten bij een gelúkte analyse. Dit werd eerder
|
|
44
55
|
* helemaal weggegooid zodra de JSON parseerde — en juist daar staat PHPStans
|
|
45
56
|
* "Result is incomplete because of severe errors.": geldige JSON die het project niet
|
|
46
57
|
* volledig dekt. Zonder deze regels leest een model een schone uitslag die dat niet is.
|
|
58
|
+
*
|
|
59
|
+
* Het instructieblok wordt apart gehouden: dat zegt niets over déze run.
|
|
47
60
|
*/
|
|
48
61
|
export function collectWarnings(stderr) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
const regels = stderr.split('\n').map((regel) => regel.trim());
|
|
63
|
+
const kop = regels.findIndex((regel) => INSTRUCTIE_KOP.test(regel));
|
|
64
|
+
const bruikbaar = (deel) => deel.filter((regel) => regel !== '' && !HARMLESS_STDERR.some((patroon) => patroon.test(regel)));
|
|
65
|
+
if (kop === -1)
|
|
66
|
+
return { warnings: bruikbaar(regels), instructions: [] };
|
|
67
|
+
return {
|
|
68
|
+
warnings: bruikbaar(regels.slice(0, kop)),
|
|
69
|
+
instructions: bruikbaar(regels.slice(kop)),
|
|
70
|
+
};
|
|
53
71
|
}
|
|
54
72
|
/** Zet PHPStans uitvoer om in het interne resultaat, met de waarschuwingen erbij. */
|
|
55
|
-
export function toResult(project, output,
|
|
73
|
+
export function toResult(project, output, stderr) {
|
|
56
74
|
const findings = [];
|
|
57
75
|
for (const [file, entry] of Object.entries(output.files)) {
|
|
58
76
|
for (const message of entry.messages) {
|
|
@@ -69,7 +87,8 @@ export function toResult(project, output, warnings) {
|
|
|
69
87
|
project,
|
|
70
88
|
findings,
|
|
71
89
|
generalErrors: output.errors,
|
|
72
|
-
warnings,
|
|
90
|
+
warnings: stderr.warnings,
|
|
91
|
+
instructions: stderr.instructions,
|
|
73
92
|
totals: { fileErrors: output.totals.file_errors, generalErrors: output.totals.errors },
|
|
74
93
|
};
|
|
75
94
|
}
|
|
@@ -98,7 +117,50 @@ const OORZAAK = /^\s*(Error|Fatal error|PHP Fatal error):/i;
|
|
|
98
117
|
* Wat wegvalt wordt geteld en gemeld, en er wordt altijd op een regelgrens geknipt.
|
|
99
118
|
*/
|
|
100
119
|
export function condenseDetails(text, max = MAX_DETAIL_CHARS) {
|
|
101
|
-
const
|
|
120
|
+
const ontdubbeld = dedupeWorkers(text.trim().split('\n'));
|
|
121
|
+
const body = beknopt(dropTips(ontdubbeld.regels), max);
|
|
122
|
+
return ontdubbeld.weg === 0
|
|
123
|
+
? body
|
|
124
|
+
: `${body}\n\n… (${String(ontdubbeld.weg)} identieke regel(s) van parallelle workers weggelaten) …`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* PHPStan forkt workers die élk het bootstrap-bestand uitvoeren. Klapt dat, dan
|
|
128
|
+
* schrijft iedere worker dezelfde melding naar dezelfde pipe, en komt het vermengd
|
|
129
|
+
* binnen: regels uit verschillende kopieën door elkaar, buiten volgorde.
|
|
130
|
+
*
|
|
131
|
+
* Gemeten op een echt project: vier kopieën van dezelfde fout, 246 regels stderr.
|
|
132
|
+
* Dedupliceren gebeurt op de regel zónder naspaties — PHPStan omkadert zijn eerste
|
|
133
|
+
* regel met opvulling, waardoor twee kopieën anders niet identiek lijken.
|
|
134
|
+
*
|
|
135
|
+
* Verschilt de fout per worker, dan blijven die regels allebei staan: alleen exacte
|
|
136
|
+
* herhalingen vallen weg, in de volgorde waarin ze het eerst voorkwamen.
|
|
137
|
+
*/
|
|
138
|
+
function dedupeWorkers(regels) {
|
|
139
|
+
const gezien = new Set();
|
|
140
|
+
const uit = [];
|
|
141
|
+
let weg = 0;
|
|
142
|
+
for (const regel of regels) {
|
|
143
|
+
// De sleutel negeert witruimte aan béíde kanten: PHPStan omkadert regels met
|
|
144
|
+
// opvulling, en de buitenste trim van de hele tekst haalt die alleen bij de
|
|
145
|
+
// eerste regel weg. Wat er blijft staan houdt zijn eigen inspringing.
|
|
146
|
+
const sleutel = regel.trim();
|
|
147
|
+
// Lege regels dragen geen inhoud; opeenvolgende blanks worden er één.
|
|
148
|
+
if (sleutel === '') {
|
|
149
|
+
if (uit.length > 0 && uit[uit.length - 1] !== '')
|
|
150
|
+
uit.push('');
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (gezien.has(sleutel)) {
|
|
154
|
+
weg += 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
gezien.add(sleutel);
|
|
158
|
+
uit.push(regel.trimEnd());
|
|
159
|
+
}
|
|
160
|
+
return { regels: uit, weg };
|
|
161
|
+
}
|
|
162
|
+
/** Kort een al ontdubbelde lijst in tot `max` tekens. */
|
|
163
|
+
function beknopt(regels, max) {
|
|
102
164
|
const samen = regels.join('\n');
|
|
103
165
|
if (samen.length <= max)
|
|
104
166
|
return samen;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/phpstan/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,+EAA+E;IAC/E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAE,GAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;QAChG,GAA0B,CAAC,KAAK,GAAG,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,SAAS,CAAC,CAAC;AAEpC
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/phpstan/output.ts"],"names":[],"mappings":"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"}
|