phpstan-mcp-mx 0.18.0 → 0.20.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,190 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync, statSync } from 'node:fs';
3
+ import { PhpstanError, analyseEdited } from './phpstan.js';
4
+ import { resolveWithin } from './project.js';
5
+ import { MAX_MESSAGES, displayPath, limitMessages } from './report.js';
6
+ /** Hoeveel expressies één aanroep hoogstens meeneemt. */
7
+ export const MAX_EXPRESSIONS = 10;
8
+ /** Hoe lang één expressie mag zijn; een dump is voor een waarde, niet voor een blok code. */
9
+ export const MAX_EXPRESSION_CHARS = 500;
10
+ /** Waar PHPStan het type van een `dumpType` mee inleidt. */
11
+ const DUMPED = 'Dumped type: ';
12
+ /**
13
+ * Laat zien welk type PHPStan afleidt voor een of meer expressies, vlak vóór `line`.
14
+ *
15
+ * PHPStans eigen begeleiding zegt: overschrijf het afgeleide type niet met `assert()` of
16
+ * een inline `@var`. Dan moet het model dat type wel kunnen zien, en tot nu toe kon dat
17
+ * alleen door het bestand te bewerken, te analyseren en weer terug te draaien. Hier gaat
18
+ * dat via een kopie buiten het project (`analyseEdited`), dus dit blijft read-only.
19
+ */
20
+ export async function inspectType(project, request, options = {}) {
21
+ const file = resolveWithin(project, request.path);
22
+ if (!statSync(file).isFile()) {
23
+ throw new PhpstanError(`"${request.path}" is a directory; inspect_type needs one PHP file.`, 'invalid_argument', {
24
+ hint: 'Pass the path of a single PHP file.',
25
+ });
26
+ }
27
+ 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);
29
+ return readProbes(project.path, file, probe, result);
30
+ }
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
+ /**
42
+ * Voegt vóór `line` één regel `\PHPStan\dumpType(<expressie>);` per expressie in.
43
+ *
44
+ * Elke expressie op een eigen regel, want PHPStan rapporteert twee dumps op één regel
45
+ * niet in een vaste volgorde (nagemeten) — het regelnummer is dan het enige dat een type
46
+ * aan zijn expressie koppelt. Een regeleinde in een expressie zou die telling verschuiven,
47
+ * en wordt daarom geweigerd.
48
+ */
49
+ export function insertProbes(source, line, expressions) {
50
+ const cleaned = expressions.map(cleanExpression);
51
+ if (cleaned.length === 0 || cleaned.length > MAX_EXPRESSIONS) {
52
+ throw new PhpstanError(`Pass between 1 and ${String(MAX_EXPRESSIONS)} expressions; got ${String(cleaned.length)}.`, 'invalid_argument');
53
+ }
54
+ const lines = source.split('\n');
55
+ // Een afsluitend regeleinde levert een lege laatste "regel" op die in geen editor bestaat.
56
+ const count = source.endsWith('\n') ? lines.length - 1 : lines.length;
57
+ if (!Number.isInteger(line) || line < 1 || line > count) {
58
+ throw new PhpstanError(`Line ${String(line)} is outside the file, which has ${String(count)} line(s).`, 'invalid_argument', { hint: 'Pass the first line of a statement inside a function or method.' });
59
+ }
60
+ lines.splice(line - 1, 0, ...cleaned.map((expression) => `\\PHPStan\\dumpType(${expression});`));
61
+ return { content: lines.join('\n'), line, expressions: cleaned };
62
+ }
63
+ /**
64
+ * Een expressie zoals hij tussen de haakjes past. Een afsluitende `;` is vergeeflijk — wie
65
+ * `$rows;` meegeeft bedoelt `$rows` — maar een lege of meerregelige expressie niet.
66
+ */
67
+ function cleanExpression(expression) {
68
+ const cleaned = expression.trim().replace(/[\s;]+$/, '');
69
+ if (cleaned === '') {
70
+ throw new PhpstanError('An expression is empty; pass the PHP expression whose type you want, e.g. "$user".', 'invalid_argument');
71
+ }
72
+ if (/[\r\n]/.test(cleaned)) {
73
+ throw new PhpstanError(`The expression ${JSON.stringify(cleaned.slice(0, 80))} spans several lines; pass each expression on one line.`, 'invalid_argument');
74
+ }
75
+ if (cleaned.length > MAX_EXPRESSION_CHARS) {
76
+ throw new PhpstanError(`An expression is longer than ${String(MAX_EXPRESSION_CHARS)} characters; pass the value whose type you want, not a block of code.`, 'invalid_argument');
77
+ }
78
+ return cleaned;
79
+ }
80
+ /**
81
+ * Leest de uitslag van een analyse met ingevoegde dumps terug.
82
+ *
83
+ * Alleen wat op de ingevoegde regels staat hoort bij een expressie; de gewone bevindingen
84
+ * van het bestand zijn niet gevraagd (daar is `analyse_file` voor). Parse-fouten wél,
85
+ * waar ze ook staan: een regel op een plek waar geen statement kan (midden in een
86
+ * meerregelige expressie, in een klassebody) breekt het hele bestand, en nagemeten staan
87
+ * de meeste fouten dan ná de ingevoegde regel. Hun regelnummers worden teruggerekend naar
88
+ * het oorspronkelijke bestand, anders wijzen ze een of meer regels te ver.
89
+ */
90
+ export function readProbes(project, file, probe, result) {
91
+ const first = probe.line;
92
+ const inserted = probe.expressions.length;
93
+ const types = probe.expressions.map((expression) => ({
94
+ expression,
95
+ type: null,
96
+ problems: [],
97
+ }));
98
+ const parseErrors = [];
99
+ for (const finding of result.findings) {
100
+ if (finding.file !== file)
101
+ continue;
102
+ const at = finding.line;
103
+ const onProbe = at !== null && at >= first && at < first + inserted;
104
+ if (finding.identifier === 'phpstan.parse') {
105
+ parseErrors.push({
106
+ line: at === null ? null : onProbe ? first : at >= first + inserted ? at - inserted : at,
107
+ inserted: onProbe,
108
+ // PHPStan zet het (verschoven) regelnummer ook in de tekst; dat staat nu in `line`.
109
+ message: finding.message.replace(/ on line \d+$/, ''),
110
+ });
111
+ continue;
112
+ }
113
+ if (!onProbe)
114
+ continue;
115
+ const entry = types[at - first];
116
+ if (entry === undefined)
117
+ continue;
118
+ if (finding.identifier === 'phpstan.dumpType' && finding.message.startsWith(DUMPED)) {
119
+ entry.type = finding.message.slice(DUMPED.length);
120
+ }
121
+ else {
122
+ entry.problems.push({ identifier: finding.identifier, message: finding.message });
123
+ }
124
+ }
125
+ const generalErrors = limitMessages(result.generalErrors);
126
+ const warnings = limitMessages(result.warnings);
127
+ return {
128
+ project,
129
+ file: displayPath(project, file),
130
+ line: probe.line,
131
+ types,
132
+ parseErrors: parseErrors.slice(0, MAX_MESSAGES),
133
+ generalErrors: generalErrors.kept,
134
+ warnings: warnings.kept,
135
+ omitted: {
136
+ parseErrors: Math.max(parseErrors.length - MAX_MESSAGES, 0),
137
+ generalErrors: generalErrors.omitted,
138
+ warnings: warnings.omitted,
139
+ },
140
+ };
141
+ }
142
+ /** Schrijft het antwoord uit als tekst voor het model. */
143
+ export function renderTypes(report) {
144
+ const lines = [];
145
+ if (report.warnings.length > 0) {
146
+ lines.push('WARNING — PHPStan reported this alongside the result:');
147
+ for (const warning of report.warnings)
148
+ lines.push(`- ${warning}`);
149
+ if (report.omitted.warnings > 0)
150
+ lines.push(`- (${String(report.omitted.warnings)} more message(s) not shown)`);
151
+ lines.push('');
152
+ }
153
+ if (report.generalErrors.length > 0) {
154
+ lines.push('Errors not tied to a file:');
155
+ for (const error of report.generalErrors)
156
+ lines.push(`- ${error}`);
157
+ if (report.omitted.generalErrors > 0)
158
+ lines.push(`- (${String(report.omitted.generalErrors)} more error(s) not shown)`);
159
+ lines.push('');
160
+ }
161
+ if (report.parseErrors.length > 0) {
162
+ lines.push(`PHPStan could not parse ${report.file} with the inserted line(s) before line ${String(report.line)}:`);
163
+ for (const error of report.parseErrors) {
164
+ const waar = error.inserted ? 'inserted line' : error.line === null ? 'no line' : `line ${String(error.line)}`;
165
+ lines.push(`- ${waar}: ${error.message}`);
166
+ }
167
+ if (report.omitted.parseErrors > 0)
168
+ lines.push(`- (${String(report.omitted.parseErrors)} more not shown)`);
169
+ lines.push('', `If the file parses without them, line ${String(report.line)} is not a place where a statement can go: ` +
170
+ 'for example in the middle of an expression that spans several lines, or directly in a class ' +
171
+ 'body. Pick the first line of a statement inside a function or method.');
172
+ return lines.join('\n');
173
+ }
174
+ lines.push(`Types right before line ${String(report.line)} of ${report.file}:`);
175
+ for (const probed of report.types) {
176
+ lines.push(`- ${probed.expression}: ${probed.type ?? 'no type reported'}`);
177
+ for (const problem of probed.problems) {
178
+ lines.push(` ${problem.identifier === null ? '' : `${problem.identifier}: `}${problem.message}`);
179
+ }
180
+ }
181
+ if (report.types.some((probed) => probed.type === null && probed.problems.length === 0)) {
182
+ lines.push('', 'Where no type is reported, PHPStan did not analyse the line as code: it is inside a ' +
183
+ 'string or heredoc, or in a part of the file PHPStan does not reach.');
184
+ }
185
+ if (report.types.some((probed) => probed.type === '*ERROR*')) {
186
+ lines.push('', '*ERROR* means PHPStan could not determine a type; the message under it says why.');
187
+ }
188
+ return lines.join('\n');
189
+ }
190
+ //# sourceMappingURL=dumptype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"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"}
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' | 'unsupported_with_runner' | 'unusable_output' | 'phpstan_failed';
15
+ export type FailureReason = 'no_roots_configured' | 'project_outside_roots' | 'project_not_found' | 'path_outside_project' | 'path_not_found' | 'invalid_argument' | 'nothing_to_analyse' | '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. */
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AA2DA;;;;;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"}
package/dist/phpstan.d.ts CHANGED
@@ -77,8 +77,9 @@ export declare function generateBaseline(project: ResolvedProject, options: Gene
77
77
  * Zet een bestand in de tijdelijke map van de omgeving waar PHPStan voor dit project
78
78
  * draait, en geeft het pad dáár terug.
79
79
  *
80
- * Nodig voor `unmatched_ignores`: die heeft een tijdelijke config, en een bestand op de
81
- * host ziet een container niet — alleen de projectmap is gemount. Het ín het project
80
+ * Nodig voor `unmatched_ignores` (een tijdelijke config) en `inspect_type` (een kopie
81
+ * van het bestand): een bestand op de host ziet een container niet — alleen de
82
+ * projectmap is gemount. Het ín het project
82
83
  * zetten zou wel werken, maar dan schrijft een read-only tool in de repository. Gemeten
83
84
  * in een echte container: PHPStan leest geen config van stdin (`/dev/stdin` en
84
85
  * `php://stdin` gelden voor PHPStan als "does not exist"), en `/tmp` van de container is
@@ -104,6 +105,32 @@ export declare function diagnose(project: ResolvedProject, options?: Pick<Analys
104
105
  * overheen. Verschillende projecten draaien wél parallel.
105
106
  */
106
107
  export declare function analyse(project: ResolvedProject, options?: AnalyseOptions): Promise<AnalysisResult>;
108
+ /** Een bewerkte versie van één bestand, voor PHPStans editor mode. */
109
+ export interface EditedFile {
110
+ /** Absoluut pad van het bestand in het project, zoals resolveWithin het gaf. */
111
+ readonly insteadOf: string;
112
+ /** Wat PHPStan in plaats van dat bestand leest. */
113
+ readonly content: string;
114
+ /** Bestandsnaam van de kopie in de tijdelijke map; hoort uniek te zijn per project en proces. */
115
+ readonly name: string;
116
+ }
117
+ /**
118
+ * Analyseert één bestand alsof het `edited.content` bevat, zonder het project aan te
119
+ * raken: PHPStans editor mode (`--tmp-file` en `--instead-of`) leest de kopie op de plek
120
+ * van het origineel en rapporteert onder het pad van het origineel.
121
+ *
122
+ * Het bestand gaat altijd ook als pad mee. Nagemeten op PHPStan 2.2.7: zonder dat weigert
123
+ * PHPStan een bestand buiten de `paths` uit de config ("not in analysed project files", met
124
+ * exit 0 en zonder JSON), en analyseert het anders het hele project. Mét het pad was het
125
+ * ook zonder resultcache binnen anderhalve seconde klaar. Editor mode schrijft de
126
+ * resultcache niet weg; hij gaat toch door de queue, want hij leest hem wel.
127
+ *
128
+ * De kopie komt in de tijdelijke map van het project, met een runner in die van díe
129
+ * omgeving — dezelfde weg als de config van `unmatched_ignores`. Op de host wordt hij na
130
+ * afloop weggegooid; in een runner blijft hij staan en overschrijft de volgende aanroep
131
+ * hem, zodat er per project en proces hoogstens één blijft liggen.
132
+ */
133
+ export declare function analyseEdited(project: ResolvedProject, edited: EditedFile, options?: AnalyseOptions): Promise<AnalysisResult>;
107
134
  /**
108
135
  * Leest de standaard geheugenlimiet uit de omgeving. Een onbruikbare waarde wordt
109
136
  * hier al geweigerd en niet aan PHPStan doorgegeven: die zou er per analyse op
@@ -112,3 +139,14 @@ export declare function analyse(project: ResolvedProject, options?: AnalyseOptio
112
139
  * fout zit in de serverconfiguratie en niet in de aanroep.
113
140
  */
114
141
  export declare function loadDefaultMemoryLimit(env?: NodeJS.ProcessEnv): string | undefined;
142
+ /**
143
+ * Hoe deze server PHPStan in dit project aanroept als een aanroep zelf niets meegeeft:
144
+ * de config (null: PHPStan zoekt hem zelf) en de geheugenlimiet (null: die van PHP).
145
+ * Dezelfde voorrang als in `flags()`, zodat een vergelijking met een Composer-script niet
146
+ * een eigen versie van die regels bijhoudt. Een kapotte standaard geeft hier null in plaats
147
+ * van een exception: dit is een beschrijving, en de analyse weigert zo'n standaard zelf al.
148
+ */
149
+ export declare function serverInvocation(project: ResolvedProject): {
150
+ config: string | null;
151
+ memoryLimit: string | null;
152
+ };
package/dist/phpstan.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
1
3
  import { fromConfig } from './config.js';
2
4
  import { PROJECTS_ENV_VAR, ProjectDefaultsError, defaultsFor, isValidMemoryLimit } from './defaults.js';
3
5
  import { ProjectError, resolveWithin } from './project.js';
@@ -8,6 +10,7 @@ import { execute } from './phpstan/process.js';
8
10
  import { enqueue, throwIfAborted, withSlot } from './phpstan/queue.js';
9
11
  import { summariseParameters } from './phpstan/parameters.js';
10
12
  import { displayPath } from './report.js';
13
+ import { TmpDirError, projectTmpDir } from './tmpdir.js';
11
14
  export { collectWarnings } from './phpstan/output.js';
12
15
  export { carryOutKill, isReportableKillError, planKill } from './phpstan/process.js';
13
16
  export { MAX_PARALLEL_ENV_VAR, loadMaxParallel } from './phpstan/queue.js';
@@ -117,6 +120,11 @@ function vertaalArgs(args, project, runner) {
117
120
  if (arg.startsWith('--generate-baseline=')) {
118
121
  return `--generate-baseline=${naarOmgeving(runner, project, arg.slice('--generate-baseline='.length))}`;
119
122
  }
123
+ if (arg.startsWith('--instead-of=')) {
124
+ return `--instead-of=${naarOmgeving(runner, project, arg.slice('--instead-of='.length))}`;
125
+ }
126
+ // `--tmp-file=` bewust niet: die kopie staat al in de omgeving (writeInRunner), en
127
+ // buiten het project, waar er niets te vertalen valt.
120
128
  return arg.startsWith('-') ? arg : naarOmgeving(runner, project, arg);
121
129
  });
122
130
  }
@@ -151,8 +159,9 @@ const WRITE_IN_RUNNER = 'd="${TMPDIR:-/tmp}"; f="$d/$2"; printf "%s" "$1" > "$f.
151
159
  * Zet een bestand in de tijdelijke map van de omgeving waar PHPStan voor dit project
152
160
  * draait, en geeft het pad dáár terug.
153
161
  *
154
- * Nodig voor `unmatched_ignores`: die heeft een tijdelijke config, en een bestand op de
155
- * host ziet een container niet — alleen de projectmap is gemount. Het ín het project
162
+ * Nodig voor `unmatched_ignores` (een tijdelijke config) en `inspect_type` (een kopie
163
+ * van het bestand): een bestand op de host ziet een container niet — alleen de
164
+ * projectmap is gemount. Het ín het project
156
165
  * zetten zou wel werken, maar dan schrijft een read-only tool in de repository. Gemeten
157
166
  * in een echte container: PHPStan leest geen config van stdin (`/dev/stdin` en
158
167
  * `php://stdin` gelden voor PHPStan als "does not exist"), en `/tmp` van de container is
@@ -168,7 +177,7 @@ export async function writeInRunner(project, name, content, options = {}) {
168
177
  const pad = execution.stdout.trim();
169
178
  if (execution.spawnError !== null || execution.code !== 0 || !pad.startsWith('/')) {
170
179
  const details = condenseDetails(execution.stderr.trim()) || 'no output';
171
- throw new PhpstanError(`The temporary config could not be written in the runner of ${project.path} ` +
180
+ throw new PhpstanError(`A temporary file could not be written in the runner of ${project.path} ` +
172
181
  `(exit code ${execution.code ?? '?'}): ${details}. This needs an \`sh\` in that runner.`, 'unsupported_with_runner', { exitCode: execution.code, hint: 'Check that the runner has an sh and a writable temp directory.' });
173
182
  }
174
183
  return pad;
@@ -267,10 +276,61 @@ export async function analyse(project, options = {}) {
267
276
  throwIfAborted(project.path, options.signal);
268
277
  return enqueue(project.path, () => withSlot(() => run(project, options)));
269
278
  }
270
- async function run(project, options) {
279
+ /**
280
+ * Analyseert één bestand alsof het `edited.content` bevat, zonder het project aan te
281
+ * raken: PHPStans editor mode (`--tmp-file` en `--instead-of`) leest de kopie op de plek
282
+ * van het origineel en rapporteert onder het pad van het origineel.
283
+ *
284
+ * Het bestand gaat altijd ook als pad mee. Nagemeten op PHPStan 2.2.7: zonder dat weigert
285
+ * PHPStan een bestand buiten de `paths` uit de config ("not in analysed project files", met
286
+ * exit 0 en zonder JSON), en analyseert het anders het hele project. Mét het pad was het
287
+ * ook zonder resultcache binnen anderhalve seconde klaar. Editor mode schrijft de
288
+ * resultcache niet weg; hij gaat toch door de queue, want hij leest hem wel.
289
+ *
290
+ * De kopie komt in de tijdelijke map van het project, met een runner in die van díe
291
+ * omgeving — dezelfde weg als de config van `unmatched_ignores`. Op de host wordt hij na
292
+ * afloop weggegooid; in een runner blijft hij staan en overschrijft de volgende aanroep
293
+ * hem, zodat er per project en proces hoogstens één blijft liggen.
294
+ */
295
+ export async function analyseEdited(project, edited, options = {}) {
296
+ requireRunnable(project);
297
+ throwIfAborted(project.path, options.signal);
298
+ return enqueue(project.path, () => withSlot(async () => {
299
+ throwIfAborted(project.path, options.signal);
300
+ const runner = runnerFor(project.path);
301
+ const tmpFile = runner === null
302
+ ? writeOnHost(project, edited)
303
+ : await writeInRunner(project, edited.name, edited.content, options);
304
+ try {
305
+ return await run(project, { ...options, paths: [edited.insteadOf] }, [
306
+ `--tmp-file=${tmpFile}`,
307
+ `--instead-of=${edited.insteadOf}`,
308
+ ]);
309
+ }
310
+ finally {
311
+ if (runner === null)
312
+ rmSync(tmpFile, { force: true });
313
+ }
314
+ }));
315
+ }
316
+ /** Zet de kopie in de tijdelijke map van het project op de host. */
317
+ function writeOnHost(project, edited) {
318
+ const dir = projectTmpDir(project.path);
319
+ const file = join(dir, edited.name);
320
+ try {
321
+ mkdirSync(dir, { recursive: true });
322
+ writeFileSync(file, edited.content);
323
+ }
324
+ catch (error) {
325
+ throw new TmpDirError(`The temporary copy ${file} could not be written: ` +
326
+ `${error instanceof Error ? error.message : String(error)}.`);
327
+ }
328
+ return file;
329
+ }
330
+ async function run(project, options, editor = []) {
271
331
  const runner = runnerFor(project.path);
272
332
  const timeoutMs = timeoutFor(project, options);
273
- const args = buildArgs(project, options);
333
+ const args = buildArgs(project, options, editor);
274
334
  // Nog een keer, want tussen de queue, het slot en dit punt kan er tijd zitten:
275
335
  // PHPStan starten voor een verzoek dat niemand meer wil is pure verspilling.
276
336
  throwIfAborted(project.path, options.signal);
@@ -314,12 +374,13 @@ export function loadDefaultMemoryLimit(env = process.env) {
314
374
  }
315
375
  return configured;
316
376
  }
317
- function buildArgs(project, options) {
377
+ function buildArgs(project, options, editor = []) {
318
378
  return [
319
379
  'analyse',
320
380
  '--error-format=json',
321
381
  ...QUIET_FLAGS,
322
382
  ...flags(project, options),
383
+ ...editor,
323
384
  ...targets(project, options),
324
385
  ];
325
386
  }
@@ -371,6 +432,23 @@ function buildBaselineArgs(project, options) {
371
432
  }
372
433
  /** Vlaggen die er altijd bij horen, zodat de uitvoer machineleesbaar blijft. */
373
434
  const QUIET_FLAGS = ['--no-progress', '--no-interaction', '--no-ansi'];
435
+ /**
436
+ * Hoe deze server PHPStan in dit project aanroept als een aanroep zelf niets meegeeft:
437
+ * de config (null: PHPStan zoekt hem zelf) en de geheugenlimiet (null: die van PHP).
438
+ * Dezelfde voorrang als in `flags()`, zodat een vergelijking met een Composer-script niet
439
+ * een eigen versie van die regels bijhoudt. Een kapotte standaard geeft hier null in plaats
440
+ * van een exception: dit is een beschrijving, en de analyse weigert zo'n standaard zelf al.
441
+ */
442
+ export function serverInvocation(project) {
443
+ let memoryLimit = null;
444
+ try {
445
+ memoryLimit = defaultsFor(project.path).memoryLimit ?? loadDefaultMemoryLimit() ?? null;
446
+ }
447
+ catch {
448
+ // Zie hierboven: de analyse meldt dit zelf, met uitleg.
449
+ }
450
+ return { config: project.config, memoryLimit };
451
+ }
374
452
  /**
375
453
  * De vlaggen die uit de opties komen, in de volgorde die PHPStan zelf aanhoudt.
376
454
  *
@@ -412,6 +490,30 @@ function targets(project, options) {
412
490
  function describeFailure(project, execution) {
413
491
  const details = condenseDetails(execution.stderr.trim() || execution.stdout.trim());
414
492
  const gemeen = { exitCode: execution.code, ...oorzaakUit(details) };
493
+ // Nagemeten: een bestand onder `excludePaths` dat expliciet als pad meegaat, geeft
494
+ // deze tekst met exit 0 en zonder JSON. Zonder eigen tak viel het in unusable_output,
495
+ // met als advies de cache te legen — terwijl het bestand gewoon niet meedoet.
496
+ if (/no files found to analyse/i.test(details)) {
497
+ const hint = 'Check `paths` and `excludePaths` in the config (diagnose_project shows them), or pass another path.';
498
+ return {
499
+ message: `PHPStan found no files to analyse in ${project.path}: a path that was passed is excluded ` +
500
+ `by excludePaths in the config, or the config lists no files. ${hint}\n\n${details}`,
501
+ reason: 'nothing_to_analyse',
502
+ details: { ...gemeen, hint },
503
+ };
504
+ }
505
+ // De server bouwt de vlaggen zelf en een pad kan geen vlag zijn (resolveWithin), dus
506
+ // een onbekende optie betekent een PHPStan die ouder is dan wat deze tool nodig
507
+ // heeft — zoals `--tmp-file` voor inspect_type.
508
+ if (/option does not exist/i.test(details)) {
509
+ const hint = 'Update phpstan/phpstan in this project.';
510
+ return {
511
+ message: `PHPStan in ${project.path} does not know an option this server passes; that version is ` +
512
+ `probably too old for this tool. ${hint}\n\n${details}`,
513
+ reason: 'phpstan_failed',
514
+ details: { ...gemeen, hint },
515
+ };
516
+ }
415
517
  // "Invalid memory limit format" bevat óók "memory limit", maar is een afgekeurde
416
518
  // waarde en geen volgelopen geheugen. Eerst afvangen, anders krijgt het model de
417
519
  // raad een limiet mee te geven die het net al meegaf.
@@ -1 +1 @@
1
- {"version":3,"file":"phpstan.js","sourceRoot":"","sources":["../src/phpstan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAkC/D;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,UAAmE,EAAE;IAErE,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAChC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7C,8EAA8E;QAC9E,oBAAoB;QACpB,MAAM,IAAI,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhG,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,YAAY,CACpB,+CAA+C,OAAO,CAAC,IAAI,eAAe,SAAS,CAAC,IAAI,IAAI,GAAG,QAAQ;gBACrG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,gCAAgC,CAAC,CAC1E,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAmBD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAwB,EACxB,OAAgC;IAEhC,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAChC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,OAAO,EACP,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,EACnC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAC5B,OAAO,CAAC,MAAM,CACf,CAAC;QAEF,4EAA4E;QAC5E,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,YAAY,CACpB,uCAAuC,OAAO,CAAC,IAAI,OAAO;gBACxD,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,CAC9D,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACzF,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAAwB;IAM9C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,IAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CACjB,OAAwB,EACxB,QAA2B,EAC3B,SAAiB,EACjB,MAA+B;IAE/B,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,IAAI;QAClB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACf,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,OAAwB;IAC/C,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,IAAuB,EAAE,OAAe,EAAE,MAAc;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,OAAO,mBAAmB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAClG,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3C,OAAO,uBAAuB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1G,CAAC;QACD,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,MAAsB,EAAE,OAAe,EAAE,MAAc;IAC/E,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1C,GAAG,OAAO;YACV,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;SAC9C,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,OAAwB;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CACpB,+BAA+B,OAAO,CAAC,IAAI,oCAAoC;YAC7E,qCAAqC,EACvC,iBAAiB,EACjB,EAAE,IAAI,EAAE,yCAAyC,EAAE,CACpD,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,eAAe,GACnB,mGAAmG,CAAC;AAEtG;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAwB,EACxB,IAAY,EACZ,OAAe,EACf,UAAwD,EAAE;IAE1D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAE1F,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,IAAc,EACd,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAC7D,OAAO,CAAC,IAAI,EACZ,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAC5B,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,WAAW,CAAC;QACxE,MAAM,IAAI,YAAY,CACpB,8DAA8D,OAAO,CAAC,IAAI,GAAG;YAC3E,cAAc,SAAS,CAAC,IAAI,IAAI,GAAG,MAAM,OAAO,wCAAwC,EAC1F,yBAAyB,EACzB,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,gEAAgE,EAAE,CACrG,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAwB,EACxB,UAAwD,EAAE;IAE1D,eAAe,CAAC,OAAO,CAAC,CAAC;IACzB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,QAAQ,CAAC,KAAK,IAAI,EAAE;QACzB,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAErH,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,YAAY,CACpB,mCAAmC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,CACnF,CAAC;QACJ,CAAC;QAED,kFAAkF;QAClF,kFAAkF;QAClF,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC;YACvD,MAAM,IAAI,YAAY,CACpB,WAAW;gBACT,CAAC,CAAC,oBAAoB,OAAO,CAAC,IAAI,iDAAiD;gBACnF,CAAC,CAAC,oBAAoB,OAAO,CAAC,IAAI,wBAAwB,SAAS,CAAC,MAAM,IAAI,EAChF,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EACrC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CACrD,CAAC;QACJ,CAAC;QAED,gFAAgF;QAChF,gFAAgF;QAChF,oDAAoD;QACpD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,+EAA+E;YAC/E,mFAAmF;YACnF,oFAAoF;YACpF,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxE,MAAM,IAAI,YAAY,CACpB,oCAAoC,OAAO,CAAC,IAAI,eAAe,SAAS,CAAC,IAAI,IAAI,GAAG,QAAQ;gBAC1F,CAAC,OAAO,IAAI,gCAAgC,CAAC,EAC/C,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,EACjD;gBACE,QAAQ,EAAE,SAAS,CAAC,IAAI;gBACxB,GAAG,CAAC,SAAS;oBACX,CAAC,CAAC,EAAE,IAAI,EAAE,4DAA4D,eAAe,+BAA+B,EAAE;oBACtH,CAAC,CAAC,EAAE,CAAC;aACR,CACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAwB,EACxB,SAAiB,EACjB,MAA+B;IAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,kFAAkF;IAClF,2DAA2D;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,UAAU,CAChC,OAAO,EACP,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC,CAAC,EAC1G,SAAS,EACT,MAAM,CACP,CAAC;IAEF,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxI,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,iBAAiB,EACf,yDAAyD,SAAS,CAAC,IAAI,IAAI,GAAG,GAAG;gBACjF,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;SAChE,CAAC;IACJ,CAAC;IAED,wFAAwF;IACxF,8CAA8C;IAC9C,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3F,IAAI,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC1H,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAwB,EACxB,UAA0B,EAAE;IAE5B,eAAe,CAAC,OAAO,CAAC,CAAC;IAEzB,6EAA6E;IAC7E,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,OAAwB,EAAE,OAAuB;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEzC,+EAA+E;IAC/E,6EAA6E;IAC7E,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7E,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,YAAY,CACpB,mCAAmC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,CACnF,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CACpB,SAAS,CAAC,MAAM,KAAK,aAAa;YAChC,CAAC,CAAC,mBAAmB,OAAO,CAAC,IAAI,iDAAiD;YAClF,CAAC,CAAC,mBAAmB,OAAO,CAAC,IAAI,sBAAsB,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;gBACrF,WAAW,SAAS,CAAC,MAAM,oEAAoE,EACnG,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAC5D,SAAS,CAAC,MAAM,KAAK,aAAa;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,IAAI,EAAE,kDAAkD,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACzE,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACzF,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CACpB,GAAG,oBAAoB,eAAe,UAAU,8CAA8C;YAC5F,0EAA0E,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,OAAwB,EAAE,OAAuB;IAClE,OAAO;QACL,SAAS;QACT,qBAAqB;QACrB,GAAG,WAAW;QACd,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,OAAwB,EAAE,OAA0C;IACtF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC;IAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;IACzD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AACrE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CAAC,OAAwB;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC;YAAE,MAAM,KAAK,CAAC;QAClD,MAAM,IAAI,oBAAoB,CAC5B,GAAG,gBAAgB,iBAAiB,MAAM,SAAS,OAAO,CAAC,IAAI,oBAAoB,KAAK,CAAC,OAAO,EAAE,CACnG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,OAAwB,EAAE,OAAgC;IACnF,OAAO;QACL,SAAS;QACT,GAAG,WAAW;QACd,uBAAuB,OAAO,CAAC,IAAI,EAAE;QACrC,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,WAAW,GAAG,CAAC,eAAe,EAAE,kBAAkB,EAAE,WAAW,CAAU,CAAC;AAEhF;;;;;GAKG;AACH,SAAS,KAAK,CAAC,OAAwB,EAAE,OAAuB;IAC9D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3C,kFAAkF;IAClF,6BAA6B;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACjE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,sBAAsB,EAAE,CAAC;IAC5F,IAAI,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,EAAE,CAAC,CAAC;IAE1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,SAAS,OAAO,CAAC,OAAwB,EAAE,OAAuB;IAChE,gFAAgF;IAChF,2DAA2D;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,YAAY,CACpB,GAAG,OAAO,CAAC,IAAI,yEAAyE,EACxF,gBAAgB,EAChB,EAAE,IAAI,EAAE,sDAAsD,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yFAAyF;AACzF;;;;;GAKG;AACH,SAAS,eAAe,CACtB,OAAwB,EACxB,SAAoB;IAEpB,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAEpE,iFAAiF;IACjF,iFAAiF;IACjF,sDAAsD;IACtD,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,wBAAwB,oBAAoB,GAAG,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,oDAAoD,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,OAAO,EAAE;YAClG,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,sCAAsC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,yDAAyD,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,4CAA4C,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,OAAO,EAAE;YAC1F,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,cAAc;IACd,EAAE;IACF,gFAAgF;IAChF,mFAAmF;IACnF,sFAAsF;IACtF,oFAAoF;IACpF,MAAM,SAAS,GAAG,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,SAAS;QACpB,CAAC,CAAC,yFAAyF;YACzF,wFAAwF;YACxF,+DAA+D;QACjE,CAAC,CAAC,8EAA8E;YAC9E,kFAAkF;YAClF,+EAA+E;YAC/E,yBAAyB,CAAC;IAE9B,OAAO;QACL,OAAO,EACL,sCAAsC,OAAO,CAAC,IAAI,eAAe,SAAS,CAAC,IAAI,IAAI,GAAG,QAAQ;YAC9F,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7D,OAAO,IAAI,EAAE;QACf,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;QAC1D,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChG,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzF,OAAO;QACL,KAAK;QACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAClG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"phpstan.js","sourceRoot":"","sources":["../src/phpstan.ts"],"names":[],"mappings":"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"}
package/dist/project.d.ts CHANGED
@@ -70,3 +70,18 @@ export declare function resolveNewWithin(project: ResolvedProject, argument: str
70
70
  * vendor/, node_modules/ en verborgen mappen, en niet dieper dan MAX_DEPTH.
71
71
  */
72
72
  export declare function discoverProjects(roots: Root[]): ProjectSummary[];
73
+ /**
74
+ * Of `child` binnen `parent` valt. Via path.relative en niet via startsWith,
75
+ * want "/a/foobar" begint óók met "/a/foo".
76
+ */
77
+ export declare function contains(parent: string, child: string): boolean;
78
+ /**
79
+ * De `paths` uit de eigen config van het project, als absolute paden, of null als dat niet
80
+ * met zekerheid te lezen is. Regelgericht, zonder NEON-bibliotheek, net als de baseline-check:
81
+ * een lijst onder `paths:` (`- app/`) of een inline lijst (`paths: [app, src]`).
82
+ *
83
+ * Null en geen gok: staan de paden in een geïncludeerde config (`vendor/…`), of gebruiken ze
84
+ * een parameter als `%rootDir%`, dan valt niet te zeggen wat PHPStan analyseert. Relatieve
85
+ * paden gelden vanaf de map van de config, zoals PHPStan ze leest.
86
+ */
87
+ export declare function readConfigPaths(project: ResolvedProject): string[] | null;
package/dist/project.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ToolFailure } from './failure.js';
2
- import { readdirSync, realpathSync, statSync } from 'node:fs';
3
- import { basename, dirname, isAbsolute, join, relative } from 'node:path';
2
+ import { readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
3
+ import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
4
4
  import { defaultsFor } from './defaults.js';
5
5
  import { isUsable, ROOTS_ENV_VAR } from './roots.js';
6
6
  import { runnerFor } from './runner.js';
@@ -231,10 +231,61 @@ function isFile(path) {
231
231
  * Of `child` binnen `parent` valt. Via path.relative en niet via startsWith,
232
232
  * want "/a/foobar" begint óók met "/a/foo".
233
233
  */
234
- function contains(parent, child) {
234
+ export function contains(parent, child) {
235
235
  if (parent === child)
236
236
  return true;
237
237
  const rel = relative(parent, child);
238
238
  return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
239
239
  }
240
+ /**
241
+ * De `paths` uit de eigen config van het project, als absolute paden, of null als dat niet
242
+ * met zekerheid te lezen is. Regelgericht, zonder NEON-bibliotheek, net als de baseline-check:
243
+ * een lijst onder `paths:` (`- app/`) of een inline lijst (`paths: [app, src]`).
244
+ *
245
+ * Null en geen gok: staan de paden in een geïncludeerde config (`vendor/…`), of gebruiken ze
246
+ * een parameter als `%rootDir%`, dan valt niet te zeggen wat PHPStan analyseert. Relatieve
247
+ * paden gelden vanaf de map van de config, zoals PHPStan ze leest.
248
+ */
249
+ export function readConfigPaths(project) {
250
+ if (project.config === null)
251
+ return null;
252
+ const configFile = resolve(project.path, project.config);
253
+ let lines;
254
+ try {
255
+ lines = readFileSync(configFile, 'utf8').split(/\r?\n/);
256
+ }
257
+ catch {
258
+ return null;
259
+ }
260
+ const start = lines.findIndex((line) => /^\s+paths:/.test(line));
261
+ if (start === -1)
262
+ return null;
263
+ const eerste = lines[start] ?? '';
264
+ const inline = /^\s+paths:\s*\[(.*)\]\s*(#.*)?$/.exec(eerste);
265
+ let entries;
266
+ if (inline !== null) {
267
+ entries = (inline[1] ?? '').split(',');
268
+ }
269
+ else if (/^\s+paths:\s*(#.*)?$/.test(eerste)) {
270
+ const indent = /^\s*/.exec(eerste)?.[0].length ?? 0;
271
+ entries = [];
272
+ for (const line of lines.slice(start + 1)) {
273
+ if (line.trim() === '' || line.trim().startsWith('#'))
274
+ continue;
275
+ if ((/^\s*/.exec(line)?.[0].length ?? 0) <= indent)
276
+ break;
277
+ const item = /^\s*-\s*(.+?)\s*(#.*)?$/.exec(line);
278
+ if (item === null)
279
+ return null;
280
+ entries.push(item[1] ?? '');
281
+ }
282
+ }
283
+ else {
284
+ return null;
285
+ }
286
+ const cleaned = entries.map((entry) => entry.trim().replace(/^(['"])(.*)\1$/, '$2')).filter((entry) => entry !== '');
287
+ if (cleaned.length === 0 || cleaned.some((entry) => entry.includes('%')))
288
+ return null;
289
+ return cleaned.map((entry) => resolve(dirname(configFile), entry));
290
+ }
240
291
  //# sourceMappingURL=project.js.map