phpstan-mcp-mx 0.19.0 → 0.21.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.
@@ -0,0 +1,102 @@
1
+ import { contains } from './project.js';
2
+ import { displayPath } from './report.js';
3
+ /** Hoeveel groepen een lijst (opgelost of nieuw) hoogstens noemt; de rest als aantal. */
4
+ export const MAX_COMPARED_ENTRIES = 20;
5
+ /** Hoeveel bestanden de melding over niet-vergeleken bevindingen hoogstens noemt. */
6
+ const MAX_NOT_COMPARED_FILES = 10;
7
+ /**
8
+ * Legt een analyse naast een eerdere en telt wat er opgelost, nieuw en nog open is.
9
+ *
10
+ * Gekoppeld op bestand, identifier en melding — niet op het regelnummer: een reparatie
11
+ * verschuift regels, en dan zou elke bevinding eronder als opgelost én nieuw tellen.
12
+ * Om die reden negeert PHPStans eigen baseline de regel ook. Nagemeten: drie lege regels
13
+ * bovenin het drukste bestand van `lasouris-lease-shared` verschoven alle elf bevindingen
14
+ * en veranderden geen enkele melding.
15
+ *
16
+ * Een melding die zelf een regelnummer bevat (een anonieme klasse heet
17
+ * `class@anonymous/pad.php:12`) telt na zo'n verschuiving wel als opgelost én nieuw. Geen
18
+ * eigen normalisering daarvoor: die zou bij elke PHPStan-release verder afdrijven.
19
+ *
20
+ * Alleen bestanden die beide analyses dekten doen mee. Bij `analyse_changed` volgt de
21
+ * lijst uit git: wie tijdens een reparatie een tweede bestand aanraakt, krijgt dat bestand
22
+ * erbij, en diens bestaande fouten zouden anders als nieuw tellen — een antwoord dat klopt
23
+ * maar misleidt.
24
+ */
25
+ export function compareRuns(project, before, after, meta) {
26
+ const sameScope = equalScopes(before.scope, after.scope);
27
+ const inBoth = (file) => sameScope || (inScope(file, before.scope) && inScope(file, after.scope));
28
+ const groups = new Map();
29
+ const notComparedFiles = new Set();
30
+ let notCompared = 0;
31
+ const add = (finding, side) => {
32
+ if (!inBoth(finding.file)) {
33
+ notCompared++;
34
+ notComparedFiles.add(displayPath(project, finding.file));
35
+ return;
36
+ }
37
+ const key = JSON.stringify([finding.file, finding.identifier, finding.message]);
38
+ const group = groups.get(key) ?? { finding, before: [], after: [] };
39
+ group[side].push(finding.line);
40
+ groups.set(key, group);
41
+ };
42
+ for (const finding of before.result.findings)
43
+ add(finding, 'before');
44
+ for (const finding of after.result.findings)
45
+ add(finding, 'after');
46
+ const fixed = [];
47
+ const added = [];
48
+ let remaining = 0;
49
+ for (const group of groups.values()) {
50
+ remaining += Math.min(group.before.length, group.after.length);
51
+ const entry = (count, lines) => ({
52
+ file: displayPath(project, group.finding.file),
53
+ identifier: group.finding.identifier,
54
+ message: group.finding.message,
55
+ count,
56
+ lines: [...lines].sort(byLine),
57
+ });
58
+ if (group.before.length > group.after.length)
59
+ fixed.push(entry(group.before.length - group.after.length, group.before));
60
+ if (group.after.length > group.before.length)
61
+ added.push(entry(group.after.length - group.before.length, group.after));
62
+ }
63
+ fixed.sort(byPlace);
64
+ added.sort(byPlace);
65
+ return {
66
+ basis: meta.basis ?? 'run',
67
+ comparedTo: meta.comparedTo,
68
+ ageSeconds: meta.ageSeconds,
69
+ fixed: sum(fixed),
70
+ new: sum(added),
71
+ remaining,
72
+ fixedFindings: fixed.slice(0, MAX_COMPARED_ENTRIES),
73
+ newFindings: added.slice(0, MAX_COMPARED_ENTRIES),
74
+ omitted: {
75
+ fixed: Math.max(fixed.length - MAX_COMPARED_ENTRIES, 0),
76
+ new: Math.max(added.length - MAX_COMPARED_ENTRIES, 0),
77
+ },
78
+ notCompared: { findings: notCompared, files: [...notComparedFiles].sort().slice(0, MAX_NOT_COMPARED_FILES) },
79
+ };
80
+ }
81
+ function equalScopes(a, b) {
82
+ if (a === null || b === null)
83
+ return a === b;
84
+ if (a.length !== b.length)
85
+ return false;
86
+ const set = new Set(a);
87
+ return b.every((path) => set.has(path));
88
+ }
89
+ function inScope(file, scope) {
90
+ return scope === null || scope.some((path) => contains(path, file));
91
+ }
92
+ function sum(entries) {
93
+ return entries.reduce((total, entry) => total + entry.count, 0);
94
+ }
95
+ /** Een bevinding zonder regel achteraan: die hoort bij het bestand, niet bij een plek. */
96
+ function byLine(a, b) {
97
+ return (a ?? Number.MAX_SAFE_INTEGER) - (b ?? Number.MAX_SAFE_INTEGER);
98
+ }
99
+ function byPlace(a, b) {
100
+ return a.file.localeCompare(b.file) || byLine(a.lines[0] ?? null, b.lines[0] ?? null) || a.message.localeCompare(b.message);
101
+ }
102
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../src/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /** Een Composer-script dat PHPStan start, met waarin het afwijkt van deze server. */
2
+ export interface ComposerScript {
3
+ readonly name: string;
4
+ /** De aanroep zelf, vanaf de PHPStan-binary. */
5
+ readonly command: string;
6
+ /** Per verschil één zin, met wat je meegeeft om hetzelfde te analyseren. Leeg: geen verschil. */
7
+ readonly differences: readonly string[];
8
+ }
9
+ /** Hoe deze server PHPStan aanroept; zie `serverInvocation` in phpstan.ts. */
10
+ export interface ServerInvocation {
11
+ /** Relatief aan de projectroot of absoluut; null als PHPStan hem zelf zoekt en er geen is. */
12
+ readonly config: string | null;
13
+ readonly memoryLimit: string | null;
14
+ }
15
+ /** Wat een aanroep van `phpstan analyse` meegeeft, voor zover het de uitslag verandert. */
16
+ export interface Invocation {
17
+ readonly configuration: string | null;
18
+ readonly level: string | null;
19
+ readonly memoryLimit: string | null;
20
+ readonly autoloadFile: string | null;
21
+ readonly paths: readonly string[];
22
+ /** `--generate-baseline` of `--fix`: dan is het geen analyse om mee te vergelijken. */
23
+ readonly writes: boolean;
24
+ }
25
+ /**
26
+ * Leest de Composer-scripts van een project en geeft die die PHPStan analyseren, met hoe ze
27
+ * afwijken van deze server.
28
+ *
29
+ * Nagemeten op de echte projecten: het script heet nergens `phpstan` maar `code:analyze`
30
+ * en `code:analyze:strict`, is een lijst met `Composer\Config::disableProcessTimeout`
31
+ * ervoor, en schrijft `--memory-limit 1G` met een spatie. Herkennen gaat dus op het
32
+ * commando, niet op de naam. Een script via `make` of via een ander script (`@naam`) is
33
+ * niet te lezen zonder het uit te voeren, en dat gebeurt hier nooit — die vallen weg.
34
+ */
35
+ export declare function readComposerScripts(project: string, server: ServerInvocation): {
36
+ composerScripts: ComposerScript[] | null;
37
+ composerScriptsProblem: string | null;
38
+ };
39
+ /** Knipt een commando op `&&`, `||`, `;` en `|` buiten quotes: elk deel is een eigen aanroep. */
40
+ export declare function splitCommands(command: string): string[];
41
+ /** Splitst één aanroep in woorden, met quotes zoals een shell ze leest (zonder expansie). */
42
+ export declare function tokenize(segment: string): string[];
43
+ /** Leest de argumenten van `phpstan analyse`, voor zover ze de uitslag veranderen. */
44
+ export declare function parseInvocation(args: readonly string[]): Invocation;
45
+ /**
46
+ * Waarin een aanroep afwijkt van deze server, als zinnen met de uitweg erbij. Alleen wat de
47
+ * uitslag verandert; `--no-progress` of `--error-format` zegt niets over wat er gevonden wordt.
48
+ */
49
+ export declare function compareWithServer(project: string, invocation: Invocation, server: ServerInvocation): string[];
50
+ /** De scripts als tekst, onder de rest van de diagnose. Leeg als er geen enkel is. */
51
+ export declare function renderComposerScripts(scripts: readonly ComposerScript[] | null, problem: string | null): string;
52
+ /** Een framework in het project waarvan de PHPStan-extensie niet geladen is. */
53
+ export interface MissingExtension {
54
+ readonly framework: string;
55
+ readonly extension: string;
56
+ /** Of de extensie wél in composer.lock staat: dan is ze geïnstalleerd maar niet ingesloten. */
57
+ readonly installed: boolean;
58
+ readonly sees: string;
59
+ }
60
+ /**
61
+ * Welke frameworks uit `composer.lock` hun extensie missen. Wat geladen is, komt uit PHPStans
62
+ * eigen diagnose ("Included configs from Composer packages"): die noemt ook een extensie die
63
+ * zonder extension-installer met de hand in de config staat. Is de uitvoer niet te lezen —
64
+ * een andere PHPStan-versie — dan null: niet te zeggen, en een vals alarm is erger dan stilte.
65
+ */
66
+ export declare function findMissingExtensions(project: string, diagnoseOutput: string): MissingExtension[] | null;
67
+ /** De ontbrekende extensies als tekst; leeg als er niets ontbreekt of het niet te zeggen is. */
68
+ export declare function renderMissingExtensions(missing: readonly MissingExtension[] | null): string;
@@ -0,0 +1,313 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { isAbsolute, join, normalize } from 'node:path';
3
+ /** Opties die een waarde nemen, met de naam waaronder die telt. */
4
+ const VALUE_OPTIONS = {
5
+ '-c': 'configuration',
6
+ '--configuration': 'configuration',
7
+ '-l': 'level',
8
+ '--level': 'level',
9
+ '--memory-limit': 'memoryLimit',
10
+ '-a': 'autoloadFile',
11
+ '--autoload-file': 'autoloadFile',
12
+ '--error-format': null,
13
+ '--tmp-file': null,
14
+ '--instead-of': null,
15
+ };
16
+ /** De configs die PHPStan zelf zoekt als er geen `--configuration` is, in zijn volgorde. */
17
+ const DISCOVERED = ['phpstan.neon', 'phpstan.neon.dist', 'phpstan.dist.neon'];
18
+ /**
19
+ * Leest de Composer-scripts van een project en geeft die die PHPStan analyseren, met hoe ze
20
+ * afwijken van deze server.
21
+ *
22
+ * Nagemeten op de echte projecten: het script heet nergens `phpstan` maar `code:analyze`
23
+ * en `code:analyze:strict`, is een lijst met `Composer\Config::disableProcessTimeout`
24
+ * ervoor, en schrijft `--memory-limit 1G` met een spatie. Herkennen gaat dus op het
25
+ * commando, niet op de naam. Een script via `make` of via een ander script (`@naam`) is
26
+ * niet te lezen zonder het uit te voeren, en dat gebeurt hier nooit — die vallen weg.
27
+ */
28
+ export function readComposerScripts(project, server) {
29
+ let scripts;
30
+ try {
31
+ scripts = JSON.parse(readFileSync(join(project, 'composer.json'), 'utf8')).scripts;
32
+ }
33
+ catch (error) {
34
+ return {
35
+ composerScripts: null,
36
+ composerScriptsProblem: `composer.json could not be read: ${error instanceof Error ? error.message : String(error)}`,
37
+ };
38
+ }
39
+ if (typeof scripts !== 'object' || scripts === null)
40
+ return { composerScripts: [], composerScriptsProblem: null };
41
+ const found = [];
42
+ for (const [name, value] of Object.entries(scripts)) {
43
+ const commands = typeof value === 'string' ? [value] : Array.isArray(value) ? value.filter((v) => typeof v === 'string') : [];
44
+ for (const command of commands) {
45
+ for (const segment of splitCommands(command)) {
46
+ const tokens = tokenize(segment);
47
+ const start = analyseStart(tokens);
48
+ if (start === null)
49
+ continue;
50
+ const invocation = parseInvocation(tokens.slice(start.args));
51
+ found.push({
52
+ name,
53
+ command: tokens.slice(start.binary).join(' '),
54
+ differences: compareWithServer(project, invocation, server),
55
+ });
56
+ }
57
+ }
58
+ }
59
+ return { composerScripts: found, composerScriptsProblem: null };
60
+ }
61
+ /** Knipt een commando op `&&`, `||`, `;` en `|` buiten quotes: elk deel is een eigen aanroep. */
62
+ export function splitCommands(command) {
63
+ const parts = [];
64
+ let current = '';
65
+ let quote = null;
66
+ for (let i = 0; i < command.length; i++) {
67
+ const char = command[i] ?? '';
68
+ if (quote !== null) {
69
+ if (char === quote)
70
+ quote = null;
71
+ current += char;
72
+ continue;
73
+ }
74
+ if (char === '"' || char === "'") {
75
+ quote = char;
76
+ current += char;
77
+ continue;
78
+ }
79
+ if (char === ';' || char === '|' || (char === '&' && command[i + 1] === '&')) {
80
+ parts.push(current);
81
+ current = '';
82
+ if (command[i + 1] === char)
83
+ i++;
84
+ continue;
85
+ }
86
+ current += char;
87
+ }
88
+ parts.push(current);
89
+ return parts.map((part) => part.trim()).filter((part) => part !== '');
90
+ }
91
+ /** Splitst één aanroep in woorden, met quotes zoals een shell ze leest (zonder expansie). */
92
+ export function tokenize(segment) {
93
+ const tokens = [];
94
+ let current = '';
95
+ let started = false;
96
+ let quote = null;
97
+ for (const char of segment) {
98
+ if (quote !== null) {
99
+ if (char === quote)
100
+ quote = null;
101
+ else
102
+ current += char;
103
+ continue;
104
+ }
105
+ if (char === '"' || char === "'") {
106
+ quote = char;
107
+ started = true;
108
+ }
109
+ else if (/\s/.test(char)) {
110
+ if (started)
111
+ tokens.push(current);
112
+ current = '';
113
+ started = false;
114
+ }
115
+ else {
116
+ current += char;
117
+ started = true;
118
+ }
119
+ }
120
+ if (started)
121
+ tokens.push(current);
122
+ return tokens;
123
+ }
124
+ /**
125
+ * Waar in de woorden de PHPStan-binary staat en waar de argumenten van `analyse` beginnen,
126
+ * of null als dit geen analyse is. `@php vendor/bin/phpstan`, `php phpstan.phar` en een
127
+ * variabele ervoor (`XDEBUG_MODE=off vendor/bin/phpstan`) tellen allemaal.
128
+ */
129
+ function analyseStart(tokens) {
130
+ const binary = tokens.findIndex((token) => /(^|[/\\])phpstan(\.phar)?$/.test(token));
131
+ if (binary === -1)
132
+ return null;
133
+ const sub = tokens[binary + 1];
134
+ return sub === 'analyse' || sub === 'analyze' ? { binary, args: binary + 2 } : null;
135
+ }
136
+ /** Leest de argumenten van `phpstan analyse`, voor zover ze de uitslag veranderen. */
137
+ export function parseInvocation(args) {
138
+ const found = {
139
+ configuration: null,
140
+ level: null,
141
+ memoryLimit: null,
142
+ autoloadFile: null,
143
+ paths: [],
144
+ writes: false,
145
+ };
146
+ const paths = [];
147
+ for (let i = 0; i < args.length; i++) {
148
+ const arg = args[i] ?? '';
149
+ if (arg === '--') {
150
+ paths.push(...args.slice(i + 1));
151
+ break;
152
+ }
153
+ if (arg.startsWith('--generate-baseline') || arg === '--fix') {
154
+ found.writes = true;
155
+ continue;
156
+ }
157
+ if (!arg.startsWith('-')) {
158
+ paths.push(arg);
159
+ continue;
160
+ }
161
+ // `--optie=waarde`, `--optie waarde`, `-c waarde` en `-cwaarde`.
162
+ const eq = arg.indexOf('=');
163
+ const name = arg.startsWith('--') ? (eq === -1 ? arg : arg.slice(0, eq)) : arg.slice(0, 2);
164
+ if (!(name in VALUE_OPTIONS))
165
+ continue;
166
+ const field = VALUE_OPTIONS[name] ?? null;
167
+ let value;
168
+ if (arg.startsWith('--') && eq !== -1)
169
+ value = arg.slice(eq + 1);
170
+ else if (!arg.startsWith('--') && arg.length > 2)
171
+ value = arg.slice(2);
172
+ else
173
+ value = args[++i];
174
+ if (field !== null && field !== 'paths' && field !== 'writes' && value !== undefined)
175
+ found[field] = value;
176
+ }
177
+ found.paths = paths;
178
+ return found;
179
+ }
180
+ /**
181
+ * Waarin een aanroep afwijkt van deze server, als zinnen met de uitweg erbij. Alleen wat de
182
+ * uitslag verandert; `--no-progress` of `--error-format` zegt niets over wat er gevonden wordt.
183
+ */
184
+ export function compareWithServer(project, invocation, server) {
185
+ if (invocation.writes) {
186
+ return ['writes a baseline or fixes code, so it is not an analysis to compare with'];
187
+ }
188
+ const differences = [];
189
+ const hier = (path) => normalize(isAbsolute(path) ? path : join(project, path));
190
+ // Wat er aan beide kanten echt gebruikt wordt: zonder --configuration zoekt PHPStan zelf, en
191
+ // zonder --memory-limit geldt die van PHP. Alleen de expliciete waarden vergelijken miste het
192
+ // geval dat de server een standaard zet (PHPSTAN_MCP_PROJECTS) en het script niet.
193
+ const discovered = DISCOVERED.find((name) => existsSync(join(project, name))) ?? null;
194
+ const scriptConfig = invocation.configuration ?? discovered;
195
+ const serverConfig = server.config ?? discovered;
196
+ const configNaam = (config, eigen) => config === null ? 'none' : eigen ? config : `${config} (found by PHPStan itself)`;
197
+ if ((scriptConfig === null) !== (serverConfig === null) || (scriptConfig !== null && serverConfig !== null && hier(scriptConfig) !== hier(serverConfig))) {
198
+ differences.push(`uses the config ${configNaam(scriptConfig, invocation.configuration !== null)}, the server ` +
199
+ `${configNaam(serverConfig, server.config !== null)}` +
200
+ (scriptConfig === null ? '' : `; pass config: "${scriptConfig}" to analyse the same way`));
201
+ }
202
+ const scriptMemory = invocation.memoryLimit?.toLowerCase() ?? null;
203
+ if (scriptMemory !== (server.memoryLimit?.toLowerCase() ?? null)) {
204
+ differences.push(`sets ${invocation.memoryLimit === null ? "no --memory-limit (PHP's own limit)" : `--memory-limit ${invocation.memoryLimit}`}, ` +
205
+ `the server ${server.memoryLimit ?? "none (PHP's own limit)"}` +
206
+ (invocation.memoryLimit === null
207
+ ? ''
208
+ : `; pass memoryLimit: "${invocation.memoryLimit}", or set it for this project in PHPSTAN_MCP_PROJECTS`));
209
+ }
210
+ if (invocation.level !== null) {
211
+ differences.push(`sets level ${invocation.level}, the server uses the level from the config; pass level: "${invocation.level}" to match`);
212
+ }
213
+ if (invocation.paths.length > 0) {
214
+ differences.push(`analyses ${invocation.paths.join(', ')}, the server the paths from the config; pass paths to analyse_project to match`);
215
+ }
216
+ if (invocation.autoloadFile !== null) {
217
+ differences.push(`loads ${invocation.autoloadFile} with --autoload-file; the server cannot pass that, so its analysis can differ`);
218
+ }
219
+ return differences;
220
+ }
221
+ /** De scripts als tekst, onder de rest van de diagnose. Leeg als er geen enkel is. */
222
+ export function renderComposerScripts(scripts, problem) {
223
+ if (scripts === null)
224
+ return `Composer scripts: not available. ${problem ?? ''}`.trim();
225
+ if (scripts.length === 0)
226
+ return '';
227
+ const lines = ['Composer scripts that run PHPStan:'];
228
+ for (const script of scripts) {
229
+ lines.push(`- ${script.name}: ${script.command}`);
230
+ if (script.differences.length === 0)
231
+ lines.push(' runs PHPStan the same way as this server');
232
+ for (const difference of script.differences)
233
+ lines.push(` ${difference}`);
234
+ }
235
+ return lines.join('\n');
236
+ }
237
+ /**
238
+ * Frameworks waarvan PHPStan de magie niet ziet zonder extensie — en die dan vals-positieven
239
+ * geven (`Access to an undefined property App\Models\User::$name`) — met de extensie die
240
+ * daarvoor bestaat. Nagemeten op `cms/app`, level 5: zonder Larastan 187 bevindingen tegen 147
241
+ * met, vooral `property.notFound` (+16) en `method.notFound` (+18). Een eigen lijst, maar een kleine en stabiele: pakketnamen,
242
+ * geen uitleg die bij een release afdrijft.
243
+ *
244
+ * Bewust zonder testtools (`phpunit`, `mockery`, `webmozart/assert`). Nagemeten op vijf echte
245
+ * projecten: die staan in elk Laravel-project, vaak als afhankelijkheid van een
246
+ * afhankelijkheid, en hun extensie ontbrak overal — een melding bij elk project is ruis, en
247
+ * geen van de bevindingen daar had er iets mee te maken.
248
+ */
249
+ const FRAMEWORK_EXTENSIONS = [
250
+ {
251
+ framework: 'laravel/framework',
252
+ extensions: ['larastan/larastan', 'nunomaduro/larastan'],
253
+ sees: "Laravel's magic (Eloquent properties and relations, facades, the container)",
254
+ },
255
+ { framework: 'doctrine/orm', extensions: ['phpstan/phpstan-doctrine'], sees: 'Doctrine repositories, entities and DQL' },
256
+ {
257
+ framework: 'symfony/framework-bundle',
258
+ extensions: ['phpstan/phpstan-symfony'],
259
+ sees: 'the Symfony container, services and request attributes',
260
+ },
261
+ ];
262
+ /**
263
+ * Welke frameworks uit `composer.lock` hun extensie missen. Wat geladen is, komt uit PHPStans
264
+ * eigen diagnose ("Included configs from Composer packages"): die noemt ook een extensie die
265
+ * zonder extension-installer met de hand in de config staat. Is de uitvoer niet te lezen —
266
+ * een andere PHPStan-versie — dan null: niet te zeggen, en een vals alarm is erger dan stilte.
267
+ */
268
+ export function findMissingExtensions(project, diagnoseOutput) {
269
+ // Nagemeten: zonder één enkele config uit een pakket laat PHPStan de hele sectie weg — juist
270
+ // het geval waar het om gaat. De regel "Extension installer:" komt uit hetzelfde deel van de
271
+ // diagnose en staat er dan wél; alleen als ook die ontbreekt, is het een andere uitvoer.
272
+ const section = /Included configs from Composer packages:\n([\s\S]*?)(?:\n\s*\n|$)/.exec(diagnoseOutput);
273
+ if (section === null && !/^Extension installer:/m.test(diagnoseOutput))
274
+ return null;
275
+ const loaded = new Set((section?.[1] ?? '')
276
+ .split('\n')
277
+ .map((line) => line.trim().split(/\s+/)[0] ?? '')
278
+ .filter((name) => name.includes('/')));
279
+ let installed;
280
+ try {
281
+ const lock = JSON.parse(readFileSync(join(project, 'composer.lock'), 'utf8'));
282
+ installed = new Set([...(lock.packages ?? []), ...(lock['packages-dev'] ?? [])]
283
+ .map((pkg) => pkg.name)
284
+ .filter((name) => typeof name === 'string'));
285
+ }
286
+ catch {
287
+ // Zonder lock valt niet te zeggen wat er geïnstalleerd is; geen melding.
288
+ return null;
289
+ }
290
+ return FRAMEWORK_EXTENSIONS.filter((entry) => installed.has(entry.framework) && !entry.extensions.some((extension) => loaded.has(extension))).map((entry) => {
291
+ const present = entry.extensions.find((extension) => installed.has(extension));
292
+ return {
293
+ framework: entry.framework,
294
+ extension: present ?? entry.extensions[0] ?? '',
295
+ installed: present !== undefined,
296
+ sees: entry.sees,
297
+ };
298
+ });
299
+ }
300
+ /** De ontbrekende extensies als tekst; leeg als er niets ontbreekt of het niet te zeggen is. */
301
+ export function renderMissingExtensions(missing) {
302
+ if (missing === null || missing.length === 0)
303
+ return '';
304
+ return [
305
+ 'Missing PHPStan extensions:',
306
+ ...missing.map((entry) => `- ${entry.framework} is installed, but ${entry.extension} is not loaded, so PHPStan does not see ` +
307
+ `${entry.sees}. That shows up as false positives, such as undefined properties and methods. ` +
308
+ (entry.installed
309
+ ? `${entry.extension} is installed but not included: add its neon to the config's includes, or install phpstan/extension-installer.`
310
+ : `Install ${entry.extension} as a dev dependency.`)),
311
+ ].join('\n');
312
+ }
313
+ //# sourceMappingURL=composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.js","sourceRoot":"","sources":["../src/composer.ts"],"names":[],"mappings":"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"}
package/dist/dumptype.js CHANGED
@@ -1,6 +1,5 @@
1
- import { createHash } from 'node:crypto';
2
1
  import { readFileSync, statSync } from 'node:fs';
3
- import { PhpstanError, analyseEdited } from './phpstan.js';
2
+ import { PhpstanError, analyseEdited, tmpCopyName } from './phpstan.js';
4
3
  import { resolveWithin } from './project.js';
5
4
  import { MAX_MESSAGES, displayPath, limitMessages } from './report.js';
6
5
  /** Hoeveel expressies één aanroep hoogstens meeneemt. */
@@ -25,19 +24,9 @@ export async function inspectType(project, request, options = {}) {
25
24
  });
26
25
  }
27
26
  const probe = insertProbes(readFileSync(file, 'utf8'), request.line, request.expressions);
28
- const result = await analyseEdited(project, { insteadOf: file, content: probe.content, name: copyName(project.path) }, options);
27
+ const result = await analyseEdited(project, { insteadOf: file, content: probe.content, name: tmpCopyName(project.path, 'type') }, options);
29
28
  return readProbes(project.path, file, probe, result);
30
29
  }
31
- /**
32
- * De naam van de kopie. Met een hash van het project, want in de tijdelijke map van een
33
- * runner staan alle projecten van die omgeving naast elkaar. En met het proces-id: binnen
34
- * één server houdt de queue per project twee aanroepen uit elkaar, maar twee servers op
35
- * hetzelfde project (twee sessies) hebben elk hun eigen queue.
36
- */
37
- function copyName(project) {
38
- const hash = createHash('sha256').update(project).digest('hex').slice(0, 12);
39
- return `phpstan-mcp-type-${hash}-${String(process.pid)}.php`;
40
- }
41
30
  /**
42
31
  * Voegt vóór `line` één regel `\PHPStan\dumpType(<expressie>);` per expressie in.
43
32
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"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"}
package/dist/phpstan.d.ts CHANGED
@@ -113,7 +113,20 @@ export interface EditedFile {
113
113
  readonly content: string;
114
114
  /** Bestandsnaam van de kopie in de tijdelijke map; hoort uniek te zijn per project en proces. */
115
115
  readonly name: string;
116
+ /**
117
+ * Het hele project analyseren (de `paths` uit de config) in plaats van alleen dit bestand.
118
+ * Voor het "vóór" van `analyse_changed`: de aanroepers staan in andere bestanden. Dan moet
119
+ * het bestand wel binnen die `paths` vallen — anders weigert PHPStan het (nagemeten).
120
+ */
121
+ readonly wholeProject?: boolean;
116
122
  }
123
+ /**
124
+ * De naam van een tijdelijke kopie. Met een hash van het project, want in de tijdelijke map
125
+ * van een runner staan alle projecten van die omgeving naast elkaar. En met het proces-id:
126
+ * binnen één server houdt de queue per project twee aanroepen uit elkaar, maar twee servers
127
+ * op hetzelfde project (twee sessies) hebben elk hun eigen queue.
128
+ */
129
+ export declare function tmpCopyName(project: string, kind: string): string;
117
130
  /**
118
131
  * Analyseert één bestand alsof het `edited.content` bevat, zonder het project aan te
119
132
  * raken: PHPStans editor mode (`--tmp-file` en `--instead-of`) leest de kopie op de plek
@@ -139,3 +152,14 @@ export declare function analyseEdited(project: ResolvedProject, edited: EditedFi
139
152
  * fout zit in de serverconfiguratie en niet in de aanroep.
140
153
  */
141
154
  export declare function loadDefaultMemoryLimit(env?: NodeJS.ProcessEnv): string | undefined;
155
+ /**
156
+ * Hoe deze server PHPStan in dit project aanroept als een aanroep zelf niets meegeeft:
157
+ * de config (null: PHPStan zoekt hem zelf) en de geheugenlimiet (null: die van PHP).
158
+ * Dezelfde voorrang als in `flags()`, zodat een vergelijking met een Composer-script niet
159
+ * een eigen versie van die regels bijhoudt. Een kapotte standaard geeft hier null in plaats
160
+ * van een exception: dit is een beschrijving, en de analyse weigert zo'n standaard zelf al.
161
+ */
162
+ export declare function serverInvocation(project: ResolvedProject): {
163
+ config: string | null;
164
+ memoryLimit: string | null;
165
+ };