phpstan-mcp-mx 0.28.2 → 0.29.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 +19 -0
- package/README.md +42 -4
- package/dist/dumptype.d.ts +6 -0
- package/dist/dumptype.js +13 -1
- package/dist/dumptype.js.map +1 -1
- package/dist/finding.d.ts +10 -2
- package/dist/finding.js +72 -22
- package/dist/finding.js.map +1 -1
- package/dist/phpstan/output.d.ts +32 -0
- package/dist/phpstan/output.js +50 -0
- package/dist/phpstan/output.js.map +1 -1
- package/dist/phpstan/process.js +9 -1
- package/dist/phpstan/process.js.map +1 -1
- package/dist/phpstan.d.ts +9 -1
- package/dist/phpstan.js +18 -3
- package/dist/phpstan.js.map +1 -1
- package/dist/report.d.ts +8 -1
- package/dist/report.js +7 -1
- package/dist/report.js.map +1 -1
- package/dist/tools/inspect.js +6 -1
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/shared.d.ts +1 -0
- package/dist/tools/shared.js +4 -0
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/writes.js +69 -14
- package/dist/tools/writes.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
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.29.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.28.3...v0.29.0) (2026-09-14)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* report which findings PHPStan does not allow ignoring ([faf61c5](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/faf61c5b2a8d4ab6a117453031a8ff4c72a74760))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Performance Improvements
|
|
15
|
+
|
|
16
|
+
* skip PHPStan's restart without Xdebug ([58d13de](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/58d13dee62d4b5bf89aae8f6f4b00913d68c0361))
|
|
17
|
+
|
|
18
|
+
## [0.28.3](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.28.2...v0.28.3) (2026-09-14)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* stop show_finding from reporting shifted lines and a false "no variable" ([9807a7a](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/9807a7a342ba64dbf8ae54fb8b9f91e448be1349))
|
|
24
|
+
|
|
6
25
|
## [0.28.2](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.28.1...v0.28.2) (2026-09-14)
|
|
7
26
|
|
|
8
27
|
|
package/README.md
CHANGED
|
@@ -368,6 +368,12 @@ container or WSL. The project key may be written in your platform's form
|
|
|
368
368
|
(`C:\Users\you\admin` or `C:/Users/you/admin`, with or without a trailing slash); it is
|
|
369
369
|
compared after resolving symlinks, just like the `project` argument itself.
|
|
370
370
|
|
|
371
|
+
On the host, the server starts PHPStan with `XDEBUG_MODE=off`: otherwise PHPStan restarts
|
|
372
|
+
itself without Xdebug on every call, which cost 1.3 seconds per call on a machine with Xdebug
|
|
373
|
+
enabled. That variable does not reach a container through `docker exec`. If Xdebug is
|
|
374
|
+
installed in there, add it to the command yourself:
|
|
375
|
+
`["docker", "exec", "-e", "XDEBUG_MODE=off", "-w", "/var/www/html", "admin-app"]`.
|
|
376
|
+
|
|
371
377
|
**The command comes from the server configuration, never from a tool call.** Like the roots,
|
|
372
378
|
this is something a human sets once: a model only picks a project, and whether an
|
|
373
379
|
environment belongs to it is already decided. If a caller could pass in the command, the
|
|
@@ -651,11 +657,15 @@ Types right before line 42:
|
|
|
651
657
|
- $order->total: int
|
|
652
658
|
```
|
|
653
659
|
|
|
660
|
+
A finding on the line that PHPStan does not allow ignoring says so, as in an analysis.
|
|
661
|
+
|
|
654
662
|
The types and the findings come from one run, the same way as `inspect_type`, so the project
|
|
655
663
|
is not changed. Without `expressions`, the variables and property chains on the line are
|
|
656
664
|
used, except what only comes into existence there: the target of an assignment, the variables
|
|
657
|
-
of a `foreach … as`, and the parameters of a closure.
|
|
658
|
-
|
|
665
|
+
of a `foreach … as`, and the parameters of a closure. When that leaves nothing, PHPStan is not
|
|
666
|
+
started and you get only the code, with the reason: no variable at all, or only variables that
|
|
667
|
+
come into existence on that line (which it names). A line number in a message is the one in
|
|
668
|
+
your file, not in the copy with the inserted lines. When the file does not parse with the inserted
|
|
659
669
|
lines, the line probably does not start a statement (inside a multi-line array or method
|
|
660
670
|
chain); the answer says so instead of guessing another line.
|
|
661
671
|
|
|
@@ -919,8 +929,8 @@ rather than existing and refusing every call. All other tools stay read-only.
|
|
|
919
929
|
|
|
920
930
|
Otherwise the same `paths`, `level`, `config` and `memoryLimit` as an analysis. The response
|
|
921
931
|
says what still needs to happen, because a baseline that isn't included anywhere does
|
|
922
|
-
nothing. If the config already includes it, it says that instead (`included: true`,
|
|
923
|
-
`advice`):
|
|
932
|
+
nothing. If the config already includes it, it says that instead (`included: true`, and no
|
|
933
|
+
include in `advice`):
|
|
924
934
|
|
|
925
935
|
```
|
|
926
936
|
5 error(s) written to phpstan-baseline.neon.
|
|
@@ -931,6 +941,24 @@ includes:
|
|
|
931
941
|
- phpstan-baseline.neon
|
|
932
942
|
```
|
|
933
943
|
|
|
944
|
+
Errors PHPStan does not allow ignoring never go into a baseline, and stay reported even once
|
|
945
|
+
it is included. The response counts and names them under `unignorable` (the first ten, with
|
|
946
|
+
`omitted` for the rest), with advice to fix them at the source. PHPStan itself only says
|
|
947
|
+
"Some errors could not be put into baseline"; the server runs it with `-vv`, which is the only
|
|
948
|
+
way it names them.
|
|
949
|
+
|
|
950
|
+
```
|
|
951
|
+
1 error(s) written to phpstan-baseline.neon.
|
|
952
|
+
|
|
953
|
+
The config already includes it, so from now on these errors are no longer reported.
|
|
954
|
+
|
|
955
|
+
2 error(s) cannot be ignored, so PHPStan left them out of the baseline and they are still reported (see unignorable; analyse_project marks them with ignorable: false). Fix them at the source.
|
|
956
|
+
|
|
957
|
+
Not in the baseline, because PHPStan does not allow ignoring them:
|
|
958
|
+
src/test.php: Cannot use [] for reading.
|
|
959
|
+
src/test.php: The (unset) cast is no longer supported in PHP 8.0 and later.
|
|
960
|
+
```
|
|
961
|
+
|
|
934
962
|
### `prune_baseline` (only with write access)
|
|
935
963
|
|
|
936
964
|
Cleans up the baseline without hiding anything new: entries that no longer match anything are
|
|
@@ -1054,6 +1082,16 @@ src/Support/Filters/DealFilters.php
|
|
|
1054
1082
|
42 argument.type Parameter #1 $id expects int, string given.
|
|
1055
1083
|
```
|
|
1056
1084
|
|
|
1085
|
+
A finding PHPStan does not allow ignoring gets an extra line, and `ignorable: false` in the
|
|
1086
|
+
structured result. These are errors PHP itself would reject (`cast.unset`,
|
|
1087
|
+
`offsetAccess.noDim`), parse errors, and broken or stale ignores: neither `@phpstan-ignore` nor
|
|
1088
|
+
a baseline hides them. On every other finding the field is left out.
|
|
1089
|
+
|
|
1090
|
+
```
|
|
1091
|
+
5 cast.unset The (unset) cast is no longer supported in PHP 8.0 and later.
|
|
1092
|
+
cannot be ignored: neither @phpstan-ignore nor a baseline hides this, so fix it
|
|
1093
|
+
```
|
|
1094
|
+
|
|
1057
1095
|
A message that occurs more than once gets its own line under the counts, because the same
|
|
1058
1096
|
message in several places often has one cause:
|
|
1059
1097
|
|
package/dist/dumptype.d.ts
CHANGED
|
@@ -90,6 +90,12 @@ export declare function insertProbes(source: string, line: number, expressions:
|
|
|
90
90
|
* het oorspronkelijke bestand, anders wijzen ze een of meer regels te ver.
|
|
91
91
|
*/
|
|
92
92
|
export declare function readProbes(project: string, file: string, probe: Probe, result: AnalysisResult): TypeReport;
|
|
93
|
+
/**
|
|
94
|
+
* Het regelnummer in het oorspronkelijke bestand bij regel `at` van de kopie. Een ingevoegde
|
|
95
|
+
* regel hoort bij de gevraagde regel; alles erna staat zoveel regels lager als er dumps zijn.
|
|
96
|
+
* Gedeeld met `show_finding`, dat ook de regelnummers in de meldingen terugrekent.
|
|
97
|
+
*/
|
|
98
|
+
export declare function originalLine(probe: Probe, at: number): number;
|
|
93
99
|
/**
|
|
94
100
|
* Waarom een parse-fout geen types oplevert. Met het voorbehoud erbij: de fout kan ook in het
|
|
95
101
|
* bestand zelf zitten, en dan ligt het niet aan de regel. Gedeeld met `show_finding`, dat
|
package/dist/dumptype.js
CHANGED
|
@@ -115,7 +115,7 @@ export function readProbes(project, file, probe, result) {
|
|
|
115
115
|
const onProbe = at !== null && at >= first && at < first + inserted;
|
|
116
116
|
if (finding.identifier === 'phpstan.parse') {
|
|
117
117
|
parseErrors.push({
|
|
118
|
-
line: at === null ? null :
|
|
118
|
+
line: at === null ? null : originalLine(probe, at),
|
|
119
119
|
inserted: onProbe,
|
|
120
120
|
// PHPStan zet het (verschoven) regelnummer ook in de tekst; dat staat nu in `line`.
|
|
121
121
|
message: finding.message.replace(/ on line \d+$/, ''),
|
|
@@ -155,6 +155,18 @@ export function readProbes(project, file, probe, result) {
|
|
|
155
155
|
},
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Het regelnummer in het oorspronkelijke bestand bij regel `at` van de kopie. Een ingevoegde
|
|
160
|
+
* regel hoort bij de gevraagde regel; alles erna staat zoveel regels lager als er dumps zijn.
|
|
161
|
+
* Gedeeld met `show_finding`, dat ook de regelnummers in de meldingen terugrekent.
|
|
162
|
+
*/
|
|
163
|
+
export function originalLine(probe, at) {
|
|
164
|
+
const inserted = probe.expressions.length;
|
|
165
|
+
if (at < probe.line) {
|
|
166
|
+
return at;
|
|
167
|
+
}
|
|
168
|
+
return at < probe.line + inserted ? probe.target : at - inserted;
|
|
169
|
+
}
|
|
158
170
|
/**
|
|
159
171
|
* Waarom een parse-fout geen types oplevert. Met het voorbehoud erbij: de fout kan ook in het
|
|
160
172
|
* bestand zelf zitten, en dan ligt het niet aan de regel. Gedeeld met `show_finding`, dat
|
package/dist/dumptype.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"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"}
|
package/dist/finding.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface LineFinding {
|
|
|
18
18
|
readonly message: string;
|
|
19
19
|
readonly identifier: string | null;
|
|
20
20
|
readonly tip: string | null;
|
|
21
|
+
/** Alleen als PHPStan deze fout niet laat negeren, zoals in het rapport. */
|
|
22
|
+
readonly ignorable?: false;
|
|
21
23
|
}
|
|
22
24
|
/** Het antwoord van `show_finding`. */
|
|
23
25
|
export interface FindingView {
|
|
@@ -49,8 +51,8 @@ export interface FindingView {
|
|
|
49
51
|
* maar de types niet zien; die komen uit hetzelfde mechanisme als `inspect_type`, een kopie
|
|
50
52
|
* in editor mode, en dezelfde run levert de bevindingen op die regel.
|
|
51
53
|
*
|
|
52
|
-
* Staat er op de regel
|
|
53
|
-
* melding had het model al. Is de regel geen begin van een statement, dan geeft PHPStan een
|
|
54
|
+
* Staat er op de regel niets om te dumpen (geen variabele, of alleen variabelen die daar pas
|
|
55
|
+
* ontstaan), dan start PHPStan niet: de melding had het model al. De uitleg zegt welk van de twee. Is de regel geen begin van een statement, dan geeft PHPStan een
|
|
54
56
|
* parse-fout; die wordt benoemd, en er wordt niet naar een andere regel gegokt.
|
|
55
57
|
*/
|
|
56
58
|
export declare function showFinding(project: ResolvedProject, request: FindingRequest, options?: Pick<AnalyseOptions, 'config' | 'memoryLimit' | 'timeoutMs' | 'signal'>): Promise<FindingView>;
|
|
@@ -63,5 +65,11 @@ export declare function showFinding(project: ResolvedProject, request: FindingRe
|
|
|
63
65
|
* mee; tussen dubbele quotes wel, want daar wordt een variabele ingevuld.
|
|
64
66
|
*/
|
|
65
67
|
export declare function variablesOn(line: string): string[];
|
|
68
|
+
/**
|
|
69
|
+
* De variabelen die pas op deze regel ontstaan, en die `variablesOn` dus overslaat. Voor de
|
|
70
|
+
* uitleg als er daarna niets te dumpen overblijft: bij `->filter(fn (Tariff $t) => $t->from)`
|
|
71
|
+
* zei die eerst "no variable on this line", terwijl `$t` er gewoon staat.
|
|
72
|
+
*/
|
|
73
|
+
export declare function introducedOn(line: string): string[];
|
|
66
74
|
/** Schrijft de bevinding uit als tekst voor het model. */
|
|
67
75
|
export declare function renderFinding(view: FindingView): string;
|
package/dist/finding.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { readFileSync, statSync } from 'node:fs';
|
|
2
|
-
import { MAX_EXPRESSIONS, explainParseFailure, insertProbes, readProbes } from './dumptype.js';
|
|
2
|
+
import { MAX_EXPRESSIONS, explainParseFailure, insertProbes, originalLine, readProbes } from './dumptype.js';
|
|
3
3
|
import { PhpstanError, analyseEdited, tmpCopyName } from './phpstan.js';
|
|
4
4
|
import { resolveWithin } from './project.js';
|
|
5
|
-
import { displayPath } from './report.js';
|
|
5
|
+
import { NOT_IGNORABLE, displayPath } from './report.js';
|
|
6
6
|
/** Hoeveel regels er standaard voor en na de regel getoond worden. */
|
|
7
7
|
export const DEFAULT_CONTEXT = 5;
|
|
8
8
|
/** Meer is geen context meer maar het bestand; dat hoort bij een tool die het bestand leest. */
|
|
@@ -17,8 +17,8 @@ const MAX_LINE_CHARS = 300;
|
|
|
17
17
|
* maar de types niet zien; die komen uit hetzelfde mechanisme als `inspect_type`, een kopie
|
|
18
18
|
* in editor mode, en dezelfde run levert de bevindingen op die regel.
|
|
19
19
|
*
|
|
20
|
-
* Staat er op de regel
|
|
21
|
-
* melding had het model al. Is de regel geen begin van een statement, dan geeft PHPStan een
|
|
20
|
+
* Staat er op de regel niets om te dumpen (geen variabele, of alleen variabelen die daar pas
|
|
21
|
+
* ontstaan), dan start PHPStan niet: de melding had het model al. De uitleg zegt welk van de twee. Is de regel geen begin van een statement, dan geeft PHPStan een
|
|
22
22
|
* parse-fout; die wordt benoemd, en er wordt niet naar een andere regel gegokt.
|
|
23
23
|
*/
|
|
24
24
|
export async function showFinding(project, request, options = {}) {
|
|
@@ -48,7 +48,7 @@ export async function showFinding(project, request, options = {}) {
|
|
|
48
48
|
...base,
|
|
49
49
|
findings: null,
|
|
50
50
|
types: [],
|
|
51
|
-
typesProblem:
|
|
51
|
+
typesProblem: nothingToProbe(introducedOn(lines[request.line - 1] ?? '')),
|
|
52
52
|
parseErrors: [],
|
|
53
53
|
generalErrors: [],
|
|
54
54
|
warnings: [],
|
|
@@ -62,7 +62,12 @@ export async function showFinding(project, request, options = {}) {
|
|
|
62
62
|
const verschoven = request.line + probe.expressions.length;
|
|
63
63
|
const findings = result.findings
|
|
64
64
|
.filter((finding) => finding.file === file && finding.line === verschoven && finding.identifier !== 'phpstan.parse')
|
|
65
|
-
.map((finding) => ({
|
|
65
|
+
.map((finding) => ({
|
|
66
|
+
message: withOriginalLines(finding.message, probe),
|
|
67
|
+
identifier: finding.identifier,
|
|
68
|
+
tip: finding.tip,
|
|
69
|
+
...(finding.ignorable ? {} : { ignorable: false }),
|
|
70
|
+
}));
|
|
66
71
|
// Dezelfde uitleg als inspect_type, met het voorbehoud: dit stond hier eerst stellig als "de
|
|
67
72
|
// regel begint geen statement", terwijl de fout ook in het bestand zelf kan zitten.
|
|
68
73
|
if (report.parseErrors.length > 0) {
|
|
@@ -97,17 +102,41 @@ export async function showFinding(project, request, options = {}) {
|
|
|
97
102
|
* mee; tussen dubbele quotes wel, want daar wordt een variabele ingevuld.
|
|
98
103
|
*/
|
|
99
104
|
export function variablesOn(line) {
|
|
100
|
-
const code = line
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
105
|
+
const code = withoutStringsAndComments(line);
|
|
106
|
+
const nieuw = new Set(introducedIn(code));
|
|
107
|
+
const gevonden = [];
|
|
108
|
+
// `(?!\w)` vóór de lookahead op `(`: anders maakt backtracking van `$a->foo()` een `$a->fo`.
|
|
109
|
+
// Niet na `::`: `self::$x` is een statische property, geen lokale variabele.
|
|
110
|
+
for (const match of code.matchAll(/(?<!::)\$\w+(?:\s*\??->\s*\w+(?!\w)(?!\s*\())*/g)) {
|
|
111
|
+
const expressie = match[0].replace(/\s+/g, '');
|
|
112
|
+
const variabele = /^\$\w+/.exec(expressie)?.[0] ?? '';
|
|
113
|
+
if (expressie === '$this' || nieuw.has(variabele) || gevonden.includes(expressie)) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
gevonden.push(expressie);
|
|
117
|
+
}
|
|
118
|
+
return gevonden.slice(0, MAX_EXPRESSIONS);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* De variabelen die pas op deze regel ontstaan, en die `variablesOn` dus overslaat. Voor de
|
|
122
|
+
* uitleg als er daarna niets te dumpen overblijft: bij `->filter(fn (Tariff $t) => $t->from)`
|
|
123
|
+
* zei die eerst "no variable on this line", terwijl `$t` er gewoon staat.
|
|
124
|
+
*/
|
|
125
|
+
export function introducedOn(line) {
|
|
126
|
+
return [...introducedIn(withoutStringsAndComments(line))];
|
|
127
|
+
}
|
|
128
|
+
/** Het doel van een toewijzing, de variabelen van een `foreach … as` en de parameters van een closure. */
|
|
129
|
+
function introducedIn(code) {
|
|
104
130
|
const nieuw = new Set();
|
|
105
131
|
for (const match of code.matchAll(/(\$\w+)\s*(?:=(?![=>])|\?\?=)/g)) {
|
|
106
132
|
// `??=` laat een bestaande waarde staan, maar de variabele hoeft nog niet te bestaan.
|
|
107
133
|
nieuw.add(match[1] ?? '');
|
|
108
134
|
}
|
|
109
135
|
for (const match of code.matchAll(/\bas\s+(?:&?\s*(\$\w+)\s*=>\s*)?&?\s*(\$\w+)/g)) {
|
|
110
|
-
|
|
136
|
+
// Zonder sleutel is de eerste groep leeg; die hoort niet als "variabele" in een melding.
|
|
137
|
+
if (match[1] !== undefined) {
|
|
138
|
+
nieuw.add(match[1]);
|
|
139
|
+
}
|
|
111
140
|
nieuw.add(match[2] ?? '');
|
|
112
141
|
}
|
|
113
142
|
for (const match of code.matchAll(/\b(?:fn|function)\s*&?\s*\(([^)]*)\)/g)) {
|
|
@@ -115,18 +144,36 @@ export function variablesOn(line) {
|
|
|
115
144
|
nieuw.add(parameter[0]);
|
|
116
145
|
}
|
|
117
146
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
147
|
+
return nieuw;
|
|
148
|
+
}
|
|
149
|
+
/** Een tekst tussen enkele quotes en commentaar tellen niet mee; tussen dubbele quotes wel. */
|
|
150
|
+
function withoutStringsAndComments(line) {
|
|
151
|
+
return line
|
|
152
|
+
.replace(/'(?:[^'\\]|\\.)*'/g, "''")
|
|
153
|
+
.replace(/\/\*.*?\*\//g, '')
|
|
154
|
+
.replace(/(?:\/\/|#(?!\[)).*$/, '');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Waarom PHPStan niet gestart is. "No variable" alleen als dat ook waar is: staan er wel
|
|
158
|
+
* variabelen die pas op de regel ontstaan, dan noemt de uitleg die, anders leest het model
|
|
159
|
+
* een melding die het met eigen ogen tegengesproken ziet.
|
|
160
|
+
*/
|
|
161
|
+
function nothingToProbe(introduced) {
|
|
162
|
+
if (introduced.length === 0) {
|
|
163
|
+
return 'There is no variable on this line, so PHPStan was not started. Pass expressions to see their types.';
|
|
128
164
|
}
|
|
129
|
-
return
|
|
165
|
+
return (`The variables on this line (${introduced.join(', ')}) only come into existence on it, as closure parameters, ` +
|
|
166
|
+
'assignment targets or foreach variables, so they have no type before it and PHPStan was not started. ' +
|
|
167
|
+
'Pass expressions to see the types of other values.');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Een melding met de regelnummers van het bestand in plaats van die van de kopie. PHPStan zet
|
|
171
|
+
* soms het regelnummer in de tekst ("No error with identifier X is reported on line N."), en
|
|
172
|
+
* in de kopie staat alles vanaf het invoegpunt lager: nagemeten meldde `show_finding` op regel
|
|
173
|
+
* 257 met drie dumps "on line 260".
|
|
174
|
+
*/
|
|
175
|
+
function withOriginalLines(message, probe) {
|
|
176
|
+
return message.replace(/\bon line (\d+)\b/g, (_, line) => `on line ${String(originalLine(probe, Number(line)))}`);
|
|
130
177
|
}
|
|
131
178
|
/** Schrijft de bevinding uit als tekst voor het model. */
|
|
132
179
|
export function renderFinding(view) {
|
|
@@ -154,6 +201,9 @@ export function renderFinding(view) {
|
|
|
154
201
|
if (finding.tip !== null) {
|
|
155
202
|
lines.push(` tip: ${finding.tip}`);
|
|
156
203
|
}
|
|
204
|
+
if (finding.ignorable === false) {
|
|
205
|
+
lines.push(` ${NOT_IGNORABLE}`);
|
|
206
|
+
}
|
|
157
207
|
}
|
|
158
208
|
}
|
|
159
209
|
}
|
package/dist/finding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../src/finding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../src/finding.ts"],"names":[],"mappings":"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"}
|
package/dist/phpstan/output.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ declare const outputSchema: z.ZodObject<{
|
|
|
10
10
|
line: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
11
11
|
identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
12
12
|
tip: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
13
|
+
ignorable: z.ZodOptional<z.ZodBoolean>;
|
|
13
14
|
}, z.core.$strip>>;
|
|
14
15
|
}, z.core.$strip>>;
|
|
15
16
|
errors: z.ZodArray<z.ZodString>;
|
|
@@ -61,6 +62,12 @@ export interface Finding {
|
|
|
61
62
|
readonly identifier: string | null;
|
|
62
63
|
/** PHPStans eigen hint bij deze fout, als die er is. */
|
|
63
64
|
readonly tip: string | null;
|
|
65
|
+
/**
|
|
66
|
+
* Of PHPStan toestaat deze fout te negeren (`canBeIgnored()`). Niet bij een fout die PHP zelf
|
|
67
|
+
* zou weigeren (`cast.unset`, `offsetAccess.noDim`), een parse-fout, of een kapotte of
|
|
68
|
+
* verouderde ignore: die gaan niet in een baseline, en een `@phpstan-ignore` erop werkt niet.
|
|
69
|
+
*/
|
|
70
|
+
readonly ignorable: boolean;
|
|
64
71
|
}
|
|
65
72
|
/** Uitkomst van een geslaagde analyse ook als er fouten gevonden zijn. */
|
|
66
73
|
export interface AnalysisResult {
|
|
@@ -77,6 +84,31 @@ export interface AnalysisResult {
|
|
|
77
84
|
readonly generalErrors: number;
|
|
78
85
|
};
|
|
79
86
|
}
|
|
87
|
+
/** Een fout die PHPStan niet in een baseline wilde zetten, zoals `-vv` hem noemt. */
|
|
88
|
+
export interface UnignorableError {
|
|
89
|
+
/** Absoluut pad zoals PHPStan het schrijft; met een runner dat in de omgeving. */
|
|
90
|
+
readonly file: string;
|
|
91
|
+
readonly message: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Haalt uit de uitvoer van `--generate-baseline -vv` de fouten die er niet in konden. Per
|
|
95
|
+
* fout staat er de kop, de melding, het pad en een lege regel (nagemeten op PHPStan 2.2.8):
|
|
96
|
+
*
|
|
97
|
+
* Unignorable errors could not be added to the baseline:
|
|
98
|
+
* Cannot use [] for reading.
|
|
99
|
+
* /pad/naar/A.php
|
|
100
|
+
*
|
|
101
|
+
* De laatste regel van een blok is het pad; wat ertussen staat de melding, zodat een melding
|
|
102
|
+
* over meer regels heel blijft. Een blok zonder die twee blijft in de tekst staan: iets wat
|
|
103
|
+
* er anders uitziet dan verwacht stil weglaten, is wat `collectWarnings` ook niet doet.
|
|
104
|
+
*
|
|
105
|
+
* Moet vóór `condenseDetails`: die ontdubbelt identieke regels, en dan verdwijnt de kop van
|
|
106
|
+
* elk blok na het eerste, en het pad bij een tweede fout in hetzelfde bestand.
|
|
107
|
+
*/
|
|
108
|
+
export declare function splitUnignorable(stdout: string): {
|
|
109
|
+
rest: string;
|
|
110
|
+
errors: UnignorableError[];
|
|
111
|
+
};
|
|
80
112
|
/** Hoeveel tekens een foutdetail hoogstens beslaat. */
|
|
81
113
|
export declare const MAX_DETAIL_CHARS = 2000;
|
|
82
114
|
/**
|
package/dist/phpstan/output.js
CHANGED
|
@@ -4,6 +4,7 @@ const findingSchema = z.object({
|
|
|
4
4
|
line: z.number().nullable().optional(),
|
|
5
5
|
identifier: z.string().nullable().optional(),
|
|
6
6
|
tip: z.string().nullable().optional(),
|
|
7
|
+
ignorable: z.boolean().optional(),
|
|
7
8
|
});
|
|
8
9
|
const outputSchema = z.object({
|
|
9
10
|
totals: z.object({ errors: z.number(), file_errors: z.number() }),
|
|
@@ -100,6 +101,8 @@ const XDEBUG_NOTE_MAX_REGELS = 8;
|
|
|
100
101
|
* stderr met `--debug` (nagemeten: zonder die vlag niet), en zegt niets over de analyse:
|
|
101
102
|
* alleen dat een debugger niet stopt, en die hangt hier niemand aan. Zonder dit stond hij bij
|
|
102
103
|
* elke analyse van één bestand als waarschuwing in het antwoord, op elke machine met Xdebug.
|
|
104
|
+
* Sinds `XDEBUG_MODE=off` (`execute`) herstart PHPStan op de host niet meer en staat de melding
|
|
105
|
+
* er daar niet; in een runner, waar die variabele niet aankomt, nog wel.
|
|
103
106
|
*
|
|
104
107
|
* Een blok, geen patroon per regel: Symfony breekt de tekst af op de breedte van de terminal,
|
|
105
108
|
* en de losse regels ertussen ("The process was restarted and it will not") zijn te algemeen
|
|
@@ -127,6 +130,9 @@ export function toResult(project, output, stderr) {
|
|
|
127
130
|
message: message.message,
|
|
128
131
|
identifier: message.identifier ?? null,
|
|
129
132
|
tip: message.tip ?? null,
|
|
133
|
+
// Ontbreekt het veld, dan geldt wat de server tot nu toe aannam: te negeren. Nagemeten
|
|
134
|
+
// schrijft PHPStan (2.2.8) het bij elke bevinding; ontbreken is vooral de vorm van een fixture.
|
|
135
|
+
ignorable: message.ignorable ?? true,
|
|
130
136
|
});
|
|
131
137
|
}
|
|
132
138
|
}
|
|
@@ -139,6 +145,50 @@ export function toResult(project, output, stderr) {
|
|
|
139
145
|
totals: { fileErrors: output.totals.file_errors, generalErrors: output.totals.errors },
|
|
140
146
|
};
|
|
141
147
|
}
|
|
148
|
+
/** De kop die PHPStan met `-vv` boven élke fout zet die niet in de baseline kan. */
|
|
149
|
+
const ONNEGEERBAAR_KOP = /^Unignorable errors could not be added to the baseline:$/i;
|
|
150
|
+
/**
|
|
151
|
+
* Haalt uit de uitvoer van `--generate-baseline -vv` de fouten die er niet in konden. Per
|
|
152
|
+
* fout staat er de kop, de melding, het pad en een lege regel (nagemeten op PHPStan 2.2.8):
|
|
153
|
+
*
|
|
154
|
+
* Unignorable errors could not be added to the baseline:
|
|
155
|
+
* Cannot use [] for reading.
|
|
156
|
+
* /pad/naar/A.php
|
|
157
|
+
*
|
|
158
|
+
* De laatste regel van een blok is het pad; wat ertussen staat de melding, zodat een melding
|
|
159
|
+
* over meer regels heel blijft. Een blok zonder die twee blijft in de tekst staan: iets wat
|
|
160
|
+
* er anders uitziet dan verwacht stil weglaten, is wat `collectWarnings` ook niet doet.
|
|
161
|
+
*
|
|
162
|
+
* Moet vóór `condenseDetails`: die ontdubbelt identieke regels, en dan verdwijnt de kop van
|
|
163
|
+
* elk blok na het eerste, en het pad bij een tweede fout in hetzelfde bestand.
|
|
164
|
+
*/
|
|
165
|
+
export function splitUnignorable(stdout) {
|
|
166
|
+
const regels = stdout.split(/\r?\n/);
|
|
167
|
+
const rest = [];
|
|
168
|
+
const errors = [];
|
|
169
|
+
for (let i = 0; i < regels.length; i++) {
|
|
170
|
+
const regel = regels[i] ?? '';
|
|
171
|
+
if (!ONNEGEERBAAR_KOP.test(regel.trim())) {
|
|
172
|
+
rest.push(regel);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
let eind = i + 1;
|
|
176
|
+
while (eind < regels.length && (regels[eind] ?? '').trim() !== '' && !ONNEGEERBAAR_KOP.test((regels[eind] ?? '').trim())) {
|
|
177
|
+
eind++;
|
|
178
|
+
}
|
|
179
|
+
const blok = regels.slice(i + 1, eind).map((r) => r.trim());
|
|
180
|
+
const file = blok.at(-1);
|
|
181
|
+
if (blok.length < 2 || file === undefined) {
|
|
182
|
+
rest.push(...regels.slice(i, eind));
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
errors.push({ file, message: blok.slice(0, -1).join('\n') });
|
|
186
|
+
}
|
|
187
|
+
// De lege regel na het blok hoort erbij; de kop van een volgend blok niet.
|
|
188
|
+
i = eind < regels.length && (regels[eind] ?? '').trim() === '' ? eind : eind - 1;
|
|
189
|
+
}
|
|
190
|
+
return { rest: rest.join('\n'), errors };
|
|
191
|
+
}
|
|
142
192
|
/** Hoeveel tekens een foutdetail hoogstens beslaat. */
|
|
143
193
|
export const MAX_DETAIL_CHARS = 2000;
|
|
144
194
|
/**
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/phpstan/output.ts"],"names":[],"mappings":"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"}
|
package/dist/phpstan/process.js
CHANGED
|
@@ -40,9 +40,17 @@ export function execute(binary, args, cwd, timeoutMs, signal) {
|
|
|
40
40
|
// niet, dus zonder deze regel is zo'n project onanalyseerbaar en de server
|
|
41
41
|
// erft die agent-variabelen juist altijd, want de client start hem.
|
|
42
42
|
//
|
|
43
|
+
// XDEBUG_MODE=off scheelt een herstart. Zonder `--xdebug`, en dat geeft de server
|
|
44
|
+
// nooit mee, zet PHPStan Xdebug uit door zichzelf opnieuw te starten
|
|
45
|
+
// (composer/xdebug-handler); die slaat de herstart over als de mode al off is.
|
|
46
|
+
// Nagemeten met Herd (Xdebug 3.5, mode debug,develop): 1,3 s per aanroep, van
|
|
47
|
+
// 3,6 naar 2,3 s voor één bestand op lasouris-lease-admin, en koud 14,8 naar
|
|
48
|
+
// 13,3 s, met dezelfde bevindingen. Een eigen XDEBUG_MODE overschrijven verandert
|
|
49
|
+
// niets aan de uitkomst: zonder `--xdebug` draait PHPStan toch zonder Xdebug.
|
|
50
|
+
//
|
|
43
51
|
// De tmpdir-variabelen komen uit de projectroot (die is hier de cwd), zodat
|
|
44
52
|
// elk project zijn eigen resultcache houdt.
|
|
45
|
-
env: { ...process.env, PAO_DISABLE: '1', ...tmpDirEnv(cwd) },
|
|
53
|
+
env: { ...process.env, PAO_DISABLE: '1', XDEBUG_MODE: 'off', ...tmpDirEnv(cwd) },
|
|
46
54
|
});
|
|
47
55
|
const stdout = [];
|
|
48
56
|
const stderr = [];
|