phpstan-mcp-mx 0.13.0 → 0.15.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 +28 -0
- package/README.md +135 -7
- package/dist/baseline.d.ts +19 -0
- package/dist/baseline.js +44 -11
- package/dist/baseline.js.map +1 -1
- package/dist/config.d.ts +14 -2
- package/dist/config.js +20 -2
- package/dist/config.js.map +1 -1
- package/dist/defaults.d.ts +37 -0
- package/dist/defaults.js +100 -0
- package/dist/defaults.js.map +1 -0
- package/dist/failure.d.ts +1 -1
- package/dist/failure.js.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/phpstan/process.d.ts +6 -0
- package/dist/phpstan/process.js +8 -1
- package/dist/phpstan/process.js.map +1 -1
- package/dist/phpstan.d.ts +1 -1
- package/dist/phpstan.js +106 -41
- package/dist/phpstan.js.map +1 -1
- package/dist/project.d.ts +10 -1
- package/dist/project.js +28 -1
- package/dist/project.js.map +1 -1
- package/dist/report.d.ts +15 -2
- package/dist/report.js +12 -5
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +19 -4
- package/dist/runner.js +48 -18
- package/dist/runner.js.map +1 -1
- package/dist/runs.d.ts +59 -0
- package/dist/runs.js +78 -0
- package/dist/runs.js.map +1 -0
- package/dist/schema-dialect.d.ts +30 -0
- package/dist/schema-dialect.js +57 -0
- package/dist/schema-dialect.js.map +1 -0
- package/dist/server.js +5 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/analysis.d.ts +4 -3
- package/dist/tools/analysis.js +26 -6
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/inspect.d.ts +2 -0
- package/dist/tools/inspect.js +144 -2
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/prompts.d.ts +17 -2
- package/dist/tools/prompts.js +343 -25
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/shared.d.ts +14 -1
- package/dist/tools/shared.js +51 -5
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools.js +10 -5
- package/dist/tools.js.map +1 -1
- package/dist/unmatched.d.ts +91 -0
- package/dist/unmatched.js +309 -0
- package/dist/unmatched.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,34 @@ 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.15.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.14.0...v0.15.0) (2026-09-10)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* laat runners overal en ook op Windows werken ([b927dbd](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/b927dbd76fee9d29d688efe9ade7d67c39ef6870))
|
|
13
|
+
* wijs bij een onbegrijpelijke crash ook naar clear_result_cache ([db253e2](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/db253e2d299ced88c9073cad9de4fbf38eec2fbb))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* meer werkpatronen als prompt, met aanvulling op het project ([deb37a4](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/deb37a40cd37ce644e28455798063603beee50f6))
|
|
19
|
+
|
|
20
|
+
# [0.14.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.13.0...v0.14.0) (2026-09-10)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* laat $schema weg uit de tool-schema's ([96be748](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/96be748cd7d738e485f6de1960c3c3e0919c7579))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
* lees de volgende pagina uit hetzelfde resultaat met runId ([caee99f](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/caee99f7fb645acf267b4748ecdaee1cb936e3cb))
|
|
31
|
+
* prompt die laat zien wat een level hoger kost ([94cad76](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/94cad761b6fc97a46ef47cbc972a2f2522bb32db))
|
|
32
|
+
* spoor verouderde negeerregels op met unmatched_ignores ([435db54](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/435db540f1b132552805a7a897db52fced1b470c))
|
|
33
|
+
* standaarden per project voor geheugen, timeout en config ([053335b](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/053335bb97a93f7b99f5fc21b07489bff4f11c68))
|
|
34
|
+
|
|
7
35
|
# [0.13.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.12.0...v0.13.0) (2026-09-10)
|
|
8
36
|
|
|
9
37
|
|
package/README.md
CHANGED
|
@@ -194,12 +194,15 @@ pad in `PHPSTAN_MCP_CONFIG`):
|
|
|
194
194
|
"command": ["docker", "exec", "-w", "/var/www/html", "admin-app"],
|
|
195
195
|
"workdir": "/var/www/html"
|
|
196
196
|
}
|
|
197
|
+
},
|
|
198
|
+
"projects": {
|
|
199
|
+
"/Users/jij/projecten/shop": { "memoryLimit": "4G", "timeoutSeconds": 900 }
|
|
197
200
|
}
|
|
198
201
|
}
|
|
199
202
|
```
|
|
200
203
|
|
|
201
204
|
Daarmee is je MCP-registratie één regel zonder `--env`, en staat de configuratie op één plek
|
|
202
|
-
in plaats van verdeeld over
|
|
205
|
+
in plaats van verdeeld over zeven variabelen.
|
|
203
206
|
|
|
204
207
|
Een bestand dat er niet is, is geen fout: dan geldt alleen de omgeving. Een bestand dat er
|
|
205
208
|
wél is maar niet klopt, laat de server niet starten — dan heeft iemand iets bedoeld wat
|
|
@@ -290,7 +293,14 @@ vertaald, en de bestandspaden in het antwoord komen terug als host-paden — and
|
|
|
290
293
|
`/var/www/html/app/User.php` terug en kun je dat bestand niet openen.
|
|
291
294
|
|
|
292
295
|
`list_projects` vermeldt per project welke omgeving geldt, en met een runner hoeft er op de
|
|
293
|
-
host geen `vendor/bin/phpstan` te staan.
|
|
296
|
+
host geen `vendor/bin/phpstan` te staan. Alles loopt dan via de runner: analyseren, maar ook
|
|
297
|
+
`diagnose_project`, `clear_result_cache` en `generate_baseline`. Alleen `unmatched_ignores`
|
|
298
|
+
werkt niet met een runner (zie daar).
|
|
299
|
+
|
|
300
|
+
`workdir` is een POSIX-pad, ook als de host Windows is: de omgeving is een Linux-container
|
|
301
|
+
of WSL. De projectsleutel mag in de vorm van je platform staan (`C:\Users\jij\admin` of
|
|
302
|
+
`C:/Users/jij/admin`, met of zonder slash erachter); hij wordt vergeleken na het oplossen
|
|
303
|
+
van symlinks, net als het `project`-argument zelf.
|
|
294
304
|
|
|
295
305
|
**Het commando komt uit de serverconfiguratie, nooit uit een tool-aanroep.** Net als de roots
|
|
296
306
|
is dit iets wat een mens één keer vastlegt: een model kiest alleen een project, en of daar
|
|
@@ -325,6 +335,41 @@ Dit is de enige manier om het bij de server vast te leggen. PHPStan kent er geen
|
|
|
325
335
|
eigen env-variabele; het alternatief is `memory_limit` in je `php.ini`, en dat geldt dan
|
|
326
336
|
voor élke PHP-CLI op je machine.
|
|
327
337
|
|
|
338
|
+
Heeft één project meer nodig dan de rest, zet het dan bij dat project in
|
|
339
|
+
`PHPSTAN_MCP_PROJECTS` in plaats van deze waarde voor iedereen op te hogen — met
|
|
340
|
+
`PHPSTAN_MCP_MAX_PARALLEL=2` is een machinebrede 4G twee keer 4G.
|
|
341
|
+
|
|
342
|
+
### `PHPSTAN_MCP_PROJECTS` (optioneel)
|
|
343
|
+
|
|
344
|
+
Standaarden voor één project, als JSON — of onder `projects` in het configbestand:
|
|
345
|
+
|
|
346
|
+
```json
|
|
347
|
+
{
|
|
348
|
+
"/Users/jij/projecten/shop": {
|
|
349
|
+
"memoryLimit": "4G",
|
|
350
|
+
"timeoutSeconds": 900,
|
|
351
|
+
"config": "phpstan-ci.neon"
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
| Sleutel | Betekenis |
|
|
357
|
+
| --- | --- |
|
|
358
|
+
| `memoryLimit` | `--memory-limit` voor dit project, in dezelfde vorm als `PHPSTAN_MCP_MEMORY_LIMIT` |
|
|
359
|
+
| `timeoutSeconds` | timeout voor dit project, van 1 tot en met 1800 |
|
|
360
|
+
| `config` | configbestand binnen het project, als PHPStan dat niet zelf vindt |
|
|
361
|
+
|
|
362
|
+
De volgorde is steeds dezelfde: wat de aanroep meegeeft, dan de standaard van het project,
|
|
363
|
+
dan die van de hele server. Een standaard is dus geen plafond.
|
|
364
|
+
|
|
365
|
+
`config` gaat door dezelfde padcontrole als een `config` uit een aanroep en moet binnen het
|
|
366
|
+
project liggen; een neon kan PHP-code laten uitvoeren. Hij telt overal als dé config van het
|
|
367
|
+
project: bij de melding dat er een baseline meedoet en bij `unmatched_ignores`.
|
|
368
|
+
|
|
369
|
+
Een onbekende sleutel wordt geweigerd, niet genegeerd: `memorylimit` met een kleine l zou
|
|
370
|
+
anders stil niets doen. `list_projects` en `server_config` tonen welke standaarden er gelden,
|
|
371
|
+
en een kapotte waarde staat daar als probleem bij — de lijst met projecten blijft werken.
|
|
372
|
+
|
|
328
373
|
## Tools
|
|
329
374
|
|
|
330
375
|
Elke tool verwacht een expliciet `project`-pad. De server heeft geen "huidig project": dat
|
|
@@ -375,10 +420,17 @@ antwoord volloopt met wat er al jaren stond.
|
|
|
375
420
|
| `project` | ja | absoluut pad naar de projectroot |
|
|
376
421
|
| `base` | nee | commit, branch of tag om tegen te vergelijken (standaard `HEAD`) |
|
|
377
422
|
| `staged` | nee | alleen wat gestaged is (`git diff --cached`), voor een check vóór een commit |
|
|
423
|
+
| `onlyChangedLines` | nee | alleen bevindingen op regels die gewijzigd zijn |
|
|
378
424
|
|
|
379
425
|
Verder dezelfde argumenten als `analyse_project`, op `paths` na. Met `base=main` krijg je de
|
|
380
426
|
hele branch in plaats van alleen je onopgeslagen werk.
|
|
381
427
|
|
|
428
|
+
Elke bevinding zegt met `onChangedLine` of hij op een gewijzigde regel staat; in de tekst
|
|
429
|
+
staat er een `+` voor. Een gewijzigd bestand bevat vaak ook fouten die er al stonden, en
|
|
430
|
+
zonder dat onderscheid ga je die repareren of stop je te vroeg. Let wel: een bevinding op een
|
|
431
|
+
ongewijzigde regel kan nog steeds uit je wijziging volgen — een aangepaste signatuur geeft
|
|
432
|
+
fouten bij de aanroepen, en die regels heb je niet aangeraakt.
|
|
433
|
+
|
|
382
434
|
Twee dingen die het meeneemt en die je makkelijk mist: **nieuwe bestanden die nog niet aan
|
|
383
435
|
git toegevoegd zijn** (`git diff` kent die niet, dus er is een tweede uitvraag voor) en
|
|
384
436
|
**niets uit `resources/views`** — een `.blade.php` eindigt op `.php`, maar is een template
|
|
@@ -415,8 +467,11 @@ clientlog, onzichtbaar voor het model. Een geweigerde instelling wordt gemeld in
|
|
|
415
467
|
weggelaten: staat `PHPSTAN_MCP_MAX_PARALLEL` op onzin, dan is dat veld `null` en staat de
|
|
416
468
|
reden onder "Geweigerde instellingen", terwijl de rest gewoon leesbaar blijft.
|
|
417
469
|
|
|
418
|
-
|
|
419
|
-
|
|
470
|
+
Heeft een project eigen standaarden (`PHPSTAN_MCP_PROJECTS`), dan staan die er per project
|
|
471
|
+
onder.
|
|
472
|
+
|
|
473
|
+
Let op wat er *niet* in staat: dit is een vaste lijst van instellingen en geen doorgeefluik
|
|
474
|
+
naar de omgeving. In dezelfde omgeving zitten tokens; die horen niet in een
|
|
420
475
|
toolantwoord.
|
|
421
476
|
|
|
422
477
|
### `diagnose_project`
|
|
@@ -456,6 +511,36 @@ Let op het onderscheid: wat hier in staat is precies wat `analyse_project` *niet
|
|
|
456
511
|
project dat zijn baseline includet, rapporteert alleen de fouten die er nieuw bij komen —
|
|
457
512
|
die vergelijking maakt PHPStan zelf al.
|
|
458
513
|
|
|
514
|
+
### `unmatched_ignores`
|
|
515
|
+
|
|
516
|
+
Zoekt de negeerregels die niets meer doen: baseline-regels voor fouten die allang opgelost
|
|
517
|
+
zijn, en regels waarvan de `count` hoger is dan wat er nog voorkomt. Veel projecten zetten
|
|
518
|
+
`reportUnmatchedIgnoredErrors: false`, en dan groeit dat ongemerkt — op één project bleken
|
|
519
|
+
554 van de 2116 baseline-regels niets meer te matchen.
|
|
520
|
+
|
|
521
|
+
| Argument | Verplicht | Betekenis |
|
|
522
|
+
| --- | --- | --- |
|
|
523
|
+
| `project` | ja | absoluut pad naar de projectroot |
|
|
524
|
+
| `memoryLimit` | nee | dit is een volledige analyse, dus die kan meer nodig hebben |
|
|
525
|
+
| `timeoutSeconds` | nee | standaard 300 |
|
|
526
|
+
| `offset` / `limit` | nee | welk deel van de regels je terugkrijgt |
|
|
527
|
+
|
|
528
|
+
Dit is een volledige analyse, met een tijdelijke config die die van het project includet en
|
|
529
|
+
de vlag omzet. Die config staat in de tijdelijke map van de server en niet in het project,
|
|
530
|
+
dus er verandert niets aan je repository. PHPStans resultcache blijft bruikbaar: de vlag
|
|
531
|
+
verandert niets aan wat er geanalyseerd wordt, dus de volgende gewone analyse is net zo snel.
|
|
532
|
+
|
|
533
|
+
Per regel staat erbij of hij uit de baseline komt. Patronen zonder pad komen apart; die staan
|
|
534
|
+
in `ignoreErrors` van je config of van een config die een pakket meebrengt, en daar helpt een
|
|
535
|
+
nieuwe baseline niet.
|
|
536
|
+
|
|
537
|
+
Er is bewust geen `level` en geen `paths`: op een ander niveau zijn het andere fouten, en bij
|
|
538
|
+
een deel van het project lijkt alles daarbuiten verouderd.
|
|
539
|
+
|
|
540
|
+
Werkt niet op een project met een eigen uitvoeringsomgeving (`PHPSTAN_MCP_RUNNERS`): de
|
|
541
|
+
tijdelijke config staat op de host en is in een container niet te zien. De tool zegt dat met
|
|
542
|
+
reden `unsupported_with_runner`.
|
|
543
|
+
|
|
459
544
|
### `generate_baseline` (alleen met schrijfrechten)
|
|
460
545
|
|
|
461
546
|
Zet alle huidige fouten in een baseline, zodat een volgende analyse alleen meldt wat er nieuw
|
|
@@ -495,6 +580,35 @@ includes:
|
|
|
495
580
|
- phpstan-baseline.neon
|
|
496
581
|
```
|
|
497
582
|
|
|
583
|
+
## Prompts
|
|
584
|
+
|
|
585
|
+
Werkpatronen die alleen bestaande tools combineren. Een prompt en geen tool, omdat een tool
|
|
586
|
+
context kost in elke sessie en een prompt alleen als je hem kiest. Elke vangrail in de teksten
|
|
587
|
+
komt uit een proefrun op een echt project die zonder die zin misging.
|
|
588
|
+
|
|
589
|
+
- **`phpstan_wijziging_nakijken`** — je eigen wijziging nakijken met `analyse_changed`,
|
|
590
|
+
beginnen bij de bevindingen op gewijzigde regels, en herhalen tot het schoon is (zonder
|
|
591
|
+
`runId`, anders zie je de uitslag van vóór je reparatie). Met `base` (bijv. `main`) voor
|
|
592
|
+
een hele branch vóór een PR.
|
|
593
|
+
- **`phpstan_level_verhogen`** — wat een level hoger kost: twee tellingen met `limit: 1` en
|
|
594
|
+
het verschil per soort. Het level staat vaak in een gedeelde config in `vendor/`, en
|
|
595
|
+
`ignore.*`-bevindingen tellen niet mee: dat zijn inline `@phpstan-ignore`-regels die op een
|
|
596
|
+
ander level niets te negeren hebben.
|
|
597
|
+
- **`phpstan_baseline_afbouwen`** — wat er in de baseline verouderd is (`unmatched_ignores`),
|
|
598
|
+
wat een nieuwe baseline zou verstoppen (`analyse_project`), en de goedkoopste échte afbouw.
|
|
599
|
+
Opschonen en verstoppen blijven twee dingen: `generate_baseline` wordt alleen voorgesteld
|
|
600
|
+
als er niets te verstoppen valt, en nooit uit zichzelf aangeroepen.
|
|
601
|
+
- **`phpstan_soort_wegwerken`** — een opruimronde voor één identifier of een groep als
|
|
602
|
+
`missingType`, met de `runId` binnen de ronde en zonder `runId` na elke reparatie. Zonder
|
|
603
|
+
`identifier` kiest het model een soort: eerst wat bij de bron op te lossen is, anders een
|
|
604
|
+
soort die in één of twee bestanden zit.
|
|
605
|
+
- **`phpstan_projecten_vergelijken`** — twee projecten naast elkaar (`diagnose_project`,
|
|
606
|
+
level, baseline, runners en standaarden), en alleen de verschillen. Verklaart geen verschil
|
|
607
|
+
het gedrag, dan is een verouderde resultcache de volgende verdachte.
|
|
608
|
+
|
|
609
|
+
Alle prompts nemen een optioneel `project` (bij de vergelijking `projectA` en `projectB`), en
|
|
610
|
+
een client die aanvulling ondersteunt krijgt daar een keuzelijst uit `list_projects`.
|
|
611
|
+
|
|
498
612
|
## Als een tool mislukt
|
|
499
613
|
|
|
500
614
|
Een mislukte aanroep geeft twee blokken terug: de melding in gewone taal, en een JSON-blok
|
|
@@ -515,8 +629,8 @@ met velden waarop je kunt sturen.
|
|
|
515
629
|
lezen: `no_roots_configured`, `project_outside_roots`, `project_not_found`,
|
|
516
630
|
`path_outside_project`, `path_not_found`, `phpstan_missing`, `config_missing`,
|
|
517
631
|
`bootstrap_failed`, `baseline_unreadable`, `invalid_setting`, `memory_limit`, `timeout`,
|
|
518
|
-
`cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `
|
|
519
|
-
`phpstan_failed`.
|
|
632
|
+
`cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `unsupported_with_runner`,
|
|
633
|
+
`unusable_output` en `phpstan_failed`.
|
|
520
634
|
|
|
521
635
|
De velden staan bewust in `content` en niet in `structuredContent`: dat laatste wordt door
|
|
522
636
|
MCP-clients gevalideerd tegen het schema van het *geslaagde* antwoord.
|
|
@@ -542,7 +656,21 @@ src/Support/Filters/DealFilters.php
|
|
|
542
656
|
42 argument.type Parameter #1 $id expects int, string given.
|
|
543
657
|
```
|
|
544
658
|
|
|
545
|
-
Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep
|
|
659
|
+
Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep:
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
Nog 12 bevinding(en). Roep dezelfde tool opnieuw aan met offset=50 en runId="kX3v9aQp"; dan
|
|
663
|
+
komt de rest uit dit resultaat in plaats van uit een nieuwe analyse.
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
Met die `runId` komt de volgende pagina uit hetzelfde resultaat. Zonder zou elke pagina een
|
|
667
|
+
nieuwe analyse zijn, en wie tussendoor een bestand aanpast krijgt dan pagina's met
|
|
668
|
+
verschillende totalen. Alleen `offset`, `limit`, `identifiers` en `onlyChangedLines` mogen
|
|
669
|
+
anders zijn. Hoort de `runId` bij andere argumenten, is hij verlopen (na tien minuten) of
|
|
670
|
+
onbekend, dan volgt een nieuwe analyse met een melding erbij in plaats van een fout.
|
|
671
|
+
|
|
672
|
+
Een pagina uit een eerder resultaat noemt hoe oud dat resultaat is. Analyseer na een
|
|
673
|
+
reparatie dus zónder `runId`: anders zie je de uitslag van vóór de reparatie.
|
|
546
674
|
|
|
547
675
|
### Annuleren
|
|
548
676
|
|
package/dist/baseline.d.ts
CHANGED
|
@@ -55,6 +55,25 @@ export declare function findBaselineFiles(project: ResolvedProject): string[];
|
|
|
55
55
|
* op een naam in een comment of onder een andere sleutel.
|
|
56
56
|
*/
|
|
57
57
|
export declare function describeIncludedBaseline(project: ResolvedProject): string | null;
|
|
58
|
+
/**
|
|
59
|
+
* De baseline-bestanden in de projectroot die de config van het project includeert.
|
|
60
|
+
* Leeg als er geen config is of als die niet te lezen is: dan doet er geen mee.
|
|
61
|
+
*/
|
|
62
|
+
export declare function includedBaselineFiles(project: ResolvedProject): string[];
|
|
63
|
+
/** De entries uit de geïncludeerde baselines, met de bestanden die niet te lezen waren. */
|
|
64
|
+
export interface IncludedBaselines {
|
|
65
|
+
readonly files: readonly string[];
|
|
66
|
+
readonly entries: readonly BaselineEntry[];
|
|
67
|
+
/** Bestanden die wél meedoen maar waar deze parser niets uit haalt. */
|
|
68
|
+
readonly unreadable: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Leest de entries uit de baselines die meedoen. Een onleesbaar bestand gooit hier
|
|
72
|
+
* niet, anders dan bij summariseBaseline: wie dit aanroept heeft een analyse in
|
|
73
|
+
* handen die ook zonder de baseline bruikbaar is, en moet alleen weten dát hij
|
|
74
|
+
* niet kan zeggen wat eruit komt.
|
|
75
|
+
*/
|
|
76
|
+
export declare function readIncludedBaselines(project: ResolvedProject): IncludedBaselines;
|
|
58
77
|
/**
|
|
59
78
|
* Leest een baseline-bestand uit.
|
|
60
79
|
*
|
package/dist/baseline.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ToolFailure } from './failure.js';
|
|
2
2
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
4
|
/** Hoeveel regels de samenvattingslijsten hoogstens tonen. */
|
|
5
5
|
const SUMMARY_ROWS = 15;
|
|
6
6
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
@@ -38,16 +38,7 @@ export function findBaselineFiles(project) {
|
|
|
38
38
|
* op een naam in een comment of onder een andere sleutel.
|
|
39
39
|
*/
|
|
40
40
|
export function describeIncludedBaseline(project) {
|
|
41
|
-
|
|
42
|
-
return null;
|
|
43
|
-
let config;
|
|
44
|
-
try {
|
|
45
|
-
config = readFileSync(join(project.path, project.config), 'utf8');
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
const included = findBaselineFiles(project).filter((file) => isIncludedIn(config, file));
|
|
41
|
+
const included = includedBaselineFiles(project);
|
|
51
42
|
if (included.length === 0)
|
|
52
43
|
return null;
|
|
53
44
|
const namen = included.join(', ');
|
|
@@ -67,6 +58,48 @@ export function describeIncludedBaseline(project) {
|
|
|
67
58
|
return (`${namen} wordt geïncludeerd: ${String(errors)} genegeerde fout(en) staan niet in dit ` +
|
|
68
59
|
'rapport. Gebruik baseline_summary om te zien wat er in staat.');
|
|
69
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* De baseline-bestanden in de projectroot die de config van het project includeert.
|
|
63
|
+
* Leeg als er geen config is of als die niet te lezen is: dan doet er geen mee.
|
|
64
|
+
*/
|
|
65
|
+
export function includedBaselineFiles(project) {
|
|
66
|
+
if (project.config === null)
|
|
67
|
+
return [];
|
|
68
|
+
let config;
|
|
69
|
+
try {
|
|
70
|
+
config = readFileSync(resolve(project.path, project.config), 'utf8');
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
return findBaselineFiles(project).filter((file) => isIncludedIn(config, file));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Leest de entries uit de baselines die meedoen. Een onleesbaar bestand gooit hier
|
|
79
|
+
* niet, anders dan bij summariseBaseline: wie dit aanroept heeft een analyse in
|
|
80
|
+
* handen die ook zonder de baseline bruikbaar is, en moet alleen weten dát hij
|
|
81
|
+
* niet kan zeggen wat eruit komt.
|
|
82
|
+
*/
|
|
83
|
+
export function readIncludedBaselines(project) {
|
|
84
|
+
const files = includedBaselineFiles(project);
|
|
85
|
+
const entries = [];
|
|
86
|
+
const unreadable = [];
|
|
87
|
+
for (const file of files) {
|
|
88
|
+
let content;
|
|
89
|
+
try {
|
|
90
|
+
content = readFileSync(join(project.path, file), 'utf8');
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
unreadable.push(file);
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const parsed = parseBaseline(content);
|
|
97
|
+
if (parsed.length === 0 && content.includes('ignoreErrors'))
|
|
98
|
+
unreadable.push(file);
|
|
99
|
+
entries.push(...parsed);
|
|
100
|
+
}
|
|
101
|
+
return { files, entries, unreadable };
|
|
102
|
+
}
|
|
70
103
|
/** Of `file` in deze config als lijst-entry voorkomt, met of zonder ./ ervoor. */
|
|
71
104
|
function isIncludedIn(config, file) {
|
|
72
105
|
const escaped = file.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
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,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
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,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1C,8DAA8D;AAC9D,MAAM,YAAY,GAAG,EAAE,CAAC;AAsBxB,+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;IAElC,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,4EAA4E;QAC5E,8BAA8B;QAC9B,OAAO,GAAG,KAAK,qFAAqF,CAAC;IACvG,CAAC;IAED,OAAO,CACL,GAAG,KAAK,wBAAwB,MAAM,CAAC,MAAM,CAAC,yCAAyC;QACvF,+DAA+D,CAChE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC;AAUD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwB;IAC5D,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,IAAI,MAAM,CAAC,2BAA2B,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,IAAI,OAAO,GAAkE,IAAI,CAAC;IAElF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,qBAAqB;gBACvD,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAE7B,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,GAAG,KAAK,YAAY;YAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACzD,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aAClD,IAAI,GAAG,KAAK,OAAO;YAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,EAAE,CAAC;IACR,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEzC,kFAAkF;IAClF,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YACjC,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,MAAM,GAAG,GAAoB,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAEvC,6EAA6E;QAC7E,6EAA6E;QAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,aAAa,CACrB,GAAG,IAAI,iEAAiE;gBACtE,oDAAoD,CACvD,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SAC7D,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE;YACN,OAAO,EAAE,GAAG,CAAC,MAAM;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SACzD;QACD,YAAY,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAClF,UAAU;YACV,KAAK;SACN,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,kEAAkE;QAClE,KAAK,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,2BAA2B,OAAO,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAC/F,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,IAAI,CACR,EAAE,EACF,kBAAkB,EAClB,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,EAC9E,EAAE,EACF,4BAA4B,EAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,EAClE,EAAE,EACF,wFAAwF,EACxF,mFAAmF,CACpF,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,yFAAyF;AACzF,SAAS,KAAK,CAAC,OAAiC,EAAE,GAAqC;IACrF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAC7B,CAAC;AAED,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export declare class ConfigError extends ToolFailure {
|
|
|
7
7
|
/** Env-variabele die een ander configbestand aanwijst dan de standaardplek. */
|
|
8
8
|
export declare const CONFIG_ENV_VAR = "PHPSTAN_MCP_CONFIG";
|
|
9
9
|
/**
|
|
10
|
-
* De instellingen zoals ze in het configbestand mogen staan. Dezelfde
|
|
11
|
-
*
|
|
10
|
+
* De instellingen zoals ze in het configbestand mogen staan. Dezelfde die ook als
|
|
11
|
+
* env-variabele kunnen: het bestand is een andere plek, geen andere taal.
|
|
12
12
|
*/
|
|
13
13
|
export interface FileConfig {
|
|
14
14
|
readonly roots?: readonly string[];
|
|
@@ -17,6 +17,7 @@ export interface FileConfig {
|
|
|
17
17
|
readonly tmpDir?: string;
|
|
18
18
|
readonly allowWrites?: boolean;
|
|
19
19
|
readonly runners?: Record<string, unknown>;
|
|
20
|
+
readonly projects?: Record<string, unknown>;
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
23
|
* Waar het configbestand staat. `XDG_CONFIG_HOME` wint, anders `~/.config` — de
|
|
@@ -32,6 +33,17 @@ export declare function configPath(env?: NodeJS.ProcessEnv): string;
|
|
|
32
33
|
* wél — dan heeft iemand iets bedoeld wat niet gebeurt.
|
|
33
34
|
*/
|
|
34
35
|
export declare function loadConfig(env?: NodeJS.ProcessEnv): FileConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Een projectpad uit de configuratie (een sleutel van `runners` of `projects`), in de
|
|
38
|
+
* vorm waarin `resolveProject` het project oplevert: door `realpath.native`.
|
|
39
|
+
*
|
|
40
|
+
* Die sleutels worden letterlijk vergeleken met het geresolvede pad. Zonder deze stap
|
|
41
|
+
* matcht `/pad/project/` met een slash erachter niet, en een pad via een symlink ook
|
|
42
|
+
* niet — en op Windows nooit `C:/Users/…` tegen `C:\Users\…`. Een instelling die om
|
|
43
|
+
* zo'n reden niet matcht, doet stil niets. Bestaat het pad niet, dan alleen
|
|
44
|
+
* normaliseren: dan valt er ook niets te matchen, maar de melding blijft leesbaar.
|
|
45
|
+
*/
|
|
46
|
+
export declare function normaliseProjectKey(key: string): string;
|
|
35
47
|
/**
|
|
36
48
|
* Eén instelling uit het bestand, als tekst. Handig omdat de bestaande loaders al
|
|
37
49
|
* op tekst uit de omgeving werken: zo geldt overal dezelfde validatie, en levert
|
package/dist/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
1
|
+
import { readFileSync, realpathSync } from 'node:fs';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
4
|
import { ToolFailure } from './failure.js';
|
|
5
5
|
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
6
6
|
export class ConfigError extends ToolFailure {
|
|
@@ -50,6 +50,24 @@ export function loadConfig(env = process.env) {
|
|
|
50
50
|
}
|
|
51
51
|
return ontleed;
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Een projectpad uit de configuratie (een sleutel van `runners` of `projects`), in de
|
|
55
|
+
* vorm waarin `resolveProject` het project oplevert: door `realpath.native`.
|
|
56
|
+
*
|
|
57
|
+
* Die sleutels worden letterlijk vergeleken met het geresolvede pad. Zonder deze stap
|
|
58
|
+
* matcht `/pad/project/` met een slash erachter niet, en een pad via een symlink ook
|
|
59
|
+
* niet — en op Windows nooit `C:/Users/…` tegen `C:\Users\…`. Een instelling die om
|
|
60
|
+
* zo'n reden niet matcht, doet stil niets. Bestaat het pad niet, dan alleen
|
|
61
|
+
* normaliseren: dan valt er ook niets te matchen, maar de melding blijft leesbaar.
|
|
62
|
+
*/
|
|
63
|
+
export function normaliseProjectKey(key) {
|
|
64
|
+
try {
|
|
65
|
+
return realpathSync.native(key);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return resolve(key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
53
71
|
/**
|
|
54
72
|
* Eén instelling uit het bestand, als tekst. Handig omdat de bestaande loaders al
|
|
55
73
|
* op tekst uit de omgeving werken: zo geldt overal dezelfde validatie, en levert
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { FailureDetails, FailureReason } from './failure.js';
|
|
2
|
+
import { ToolFailure } from './failure.js';
|
|
3
|
+
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
4
|
+
export declare class ProjectDefaultsError extends ToolFailure {
|
|
5
|
+
constructor(message: string, reason?: FailureReason, details?: FailureDetails);
|
|
6
|
+
}
|
|
7
|
+
/** Env-variabele met de standaarden per project, als JSON. */
|
|
8
|
+
export declare const PROJECTS_ENV_VAR = "PHPSTAN_MCP_PROJECTS";
|
|
9
|
+
/** Dezelfde bovengrens als het tool-argument: een standaard mag niet meer dan een aanroep. */
|
|
10
|
+
export declare const MAX_TIMEOUT_SECONDS = 1800;
|
|
11
|
+
/**
|
|
12
|
+
* Wat per project anders mag dan de rest van de machine. Een Larastan-project kan 2G
|
|
13
|
+
* nodig hebben waar een klein pakket met 256M toe kan; één machinebrede limiet is dan
|
|
14
|
+
* voor het ene te krap en voor het andere een onnodig hoog plafond.
|
|
15
|
+
*/
|
|
16
|
+
export interface ProjectDefaults {
|
|
17
|
+
readonly memoryLimit?: string;
|
|
18
|
+
readonly timeoutSeconds?: number;
|
|
19
|
+
/** Relatief aan de projectroot; gaat bij gebruik door resolveWithin. */
|
|
20
|
+
readonly config?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Of PHPStan deze waarde als `--memory-limit` accepteert. */
|
|
23
|
+
export declare function isValidMemoryLimit(value: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Leest de standaarden per project uit de omgeving, of anders uit het configbestand.
|
|
26
|
+
*
|
|
27
|
+
* Net als de runners komt dit uit de serverconfiguratie en nooit uit een aanroep. De
|
|
28
|
+
* aanroeper kan een standaard wél overrulen met een tool-argument; dat is de
|
|
29
|
+
* volgorde die ook bij de globale geheugenlimiet geldt.
|
|
30
|
+
*
|
|
31
|
+
* Een onbekende sleutel wordt geweigerd en niet genegeerd: `memorylimit` met een
|
|
32
|
+
* kleine l doet anders stilzwijgend niets, en dan heeft iemand iets bedoeld wat niet
|
|
33
|
+
* gebeurt — dezelfde reden waarom een kapot configbestand de server niet laat starten.
|
|
34
|
+
*/
|
|
35
|
+
export declare function loadProjectDefaults(env?: NodeJS.ProcessEnv): Map<string, ProjectDefaults>;
|
|
36
|
+
/** De standaarden voor dit project; leeg als er niets bijzonders voor geldt. */
|
|
37
|
+
export declare function defaultsFor(project: string, env?: NodeJS.ProcessEnv): ProjectDefaults;
|
package/dist/defaults.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { isAbsolute } from 'node:path';
|
|
2
|
+
import { fromConfig, normaliseProjectKey } from './config.js';
|
|
3
|
+
import { ToolFailure } from './failure.js';
|
|
4
|
+
/** Fout die als bruikbare melding naar het model teruggaat, niet als crash. */
|
|
5
|
+
export class ProjectDefaultsError extends ToolFailure {
|
|
6
|
+
constructor(message, reason = 'invalid_setting', details = {}) {
|
|
7
|
+
super(message, reason, details);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Env-variabele met de standaarden per project, als JSON. */
|
|
11
|
+
export const PROJECTS_ENV_VAR = 'PHPSTAN_MCP_PROJECTS';
|
|
12
|
+
/** Dezelfde bovengrens als het tool-argument: een standaard mag niet meer dan een aanroep. */
|
|
13
|
+
export const MAX_TIMEOUT_SECONDS = 1800;
|
|
14
|
+
/** De sleutels die een project mag hebben. Alles daarbuiten is een tikfout. */
|
|
15
|
+
const KEYS = ['memoryLimit', 'timeoutSeconds', 'config'];
|
|
16
|
+
// PHPStans eigen vorm: bytes als getal, optioneel met K, M of G, of -1 voor
|
|
17
|
+
// onbeperkt. Een neon-parameter bestaat er niet voor en PHPStan kent er ook geen
|
|
18
|
+
// eigen env-variabele voor, dus dit is de enige plek om het blijvend vast te leggen.
|
|
19
|
+
const MEMORY_LIMIT_PATTERN = /^(-1|\d+[KMG]?)$/i;
|
|
20
|
+
/** Of PHPStan deze waarde als `--memory-limit` accepteert. */
|
|
21
|
+
export function isValidMemoryLimit(value) {
|
|
22
|
+
return MEMORY_LIMIT_PATTERN.test(value);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Leest de standaarden per project uit de omgeving, of anders uit het configbestand.
|
|
26
|
+
*
|
|
27
|
+
* Net als de runners komt dit uit de serverconfiguratie en nooit uit een aanroep. De
|
|
28
|
+
* aanroeper kan een standaard wél overrulen met een tool-argument; dat is de
|
|
29
|
+
* volgorde die ook bij de globale geheugenlimiet geldt.
|
|
30
|
+
*
|
|
31
|
+
* Een onbekende sleutel wordt geweigerd en niet genegeerd: `memorylimit` met een
|
|
32
|
+
* kleine l doet anders stilzwijgend niets, en dan heeft iemand iets bedoeld wat niet
|
|
33
|
+
* gebeurt — dezelfde reden waarom een kapot configbestand de server niet laat starten.
|
|
34
|
+
*/
|
|
35
|
+
export function loadProjectDefaults(env = process.env) {
|
|
36
|
+
const ruw = (env[PROJECTS_ENV_VAR] ?? fromConfig('projects', env))?.trim();
|
|
37
|
+
if (ruw === undefined || ruw === '')
|
|
38
|
+
return new Map();
|
|
39
|
+
let ontleed;
|
|
40
|
+
try {
|
|
41
|
+
ontleed = JSON.parse(ruw);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
throw new ProjectDefaultsError(`${PROJECTS_ENV_VAR} bevat geen geldige JSON. Verwacht wordt een object met per ` +
|
|
45
|
+
'projectpad bijvoorbeeld {"memoryLimit": "2G", "timeoutSeconds": 600, "config": "phpstan.neon"}.');
|
|
46
|
+
}
|
|
47
|
+
if (typeof ontleed !== 'object' || ontleed === null || Array.isArray(ontleed)) {
|
|
48
|
+
throw new ProjectDefaultsError(`${PROJECTS_ENV_VAR} moet een object zijn met een projectpad per sleutel.`);
|
|
49
|
+
}
|
|
50
|
+
const defaults = new Map();
|
|
51
|
+
for (const [pad, waarde] of Object.entries(ontleed)) {
|
|
52
|
+
defaults.set(normaliseProjectKey(pad), controleer(pad, waarde));
|
|
53
|
+
}
|
|
54
|
+
return defaults;
|
|
55
|
+
}
|
|
56
|
+
/** De standaarden voor dit project; leeg als er niets bijzonders voor geldt. */
|
|
57
|
+
export function defaultsFor(project, env = process.env) {
|
|
58
|
+
return loadProjectDefaults(env).get(project) ?? {};
|
|
59
|
+
}
|
|
60
|
+
/** Weigert een onbruikbare waarde met een melding die zegt wat er wél mag. */
|
|
61
|
+
function controleer(pad, waarde) {
|
|
62
|
+
const waar = `${PROJECTS_ENV_VAR}: "${pad}"`;
|
|
63
|
+
if (!isAbsolute(pad)) {
|
|
64
|
+
throw new ProjectDefaultsError(`${waar} is geen absoluut projectpad.`);
|
|
65
|
+
}
|
|
66
|
+
if (typeof waarde !== 'object' || waarde === null || Array.isArray(waarde)) {
|
|
67
|
+
throw new ProjectDefaultsError(`${waar} moet een object zijn, bijvoorbeeld {"memoryLimit": "2G"}.`);
|
|
68
|
+
}
|
|
69
|
+
const obj = waarde;
|
|
70
|
+
const onbekend = Object.keys(obj).filter((key) => !KEYS.includes(key));
|
|
71
|
+
if (onbekend.length > 0) {
|
|
72
|
+
throw new ProjectDefaultsError(`${waar} kent ${onbekend.map((key) => `"${key}"`).join(', ')} niet. Toegestaan zijn ${KEYS.join(', ')}.`);
|
|
73
|
+
}
|
|
74
|
+
const result = {};
|
|
75
|
+
if (obj['memoryLimit'] !== undefined) {
|
|
76
|
+
const limit = obj['memoryLimit'];
|
|
77
|
+
if (typeof limit !== 'string' || !isValidMemoryLimit(limit.trim())) {
|
|
78
|
+
throw new ProjectDefaultsError(`${waar} heeft memoryLimit ${JSON.stringify(limit)}, en die vorm accepteert PHPStan niet. ` +
|
|
79
|
+
'Gebruik een getal met optioneel K, M of G (bijv. "1G"), of -1 voor geen limiet.');
|
|
80
|
+
}
|
|
81
|
+
result.memoryLimit = limit.trim();
|
|
82
|
+
}
|
|
83
|
+
if (obj['timeoutSeconds'] !== undefined) {
|
|
84
|
+
const seconds = obj['timeoutSeconds'];
|
|
85
|
+
if (typeof seconds !== 'number' || !Number.isInteger(seconds) || seconds < 1 || seconds > MAX_TIMEOUT_SECONDS) {
|
|
86
|
+
throw new ProjectDefaultsError(`${waar} heeft timeoutSeconds ${JSON.stringify(seconds)}; verwacht een geheel getal ` +
|
|
87
|
+
`van 1 tot en met ${String(MAX_TIMEOUT_SECONDS)}.`);
|
|
88
|
+
}
|
|
89
|
+
result.timeoutSeconds = seconds;
|
|
90
|
+
}
|
|
91
|
+
if (obj['config'] !== undefined) {
|
|
92
|
+
const config = obj['config'];
|
|
93
|
+
if (typeof config !== 'string' || config.trim() === '') {
|
|
94
|
+
throw new ProjectDefaultsError(`${waar} heeft een lege of onbruikbare config; verwacht een pad binnen het project.`);
|
|
95
|
+
}
|
|
96
|
+
result.config = config.trim();
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;QAClG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEvD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAcxC,+EAA+E;AAC/E,MAAM,IAAI,GAAuC,CAAC,aAAa,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAE7F,4EAA4E;AAC5E,iFAAiF;AACjF,qFAAqF;AACrF,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEjD,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3E,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAEtD,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAC5B,GAAG,gBAAgB,8DAA8D;YAC/E,iGAAiG,CACpG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,oBAAoB,CAAC,GAAG,gBAAgB,uDAAuD,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;QAC/E,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC/E,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,GAAW,EAAE,MAAe;IAC9C,MAAM,IAAI,GAAG,GAAG,gBAAgB,MAAM,GAAG,GAAG,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,oBAAoB,CAAC,GAAG,IAAI,+BAA+B,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,oBAAoB,CAAC,GAAG,IAAI,4DAA4D,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAE,IAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,oBAAoB,CAC5B,GAAG,IAAI,SAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAuE,EAAE,CAAC;IAEtF,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,oBAAoB,CAC5B,GAAG,IAAI,sBAAsB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,yCAAyC;gBACzF,iFAAiF,CACpF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,GAAG,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;YAC9G,MAAM,IAAI,oBAAoB,CAC5B,GAAG,IAAI,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,8BAA8B;gBACnF,oBAAoB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CACrD,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvD,MAAM,IAAI,oBAAoB,CAAC,GAAG,IAAI,6EAA6E,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/failure.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* lijst uit met beleid, niet met vrije tekst — een code die maar één keer voorkomt
|
|
13
13
|
* helpt niemand.
|
|
14
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';
|
|
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' | 'unsupported_with_runner' | 'unusable_output' | 'phpstan_failed';
|
|
16
16
|
/** Wat er naast de reden bekend is. Alles optioneel: niet elke fout weet dit. */
|
|
17
17
|
export interface FailureDetails {
|
|
18
18
|
/** Exit code van het proces, als er een proces was. */
|
package/dist/failure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AAqDA;;;;;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"}
|