phpstan-mcp-mx 0.22.0 → 0.24.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 +24 -0
- package/README.md +142 -19
- package/dist/baseline.d.ts +10 -0
- package/dist/baseline.js +36 -14
- package/dist/baseline.js.map +1 -1
- package/dist/changed.d.ts +17 -0
- package/dist/changed.js +56 -29
- package/dist/changed.js.map +1 -1
- package/dist/compare.js +12 -6
- package/dist/compare.js.map +1 -1
- package/dist/composer.js +43 -21
- package/dist/composer.js.map +1 -1
- package/dist/config.js +12 -6
- package/dist/config.js.map +1 -1
- package/dist/defaults.js +2 -1
- package/dist/defaults.js.map +1 -1
- package/dist/dumptype.js +16 -8
- package/dist/dumptype.js.map +1 -1
- package/dist/failure.d.ts +1 -1
- package/dist/failure.js.map +1 -1
- package/dist/history.d.ts +61 -0
- package/dist/history.js +275 -0
- package/dist/history.js.map +1 -0
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/php.js +10 -5
- package/dist/php.js.map +1 -1
- package/dist/phpstan/error.js.map +1 -1
- package/dist/phpstan/output.js +12 -6
- package/dist/phpstan/output.js.map +1 -1
- package/dist/phpstan/parameters.js.map +1 -1
- package/dist/phpstan/process.d.ts +10 -0
- package/dist/phpstan/process.js +35 -9
- package/dist/phpstan/process.js.map +1 -1
- package/dist/phpstan/queue.js +4 -2
- package/dist/phpstan/queue.js.map +1 -1
- package/dist/phpstan.d.ts +14 -0
- package/dist/phpstan.js +94 -25
- package/dist/phpstan.js.map +1 -1
- package/dist/project.d.ts +6 -2
- package/dist/project.js +57 -18
- package/dist/project.js.map +1 -1
- package/dist/prune.d.ts +92 -0
- package/dist/prune.js +387 -0
- package/dist/prune.js.map +1 -0
- package/dist/report.js +38 -19
- package/dist/report.js.map +1 -1
- package/dist/root-source.d.ts +43 -0
- package/dist/root-source.js +124 -0
- package/dist/root-source.js.map +1 -0
- package/dist/roots.d.ts +12 -0
- package/dist/roots.js +23 -6
- package/dist/roots.js.map +1 -1
- package/dist/runner.js +14 -7
- package/dist/runner.js.map +1 -1
- package/dist/runs.js +6 -3
- package/dist/runs.js.map +1 -1
- package/dist/schema-dialect.js +6 -3
- package/dist/schema-dialect.js.map +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.js +9 -5
- package/dist/server.js.map +1 -1
- package/dist/tmpdir.js +6 -3
- package/dist/tmpdir.js.map +1 -1
- package/dist/tools/analysis.d.ts +4 -4
- package/dist/tools/analysis.js +4 -2
- package/dist/tools/analysis.js.map +1 -1
- package/dist/tools/inspect.d.ts +9 -7
- package/dist/tools/inspect.js +158 -37
- package/dist/tools/inspect.js.map +1 -1
- package/dist/tools/prompts.d.ts +3 -3
- package/dist/tools/prompts.js +16 -8
- package/dist/tools/prompts.js.map +1 -1
- package/dist/tools/shared.d.ts +2 -2
- package/dist/tools/shared.js +7 -5
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/writes.d.ts +8 -3
- package/dist/tools/writes.js +73 -3
- package/dist/tools/writes.js.map +1 -1
- package/dist/tools.d.ts +2 -2
- package/dist/tools.js +6 -3
- package/dist/tools.js.map +1 -1
- package/dist/unmatched.d.ts +66 -0
- package/dist/unmatched.js +194 -44
- package/dist/unmatched.js.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
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,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/defaults.js
CHANGED
|
@@ -34,8 +34,9 @@ export function isValidMemoryLimit(value) {
|
|
|
34
34
|
*/
|
|
35
35
|
export function loadProjectDefaults(env = process.env) {
|
|
36
36
|
const ruw = (env[PROJECTS_ENV_VAR] ?? fromConfig('projects', env))?.trim();
|
|
37
|
-
if (ruw === undefined || ruw === '')
|
|
37
|
+
if (ruw === undefined || ruw === '') {
|
|
38
38
|
return new Map();
|
|
39
|
+
}
|
|
39
40
|
let ontleed;
|
|
40
41
|
try {
|
|
41
42
|
ontleed = JSON.parse(ruw);
|
package/dist/defaults.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,+EAA+E;AAC/E,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,YAAY,OAAe,EAAE,SAAwB,iBAAiB,EAAE,UAA0B,EAAE;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"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"}
|
package/dist/dumptype.js
CHANGED
|
@@ -86,8 +86,9 @@ export function readProbes(project, file, probe, result) {
|
|
|
86
86
|
}));
|
|
87
87
|
const parseErrors = [];
|
|
88
88
|
for (const finding of result.findings) {
|
|
89
|
-
if (finding.file !== file)
|
|
89
|
+
if (finding.file !== file) {
|
|
90
90
|
continue;
|
|
91
|
+
}
|
|
91
92
|
const at = finding.line;
|
|
92
93
|
const onProbe = at !== null && at >= first && at < first + inserted;
|
|
93
94
|
if (finding.identifier === 'phpstan.parse') {
|
|
@@ -99,11 +100,13 @@ export function readProbes(project, file, probe, result) {
|
|
|
99
100
|
});
|
|
100
101
|
continue;
|
|
101
102
|
}
|
|
102
|
-
if (!onProbe)
|
|
103
|
+
if (!onProbe) {
|
|
103
104
|
continue;
|
|
105
|
+
}
|
|
104
106
|
const entry = types[at - first];
|
|
105
|
-
if (entry === undefined)
|
|
107
|
+
if (entry === undefined) {
|
|
106
108
|
continue;
|
|
109
|
+
}
|
|
107
110
|
if (finding.identifier === 'phpstan.dumpType' && finding.message.startsWith(DUMPED)) {
|
|
108
111
|
entry.type = finding.message.slice(DUMPED.length);
|
|
109
112
|
}
|
|
@@ -133,18 +136,22 @@ export function renderTypes(report) {
|
|
|
133
136
|
const lines = [];
|
|
134
137
|
if (report.warnings.length > 0) {
|
|
135
138
|
lines.push('WARNING PHPStan reported this alongside the result:');
|
|
136
|
-
for (const warning of report.warnings)
|
|
139
|
+
for (const warning of report.warnings) {
|
|
137
140
|
lines.push(`- ${warning}`);
|
|
138
|
-
|
|
141
|
+
}
|
|
142
|
+
if (report.omitted.warnings > 0) {
|
|
139
143
|
lines.push(`- (${String(report.omitted.warnings)} more message(s) not shown)`);
|
|
144
|
+
}
|
|
140
145
|
lines.push('');
|
|
141
146
|
}
|
|
142
147
|
if (report.generalErrors.length > 0) {
|
|
143
148
|
lines.push('Errors not tied to a file:');
|
|
144
|
-
for (const error of report.generalErrors)
|
|
149
|
+
for (const error of report.generalErrors) {
|
|
145
150
|
lines.push(`- ${error}`);
|
|
146
|
-
|
|
151
|
+
}
|
|
152
|
+
if (report.omitted.generalErrors > 0) {
|
|
147
153
|
lines.push(`- (${String(report.omitted.generalErrors)} more error(s) not shown)`);
|
|
154
|
+
}
|
|
148
155
|
lines.push('');
|
|
149
156
|
}
|
|
150
157
|
if (report.parseErrors.length > 0) {
|
|
@@ -153,8 +160,9 @@ export function renderTypes(report) {
|
|
|
153
160
|
const waar = error.inserted ? 'inserted line' : error.line === null ? 'no line' : `line ${String(error.line)}`;
|
|
154
161
|
lines.push(`- ${waar}: ${error.message}`);
|
|
155
162
|
}
|
|
156
|
-
if (report.omitted.parseErrors > 0)
|
|
163
|
+
if (report.omitted.parseErrors > 0) {
|
|
157
164
|
lines.push(`- (${String(report.omitted.parseErrors)} more not shown)`);
|
|
165
|
+
}
|
|
158
166
|
lines.push('', `If the file parses without them, line ${String(report.line)} is not a place where a statement can go: ` +
|
|
159
167
|
'for example in the middle of an expression that spans several lines, or directly in a class ' +
|
|
160
168
|
'body. Pick the first line of a statement inside a function or method.');
|
package/dist/dumptype.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dumptype.js","sourceRoot":"","sources":["../src/dumptype.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvE,yDAAyD;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,4DAA4D;AAC5D,MAAM,MAAM,GAAG,eAAe,CAAC;AAiD/B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAwB,EACxB,OAAoB,EACpB,UAAmF,EAAE;
|
|
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' | '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';
|
|
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' | 'config_invalid' | 'bootstrap_failed' | 'baseline_unreadable' | 'invalid_setting' | 'memory_limit' | 'timeout' | 'cancelled' | 'git_missing' | 'not_a_git_repository' | 'unknown_base' | 'unsupported_with_runner' | 'unusable_output' | 'phpstan_failed';
|
|
16
16
|
/** Wat er naast de reden bekend is. Alles optioneel: niet elke fout weet dit. */
|
|
17
17
|
export interface FailureDetails {
|
|
18
18
|
/** Exit code van het proces, als er een proces was. */
|
package/dist/failure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../src/failure.ts"],"names":[],"mappings":"AA+DA;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACE;IAAgC;IAAtE,YAAY,OAAe,EAAW,MAAqB,EAAW,UAA0B,EAAE;QAEhG,KAAK,CAAC,OAAO,CAAC,CAAC;QAFqB,WAAM,GAAN,MAAM,CAAe;QAAW,YAAO,GAAP,OAAO,CAAqB;IAGlG,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ResolvedProject } from './project.js';
|
|
2
|
+
/** Hoeveel wijzigingen per baseline-bestand standaard. */
|
|
3
|
+
export declare const DEFAULT_HISTORY_LIMIT = 20;
|
|
4
|
+
/** Meer dan dit is niet meer te lezen, en elke wijziging kost een `git show`. */
|
|
5
|
+
export declare const MAX_HISTORY_LIMIT = 100;
|
|
6
|
+
/** Hoeveel entries en genegeerde fouten een baseline telt. */
|
|
7
|
+
export interface BaselineCount {
|
|
8
|
+
readonly entries: number;
|
|
9
|
+
readonly errors: number;
|
|
10
|
+
}
|
|
11
|
+
/** Eén wijziging van een baseline-bestand, of de werkkopie als die afwijkt van de laatste commit. */
|
|
12
|
+
export interface HistoryRow {
|
|
13
|
+
/** Null: de werkkopie, nog niet gecommit. */
|
|
14
|
+
readonly commit: string | null;
|
|
15
|
+
/** Commitdatum, ISO 8601; null bij de werkkopie. */
|
|
16
|
+
readonly date: string | null;
|
|
17
|
+
readonly subject: string | null;
|
|
18
|
+
/** De naam van het bestand in die commit; anders dan nu als het later hernoemd is. */
|
|
19
|
+
readonly file: string;
|
|
20
|
+
/** Null als het bestand in die commit niet te lezen was. */
|
|
21
|
+
readonly count: BaselineCount | null;
|
|
22
|
+
/** Ten opzichte van de rij eronder; null als een van beide niet te lezen was. */
|
|
23
|
+
readonly delta: BaselineCount | null;
|
|
24
|
+
/** De soorten die het meest veranderden, in genegeerde fouten; positief is erbij. */
|
|
25
|
+
readonly changes: readonly {
|
|
26
|
+
identifier: string;
|
|
27
|
+
change: number;
|
|
28
|
+
}[];
|
|
29
|
+
}
|
|
30
|
+
/** Het verloop van één baseline-bestand, nieuwste wijziging eerst. */
|
|
31
|
+
export interface FileHistory {
|
|
32
|
+
readonly file: string;
|
|
33
|
+
readonly rows: readonly HistoryRow[];
|
|
34
|
+
/** De stand vóór de oudste rij: nul als het bestand daar ontstond. */
|
|
35
|
+
readonly start: BaselineCount | null;
|
|
36
|
+
/** Of er nog oudere commits zijn die het bestand raakten; dan helpt een hogere `limit`. */
|
|
37
|
+
readonly olderCommits: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** Het antwoord van `baseline_history`. */
|
|
40
|
+
export interface HistoryReport {
|
|
41
|
+
readonly project: string;
|
|
42
|
+
readonly files: readonly FileHistory[];
|
|
43
|
+
readonly notices: readonly string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Het verloop van de geïncludeerde baselines door de git-geschiedenis: per commit die het
|
|
47
|
+
* bestand raakte hoeveel entries en genegeerde fouten, het verschil met de vorige, en welke
|
|
48
|
+
* soorten het meest veranderden. Zonder PHPStan: alleen git en de baseline-parser.
|
|
49
|
+
*
|
|
50
|
+
* Langs de first-parent-lijn van HEAD, want alleen dan is "het verschil met de rij eronder"
|
|
51
|
+
* zinvol: zonder die vlag komen commits uit verschillende branches op datum door elkaar, en
|
|
52
|
+
* vergelijk je een commit met een die er nooit zijn ouder was. Een gemergede branch telt zo als
|
|
53
|
+
* één wijziging, en dat is ook de vraag: welke merge zette er een stapel bij. `--follow`, zodat
|
|
54
|
+
* een hernoemd bestand niet begint met "alles nieuw"; dat kan alleen per bestand.
|
|
55
|
+
*
|
|
56
|
+
* Bewust zonder auteur: commit en onderwerp zijn genoeg om hem terug te vinden, en een lijst
|
|
57
|
+
* met namen bij "wie zette er fouten bij" is niet waar deze tool voor is.
|
|
58
|
+
*/
|
|
59
|
+
export declare function baselineHistory(project: ResolvedProject, limit?: number): Promise<HistoryReport>;
|
|
60
|
+
/** Schrijft het verloop uit als tekst voor het model. */
|
|
61
|
+
export declare function renderHistory(report: HistoryReport): string;
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { findBaselineFiles, includedBaselineFiles, isUnreadableBaseline, parseBaseline } from './baseline.js';
|
|
4
|
+
import { GitError, execute, gitShow, throwIfFailed } from './changed.js';
|
|
5
|
+
/** Hoeveel wijzigingen per baseline-bestand standaard. */
|
|
6
|
+
export const DEFAULT_HISTORY_LIMIT = 20;
|
|
7
|
+
/** Meer dan dit is niet meer te lezen, en elke wijziging kost een `git show`. */
|
|
8
|
+
export const MAX_HISTORY_LIMIT = 100;
|
|
9
|
+
/** Hoeveel soorten een rij hoogstens noemt bij "wat veranderde er". */
|
|
10
|
+
const CHANGE_ROWS = 4;
|
|
11
|
+
/** Scheiding tussen commits en tussen velden in de uitvoer van `git log`; komen niet voor in een onderwerp. */
|
|
12
|
+
const RECORD = '\x1e';
|
|
13
|
+
const FIELD = '\x1f';
|
|
14
|
+
const EMPTY = { count: { entries: 0, errors: 0 }, entries: [] };
|
|
15
|
+
/**
|
|
16
|
+
* Het verloop van de geïncludeerde baselines door de git-geschiedenis: per commit die het
|
|
17
|
+
* bestand raakte hoeveel entries en genegeerde fouten, het verschil met de vorige, en welke
|
|
18
|
+
* soorten het meest veranderden. Zonder PHPStan: alleen git en de baseline-parser.
|
|
19
|
+
*
|
|
20
|
+
* Langs de first-parent-lijn van HEAD, want alleen dan is "het verschil met de rij eronder"
|
|
21
|
+
* zinvol: zonder die vlag komen commits uit verschillende branches op datum door elkaar, en
|
|
22
|
+
* vergelijk je een commit met een die er nooit zijn ouder was. Een gemergede branch telt zo als
|
|
23
|
+
* één wijziging, en dat is ook de vraag: welke merge zette er een stapel bij. `--follow`, zodat
|
|
24
|
+
* een hernoemd bestand niet begint met "alles nieuw"; dat kan alleen per bestand.
|
|
25
|
+
*
|
|
26
|
+
* Bewust zonder auteur: commit en onderwerp zijn genoeg om hem terug te vinden, en een lijst
|
|
27
|
+
* met namen bij "wie zette er fouten bij" is niet waar deze tool voor is.
|
|
28
|
+
*/
|
|
29
|
+
export async function baselineHistory(project, limit = DEFAULT_HISTORY_LIMIT) {
|
|
30
|
+
const files = includedBaselineFiles(project);
|
|
31
|
+
if (files.length === 0) {
|
|
32
|
+
return { project: project.path, files: [], notices: [noBaselineNotice(project)] };
|
|
33
|
+
}
|
|
34
|
+
const { prefix, shallow } = await repository(project);
|
|
35
|
+
const max = Math.min(Math.max(Math.trunc(limit), 1), MAX_HISTORY_LIMIT);
|
|
36
|
+
const histories = [];
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
histories.push(await historyOf(project, prefix, file, max));
|
|
39
|
+
}
|
|
40
|
+
const notices = [];
|
|
41
|
+
if (shallow) {
|
|
42
|
+
notices.push('This is a shallow clone: git has only part of the history, so the oldest change shown may be counted as ' +
|
|
43
|
+
'the creation of the baseline while it is not.');
|
|
44
|
+
}
|
|
45
|
+
const onleesbaar = histories.flatMap((history) => history.rows.filter((row) => row.count === null).map((row) => `${history.file} at ${row.commit ?? 'the working copy'}`));
|
|
46
|
+
if (onleesbaar.length > 0) {
|
|
47
|
+
notices.push(`Could not read the baseline in: ${onleesbaar.join(', ')}. Its counts and the change next to it are unknown, not zero.`);
|
|
48
|
+
}
|
|
49
|
+
return { project: project.path, files: histories, notices };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Het pad van het project binnen de repository, en of het een ondiepe kloon is. In één
|
|
53
|
+
* aanroep, die tegelijk zegt of er überhaupt een repository is.
|
|
54
|
+
*/
|
|
55
|
+
async function repository(project) {
|
|
56
|
+
const args = ['rev-parse', '--show-prefix', '--is-shallow-repository'];
|
|
57
|
+
const result = await execute(project.path, args);
|
|
58
|
+
try {
|
|
59
|
+
throwIfFailed(project.path, args, result);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
throw explain(project, error);
|
|
63
|
+
}
|
|
64
|
+
const [prefix = '', shallow = ''] = result.stdout.split('\n').map((line) => line.trim());
|
|
65
|
+
return { prefix, shallow: shallow === 'true' };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Een eigen melding bij een ontbrekende git of repository: die van `throwIfFailed` is
|
|
69
|
+
* geschreven voor `analyse_changed` en raadt `analyse_project` met paden aan, en dat helpt hier
|
|
70
|
+
* niet. Een fout en geen lege uitkomst: de geschiedenis is hier het hele antwoord, en "niets"
|
|
71
|
+
* zou lezen als een baseline die nooit veranderd is.
|
|
72
|
+
*/
|
|
73
|
+
function explain(project, error) {
|
|
74
|
+
if (!(error instanceof GitError)) {
|
|
75
|
+
return error;
|
|
76
|
+
}
|
|
77
|
+
if (error.reason === 'not_a_git_repository') {
|
|
78
|
+
return new GitError(`${project.path} is not under git, so its baseline has no history to read. baseline_summary shows what is in it now.`, error.reason, error.details);
|
|
79
|
+
}
|
|
80
|
+
if (error.reason === 'git_missing' && /not found/i.test(error.message)) {
|
|
81
|
+
return new GitError('git was not found, and the history of the baseline is read with git. baseline_summary works without it.', error.reason, error.details);
|
|
82
|
+
}
|
|
83
|
+
return error;
|
|
84
|
+
}
|
|
85
|
+
async function historyOf(project, prefix, file, limit) {
|
|
86
|
+
// Eén commit meer dan getoond: dat is de stand vóór de oudste rij. Is die er niet, dan
|
|
87
|
+
// ontstond het bestand in de oudste rij.
|
|
88
|
+
const logged = await logOf(project, file, `${prefix}${file}`, limit + 1);
|
|
89
|
+
const shown = logged.slice(0, limit);
|
|
90
|
+
const older = logged[limit];
|
|
91
|
+
const snapshots = [];
|
|
92
|
+
for (const commit of shown) {
|
|
93
|
+
snapshots.push(snapshot(await gitShow(project.path, `${commit.commit}:${commit.path}`)));
|
|
94
|
+
}
|
|
95
|
+
const start = older === undefined ? EMPTY : snapshot(await gitShow(project.path, `${older.commit}:${older.path}`));
|
|
96
|
+
const rows = shown.map((commit, index) => {
|
|
97
|
+
const before = snapshots[index + 1] ?? start;
|
|
98
|
+
return row(commit.commit, commit.date, commit.subject, display(commit.path, prefix), snapshots[index] ?? EMPTY, before);
|
|
99
|
+
});
|
|
100
|
+
// De werkkopie, als die afwijkt van de laatste commit. Vergeleken op de entries en niet op
|
|
101
|
+
// de tekst: met core.autocrlf verschillen de regeleinden, en dat is geen wijziging.
|
|
102
|
+
const working = snapshot(readOrEmpty(join(project.path, file)));
|
|
103
|
+
const latest = snapshots[0] ?? start;
|
|
104
|
+
if (shown.length === 0 || !sameEntries(working, latest)) {
|
|
105
|
+
rows.unshift(row(null, null, null, file, working, latest));
|
|
106
|
+
}
|
|
107
|
+
return { file, rows, start: start.count, olderCommits: older !== undefined };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* De commits die dit bestand raakten, nieuwste eerst. Een lege repository is geen fout: dan is
|
|
111
|
+
* er nog geen geschiedenis, en is de werkkopie het hele verhaal.
|
|
112
|
+
*
|
|
113
|
+
* `--no-color`, `--no-ext-diff` en `--no-show-signature` zetten vast wat de gebruikersconfig
|
|
114
|
+
* anders verandert aan uitvoer die geparsed wordt, net als bij `diff -U0` en `git grep`: met
|
|
115
|
+
* `log.showSignature=true` staat de GPG-uitvoer tussen de regels. Het pad staat na `--` en
|
|
116
|
+
* komt uit de map van het project (een naam die met `phpstan-baseline` begint), niet uit een
|
|
117
|
+
* aanroep.
|
|
118
|
+
*
|
|
119
|
+
* Twee paden, want git is hier niet consequent: de pathspec geldt vanaf de werkmap (het
|
|
120
|
+
* project), de namen die `--name-only` teruggeeft gelden vanaf de repositoryroot. Met één pad
|
|
121
|
+
* vond de test voor een project in een submap niets.
|
|
122
|
+
*/
|
|
123
|
+
async function logOf(project, pathspec, fromRoot, max) {
|
|
124
|
+
const args = [
|
|
125
|
+
'log', '--first-parent', '--follow', '--no-color', '--no-ext-diff', '--no-show-signature', '--name-only',
|
|
126
|
+
`--format=${RECORD}%H${FIELD}%cI${FIELD}%s`, `--max-count=${String(max)}`, '--', pathspec,
|
|
127
|
+
];
|
|
128
|
+
const result = await execute(project.path, args);
|
|
129
|
+
if (result.spawnError === null && result.code !== 0 && /does not have any commits yet|bad default revision/i.test(result.stderr)) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
throwIfFailed(project.path, args, result);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw explain(project, error);
|
|
137
|
+
}
|
|
138
|
+
const commits = [];
|
|
139
|
+
// Van nieuw naar oud: het pad van een commit waar git geen naam bij geeft (een merge op een
|
|
140
|
+
// oude git, die de first-parent-diff nog niet toont), is dat van de rij erboven.
|
|
141
|
+
let current = fromRoot;
|
|
142
|
+
for (const record of result.stdout.split(RECORD)) {
|
|
143
|
+
const [header = '', ...names] = record.split('\n');
|
|
144
|
+
const [commit, date, subject] = header.split(FIELD);
|
|
145
|
+
if (commit === undefined || date === undefined || subject === undefined || commit.trim() === '') {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
current = names.map((name) => name.trim()).find((name) => name !== '') ?? current;
|
|
149
|
+
commits.push({ commit: commit.trim(), date, subject, path: current });
|
|
150
|
+
}
|
|
151
|
+
return commits;
|
|
152
|
+
}
|
|
153
|
+
function snapshot(content) {
|
|
154
|
+
const entries = parseBaseline(content);
|
|
155
|
+
if (isUnreadableBaseline(content, entries)) {
|
|
156
|
+
return { count: null, entries: [] };
|
|
157
|
+
}
|
|
158
|
+
return { count: { entries: entries.length, errors: entries.reduce((sum, entry) => sum + entry.count, 0) }, entries };
|
|
159
|
+
}
|
|
160
|
+
function row(commit, date, subject, file, now, before) {
|
|
161
|
+
const leesbaar = now.count !== null && before.count !== null;
|
|
162
|
+
return {
|
|
163
|
+
commit,
|
|
164
|
+
date,
|
|
165
|
+
subject,
|
|
166
|
+
file,
|
|
167
|
+
count: now.count,
|
|
168
|
+
delta: now.count === null || before.count === null ? null : { entries: now.count.entries - before.count.entries, errors: now.count.errors - before.count.errors },
|
|
169
|
+
changes: leesbaar ? changesBetween(before.entries, now.entries) : [],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/** Per identifier het verschil in genegeerde fouten; de grootste eerst, bij gelijk verschil alfabetisch. */
|
|
173
|
+
function changesBetween(before, now) {
|
|
174
|
+
const change = new Map();
|
|
175
|
+
for (const entry of before) {
|
|
176
|
+
change.set(entry.identifier, (change.get(entry.identifier) ?? 0) - entry.count);
|
|
177
|
+
}
|
|
178
|
+
for (const entry of now) {
|
|
179
|
+
change.set(entry.identifier, (change.get(entry.identifier) ?? 0) + entry.count);
|
|
180
|
+
}
|
|
181
|
+
return [...change]
|
|
182
|
+
.filter(([, verschil]) => verschil !== 0)
|
|
183
|
+
.sort((a, b) => Math.abs(b[1]) - Math.abs(a[1]) || a[0].localeCompare(b[0]))
|
|
184
|
+
.slice(0, CHANGE_ROWS)
|
|
185
|
+
.map(([identifier, verschil]) => ({ identifier, change: verschil }));
|
|
186
|
+
}
|
|
187
|
+
function sameEntries(a, b) {
|
|
188
|
+
return a.count !== null && b.count !== null && JSON.stringify(a.entries) === JSON.stringify(b.entries);
|
|
189
|
+
}
|
|
190
|
+
/** Het pad in een commit, relatief aan het project als het daarbinnen lag. */
|
|
191
|
+
function display(path, prefix) {
|
|
192
|
+
return prefix !== '' && path.startsWith(prefix) ? path.slice(prefix.length) : path;
|
|
193
|
+
}
|
|
194
|
+
function readOrEmpty(file) {
|
|
195
|
+
try {
|
|
196
|
+
return readFileSync(file, 'utf8');
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return '';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
function noBaselineNotice(project) {
|
|
203
|
+
if (project.config === null) {
|
|
204
|
+
return `${project.path} has no phpstan.neon(.dist), so no baseline is included.`;
|
|
205
|
+
}
|
|
206
|
+
const los = findBaselineFiles(project);
|
|
207
|
+
return los.length > 0
|
|
208
|
+
? `${los.join(', ')} ${los.length === 1 ? 'is' : 'are'} not included by the config, so ${los.length === 1 ? 'it hides' : 'they hide'} nothing; no history is shown.`
|
|
209
|
+
: 'The config includes no phpstan-baseline*.neon from the project root, so there is no baseline history.';
|
|
210
|
+
}
|
|
211
|
+
/** Schrijft het verloop uit als tekst voor het model. */
|
|
212
|
+
export function renderHistory(report) {
|
|
213
|
+
const lines = [];
|
|
214
|
+
if (report.notices.length > 0) {
|
|
215
|
+
lines.push(...report.notices.map((notice) => `Note: ${notice}`), '');
|
|
216
|
+
}
|
|
217
|
+
if (report.files.length === 0) {
|
|
218
|
+
lines.push('No baseline history.');
|
|
219
|
+
return lines.join('\n');
|
|
220
|
+
}
|
|
221
|
+
for (const history of report.files) {
|
|
222
|
+
lines.push(...renderFile(history), '');
|
|
223
|
+
}
|
|
224
|
+
lines.push('Each change is compared with the one below it, along the first-parent line of HEAD: a merged branch counts as ' +
|
|
225
|
+
'one change. Counts are ignored errors; a baseline entry can cover several.');
|
|
226
|
+
return lines.join('\n');
|
|
227
|
+
}
|
|
228
|
+
function renderFile(history) {
|
|
229
|
+
const committed = history.rows.filter((row) => row.commit !== null);
|
|
230
|
+
const newest = history.rows[0];
|
|
231
|
+
const lines = [headline(history, committed.length, newest?.count ?? null), ''];
|
|
232
|
+
for (const row of history.rows) {
|
|
233
|
+
const date = row.date === null ? 'working copy' : row.date.slice(0, 10);
|
|
234
|
+
const commit = row.commit === null ? '(not committed)' : row.commit.slice(0, 10);
|
|
235
|
+
const count = row.count === null ? '?' : String(row.count.errors);
|
|
236
|
+
const delta = row.delta === null ? '?' : signed(row.delta.errors);
|
|
237
|
+
const kolommen = ` ${date.padEnd(12)} ${commit.padEnd(15)} ${count.padStart(6)} ${delta.padStart(6)} `;
|
|
238
|
+
// De regels eronder beginnen onder het onderwerp.
|
|
239
|
+
const inspring = ' '.repeat(kolommen.length);
|
|
240
|
+
lines.push(`${kolommen}${row.subject ?? ''}`.trimEnd());
|
|
241
|
+
if (row.changes.length > 0) {
|
|
242
|
+
lines.push(`${inspring}${row.changes.map((change) => `${signed(change.change)} ${change.identifier}`).join(', ')}`);
|
|
243
|
+
}
|
|
244
|
+
if (row.file !== history.file) {
|
|
245
|
+
lines.push(`${inspring}(then named ${row.file})`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (history.olderCommits) {
|
|
249
|
+
lines.push('', `Older commits changed ${history.file} too; pass a higher limit (up to ${String(MAX_HISTORY_LIMIT)}) to see them.`);
|
|
250
|
+
}
|
|
251
|
+
return lines;
|
|
252
|
+
}
|
|
253
|
+
function headline(history, committed, now) {
|
|
254
|
+
const nu = now === null ? 'cannot be read now' : `ignores ${String(now.errors)} error(s) in ${String(now.entries)} ${now.entries === 1 ? 'entry' : 'entries'} now`;
|
|
255
|
+
if (committed === 0) {
|
|
256
|
+
return `${history.file} ${nu}. It has never been committed, so there is no history yet.`;
|
|
257
|
+
}
|
|
258
|
+
if (committed === 1 && !history.olderCommits && history.rows.length === 1) {
|
|
259
|
+
return `${history.file} ${nu}. Only one commit touched it, the one that created it; there is nothing to compare yet.`;
|
|
260
|
+
}
|
|
261
|
+
const start = history.start;
|
|
262
|
+
const end = now;
|
|
263
|
+
const verloop = start === null || end === null
|
|
264
|
+
? 'the net change is unknown because a version cannot be read'
|
|
265
|
+
: `${String(start.errors)} → ${String(end.errors)} ignored error(s) (net ${signed(end.errors - start.errors)})`;
|
|
266
|
+
const deltas = history.rows.flatMap((row) => (row.delta === null ? [] : [row.delta.errors]));
|
|
267
|
+
const erbij = deltas.filter((delta) => delta > 0).length;
|
|
268
|
+
const eraf = deltas.filter((delta) => delta < 0).length;
|
|
269
|
+
return (`${history.file} ${nu}. Over the last ${String(history.rows.length)} change(s): ${verloop}; ` +
|
|
270
|
+
`${String(erbij)} of them added errors, ${String(eraf)} removed some.`);
|
|
271
|
+
}
|
|
272
|
+
function signed(value) {
|
|
273
|
+
return value > 0 ? `+${String(value)}` : String(value);
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,8 @@ async function main() {
|
|
|
15
15
|
// stdio: het protocol zelf loopt over stdout. Alles wat deze server logt moet
|
|
16
16
|
// daarom naar stderr één console.log breekt de JSON-RPC-stroom.
|
|
17
17
|
await server.connect(new StdioServerTransport());
|
|
18
|
-
console.error(`phpstan-mcp ${VERSION} listening on stdio,
|
|
18
|
+
console.error(`phpstan-mcp ${VERSION} listening on stdio, ` +
|
|
19
|
+
(roots.length === 0 ? "no roots configured, so the client's directories (MCP roots) are in scope" : `${roots.length} root(s) configured`) +
|
|
19
20
|
describeMemoryDefault() +
|
|
20
21
|
describeMaxParallel() +
|
|
21
22
|
describeTmpDir() +
|
|
@@ -31,8 +32,9 @@ async function main() {
|
|
|
31
32
|
function describePhp() {
|
|
32
33
|
try {
|
|
33
34
|
const php = hostPhp();
|
|
34
|
-
if (php !== undefined)
|
|
35
|
+
if (php !== undefined) {
|
|
35
36
|
return `, PHP ${php}`;
|
|
37
|
+
}
|
|
36
38
|
return process.platform === 'win32'
|
|
37
39
|
? `, WARNING: no php.exe found on PATH; set ${PHP_ENV_VAR} or PHPStan cannot start`
|
|
38
40
|
: '';
|
|
@@ -79,8 +81,9 @@ function describeTmpDir() {
|
|
|
79
81
|
* en doet niets.
|
|
80
82
|
*/
|
|
81
83
|
function describeWrites() {
|
|
82
|
-
if (writesAllowed())
|
|
84
|
+
if (writesAllowed()) {
|
|
83
85
|
return ', writing tools on';
|
|
86
|
+
}
|
|
84
87
|
const configured = process.env[WRITES_ENV_VAR]?.trim();
|
|
85
88
|
return configured === undefined || configured === ''
|
|
86
89
|
? ''
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,KAAK,UAAU,IAAI;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,KAAK,UAAU,IAAI;IAEjB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnC,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IAEjD,OAAO,CAAC,KAAK,CACX,eAAe,OAAO,uBAAuB;QAC3C,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,2EAA2E,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,qBAAqB,CAAC;QACzI,qBAAqB,EAAE;QACvB,mBAAmB,EAAE;QACrB,cAAc,EAAE;QAChB,cAAc,EAAE;QAChB,WAAW,EAAE;QACb,uBAAuB,EAAE,CAC5B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW;IAElB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QAEtB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,SAAS,GAAG,EAAE,CAAC;QACxB,CAAC;QAED,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO;YACjC,CAAC,CAAC,4CAA4C,WAAW,0BAA0B;YACnF,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC,IAAI,CAAC;QAC1C,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH;;;GAGG;AACH,SAAS,cAAc;IAErB,IAAI,CAAC;QACH,OAAO,cAAc,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc;IAErB,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IACvD,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE;QAClD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,cAAc,cAAc,eAAe,UAAU,uCAAuC,CAAC;AACnG,CAAC;AAED,sEAAsE;AACtE,SAAS,mBAAmB;IAE1B,IAAI,CAAC;QACH,OAAO,aAAa,MAAM,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB;IAE5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;QACvC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,8EAA8E;IAC9E,gFAAgF;IAChF,+CAA+C;IAC/C,OAAO,CAAC,KAAK,CACX,8BAA8B,EAC9B,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACrD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/php.js
CHANGED
|
@@ -19,8 +19,9 @@ const VOORBEELD = 'C:\\Users\\you\\.config\\herd\\bin\\php85\\php.exe';
|
|
|
19
19
|
*/
|
|
20
20
|
export function loadPhpBinary(env = process.env) {
|
|
21
21
|
const configured = (env[PHP_ENV_VAR] ?? fromConfig('php', env))?.trim();
|
|
22
|
-
if (configured === undefined || configured === '')
|
|
22
|
+
if (configured === undefined || configured === '') {
|
|
23
23
|
return undefined;
|
|
24
|
+
}
|
|
24
25
|
if (!path.isAbsolute(configured)) {
|
|
25
26
|
throw new PhpstanError(`${PHP_ENV_VAR} is set to "${configured}", which is not an absolute path. ` +
|
|
26
27
|
`Point it at the PHP binary itself, for example ${VOORBEELD}.`, 'invalid_setting');
|
|
@@ -47,11 +48,13 @@ export function findPhpOnPath(env = process.env, host = path, exists = isFile) {
|
|
|
47
48
|
const dirs = (env['PATH'] ?? env['Path'] ?? '').split(host.delimiter);
|
|
48
49
|
for (const dir of dirs) {
|
|
49
50
|
const schoon = dir.trim().replace(/^"(.*)"$/, '$1');
|
|
50
|
-
if (schoon === '')
|
|
51
|
+
if (schoon === '') {
|
|
51
52
|
continue;
|
|
53
|
+
}
|
|
52
54
|
const kandidaat = host.join(schoon, 'php.exe');
|
|
53
|
-
if (exists(kandidaat))
|
|
55
|
+
if (exists(kandidaat)) {
|
|
54
56
|
return kandidaat;
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
59
|
return undefined;
|
|
57
60
|
}
|
|
@@ -76,10 +79,12 @@ export function hostPhp(env = process.env, platform = process.platform) {
|
|
|
76
79
|
* versie mee kunt kiezen.
|
|
77
80
|
*/
|
|
78
81
|
export function planHostStart(binary, php, platform = process.platform) {
|
|
79
|
-
if (php !== undefined)
|
|
82
|
+
if (php !== undefined) {
|
|
80
83
|
return { file: php, prefix: [binary] };
|
|
81
|
-
|
|
84
|
+
}
|
|
85
|
+
if (platform !== 'win32') {
|
|
82
86
|
return { file: binary, prefix: [] };
|
|
87
|
+
}
|
|
83
88
|
throw new PhpstanError('PHPStan cannot be started on Windows without php.exe: vendor/bin/phpstan is a PHP script, ' +
|
|
84
89
|
'and Windows does not run it by itself. No php.exe was found on PATH (a php.bat, as Herd ' +
|
|
85
90
|
`installs, cannot be started without a shell). Set ${PHP_ENV_VAR} to the absolute path of php.exe.`, 'invalid_setting', { hint: `Set ${PHP_ENV_VAR} in the server configuration, for example to ${VOORBEELD}.` });
|