phpstan-mcp-mx 0.12.0 → 0.14.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 +22 -0
- package/README.md +113 -6
- package/dist/baseline.d.ts +19 -0
- package/dist/baseline.js +44 -11
- package/dist/baseline.js.map +1 -1
- package/dist/changed.d.ts +22 -0
- package/dist/changed.js +93 -9
- package/dist/changed.js.map +1 -1
- package/dist/config.d.ts +3 -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.js +58 -19
- 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 +39 -3
- package/dist/report.js +59 -14
- package/dist/report.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/tmpdir.js.map +1 -1
- package/dist/tools/analysis.d.ts +4 -3
- package/dist/tools/analysis.js +35 -8
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/inspect.d.ts +2 -0
- package/dist/tools/inspect.js +140 -1
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/prompts.d.ts +8 -1
- package/dist/tools/prompts.js +85 -4
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/shared.d.ts +26 -2
- package/dist/tools/shared.js +63 -5
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools.js +9 -4
- 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,28 @@ 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.14.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.13.0...v0.14.0) (2026-09-10)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* laat $schema weg uit de tool-schema's ([96be748](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/96be748cd7d738e485f6de1960c3c3e0919c7579))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* lees de volgende pagina uit hetzelfde resultaat met runId ([caee99f](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/caee99f7fb645acf267b4748ecdaee1cb936e3cb))
|
|
18
|
+
* prompt die laat zien wat een level hoger kost ([94cad76](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/94cad761b6fc97a46ef47cbc972a2f2522bb32db))
|
|
19
|
+
* spoor verouderde negeerregels op met unmatched_ignores ([435db54](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/435db540f1b132552805a7a897db52fced1b470c))
|
|
20
|
+
* standaarden per project voor geheugen, timeout en config ([053335b](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/053335bb97a93f7b99f5fc21b07489bff4f11c68))
|
|
21
|
+
|
|
22
|
+
# [0.13.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.12.0...v0.13.0) (2026-09-10)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* markeer bevindingen op gewijzigde regels in analyse_changed ([aeeb6b8](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/commit/aeeb6b87a2e7c51d395abdaeaeb6e2c39b247767))
|
|
28
|
+
|
|
7
29
|
# [0.12.0](https://codeberg.org/MartijnSchimmel/phpstan-mcp-mx/compare/v0.11.1...v0.12.0) (2026-09-10)
|
|
8
30
|
|
|
9
31
|
|
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
|
|
@@ -325,6 +328,41 @@ Dit is de enige manier om het bij de server vast te leggen. PHPStan kent er geen
|
|
|
325
328
|
eigen env-variabele; het alternatief is `memory_limit` in je `php.ini`, en dat geldt dan
|
|
326
329
|
voor élke PHP-CLI op je machine.
|
|
327
330
|
|
|
331
|
+
Heeft één project meer nodig dan de rest, zet het dan bij dat project in
|
|
332
|
+
`PHPSTAN_MCP_PROJECTS` in plaats van deze waarde voor iedereen op te hogen — met
|
|
333
|
+
`PHPSTAN_MCP_MAX_PARALLEL=2` is een machinebrede 4G twee keer 4G.
|
|
334
|
+
|
|
335
|
+
### `PHPSTAN_MCP_PROJECTS` (optioneel)
|
|
336
|
+
|
|
337
|
+
Standaarden voor één project, als JSON — of onder `projects` in het configbestand:
|
|
338
|
+
|
|
339
|
+
```json
|
|
340
|
+
{
|
|
341
|
+
"/Users/jij/projecten/shop": {
|
|
342
|
+
"memoryLimit": "4G",
|
|
343
|
+
"timeoutSeconds": 900,
|
|
344
|
+
"config": "phpstan-ci.neon"
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
| Sleutel | Betekenis |
|
|
350
|
+
| --- | --- |
|
|
351
|
+
| `memoryLimit` | `--memory-limit` voor dit project, in dezelfde vorm als `PHPSTAN_MCP_MEMORY_LIMIT` |
|
|
352
|
+
| `timeoutSeconds` | timeout voor dit project, van 1 tot en met 1800 |
|
|
353
|
+
| `config` | configbestand binnen het project, als PHPStan dat niet zelf vindt |
|
|
354
|
+
|
|
355
|
+
De volgorde is steeds dezelfde: wat de aanroep meegeeft, dan de standaard van het project,
|
|
356
|
+
dan die van de hele server. Een standaard is dus geen plafond.
|
|
357
|
+
|
|
358
|
+
`config` gaat door dezelfde padcontrole als een `config` uit een aanroep en moet binnen het
|
|
359
|
+
project liggen; een neon kan PHP-code laten uitvoeren. Hij telt overal als dé config van het
|
|
360
|
+
project: bij de melding dat er een baseline meedoet en bij `unmatched_ignores`.
|
|
361
|
+
|
|
362
|
+
Een onbekende sleutel wordt geweigerd, niet genegeerd: `memorylimit` met een kleine l zou
|
|
363
|
+
anders stil niets doen. `list_projects` en `server_config` tonen welke standaarden er gelden,
|
|
364
|
+
en een kapotte waarde staat daar als probleem bij — de lijst met projecten blijft werken.
|
|
365
|
+
|
|
328
366
|
## Tools
|
|
329
367
|
|
|
330
368
|
Elke tool verwacht een expliciet `project`-pad. De server heeft geen "huidig project": dat
|
|
@@ -375,10 +413,17 @@ antwoord volloopt met wat er al jaren stond.
|
|
|
375
413
|
| `project` | ja | absoluut pad naar de projectroot |
|
|
376
414
|
| `base` | nee | commit, branch of tag om tegen te vergelijken (standaard `HEAD`) |
|
|
377
415
|
| `staged` | nee | alleen wat gestaged is (`git diff --cached`), voor een check vóór een commit |
|
|
416
|
+
| `onlyChangedLines` | nee | alleen bevindingen op regels die gewijzigd zijn |
|
|
378
417
|
|
|
379
418
|
Verder dezelfde argumenten als `analyse_project`, op `paths` na. Met `base=main` krijg je de
|
|
380
419
|
hele branch in plaats van alleen je onopgeslagen werk.
|
|
381
420
|
|
|
421
|
+
Elke bevinding zegt met `onChangedLine` of hij op een gewijzigde regel staat; in de tekst
|
|
422
|
+
staat er een `+` voor. Een gewijzigd bestand bevat vaak ook fouten die er al stonden, en
|
|
423
|
+
zonder dat onderscheid ga je die repareren of stop je te vroeg. Let wel: een bevinding op een
|
|
424
|
+
ongewijzigde regel kan nog steeds uit je wijziging volgen — een aangepaste signatuur geeft
|
|
425
|
+
fouten bij de aanroepen, en die regels heb je niet aangeraakt.
|
|
426
|
+
|
|
382
427
|
Twee dingen die het meeneemt en die je makkelijk mist: **nieuwe bestanden die nog niet aan
|
|
383
428
|
git toegevoegd zijn** (`git diff` kent die niet, dus er is een tweede uitvraag voor) en
|
|
384
429
|
**niets uit `resources/views`** — een `.blade.php` eindigt op `.php`, maar is een template
|
|
@@ -415,8 +460,11 @@ clientlog, onzichtbaar voor het model. Een geweigerde instelling wordt gemeld in
|
|
|
415
460
|
weggelaten: staat `PHPSTAN_MCP_MAX_PARALLEL` op onzin, dan is dat veld `null` en staat de
|
|
416
461
|
reden onder "Geweigerde instellingen", terwijl de rest gewoon leesbaar blijft.
|
|
417
462
|
|
|
418
|
-
|
|
419
|
-
|
|
463
|
+
Heeft een project eigen standaarden (`PHPSTAN_MCP_PROJECTS`), dan staan die er per project
|
|
464
|
+
onder.
|
|
465
|
+
|
|
466
|
+
Let op wat er *niet* in staat: dit is een vaste lijst van instellingen en geen doorgeefluik
|
|
467
|
+
naar de omgeving. In dezelfde omgeving zitten tokens; die horen niet in een
|
|
420
468
|
toolantwoord.
|
|
421
469
|
|
|
422
470
|
### `diagnose_project`
|
|
@@ -456,6 +504,36 @@ Let op het onderscheid: wat hier in staat is precies wat `analyse_project` *niet
|
|
|
456
504
|
project dat zijn baseline includet, rapporteert alleen de fouten die er nieuw bij komen —
|
|
457
505
|
die vergelijking maakt PHPStan zelf al.
|
|
458
506
|
|
|
507
|
+
### `unmatched_ignores`
|
|
508
|
+
|
|
509
|
+
Zoekt de negeerregels die niets meer doen: baseline-regels voor fouten die allang opgelost
|
|
510
|
+
zijn, en regels waarvan de `count` hoger is dan wat er nog voorkomt. Veel projecten zetten
|
|
511
|
+
`reportUnmatchedIgnoredErrors: false`, en dan groeit dat ongemerkt — op één project bleken
|
|
512
|
+
554 van de 2116 baseline-regels niets meer te matchen.
|
|
513
|
+
|
|
514
|
+
| Argument | Verplicht | Betekenis |
|
|
515
|
+
| --- | --- | --- |
|
|
516
|
+
| `project` | ja | absoluut pad naar de projectroot |
|
|
517
|
+
| `memoryLimit` | nee | dit is een volledige analyse, dus die kan meer nodig hebben |
|
|
518
|
+
| `timeoutSeconds` | nee | standaard 300 |
|
|
519
|
+
| `offset` / `limit` | nee | welk deel van de regels je terugkrijgt |
|
|
520
|
+
|
|
521
|
+
Dit is een volledige analyse, met een tijdelijke config die die van het project includet en
|
|
522
|
+
de vlag omzet. Die config staat in de tijdelijke map van de server en niet in het project,
|
|
523
|
+
dus er verandert niets aan je repository. PHPStans resultcache blijft bruikbaar: de vlag
|
|
524
|
+
verandert niets aan wat er geanalyseerd wordt, dus de volgende gewone analyse is net zo snel.
|
|
525
|
+
|
|
526
|
+
Per regel staat erbij of hij uit de baseline komt. Patronen zonder pad komen apart; die staan
|
|
527
|
+
in `ignoreErrors` van je config of van een config die een pakket meebrengt, en daar helpt een
|
|
528
|
+
nieuwe baseline niet.
|
|
529
|
+
|
|
530
|
+
Er is bewust geen `level` en geen `paths`: op een ander niveau zijn het andere fouten, en bij
|
|
531
|
+
een deel van het project lijkt alles daarbuiten verouderd.
|
|
532
|
+
|
|
533
|
+
Werkt niet op een project met een eigen uitvoeringsomgeving (`PHPSTAN_MCP_RUNNERS`): de
|
|
534
|
+
tijdelijke config staat op de host en is in een container niet te zien. De tool zegt dat met
|
|
535
|
+
reden `unsupported_with_runner`.
|
|
536
|
+
|
|
459
537
|
### `generate_baseline` (alleen met schrijfrechten)
|
|
460
538
|
|
|
461
539
|
Zet alle huidige fouten in een baseline, zodat een volgende analyse alleen meldt wat er nieuw
|
|
@@ -495,6 +573,21 @@ includes:
|
|
|
495
573
|
- phpstan-baseline.neon
|
|
496
574
|
```
|
|
497
575
|
|
|
576
|
+
## Prompts
|
|
577
|
+
|
|
578
|
+
Twee werkpatronen die alleen bestaande tools combineren. Een prompt en geen tool, omdat een
|
|
579
|
+
tool context kost in elke sessie en een prompt alleen als je hem kiest.
|
|
580
|
+
|
|
581
|
+
- **`phpstan_wijziging_nakijken`** — je eigen wijziging nakijken met `analyse_changed`,
|
|
582
|
+
beginnen bij de bevindingen op gewijzigde regels, en herhalen tot het schoon is (zonder
|
|
583
|
+
`runId`, anders zie je de uitslag van vóór je reparatie).
|
|
584
|
+
- **`phpstan_level_verhogen`** — wat een level hoger kost: twee tellingen met `limit: 1` en
|
|
585
|
+
het verschil per soort. Het level staat vaak in een gedeelde config in `vendor/`, en
|
|
586
|
+
`ignore.*`-bevindingen tellen niet mee: dat zijn inline `@phpstan-ignore`-regels die op een
|
|
587
|
+
ander level niets te negeren hebben.
|
|
588
|
+
|
|
589
|
+
Beide nemen een optioneel `project`; de tweede ook een doel-`level`.
|
|
590
|
+
|
|
498
591
|
## Als een tool mislukt
|
|
499
592
|
|
|
500
593
|
Een mislukte aanroep geeft twee blokken terug: de melding in gewone taal, en een JSON-blok
|
|
@@ -515,8 +608,8 @@ met velden waarop je kunt sturen.
|
|
|
515
608
|
lezen: `no_roots_configured`, `project_outside_roots`, `project_not_found`,
|
|
516
609
|
`path_outside_project`, `path_not_found`, `phpstan_missing`, `config_missing`,
|
|
517
610
|
`bootstrap_failed`, `baseline_unreadable`, `invalid_setting`, `memory_limit`, `timeout`,
|
|
518
|
-
`cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `
|
|
519
|
-
`phpstan_failed`.
|
|
611
|
+
`cancelled`, `git_missing`, `not_a_git_repository`, `unknown_base`, `unsupported_with_runner`,
|
|
612
|
+
`unusable_output` en `phpstan_failed`.
|
|
520
613
|
|
|
521
614
|
De velden staan bewust in `content` en niet in `structuredContent`: dat laatste wordt door
|
|
522
615
|
MCP-clients gevalideerd tegen het schema van het *geslaagde* antwoord.
|
|
@@ -542,7 +635,21 @@ src/Support/Filters/DealFilters.php
|
|
|
542
635
|
42 argument.type Parameter #1 $id expects int, string given.
|
|
543
636
|
```
|
|
544
637
|
|
|
545
|
-
Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep
|
|
638
|
+
Bij meer resultaten eindigt de tekst met de letterlijke vervolgaanroep:
|
|
639
|
+
|
|
640
|
+
```
|
|
641
|
+
Nog 12 bevinding(en). Roep dezelfde tool opnieuw aan met offset=50 en runId="kX3v9aQp"; dan
|
|
642
|
+
komt de rest uit dit resultaat in plaats van uit een nieuwe analyse.
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
Met die `runId` komt de volgende pagina uit hetzelfde resultaat. Zonder zou elke pagina een
|
|
646
|
+
nieuwe analyse zijn, en wie tussendoor een bestand aanpast krijgt dan pagina's met
|
|
647
|
+
verschillende totalen. Alleen `offset`, `limit`, `identifiers` en `onlyChangedLines` mogen
|
|
648
|
+
anders zijn. Hoort de `runId` bij andere argumenten, is hij verlopen (na tien minuten) of
|
|
649
|
+
onbekend, dan volgt een nieuwe analyse met een melding erbij in plaats van een fout.
|
|
650
|
+
|
|
651
|
+
Een pagina uit een eerder resultaat noemt hoe oud dat resultaat is. Analyseer na een
|
|
652
|
+
reparatie dus zónder `runId`: anders zie je de uitslag van vóór de reparatie.
|
|
546
653
|
|
|
547
654
|
### Annuleren
|
|
548
655
|
|
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":"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"}
|
package/dist/changed.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export declare class GitError extends ToolFailure {
|
|
|
7
7
|
}
|
|
8
8
|
/** Waartegen standaard vergeleken wordt: de laatste commit van deze werkboom. */
|
|
9
9
|
export declare const DEFAULT_BASE = "HEAD";
|
|
10
|
+
/** Een reeks regelnummers in de nieuwe versie van een bestand, van en tot en met. */
|
|
11
|
+
export type LineRange = readonly [from: number, to: number];
|
|
12
|
+
/** Welke regels van een bestand gewijzigd zijn; `'all'` voor een bestand dat helemaal nieuw is. */
|
|
13
|
+
export type ChangedLines = 'all' | readonly LineRange[];
|
|
10
14
|
/** De gewijzigde PHP-bestanden van een project, met wat er niet bruikbaar was. */
|
|
11
15
|
export interface ChangedFiles {
|
|
12
16
|
readonly base: string;
|
|
@@ -19,6 +23,8 @@ export interface ChangedFiles {
|
|
|
19
23
|
path: string;
|
|
20
24
|
reason: string;
|
|
21
25
|
}[];
|
|
26
|
+
/** Per bestand uit `files`, onder hetzelfde absolute pad: welke regels erin gewijzigd zijn. */
|
|
27
|
+
readonly lines: ReadonlyMap<string, ChangedLines>;
|
|
22
28
|
}
|
|
23
29
|
/**
|
|
24
30
|
* Zoekt de PHP-bestanden die in dit project gewijzigd zijn ten opzichte van `base`.
|
|
@@ -28,3 +34,19 @@ export interface ChangedFiles {
|
|
|
28
34
|
* Zonder die tweede mist juist het bestand dat net is aangemaakt.
|
|
29
35
|
*/
|
|
30
36
|
export declare function changedPhpFiles(project: ResolvedProject, base?: string, staged?: boolean): Promise<ChangedFiles>;
|
|
37
|
+
/**
|
|
38
|
+
* Of een bevinding op een regel staat die in deze wijziging zit. Een bevinding zonder
|
|
39
|
+
* regelnummer in een inhoudelijk gewijzigd bestand telt mee: uitsluiten kan dan niet,
|
|
40
|
+
* en wie op deze vlag filtert zou hem anders nooit te zien krijgen — weglaten is hier
|
|
41
|
+
* de gevaarlijke kant.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isOnChangedLine(changed: ChangedFiles, file: string, line: number | null): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Leest uit `git diff -U0 --no-prefix` welke regels er per bestand in de nieuwe
|
|
46
|
+
* versie gewijzigd zijn, onder het pad zoals git het noemt.
|
|
47
|
+
*
|
|
48
|
+
* De regels binnen een hunk worden afgeteld en niet op hun voorvoegsel gelezen: een
|
|
49
|
+
* toegevoegde regel die met "++ " begint staat in de diff als "+++ …" en is dan niet
|
|
50
|
+
* van een bestandskop te onderscheiden. Nagemeten, git zet hem er zo neer.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseChangedLines(patch: string): Map<string, LineRange[]>;
|
package/dist/changed.js
CHANGED
|
@@ -31,32 +31,55 @@ export async function changedPhpFiles(project, base = DEFAULT_BASE, staged = fal
|
|
|
31
31
|
// bestand te laten schrijven; nagemeten, git maakt dat bestand daadwerkelijk aan.
|
|
32
32
|
// Dubbel dichtgezet, want de vlag bestaat pas sinds git 2.24: checkBase weigert
|
|
33
33
|
// zo'n waarde ook los van git.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
// --cached vergelijkt de index met `base` in plaats van de werkboom: dat is de
|
|
35
|
+
// vraag "wat sta ik op het punt te committen".
|
|
36
|
+
const range = [
|
|
37
37
|
'--relative',
|
|
38
38
|
'--diff-filter=ACMR',
|
|
39
|
-
// --cached vergelijkt de index met `base` in plaats van de werkboom: dat is de
|
|
40
|
-
// vraag "wat sta ik op het punt te committen".
|
|
41
39
|
...(staged ? ['--cached'] : []),
|
|
42
40
|
'--end-of-options',
|
|
43
41
|
checkBase(base),
|
|
42
|
+
];
|
|
43
|
+
const changed = await git(project.path, ['diff', '--name-only', ...range]);
|
|
44
|
+
// Een aparte uitvraag voor de regels in plaats van de namen hieruit te halen: een
|
|
45
|
+
// bestand waarvan alleen de modus veranderde heeft geen hunks en zou dan uit de
|
|
46
|
+
// lijst vallen, en dat is een ander gedrag dan tot nu toe.
|
|
47
|
+
//
|
|
48
|
+
// De vlaggen zetten vast wat de gebruikersconfig anders zou bepalen: `diff.noprefix`
|
|
49
|
+
// of `diff.mnemonicPrefix` veranderen de kop, `color.diff=always` zet escapecodes
|
|
50
|
+
// tussen de regels, en een externe diff of textconv levert iets heel anders op.
|
|
51
|
+
const patch = await git(project.path, [
|
|
52
|
+
'diff',
|
|
53
|
+
'-U0',
|
|
54
|
+
'--no-prefix',
|
|
55
|
+
'--no-color',
|
|
56
|
+
'--no-ext-diff',
|
|
57
|
+
'--no-textconv',
|
|
58
|
+
...range,
|
|
44
59
|
]);
|
|
60
|
+
const hunks = parseChangedLines(patch);
|
|
45
61
|
// Niet-toegevoegde bestanden horen er alleen bij als je naar de werkboom kijkt.
|
|
46
62
|
// Bij --cached zijn ze per definitie niet gestaged, dus dan blijft die uitvraag weg.
|
|
47
63
|
const untracked = staged
|
|
48
64
|
? ''
|
|
49
65
|
: await git(project.path, ['ls-files', '--others', '--exclude-standard']);
|
|
50
|
-
const
|
|
66
|
+
const fresh = new Set(lines(untracked));
|
|
67
|
+
const candidates = [...new Set([...lines(changed), ...fresh])]
|
|
51
68
|
.filter(isAnalysablePhp)
|
|
52
69
|
.sort();
|
|
53
70
|
const files = [];
|
|
54
71
|
const skipped = [];
|
|
72
|
+
const changedLines = new Map();
|
|
55
73
|
for (const candidate of candidates) {
|
|
56
74
|
try {
|
|
57
75
|
// Via resolveWithin en niet met een eigen join: dan geldt hier dezelfde
|
|
58
76
|
// realpath-en-containment-garantie als voor een pad dat het model zelf geeft.
|
|
59
|
-
|
|
77
|
+
const file = resolveWithin(project, candidate);
|
|
78
|
+
files.push(file);
|
|
79
|
+
// Onder het geresolvede pad, want zo komt het bij PHPStan binnen en zo
|
|
80
|
+
// rapporteert PHPStan het terug. Geen hunks (alleen de modus veranderd, of
|
|
81
|
+
// een pure rename) is een lege lijst: dan is er inhoudelijk niets gewijzigd.
|
|
82
|
+
changedLines.set(file, fresh.has(candidate) ? 'all' : (hunks.get(candidate) ?? []));
|
|
60
83
|
}
|
|
61
84
|
catch (error) {
|
|
62
85
|
// Git kan een bestand noemen dat er inmiddels niet meer is, of dat via een
|
|
@@ -69,7 +92,63 @@ export async function changedPhpFiles(project, base = DEFAULT_BASE, staged = fal
|
|
|
69
92
|
});
|
|
70
93
|
}
|
|
71
94
|
}
|
|
72
|
-
return { base, staged, files, skipped };
|
|
95
|
+
return { base, staged, files, skipped, lines: changedLines };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Of een bevinding op een regel staat die in deze wijziging zit. Een bevinding zonder
|
|
99
|
+
* regelnummer in een inhoudelijk gewijzigd bestand telt mee: uitsluiten kan dan niet,
|
|
100
|
+
* en wie op deze vlag filtert zou hem anders nooit te zien krijgen — weglaten is hier
|
|
101
|
+
* de gevaarlijke kant.
|
|
102
|
+
*/
|
|
103
|
+
export function isOnChangedLine(changed, file, line) {
|
|
104
|
+
const ranges = changed.lines.get(file);
|
|
105
|
+
if (ranges === undefined)
|
|
106
|
+
return false;
|
|
107
|
+
if (ranges === 'all')
|
|
108
|
+
return true;
|
|
109
|
+
if (line === null)
|
|
110
|
+
return ranges.length > 0;
|
|
111
|
+
return ranges.some(([from, to]) => line >= from && line <= to);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Leest uit `git diff -U0 --no-prefix` welke regels er per bestand in de nieuwe
|
|
115
|
+
* versie gewijzigd zijn, onder het pad zoals git het noemt.
|
|
116
|
+
*
|
|
117
|
+
* De regels binnen een hunk worden afgeteld en niet op hun voorvoegsel gelezen: een
|
|
118
|
+
* toegevoegde regel die met "++ " begint staat in de diff als "+++ …" en is dan niet
|
|
119
|
+
* van een bestandskop te onderscheiden. Nagemeten, git zet hem er zo neer.
|
|
120
|
+
*/
|
|
121
|
+
export function parseChangedLines(patch) {
|
|
122
|
+
const result = new Map();
|
|
123
|
+
let current = null;
|
|
124
|
+
let remaining = 0;
|
|
125
|
+
for (const line of patch.split('\n')) {
|
|
126
|
+
if (remaining > 0) {
|
|
127
|
+
// "" hoort bij de regel ervoor en telt niet mee.
|
|
128
|
+
if (!line.startsWith('\\'))
|
|
129
|
+
remaining--;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (line.startsWith('+++ ')) {
|
|
133
|
+
// Een pad met een spatie krijgt van git een tab erachter, voor GNU patch.
|
|
134
|
+
const path = line.slice(4).replace(/\t$/, '');
|
|
135
|
+
current = path === '/dev/null' ? null : [];
|
|
136
|
+
if (current !== null)
|
|
137
|
+
result.set(path, current);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const hunk = /^@@ -\d+(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(line);
|
|
141
|
+
if (hunk === null)
|
|
142
|
+
continue;
|
|
143
|
+
const removed = hunk[1] === undefined ? 1 : Number(hunk[1]);
|
|
144
|
+
const start = Number(hunk[2]);
|
|
145
|
+
const added = hunk[3] === undefined ? 1 : Number(hunk[3]);
|
|
146
|
+
remaining = removed + added;
|
|
147
|
+
// Alleen weggehaald ("+5,0") laat in de nieuwe versie geen regel achter.
|
|
148
|
+
if (current !== null && added > 0)
|
|
149
|
+
current.push([start, start + added - 1]);
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
73
152
|
}
|
|
74
153
|
/**
|
|
75
154
|
* Blade-templates eindigen óók op `.php`, en juist die moeten er niet in: een
|
|
@@ -138,7 +217,12 @@ function execute(cwd, args) {
|
|
|
138
217
|
return new Promise((resolve) => {
|
|
139
218
|
// Zonder shell, net als bij PHPStan. Geen detached procesgroep: git start geen
|
|
140
219
|
// workers die de pipes openhouden, dus 'close' volgt hier gewoon op de timeout.
|
|
141
|
-
|
|
220
|
+
//
|
|
221
|
+
// core.quotePath=false: anders komt "Één.php" terug als "\303\211\303\251n.php",
|
|
222
|
+
// tussen aanhalingstekens, en valt dat bestand in resolveWithin af als "bestaat
|
|
223
|
+
// niet". Paden met een aanhalingsteken of backslash blijven gequote; die worden
|
|
224
|
+
// overgeslagen en benoemd, net als elk ander pad dat niet te openen is.
|
|
225
|
+
const child = spawn('git', ['-c', 'core.quotePath=false', ...args], { cwd, timeout: GIT_TIMEOUT_MS });
|
|
142
226
|
let stdout = '';
|
|
143
227
|
let stderr = '';
|
|
144
228
|
let spawnError = null;
|
package/dist/changed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,+EAA+E;AAC/E,MAAM,OAAO,QAAS,SAAQ,WAAW;IACvC,YAAY,OAAe,EAAE,SAAwB,aAAa,EAAE,UAA0B,EAAE;QAC9F,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC;;;GAGG;AACH,MAAM,cAAc,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"changed.js","sourceRoot":"","sources":["../src/changed.ts"],"names":[],"mappings":"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"}
|
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
|
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;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;QAClG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;QAClG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAgBnD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAElE,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACtH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,2BAA2B,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,WAAW,CAAC,GAAG,GAAG,sDAAsD,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAyB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -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;
|