phpstan-mcp-mx 0.21.0 → 0.22.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 +20 -1
- package/README.md +85 -62
- package/dist/baseline.d.ts +1 -1
- package/dist/baseline.js +3 -3
- package/dist/baseline.js.map +1 -1
- package/dist/changed.d.ts +5 -5
- package/dist/changed.js +16 -9
- package/dist/changed.js.map +1 -1
- package/dist/compare.d.ts +3 -3
- package/dist/compare.js +2 -2
- package/dist/composer.d.ts +2 -2
- package/dist/composer.js +6 -6
- package/dist/composer.js.map +1 -1
- package/dist/config.d.ts +4 -3
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/defaults.d.ts +1 -1
- package/dist/defaults.js +1 -1
- package/dist/dumptype.d.ts +1 -1
- package/dist/dumptype.js +4 -4
- package/dist/dumptype.js.map +1 -1
- package/dist/failure.d.ts +2 -2
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/php.d.ts +46 -0
- package/dist/php.js +95 -0
- package/dist/php.js.map +1 -0
- package/dist/phpstan/output.d.ts +2 -2
- package/dist/phpstan/output.js +4 -4
- package/dist/phpstan/output.js.map +1 -1
- package/dist/phpstan/parameters.d.ts +2 -2
- package/dist/phpstan/parameters.js +1 -1
- package/dist/phpstan/process.d.ts +16 -5
- package/dist/phpstan/process.js +25 -10
- package/dist/phpstan/process.js.map +1 -1
- package/dist/phpstan/queue.d.ts +1 -1
- package/dist/phpstan/queue.js +2 -2
- package/dist/phpstan/queue.js.map +1 -1
- package/dist/phpstan.d.ts +6 -6
- package/dist/phpstan.js +27 -19
- package/dist/phpstan.js.map +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/project.js +3 -3
- package/dist/project.js.map +1 -1
- package/dist/report.d.ts +5 -5
- package/dist/report.js +9 -9
- package/dist/report.js.map +1 -1
- package/dist/roots.d.ts +1 -1
- package/dist/roots.js +1 -1
- package/dist/roots.js.map +1 -1
- package/dist/runner.d.ts +3 -3
- package/dist/runner.js +3 -3
- package/dist/runner.js.map +1 -1
- package/dist/runs.d.ts +3 -3
- package/dist/runs.js +3 -3
- package/dist/schema-dialect.d.ts +2 -2
- package/dist/schema-dialect.js +2 -2
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tmpdir.d.ts +3 -3
- package/dist/tmpdir.js +4 -4
- package/dist/tmpdir.js.map +1 -1
- package/dist/tools/analysis.js +3 -3
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/inspect.js +34 -13
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/prompts.d.ts +2 -2
- package/dist/tools/prompts.js +12 -12
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/shared.d.ts +2 -2
- package/dist/tools/shared.js +6 -6
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/writes.js +1 -1
- package/dist/tools/writes.js.map +1 -1
- package/dist/unmatched.d.ts +3 -3
- package/dist/unmatched.js +5 -5
- package/dist/unmatched.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- 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.22.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.21.1...v0.22.0) (2026-09-12)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* start PHPStan without a detached console on Windows ([20cd44c](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/20cd44c260823a5fc06744c98a82411e5e0e51bc))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* wip ([0cc18dc](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/0cc18dc211d09c87b54efdaacc0667414e7c1df2))
|
|
17
|
+
|
|
18
|
+
## [0.21.1](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.21.0...v0.21.1) (2026-09-11)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* advertise the level of diagnose_project as anyOf, not a type list ([49a60ca](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/49a60ca4c201ef8c540028bda60635cada352cab))
|
|
24
|
+
|
|
6
25
|
# [0.21.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.20.0...v0.21.0) (2026-09-11)
|
|
7
26
|
|
|
8
27
|
|
|
@@ -152,7 +171,7 @@ history since 0.10.0; the versions before that were written by hand.
|
|
|
152
171
|
|
|
153
172
|
## 0.8.0
|
|
154
173
|
|
|
155
|
-
- Nieuwe tool `server_config`: met welke instellingen deze server draait
|
|
174
|
+
- Nieuwe tool `server_config`: met welke instellingen deze server draait roots, standaard
|
|
156
175
|
geheugenlimiet, hoeveel analyses tegelijk, waar de tijdelijke bestanden heen gaan en of
|
|
157
176
|
schrijvende tools aanstaan. Een geweigerde instelling wordt gemeld in plaats van
|
|
158
177
|
verzwegen.
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ serves several PHP projects at once; you decide which ones.
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
8
8
|
The server runs as a separate process that your MCP client starts. Install it globally once
|
|
9
|
-
and then register it with the client you use
|
|
9
|
+
and then register it with the client you use Claude Code and Claude Desktop each keep their
|
|
10
10
|
own list, so you do this separately for both.
|
|
11
11
|
|
|
12
12
|
```bash
|
|
@@ -18,7 +18,7 @@ projects. It is required; see [Configuration](#configuration) for why.
|
|
|
18
18
|
|
|
19
19
|
### Claude Code
|
|
20
20
|
|
|
21
|
-
With `--scope user` the server is available in all your projects
|
|
21
|
+
With `--scope user` the server is available in all your projects which is what you want
|
|
22
22
|
from one server that serves several projects.
|
|
23
23
|
|
|
24
24
|
```bash
|
|
@@ -53,7 +53,7 @@ phpstan:
|
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
`claude mcp get` and `claude mcp list` actually connect to the server instead of just reading
|
|
56
|
-
back the configuration
|
|
56
|
+
back the configuration so they tell you whether it really starts. Inside a session, `/mcp`
|
|
57
57
|
does the same. Then ask for the project list: if it comes back empty while the connection is
|
|
58
58
|
up, your roots point to the wrong directory and there is nothing wrong with the server
|
|
59
59
|
itself.
|
|
@@ -82,7 +82,7 @@ If that file doesn't exist yet, create it yourself:
|
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
If there already is an `mcpServers` block, add `phpstan` next to the existing entries instead
|
|
85
|
-
of replacing the file
|
|
85
|
+
of replacing the file otherwise you overwrite the servers that are already in it.
|
|
86
86
|
|
|
87
87
|
Desktop only reads that file at startup, and on macOS closing the window is not quitting:
|
|
88
88
|
quit the app completely (⌘Q) and start it again. After that, `phpstan` shows up among the
|
|
@@ -102,7 +102,7 @@ If you get something like `env: node: No such file or directory`, or the server
|
|
|
102
102
|
The `phpstan-mcp-mx` command is a script that starts with `#!/usr/bin/env node`, and `npx`
|
|
103
103
|
is itself a command that has to be found. Both work in your terminal because your shell
|
|
104
104
|
profile puts Node on `PATH`. But the MCP server is started by a *different* program, and that
|
|
105
|
-
one does not always inherit your shell profile
|
|
105
|
+
one does not always inherit your shell profile a GUI app on macOS often gets only a bare
|
|
106
106
|
`PATH` with `/usr/bin` and `/bin`. Node isn't there: Homebrew puts it in `/opt/homebrew/bin`,
|
|
107
107
|
and nvm, fnm, asdf and volta somewhere under your home directory.
|
|
108
108
|
|
|
@@ -134,7 +134,7 @@ And for Claude Desktop:
|
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
You can check whether `PATH` is the problem yourself, without involving the MCP client. The
|
|
137
|
-
binary is looked up in your own shell first and then started with a bare `PATH`
|
|
137
|
+
binary is looked up in your own shell first and then started with a bare `PATH` otherwise
|
|
138
138
|
the command itself can't be found and you are measuring something else:
|
|
139
139
|
|
|
140
140
|
```bash
|
|
@@ -207,6 +207,7 @@ path in `PHPSTAN_MCP_CONFIG`):
|
|
|
207
207
|
"maxParallel": 2,
|
|
208
208
|
"tmpDir": "project",
|
|
209
209
|
"allowWrites": false,
|
|
210
|
+
"php": "/opt/homebrew/opt/php@8.4/bin/php",
|
|
210
211
|
"runners": {
|
|
211
212
|
"/Users/you/projects/admin": {
|
|
212
213
|
"command": ["docker", "exec", "-w", "/var/www/html", "admin-app"],
|
|
@@ -223,7 +224,7 @@ That makes your MCP registration a single line without `--env`, and keeps the co
|
|
|
223
224
|
in one place instead of spread over seven variables.
|
|
224
225
|
|
|
225
226
|
A file that doesn't exist is not an error: then only the environment applies. A file that
|
|
226
|
-
*does* exist but is invalid stops the server from starting
|
|
227
|
+
*does* exist but is invalid stops the server from starting someone meant something there
|
|
227
228
|
that would otherwise silently not happen.
|
|
228
229
|
|
|
229
230
|
### `PHPSTAN_MCP_ROOTS` (required)
|
|
@@ -248,7 +249,7 @@ How many analyses may run at the same time, across projects. Two by default.
|
|
|
248
249
|
PHPSTAN_MCP_MAX_PARALLEL=4
|
|
249
250
|
```
|
|
250
251
|
|
|
251
|
-
Analyses within the same project always run in order
|
|
252
|
+
Analyses within the same project always run in order two simultaneous runs would overwrite
|
|
252
253
|
each other's result cache. This limit is about the machine as a whole: without it, a model
|
|
253
254
|
that calls ten projects after `list_projects` starts ten PHPStan processes, each spinning up
|
|
254
255
|
its own parallel workers. With `PHPSTAN_MCP_MEMORY_LIMIT=2G` that is ten times that ceiling.
|
|
@@ -272,7 +273,7 @@ Where PHPStan puts its temporary files, and therefore where the result cache end
|
|
|
272
273
|
The default solves a silent problem. PHPStan's `tmpDir` defaults to
|
|
273
274
|
`sys_get_temp_dir()/phpstan`, so *every* project without its own `tmpDir` in its config
|
|
274
275
|
shares a single `resultCache.php`. Two projects in a row then invalidate each other's cache,
|
|
275
|
-
and the cache
|
|
276
|
+
and the cache the reason a second analysis is fast stops doing anything. Measured on two
|
|
276
277
|
real projects, with another project in between:
|
|
277
278
|
|
|
278
279
|
```
|
|
@@ -289,14 +290,36 @@ If you set `tmpDir` yourself in your `phpstan.neon`, that wins: a configuration
|
|
|
289
290
|
explicitly takes precedence over what this server provides.
|
|
290
291
|
|
|
291
292
|
Choose `shared` if you want the server to use the same cache as your terminal, or if setting
|
|
292
|
-
`TMPDIR` disturbs something in your project
|
|
293
|
+
`TMPDIR` disturbs something in your project with Larastan, an entire Laravel application
|
|
293
294
|
runs in the same process.
|
|
294
295
|
|
|
296
|
+
### `PHPSTAN_MCP_PHP` (optional; needed on Windows unless `php.exe` is on your PATH)
|
|
297
|
+
|
|
298
|
+
The PHP binary that starts PHPStan on the host, as an absolute path:
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
PHPSTAN_MCP_PHP=C:\Users\you\.config\herd\bin\php85\php.exe
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
`vendor/bin/phpstan` is a PHP script with a `#!/usr/bin/env php` line. macOS and Linux start
|
|
305
|
+
that by themselves; Windows does not. On Windows the server therefore starts
|
|
306
|
+
`php.exe vendor/bin/phpstan …`, just like Composer's own `phpstan.bat` does, but without a
|
|
307
|
+
shell in between. It looks for `php.exe` on your `PATH`; if it can't find one, every analysis
|
|
308
|
+
of a project without a runner fails with a message that points here.
|
|
309
|
+
|
|
310
|
+
Herd puts a `php.bat` on your `PATH` and not a `php.exe`. A batch file can't be started
|
|
311
|
+
without a shell, so it doesn't count: point this setting at the `php.exe` inside Herd's
|
|
312
|
+
`bin\php85` (or whichever version you use) instead. A `.bat` or `.cmd` here is rejected with
|
|
313
|
+
that explanation.
|
|
314
|
+
|
|
315
|
+
On macOS and Linux you can use it to pick a specific PHP version; without it, the script's
|
|
316
|
+
own `#!/usr/bin/env php` decides. `server_config` shows which PHP is used.
|
|
317
|
+
|
|
295
318
|
### `PHPSTAN_MCP_RUNNERS` (optional)
|
|
296
319
|
|
|
297
320
|
Some projects cannot be analysed on the host. Larastan really boots your Laravel
|
|
298
321
|
application, and if the host lacks, say, `ext-redis`, the bootstrap fails and the analysis
|
|
299
|
-
stops
|
|
322
|
+
stops while the same repository runs fine inside its container.
|
|
300
323
|
|
|
301
324
|
With this variable you say, per project, where PHPStan should run:
|
|
302
325
|
|
|
@@ -333,13 +356,13 @@ caller would decide what gets executed and the whitelist would be pointless.
|
|
|
333
356
|
|
|
334
357
|
PHPStan is not a passive parser. It loads the project's autoloader, executes
|
|
335
358
|
`bootstrapFiles` from the configuration and loads extensions as PHP code. "Analyse directory
|
|
336
|
-
X" therefore means "execute the PHP code that X's configuration points to"
|
|
359
|
+
X" therefore means "execute the PHP code that X's configuration points to" and the path
|
|
337
360
|
comes from a language model. The list of roots makes what is in reach explicit and decided
|
|
338
361
|
by a human.
|
|
339
362
|
|
|
340
363
|
### `PHPSTAN_MCP_MEMORY_LIMIT` (optional)
|
|
341
364
|
|
|
342
|
-
If PHPStan runs into the PHP memory limit, a call can pass `memoryLimit`
|
|
365
|
+
If PHPStan runs into the PHP memory limit, a call can pass `memoryLimit` but only after
|
|
343
366
|
the analysis has already failed. With this variable you set the default once, next to your
|
|
344
367
|
roots:
|
|
345
368
|
|
|
@@ -358,12 +381,12 @@ alternative is `memory_limit` in your `php.ini`, which then applies to *every* P
|
|
|
358
381
|
your machine.
|
|
359
382
|
|
|
360
383
|
If one project needs more than the rest, set it for that project in `PHPSTAN_MCP_PROJECTS`
|
|
361
|
-
instead of raising this value for everyone
|
|
384
|
+
instead of raising this value for everyone with `PHPSTAN_MCP_MAX_PARALLEL=2`, a
|
|
362
385
|
machine-wide 4G is two times 4G.
|
|
363
386
|
|
|
364
387
|
### `PHPSTAN_MCP_PROJECTS` (optional)
|
|
365
388
|
|
|
366
|
-
Defaults for a single project, as JSON
|
|
389
|
+
Defaults for a single project, as JSON or under `projects` in the config file:
|
|
367
390
|
|
|
368
391
|
```json
|
|
369
392
|
{
|
|
@@ -390,7 +413,7 @@ of the project: for the notice that a baseline is included and for `unmatched_ig
|
|
|
390
413
|
|
|
391
414
|
An unknown key is rejected, not ignored: `memorylimit` with a lowercase l would otherwise
|
|
392
415
|
silently do nothing. `list_projects` and `server_config` show which defaults apply, and a
|
|
393
|
-
broken value is listed there as a problem
|
|
416
|
+
broken value is listed there as a problem the project list keeps working.
|
|
394
417
|
|
|
395
418
|
## Tools
|
|
396
419
|
|
|
@@ -401,7 +424,7 @@ analysed as a result.
|
|
|
401
424
|
### `list_projects`
|
|
402
425
|
|
|
403
426
|
Lists the projects that are in reach, with for each project whether PHPStan is installed and
|
|
404
|
-
which config file it has. Start here
|
|
427
|
+
which config file it has. Start here the `path` from the result is what the other tools
|
|
405
428
|
expect as `project`.
|
|
406
429
|
|
|
407
430
|
### `analyse_project`
|
|
@@ -432,13 +455,13 @@ not match `argumentx.something`).
|
|
|
432
455
|
|
|
433
456
|
### `analyse_file`
|
|
434
457
|
|
|
435
|
-
Same arguments, plus a required `path`
|
|
458
|
+
Same arguments, plus a required `path` a single file or directory inside the project. The
|
|
436
459
|
path may be relative to the project root or absolute, but it has to lie inside it.
|
|
437
460
|
|
|
438
461
|
### `analyse_changed`
|
|
439
462
|
|
|
440
463
|
Analyses the PHP files that git considers changed. Meant for checking whether your own
|
|
441
|
-
change introduces errors, without analysing the whole project
|
|
464
|
+
change introduces errors, without analysing the whole project and without the response
|
|
442
465
|
filling up with what has been there for years.
|
|
443
466
|
|
|
444
467
|
| Argument | Required | Meaning |
|
|
@@ -455,7 +478,7 @@ the whole branch instead of just your uncommitted work.
|
|
|
455
478
|
Each finding says with `onChangedLine` whether it is on a changed line; in the text it is
|
|
456
479
|
prefixed with a `+`. A changed file often also contains errors that were already there, and
|
|
457
480
|
without that distinction you either start fixing those or stop too early. Keep in mind: a
|
|
458
|
-
finding on an unchanged line can still follow from your change
|
|
481
|
+
finding on an unchanged line can still follow from your change a modified signature causes
|
|
459
482
|
errors at the call sites, and you didn't touch those lines.
|
|
460
483
|
|
|
461
484
|
Those call sites are often in files you didn't change at all, and then this tool doesn't even
|
|
@@ -471,15 +494,15 @@ src/Use.php (not changed)
|
|
|
471
494
|
4 arguments.count Function greet invoked with 1 parameter, 2 required.
|
|
472
495
|
```
|
|
473
496
|
|
|
474
|
-
PHPStan then analyses the `paths` from your config. A changed file outside them
|
|
475
|
-
project that only analyses `src`
|
|
497
|
+
PHPStan then analyses the `paths` from your config. A changed file outside them a test in a
|
|
498
|
+
project that only analyses `src` isn't covered by that, and the response names it; leave out
|
|
476
499
|
`scope` to analyse the changed files themselves.
|
|
477
500
|
|
|
478
|
-
That is slower
|
|
479
|
-
how many files depend on what you changed
|
|
501
|
+
That is slower with a warm result cache one to five seconds on real projects, depending on
|
|
502
|
+
how many files depend on what you changed and every old error in the project shows up under
|
|
480
503
|
"not changed" too. **With exactly one changed file, the server therefore also analyses the
|
|
481
|
-
project as it was before your change**
|
|
482
|
-
PHPStan's editor mode
|
|
504
|
+
project as it was before your change** that one file replaced by its version at `base`, via
|
|
505
|
+
PHPStan's editor mode and compares the two:
|
|
483
506
|
|
|
484
507
|
```
|
|
485
508
|
Compared with the project before your change (src/Lib.php at HEAD): 0 fixed, 1 new, 3 still open.
|
|
@@ -489,18 +512,18 @@ New:
|
|
|
489
512
|
|
|
490
513
|
On a real project, adding a required parameter to a method called in four other files gave
|
|
491
514
|
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
|
|
493
|
-
replaces one file per run
|
|
515
|
+
That costs a second run. With more than one changed file it can't be done editor mode
|
|
516
|
+
replaces one file per run and then one analysis cannot tell which findings your change
|
|
494
517
|
caused; a finding that names what you changed is the strongest hint, and after a fix
|
|
495
518
|
`compareTo` tells exactly what is new. A `compareTo` you pass yourself takes precedence.
|
|
496
519
|
|
|
497
520
|
Two things it includes that are easy to miss: **new files not yet added to git** (`git diff`
|
|
498
521
|
doesn't know them, so there is a second query for them) and **nothing from
|
|
499
|
-
`resources/views`**
|
|
522
|
+
`resources/views`** a `.blade.php` ends in `.php`, but it is a template that PHPStan never
|
|
500
523
|
sees in a normal run, because the config doesn't list that directory in `paths`.
|
|
501
524
|
|
|
502
525
|
Every path git reports goes through the same check as a path the model supplies itself.
|
|
503
|
-
Whatever doesn't pass
|
|
526
|
+
Whatever doesn't pass a broken symlink, a file pointing outside the project is listed as
|
|
504
527
|
"skipped" in the response instead of silently dropping out.
|
|
505
528
|
|
|
506
529
|
If the project is not under git, the tool says so and points to `analyse_project` with
|
|
@@ -508,14 +531,14 @@ explicit `paths`.
|
|
|
508
531
|
|
|
509
532
|
**What the change hides** is listed under "Note": new
|
|
510
533
|
`@phpstan-ignore` comments (with file, line, identifier and reason) and ignored errors added
|
|
511
|
-
to a baseline that is included
|
|
534
|
+
to a baseline that is included even if no PHP file changed otherwise. An ignore whose reason
|
|
512
535
|
is the only thing that changed does not count as new. The notice doesn't pass judgement: an
|
|
513
536
|
ignore can be justified, the point is that it doesn't happen silently. Ignored errors that
|
|
514
537
|
disappeared from the baseline are listed too.
|
|
515
538
|
|
|
516
539
|
### `inspect_type`
|
|
517
540
|
|
|
518
|
-
Shows the type PHPStan infers for one or more expressions at a given line
|
|
541
|
+
Shows the type PHPStan infers for one or more expressions at a given line what you need
|
|
519
542
|
before fixing a type error, and exactly what PHPStan's own guidance asks you not to override
|
|
520
543
|
with a cast, `assert()` or an inline `@var`.
|
|
521
544
|
|
|
@@ -537,7 +560,7 @@ Types right before line 37 of src/Actions/Contract/BuildContractRowsAction.php:
|
|
|
537
560
|
```
|
|
538
561
|
|
|
539
562
|
The project is not changed. The server inserts `\PHPStan\dumpType(<expression>);` before
|
|
540
|
-
`line` in a temporary copy of the file
|
|
563
|
+
`line` in a temporary copy of the file one line per expression and has PHPStan read that
|
|
541
564
|
copy in place of the original (PHPStan's editor mode, `--tmp-file` and `--instead-of`). The
|
|
542
565
|
copy lives in the server's temp directory, or with `PHPSTAN_MCP_RUNNERS` in the temp
|
|
543
566
|
directory of that environment, like the config of `unmatched_ignores`. Only that one file is
|
|
@@ -545,7 +568,7 @@ analysed, so it also works for a file outside the `paths` of your config and doe
|
|
|
545
568
|
warm result cache; on a real project it took one to two seconds.
|
|
546
569
|
|
|
547
570
|
`line` has to be the first line of a statement inside a function or method. Anywhere else —
|
|
548
|
-
in the middle of an array literal that spans several lines, directly in a class body
|
|
571
|
+
in the middle of an array literal that spans several lines, directly in a class body the
|
|
549
572
|
inserted line breaks the file, and you get PHPStan's parse errors back instead of types, with
|
|
550
573
|
the line numbers of your original file. A file under `excludePaths` fails with the reason
|
|
551
574
|
`nothing_to_analyse`. Editor mode needs a recent PHPStan; an older one fails with a message
|
|
@@ -562,7 +585,7 @@ phpstan-mcp 0.20.0
|
|
|
562
585
|
|
|
563
586
|
Project directories:
|
|
564
587
|
/Users/you/projects
|
|
565
|
-
/does/not/exist
|
|
588
|
+
/does/not/exist does not exist
|
|
566
589
|
|
|
567
590
|
Memory limit: 2G
|
|
568
591
|
Parallel: 2
|
|
@@ -574,7 +597,7 @@ Per-project defaults (a tool argument takes precedence):
|
|
|
574
597
|
/Users/you/projects/shop: memory 4G, timeout 900s
|
|
575
598
|
```
|
|
576
599
|
|
|
577
|
-
Until now that information was only in the startup line on stderr
|
|
600
|
+
Until now that information was only in the startup line on stderr visible in your client
|
|
578
601
|
log, invisible to the model. A rejected setting is reported instead of omitted: if
|
|
579
602
|
`PHPSTAN_MCP_MAX_PARALLEL` is set to nonsense, that field is `null` and the reason appears
|
|
580
603
|
under "Rejected settings", while the rest stays readable.
|
|
@@ -611,7 +634,7 @@ directory is the one `clear_result_cache` clears. If the application doesn't boo
|
|
|
611
634
|
without the extensions the app needs), this part is missing, with the reason stated.
|
|
612
635
|
|
|
613
636
|
Last come the Composer scripts that run PHPStan, and how they differ from the way this server
|
|
614
|
-
runs it
|
|
637
|
+
runs it the reason a developer can see different results than the server does:
|
|
615
638
|
|
|
616
639
|
```
|
|
617
640
|
Composer scripts that run PHPStan:
|
|
@@ -623,7 +646,7 @@ Composer scripts that run PHPStan:
|
|
|
623
646
|
```
|
|
624
647
|
|
|
625
648
|
If a framework is installed whose magic PHPStan can't see without an extension, and that
|
|
626
|
-
extension isn't loaded, that comes first
|
|
649
|
+
extension isn't loaded, that comes first it explains more than anything else:
|
|
627
650
|
|
|
628
651
|
```
|
|
629
652
|
Missing PHPStan extensions:
|
|
@@ -636,7 +659,7 @@ they are in nearly every project, often as a dependency of a dependency, and a n
|
|
|
636
659
|
project is noise. What is loaded comes from PHPStan's own diagnosis, so an extension included by
|
|
637
660
|
hand counts too.
|
|
638
661
|
|
|
639
|
-
Scripts are recognised by their command, not their name, and are only read
|
|
662
|
+
Scripts are recognised by their command, not their name, and are only read never run. A
|
|
640
663
|
script that goes through `make` or another script can't be read without running it, so it is
|
|
641
664
|
left out. Only what changes the result is compared: the config, the memory limit, the level,
|
|
642
665
|
explicit paths and `--autoload-file`. The server never takes these over by itself: that would
|
|
@@ -645,7 +668,7 @@ let the project decide how the server starts PHPStan.
|
|
|
645
668
|
### `clear_result_cache`
|
|
646
669
|
|
|
647
670
|
Clears PHPStan's result cache, so the next analysis recomputes everything. Useful when a
|
|
648
|
-
result doesn't match the code
|
|
671
|
+
result doesn't match the code for example after a change to an extension or an included
|
|
649
672
|
config.
|
|
650
673
|
|
|
651
674
|
By default that cache does **not** live in the project but in the system temp directory
|
|
@@ -667,22 +690,22 @@ Reads a project's `phpstan-baseline*.neon` and counts what is being ignored, per
|
|
|
667
690
|
and per file. Does not run an analysis, so the answer is immediate.
|
|
668
691
|
|
|
669
692
|
Note the distinction: what is in here is exactly what `analyse_project` does *not* report. A
|
|
670
|
-
project that includes its baseline only reports the errors that are new
|
|
693
|
+
project that includes its baseline only reports the errors that are new PHPStan already
|
|
671
694
|
makes that comparison itself.
|
|
672
695
|
|
|
673
|
-
It also counts the inline `@phpstan-ignore` comments in the code
|
|
696
|
+
It also counts the inline `@phpstan-ignore` comments in the code the third place where
|
|
674
697
|
errors get hidden, next to the baseline and `ignoreErrors` in the config, and the only one
|
|
675
698
|
nothing counted until now:
|
|
676
699
|
|
|
677
700
|
```
|
|
678
|
-
18 inline @phpstan-ignore comment(s) in 14 file(s)
|
|
701
|
+
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
702
|
11 have no identifier (@phpstan-ignore-line, -next-line): they ignore every error on their line.
|
|
680
703
|
1 name an identifier but give no reason in parentheses.
|
|
681
704
|
```
|
|
682
705
|
|
|
683
706
|
That is counted with `git grep`, so `vendor/`, ignored files and Blade templates stay out,
|
|
684
707
|
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
|
|
708
|
+
response says why the inline comments were not counted `null`, not zero, because zero
|
|
686
709
|
would claim nothing is hidden.
|
|
687
710
|
|
|
688
711
|
With `path` (e.g. `"app/Models/User.php"`) you also get the entries for that one file: per
|
|
@@ -693,7 +716,7 @@ it is precisely a deleted file that the entries doing nothing belong to.
|
|
|
693
716
|
|
|
694
717
|
Finds the ignore rules that no longer do anything: baseline entries for errors that were
|
|
695
718
|
fixed long ago, and entries whose `count` is higher than what still occurs. Many projects set
|
|
696
|
-
`reportUnmatchedIgnoredErrors: false`, and then this grows unnoticed
|
|
719
|
+
`reportUnmatchedIgnoredErrors: false`, and then this grows unnoticed on one project, 554 of
|
|
697
720
|
the 2116 baseline entries turned out to match nothing any more.
|
|
698
721
|
|
|
699
722
|
| Argument | Required | Meaning |
|
|
@@ -717,7 +740,7 @@ different, and with only part of the project, everything outside it looks stale.
|
|
|
717
740
|
|
|
718
741
|
With an execution environment (`PHPSTAN_MCP_RUNNERS`) the temporary config goes into the
|
|
719
742
|
temporary directory of *that* environment (`${TMPDIR:-/tmp}` inside the container), because a
|
|
720
|
-
container can't see the host's temporary directory
|
|
743
|
+
container can't see the host's temporary directory only the project directory is mounted.
|
|
721
744
|
That needs a `sh` in the environment; without one, the tool says so with the reason
|
|
722
745
|
`unsupported_with_runner`. PHPStan can't read its config from stdin, so there is no way
|
|
723
746
|
around writing a small file somewhere; it is never written into the project itself.
|
|
@@ -725,7 +748,7 @@ around writing a small file somewhere; it is never written into the project itse
|
|
|
725
748
|
### `generate_baseline` (only with write access)
|
|
726
749
|
|
|
727
750
|
Puts all current errors into a baseline, so that the next analysis only reports what is new.
|
|
728
|
-
Meant for bringing an existing project under PHPStan
|
|
751
|
+
Meant for bringing an existing project under PHPStan not for making errors go away.
|
|
729
752
|
|
|
730
753
|
This tool only exists if the server was started with `PHPSTAN_MCP_ALLOW_WRITES=1`:
|
|
731
754
|
|
|
@@ -736,7 +759,7 @@ claude mcp add phpstan --scope user \
|
|
|
736
759
|
-- phpstan-mcp-mx
|
|
737
760
|
```
|
|
738
761
|
|
|
739
|
-
Without that variable it isn't registered
|
|
762
|
+
Without that variable it isn't registered so it doesn't appear in the tool list at all,
|
|
740
763
|
rather than existing and refusing every call. All other tools stay read-only.
|
|
741
764
|
|
|
742
765
|
| Argument | Required | Meaning |
|
|
@@ -764,23 +787,23 @@ Workflows that only combine existing tools. A prompt rather than a tool, because
|
|
|
764
787
|
context in every session and a prompt only when you pick it. Every guardrail in the texts
|
|
765
788
|
comes from a trial run on a real project that went wrong without that sentence.
|
|
766
789
|
|
|
767
|
-
- **`phpstan_review_change`**
|
|
790
|
+
- **`phpstan_review_change`** review your own change with
|
|
768
791
|
`analyse_changed`, start with the findings on changed lines, and repeat until it is clean
|
|
769
792
|
(without `runId`, otherwise you see the result from before your fix). With `base` (e.g.
|
|
770
793
|
`main`) for a whole branch before a PR.
|
|
771
|
-
- **`phpstan_raise_level`**
|
|
794
|
+
- **`phpstan_raise_level`** what one level higher costs: two counts
|
|
772
795
|
with `limit: 1` and the difference per kind. The level is often set in a shared config in
|
|
773
796
|
`vendor/`, and `ignore.*` findings don't count: those are inline `@phpstan-ignore` comments
|
|
774
797
|
that have nothing to ignore on a different level.
|
|
775
|
-
- **`phpstan_shrink_baseline`**
|
|
798
|
+
- **`phpstan_shrink_baseline`** what in the baseline is stale
|
|
776
799
|
(`unmatched_ignores`), what a new baseline would hide (`analyse_project`), and the cheapest
|
|
777
800
|
real reduction. Cleaning up and hiding stay two separate things: `generate_baseline` is only
|
|
778
801
|
suggested when there is nothing to hide, and never called on its own initiative.
|
|
779
|
-
- **`phpstan_fix_identifier`**
|
|
802
|
+
- **`phpstan_fix_identifier`** a clean-up round for one identifier or a
|
|
780
803
|
group such as `missingType`, with the `runId` within the round and without `runId` after
|
|
781
804
|
every fix. Without `identifier` the model picks a kind: first what can be fixed at the
|
|
782
805
|
source, otherwise a kind that sits in one or two files.
|
|
783
|
-
- **`phpstan_compare_projects`**
|
|
806
|
+
- **`phpstan_compare_projects`** two projects side by side
|
|
784
807
|
(`diagnose_project`, level, baseline, runners and defaults), showing only the differences.
|
|
785
808
|
If no difference explains the behaviour, a stale result cache is the next suspect.
|
|
786
809
|
|
|
@@ -846,7 +869,7 @@ Same message more than once (one fix may cover several; check that they point to
|
|
|
846
869
|
```
|
|
847
870
|
|
|
848
871
|
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
|
|
872
|
+
findings. Messages are compared exactly, without normalising names or numbers away and a
|
|
850
873
|
generic message such as `Possibly invalid array key type mixed.` can still have separate
|
|
851
874
|
causes, so it is a pointer, not a promise.
|
|
852
875
|
|
|
@@ -859,7 +882,7 @@ then comes from this result instead of a new analysis.
|
|
|
859
882
|
|
|
860
883
|
With that `runId`, the next page comes from the same result. Without it, every page would be a
|
|
861
884
|
new analysis, and if you change a file in between you get pages with different totals. Only
|
|
862
|
-
`offset`, `limit`, `identifiers`, `onlyIn` and `onlyChangedLines` may differ
|
|
885
|
+
`offset`, `limit`, `identifiers`, `onlyIn` and `onlyChangedLines` may differ so one analysis
|
|
863
886
|
of the whole project can be read directory by directory without running PHPStan again. If the `runId` belongs to
|
|
864
887
|
different arguments, has expired (after ten minutes) or is unknown, a new analysis follows
|
|
865
888
|
with a notice instead of an error.
|
|
@@ -887,7 +910,7 @@ note that which one it is cannot be told apart.
|
|
|
887
910
|
|
|
888
911
|
The comparison counts over all findings, not just the page, and only needs the same arguments
|
|
889
912
|
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
|
|
913
|
+
`analyse_changed`, a file that only one of the two analyses covered is not compared touch a
|
|
891
914
|
second file while fixing, and its existing errors would otherwise show up as new. Those are
|
|
892
915
|
counted separately. A `runId` stays usable for comparing for an hour, longer than for paging:
|
|
893
916
|
the fixing itself sits between the two analyses.
|
|
@@ -904,7 +927,7 @@ PHPStan can return valid JSON and at the same time say on stderr that it didn't
|
|
|
904
927
|
goes at the very top of the response, before anything else:
|
|
905
928
|
|
|
906
929
|
```
|
|
907
|
-
WARNING
|
|
930
|
+
WARNING PHPStan reported this alongside the result:
|
|
908
931
|
- Result is incomplete because of severe errors.
|
|
909
932
|
```
|
|
910
933
|
|
|
@@ -921,7 +944,7 @@ Note:
|
|
|
921
944
|
```
|
|
922
945
|
|
|
923
946
|
That is the difference between "no findings" and "no findings, plus a thousand that aren't
|
|
924
|
-
reported". The check looks at whether your config really includes the file
|
|
947
|
+
reported". The check looks at whether your config really includes the file a baseline
|
|
925
948
|
sitting next to `phpstan.neon` without being included does nothing.
|
|
926
949
|
|
|
927
950
|
PHPStan's own guidance for reading findings is kept separately in `instructions` and shown
|
|
@@ -934,7 +957,7 @@ PHPStan adds:
|
|
|
934
957
|
```
|
|
935
958
|
|
|
936
959
|
That block is the same every run and says nothing about *this* analysis, so it doesn't count
|
|
937
|
-
as a warning
|
|
960
|
+
as a warning and it isn't truncated, because half a block of guidance helps nobody.
|
|
938
961
|
|
|
939
962
|
The `warnings` field is separate from `generalErrors`: the latter is PHPStan's own `errors`
|
|
940
963
|
array from the JSON. Both lists are capped at ten messages of at most 1000 characters each —
|
|
@@ -952,10 +975,10 @@ How many were left out is in `omitted`, and in the text as "N more message(s) no
|
|
|
952
975
|
- **The PHP memory limit.** PHPStan easily exceeds it on a large project;
|
|
953
976
|
`memoryLimit: "1G"` usually solves that. The crash comes back as a regular error, with
|
|
954
977
|
PHPStan's own explanation attached.
|
|
955
|
-
- **Larastan boots your Laravel application.** If that fails
|
|
956
|
-
reachable
|
|
978
|
+
- **Larastan boots your Laravel application.** If that fails missing `.env`, database not
|
|
979
|
+
reachable the analysis fails with Larastan's own explanation.
|
|
957
980
|
- **Analyses in the same project run one after another,** because they share one result cache
|
|
958
|
-
(per project, in the temp directory
|
|
981
|
+
(per project, in the temp directory not in the project itself). Different projects do run
|
|
959
982
|
in parallel.
|
|
960
983
|
- **A stale result cache** can make PHPStan crash with a message that seems to make no sense.
|
|
961
984
|
After a `composer update` that no longer happens, because the cache directory follows
|
package/dist/baseline.d.ts
CHANGED
|
@@ -100,7 +100,7 @@ export interface BaselineFileEntry {
|
|
|
100
100
|
*
|
|
101
101
|
* Nodig omdat de samenvatting per soort en per bestand apart telt: welke soorten in
|
|
102
102
|
* wélk bestand zitten, stond alleen in het baseline-bestand zelf. Het pad wordt alleen
|
|
103
|
-
* vergeleken, niet geopend
|
|
103
|
+
* vergeleken, niet geopend het hoeft dus niet te bestaan, en dat is goed: een baseline
|
|
104
104
|
* noemt soms een bestand dat al weg is.
|
|
105
105
|
*/
|
|
106
106
|
export declare function baselineEntriesFor(project: ResolvedProject, path: string): BaselineFileEntry[];
|
package/dist/baseline.js
CHANGED
|
@@ -54,7 +54,7 @@ export function describeIncludedBaseline(project) {
|
|
|
54
54
|
}
|
|
55
55
|
catch {
|
|
56
56
|
// Een onleesbare baseline mag geen analyse omleggen. Dat hij meedoet is ook
|
|
57
|
-
// zonder aantal het vermelden waard
|
|
57
|
+
// zonder aantal het vermelden waard juist dan, want dan is niet te zeggen
|
|
58
58
|
// hoeveel er verborgen wordt.
|
|
59
59
|
return (`${namen} ${wordt} included but cannot be read; what ${een ? 'it contains' : 'they contain'} ` +
|
|
60
60
|
'is not reported by this analysis.');
|
|
@@ -166,7 +166,7 @@ export function parseBaseline(content) {
|
|
|
166
166
|
*
|
|
167
167
|
* Nodig omdat de samenvatting per soort en per bestand apart telt: welke soorten in
|
|
168
168
|
* wélk bestand zitten, stond alleen in het baseline-bestand zelf. Het pad wordt alleen
|
|
169
|
-
* vergeleken, niet geopend
|
|
169
|
+
* vergeleken, niet geopend het hoeft dus niet te bestaan, en dat is goed: een baseline
|
|
170
170
|
* noemt soms een bestand dat al weg is.
|
|
171
171
|
*/
|
|
172
172
|
export function baselineEntriesFor(project, path) {
|
|
@@ -187,7 +187,7 @@ export function summariseBaseline(project) {
|
|
|
187
187
|
// Geen baseline is een normale, gezonde toestand: het antwoord op "wat wordt hier
|
|
188
188
|
// genegeerd" is dan nul, niet "de tool is mislukt". Een errorpad dwingt de
|
|
189
189
|
// aanroeper anders om een storing af te handelen om een geslaagd resultaat te
|
|
190
|
-
// lezen
|
|
190
|
+
// lezen en maakt dit niet te onderscheiden van een écht kapotte baseline.
|
|
191
191
|
if (files.length === 0) {
|
|
192
192
|
return {
|
|
193
193
|
project: project.path,
|
package/dist/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG3E,8DAA8D;AAC9D,MAAM,YAAY,GAAG,EAAE,CAAC;AA2BxB,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,YAAY,OAAe,EAAE,SAAwB,qBAAqB,EAAE,UAA0B,EAAE;QACtG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aACtD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAClF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAwB;IAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,wFAAwF;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,GAAG,OAAO,CAAC,KAAK;aACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAChD,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
package/dist/changed.d.ts
CHANGED
|
@@ -67,13 +67,13 @@ export interface InlineIgnores {
|
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
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
|
|
70
|
+
* naast de baseline en `ignoreErrors` in de config en de enige die nog niemand telde:
|
|
71
71
|
* `analyse_changed` ziet alleen de nieuwe.
|
|
72
72
|
*
|
|
73
73
|
* Via `git grep`, dat `vendor/` en genegeerde bestanden al overslaat; met `--untracked`
|
|
74
74
|
* zodat een bestand dat nog niet toegevoegd is meetelt, net als bij `analyse_changed`.
|
|
75
75
|
* Templates (`.blade.php`) niet: die analyseert PHPStan niet. Wel alle andere PHP-bestanden,
|
|
76
|
-
* ook buiten de `paths` uit de config
|
|
76
|
+
* ook buiten de `paths` uit de config nagemeten stond op vier echte projecten elke ignore
|
|
77
77
|
* binnen die paden, en beperken zou een PHPStan-run kosten die bij een project dat op de
|
|
78
78
|
* host niet start mislukt. De tekst zegt het erbij.
|
|
79
79
|
*
|
|
@@ -113,20 +113,20 @@ export interface BaselineChange {
|
|
|
113
113
|
* Wat de wijziging aan de geïncludeerde baselines verandert: welke genegeerde fouten
|
|
114
114
|
* erbij kwamen, en hoeveel er weggingen. Zowel nieuwe regels als een `count` die omhoog
|
|
115
115
|
* ging tellen als erbij. Gemeten op een echt project gingen er in één opruimcommit 284
|
|
116
|
-
* weg en kwam er niets bij
|
|
116
|
+
* weg en kwam er niets bij beide kanten zijn dus het vermelden waard.
|
|
117
117
|
*/
|
|
118
118
|
export declare function baselineChanges(project: ResolvedProject, base?: string, staged?: boolean): Promise<BaselineChange[]>;
|
|
119
119
|
/**
|
|
120
120
|
* De inhoud van een gewijzigd bestand zoals het bij `base` was, voor het "vóór" van
|
|
121
121
|
* `analyse_changed`. Leeg voor een bestand dat daar nog niet bestond (nieuw, of hernoemd:
|
|
122
|
-
* dan staat het onder een ander pad)
|
|
122
|
+
* dan staat het onder een ander pad) dat is een uitkomst, geen fout. Via `:./pad`, dus
|
|
123
123
|
* relatief aan het project en niet aan de repositoryroot.
|
|
124
124
|
*/
|
|
125
125
|
export declare function fileAtBase(project: ResolvedProject, changed: ChangedFiles, file: string): Promise<string>;
|
|
126
126
|
/**
|
|
127
127
|
* Of een bevinding op een regel staat die in deze wijziging zit. Een bevinding zonder
|
|
128
128
|
* regelnummer in een inhoudelijk gewijzigd bestand telt mee: uitsluiten kan dan niet,
|
|
129
|
-
* en wie op deze vlag filtert zou hem anders nooit te zien krijgen
|
|
129
|
+
* en wie op deze vlag filtert zou hem anders nooit te zien krijgen weglaten is hier
|
|
130
130
|
* de gevaarlijke kant.
|
|
131
131
|
*/
|
|
132
132
|
export declare function isOnChangedLine(changed: ChangedFiles, file: string, line: number | null): boolean;
|