@matrixai/lint 0.4.4 → 0.4.6
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/README.md +34 -4
- package/dist/LintDomainPluginBase.d.ts +9 -0
- package/dist/LintDomainPluginBase.js +12 -0
- package/dist/LintDomainPluginBase.js.map +1 -0
- package/dist/bin/matrixai-lint.js +7 -2
- package/dist/bin/matrixai-lint.js.map +1 -1
- package/dist/configs/eslint.d.ts +0 -5
- package/dist/configs/eslint.js +6 -2
- package/dist/configs/eslint.js.map +1 -1
- package/dist/domainEngine.d.ts +32 -0
- package/dist/{domains/engine.js → domainEngine.js} +1 -1
- package/dist/{domains/engine.js.map → domainEngine.js.map} +1 -1
- package/dist/{domains/index.d.ts → domains.d.ts} +4 -3
- package/dist/{domains/index.js → domains.js} +28 -15
- package/dist/domains.js.map +1 -0
- package/dist/eslint/ESLintDomainPlugin.d.ts +9 -0
- package/dist/eslint/ESLintDomainPlugin.js +86 -0
- package/dist/eslint/ESLintDomainPlugin.js.map +1 -0
- package/dist/eslint/rules/no-aliased-imports.js.map +1 -0
- package/dist/eslint/utils.d.ts +15 -0
- package/dist/eslint/utils.js +271 -0
- package/dist/eslint/utils.js.map +1 -0
- package/dist/markdown/MarkdownDomainPlugin.d.ts +11 -0
- package/dist/markdown/MarkdownDomainPlugin.js +116 -0
- package/dist/markdown/MarkdownDomainPlugin.js.map +1 -0
- package/dist/nix/NixDomainPlugin.d.ts +11 -0
- package/dist/nix/NixDomainPlugin.js +73 -0
- package/dist/nix/NixDomainPlugin.js.map +1 -0
- package/dist/shell/ShellDomainPlugin.d.ts +11 -0
- package/dist/shell/ShellDomainPlugin.js +65 -0
- package/dist/shell/ShellDomainPlugin.js.map +1 -0
- package/dist/tsbuildinfo +1 -1
- package/dist/types.d.ts +46 -2
- package/dist/utils.d.ts +5 -49
- package/dist/utils.js +150 -276
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
- package/dist/domains/engine.d.ts +0 -72
- package/dist/domains/eslint.d.ts +0 -3
- package/dist/domains/eslint.js +0 -92
- package/dist/domains/eslint.js.map +0 -1
- package/dist/domains/files.d.ts +0 -5
- package/dist/domains/files.js +0 -185
- package/dist/domains/files.js.map +0 -1
- package/dist/domains/index.js.map +0 -1
- package/dist/domains/markdown.d.ts +0 -5
- package/dist/domains/markdown.js +0 -117
- package/dist/domains/markdown.js.map +0 -1
- package/dist/domains/shell.d.ts +0 -5
- package/dist/domains/shell.js +0 -67
- package/dist/domains/shell.js.map +0 -1
- package/dist/plugins/eslint-plugin-matrixai.d.ts +0 -18
- package/dist/plugins/eslint-plugin-matrixai.js +0 -13
- package/dist/plugins/eslint-plugin-matrixai.js.map +0 -1
- package/dist/rules/no-aliased-imports.js.map +0 -1
- /package/dist/{rules → eslint/rules}/no-aliased-imports.d.ts +0 -0
- /package/dist/{rules → eslint/rules}/no-aliased-imports.js +0 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import url from 'node:url';
|
|
5
|
+
import ts from 'typescript';
|
|
6
|
+
import { ESLint } from 'eslint';
|
|
7
|
+
import { resolveLintConfig } from '../config.js';
|
|
8
|
+
const ESLINT_TARGET_EXTENSIONS = [
|
|
9
|
+
'js',
|
|
10
|
+
'mjs',
|
|
11
|
+
'cjs',
|
|
12
|
+
'jsx',
|
|
13
|
+
'ts',
|
|
14
|
+
'tsx',
|
|
15
|
+
'mts',
|
|
16
|
+
'cts',
|
|
17
|
+
'json',
|
|
18
|
+
];
|
|
19
|
+
const ESLINT_TARGET_EXTENSION_GLOB = `.{${ESLINT_TARGET_EXTENSIONS.join(',')}}`;
|
|
20
|
+
const DEFAULT_IGNORE_PATTERNS = [
|
|
21
|
+
'node_modules/**',
|
|
22
|
+
'bower_components/**',
|
|
23
|
+
'jspm_packages/**',
|
|
24
|
+
];
|
|
25
|
+
const GLOB_META_PATTERN = /[*?[\]{}()!+@]/;
|
|
26
|
+
async function runESLint({ fix, configPath, explicitGlobs, resolvedConfig, logger, }) {
|
|
27
|
+
const dirname = path.dirname(url.fileURLToPath(import.meta.url));
|
|
28
|
+
const defaultConfigPath = path.resolve(dirname, '../configs/eslint.js');
|
|
29
|
+
const resolvedConfigPath = configPath || defaultConfigPath;
|
|
30
|
+
const lintConfig = resolvedConfig ?? resolveLintConfig();
|
|
31
|
+
const parserProjectOverride = {
|
|
32
|
+
languageOptions: {
|
|
33
|
+
parserOptions: {
|
|
34
|
+
project: lintConfig.domains.eslint.tsconfigPaths,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
if (explicitGlobs?.length) {
|
|
39
|
+
logger.info('Linting with explicit patterns:');
|
|
40
|
+
explicitGlobs.forEach((pattern) => {
|
|
41
|
+
logger.info(`Linting: ${pattern}`);
|
|
42
|
+
});
|
|
43
|
+
const eslint = new ESLint({
|
|
44
|
+
overrideConfigFile: resolvedConfigPath,
|
|
45
|
+
fix,
|
|
46
|
+
errorOnUnmatchedPattern: false,
|
|
47
|
+
warnIgnored: false,
|
|
48
|
+
ignorePatterns: [],
|
|
49
|
+
cache: true,
|
|
50
|
+
cacheLocation: '.cache/matrixai-lint/eslint/.eslintcache',
|
|
51
|
+
cacheStrategy: 'content',
|
|
52
|
+
overrideConfig: parserProjectOverride,
|
|
53
|
+
});
|
|
54
|
+
return await lintAndReport(eslint, explicitGlobs, fix, logger);
|
|
55
|
+
}
|
|
56
|
+
const { forceInclude, tsconfigPaths } = lintConfig.domains.eslint;
|
|
57
|
+
if (tsconfigPaths.length === 0) {
|
|
58
|
+
logger.error('[matrixai-lint] ⚠ No tsconfig.json files found.');
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
logger.info(`Found ${tsconfigPaths.length} tsconfig.json files:`);
|
|
62
|
+
tsconfigPaths.forEach((tsconfigPath) => {
|
|
63
|
+
logger.info(`Using tsconfig: ${tsconfigPath}`);
|
|
64
|
+
});
|
|
65
|
+
const { files: patterns, ignore: ignorePats } = buildPatterns(tsconfigPaths, forceInclude, process.cwd(), lintConfig.root);
|
|
66
|
+
if (patterns.length === 0) {
|
|
67
|
+
logger.warn('[matrixai-lint] ⚠ No ESLint targets were derived from configured tsconfig paths.');
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
logger.info('Linting files:');
|
|
71
|
+
patterns.forEach((pattern) => {
|
|
72
|
+
logger.info(`Linting: ${pattern}`);
|
|
73
|
+
});
|
|
74
|
+
const eslint = new ESLint({
|
|
75
|
+
overrideConfigFile: resolvedConfigPath,
|
|
76
|
+
fix,
|
|
77
|
+
errorOnUnmatchedPattern: false,
|
|
78
|
+
warnIgnored: false,
|
|
79
|
+
ignorePatterns: ignorePats,
|
|
80
|
+
cache: true,
|
|
81
|
+
cacheLocation: '.cache/matrixai-lint/eslint/.eslintcache',
|
|
82
|
+
cacheStrategy: 'content',
|
|
83
|
+
overrideConfig: parserProjectOverride,
|
|
84
|
+
});
|
|
85
|
+
return await lintAndReport(eslint, patterns, fix, logger);
|
|
86
|
+
}
|
|
87
|
+
async function lintAndReport(eslint, patterns, fix, logger) {
|
|
88
|
+
const results = await eslint.lintFiles(patterns);
|
|
89
|
+
if (fix) {
|
|
90
|
+
await ESLint.outputFixes(results);
|
|
91
|
+
}
|
|
92
|
+
const errorCount = results.reduce((sum, result) => sum + result.errorCount, 0);
|
|
93
|
+
const warningCount = results.reduce((sum, result) => sum + result.warningCount, 0);
|
|
94
|
+
logger.info(`ESLint summary: files=${results.length} errors=${errorCount} warnings=${warningCount} fix=${fix ? 'on' : 'off'}`);
|
|
95
|
+
const formatter = await eslint.loadFormatter('stylish');
|
|
96
|
+
const formattedOutput = await formatter.format(results);
|
|
97
|
+
for (const line of formattedOutput.split(/\r?\n/)) {
|
|
98
|
+
const normalizedLine = line.trim();
|
|
99
|
+
if (normalizedLine.length > 0) {
|
|
100
|
+
logger.info(`ESLint detail: ${normalizedLine}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const hasErrors = errorCount > 0;
|
|
104
|
+
return hasErrors;
|
|
105
|
+
}
|
|
106
|
+
function findUserESLintConfig(repoRoot = process.cwd()) {
|
|
107
|
+
const candidates = [
|
|
108
|
+
'eslint.config.js',
|
|
109
|
+
'eslint.config.mjs',
|
|
110
|
+
'eslint.config.cjs',
|
|
111
|
+
'eslint.config.ts',
|
|
112
|
+
];
|
|
113
|
+
for (const file of candidates) {
|
|
114
|
+
const abs = path.join(repoRoot, file);
|
|
115
|
+
if (fs.existsSync(abs))
|
|
116
|
+
return abs;
|
|
117
|
+
}
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
function toStringArray(value) {
|
|
121
|
+
if (typeof value === 'string') {
|
|
122
|
+
return [value];
|
|
123
|
+
}
|
|
124
|
+
if (Array.isArray(value)) {
|
|
125
|
+
return value.filter((item) => typeof item === 'string');
|
|
126
|
+
}
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
function dedupeAndSort(values) {
|
|
130
|
+
return [...new Set(values)].sort();
|
|
131
|
+
}
|
|
132
|
+
function normalizeGlobValue(value) {
|
|
133
|
+
return value.trim().replace(/\\/g, '/').replace(/^\.\//, '');
|
|
134
|
+
}
|
|
135
|
+
function rebasePatternToCwd({ pattern, baseDir, cwd, }) {
|
|
136
|
+
const normalizedPattern = normalizeGlobValue(pattern);
|
|
137
|
+
if (normalizedPattern.length === 0) {
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
const platformPattern = normalizedPattern.split('/').join(path.sep);
|
|
141
|
+
const absolutePattern = path.isAbsolute(platformPattern)
|
|
142
|
+
? platformPattern
|
|
143
|
+
: path.resolve(baseDir, platformPattern);
|
|
144
|
+
const relativePattern = path
|
|
145
|
+
.relative(cwd, absolutePattern)
|
|
146
|
+
.split(path.sep)
|
|
147
|
+
.join('/');
|
|
148
|
+
if (relativePattern.length === 0) {
|
|
149
|
+
return '.';
|
|
150
|
+
}
|
|
151
|
+
return normalizeGlobValue(relativePattern);
|
|
152
|
+
}
|
|
153
|
+
function hasExtensionOrGlobExtensionPattern(value) {
|
|
154
|
+
return /(^|\/)[^/]*\.[^/]*$/.test(value);
|
|
155
|
+
}
|
|
156
|
+
function expandExtensionlessPattern(value) {
|
|
157
|
+
const normalized = normalizeGlobValue(value).replace(/\/+$/, '');
|
|
158
|
+
if (normalized.length === 0) {
|
|
159
|
+
return '';
|
|
160
|
+
}
|
|
161
|
+
if (hasExtensionOrGlobExtensionPattern(normalized)) {
|
|
162
|
+
return normalized;
|
|
163
|
+
}
|
|
164
|
+
if (!GLOB_META_PATTERN.test(normalized)) {
|
|
165
|
+
return `${normalized}/**/*${ESLINT_TARGET_EXTENSION_GLOB}`;
|
|
166
|
+
}
|
|
167
|
+
if (normalized === '**') {
|
|
168
|
+
return `**/*${ESLINT_TARGET_EXTENSION_GLOB}`;
|
|
169
|
+
}
|
|
170
|
+
if (normalized.endsWith('/**')) {
|
|
171
|
+
return `${normalized}/*${ESLINT_TARGET_EXTENSION_GLOB}`;
|
|
172
|
+
}
|
|
173
|
+
return `${normalized}${ESLINT_TARGET_EXTENSION_GLOB}`;
|
|
174
|
+
}
|
|
175
|
+
function normalizeIncludePatterns(values) {
|
|
176
|
+
return dedupeAndSort(values
|
|
177
|
+
.map((value) => expandExtensionlessPattern(value))
|
|
178
|
+
.filter((value) => value.length > 0));
|
|
179
|
+
}
|
|
180
|
+
function normalizeExcludePatterns(values) {
|
|
181
|
+
return dedupeAndSort(values
|
|
182
|
+
.map((value) => normalizeGlobValue(value).replace(/\/+$/, ''))
|
|
183
|
+
.filter((value) => value.length > 0));
|
|
184
|
+
}
|
|
185
|
+
function patternPrefix(value) {
|
|
186
|
+
const normalized = normalizeGlobValue(value);
|
|
187
|
+
const segments = normalized
|
|
188
|
+
.split('/')
|
|
189
|
+
.filter((segment) => segment.length > 0);
|
|
190
|
+
const prefixSegments = [];
|
|
191
|
+
for (const segment of segments) {
|
|
192
|
+
if (GLOB_META_PATTERN.test(segment)) {
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
prefixSegments.push(segment);
|
|
196
|
+
}
|
|
197
|
+
return prefixSegments.join('/');
|
|
198
|
+
}
|
|
199
|
+
function patternsOverlapByPrefix(left, right) {
|
|
200
|
+
if (left === right) {
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
const leftPrefix = patternPrefix(left);
|
|
204
|
+
const rightPrefix = patternPrefix(right);
|
|
205
|
+
if (leftPrefix.length === 0 || rightPrefix.length === 0) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
return (leftPrefix === rightPrefix ||
|
|
209
|
+
leftPrefix.startsWith(`${rightPrefix}/`) ||
|
|
210
|
+
rightPrefix.startsWith(`${leftPrefix}/`));
|
|
211
|
+
}
|
|
212
|
+
function buildPatterns(tsconfigPaths, forceInclude = [], cwd = process.cwd(), forceIncludeBaseDir = cwd) {
|
|
213
|
+
const normalizedForceInclude = normalizeIncludePatterns(forceInclude.map((value) => rebasePatternToCwd({ pattern: value, baseDir: forceIncludeBaseDir, cwd })));
|
|
214
|
+
const forceIncludeRaw = dedupeAndSort(forceInclude
|
|
215
|
+
.map((value) => rebasePatternToCwd({
|
|
216
|
+
pattern: value,
|
|
217
|
+
baseDir: forceIncludeBaseDir,
|
|
218
|
+
cwd,
|
|
219
|
+
}))
|
|
220
|
+
.map((value) => normalizeGlobValue(value).replace(/\/+$/, ''))
|
|
221
|
+
.filter((value) => value.length > 0));
|
|
222
|
+
const includePatternsByTsconfig = [];
|
|
223
|
+
const excludePatternsByTsconfig = [];
|
|
224
|
+
for (const tsconfigPath of tsconfigPaths) {
|
|
225
|
+
if (!fs.existsSync(tsconfigPath)) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const tsconfigDir = path.dirname(tsconfigPath);
|
|
229
|
+
const readResult = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
|
|
230
|
+
if (readResult.error != null || readResult.config == null) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const config = readResult.config;
|
|
234
|
+
const rawInclude = toStringArray(config.include).map((pattern) => rebasePatternToCwd({ pattern, baseDir: tsconfigDir, cwd }));
|
|
235
|
+
const defaultInclude = rebasePatternToCwd({
|
|
236
|
+
pattern: '**/*',
|
|
237
|
+
baseDir: tsconfigDir,
|
|
238
|
+
cwd,
|
|
239
|
+
});
|
|
240
|
+
const normalizedInclude = normalizeIncludePatterns(rawInclude.length > 0 ? rawInclude : [defaultInclude]);
|
|
241
|
+
const normalizedExclude = normalizeExcludePatterns(toStringArray(config.exclude).map((pattern) => rebasePatternToCwd({ pattern, baseDir: tsconfigDir, cwd })));
|
|
242
|
+
includePatternsByTsconfig.push(normalizedInclude);
|
|
243
|
+
excludePatternsByTsconfig.push(normalizedExclude);
|
|
244
|
+
}
|
|
245
|
+
const include = dedupeAndSort([
|
|
246
|
+
...includePatternsByTsconfig.flat(),
|
|
247
|
+
...normalizedForceInclude,
|
|
248
|
+
]);
|
|
249
|
+
const ignoreCandidates = [];
|
|
250
|
+
excludePatternsByTsconfig.forEach((excludePatterns, index) => {
|
|
251
|
+
if (excludePatterns.length === 0) {
|
|
252
|
+
ignoreCandidates.push(...DEFAULT_IGNORE_PATTERNS);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
for (const excludePattern of excludePatterns) {
|
|
256
|
+
const overlappedByOtherTsconfigInclude = includePatternsByTsconfig.some((includePatterns, includeIndex) => includeIndex !== index &&
|
|
257
|
+
includePatterns.some((includePattern) => patternsOverlapByPrefix(includePattern, excludePattern)));
|
|
258
|
+
if (!overlappedByOtherTsconfigInclude) {
|
|
259
|
+
ignoreCandidates.push(excludePattern);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
const ignore = dedupeAndSort(ignoreCandidates).filter((ignorePattern) => {
|
|
264
|
+
const overlappedByNormalized = normalizedForceInclude.some((forceIncludePattern) => patternsOverlapByPrefix(ignorePattern, forceIncludePattern));
|
|
265
|
+
const overlappedByRaw = forceIncludeRaw.some((forceIncludePattern) => patternsOverlapByPrefix(ignorePattern, forceIncludePattern));
|
|
266
|
+
return !overlappedByNormalized && !overlappedByRaw;
|
|
267
|
+
});
|
|
268
|
+
return { files: include, ignore };
|
|
269
|
+
}
|
|
270
|
+
export { buildPatterns, findUserESLintConfig, runESLint };
|
|
271
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/eslint/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LintDomainDetection, LintDomainEngineContext, LintDomainPluginResult } from '../types.js';
|
|
2
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
3
|
+
declare class MarkdownDomainPlugin extends LintDomainPluginBase {
|
|
4
|
+
private readonly prettierConfigPath;
|
|
5
|
+
readonly domain = "markdown";
|
|
6
|
+
readonly description = "Format and check Markdown/MDX files with Prettier.";
|
|
7
|
+
constructor(prettierConfigPath: string);
|
|
8
|
+
detect({ markdownPatterns, }: LintDomainEngineContext): LintDomainDetection;
|
|
9
|
+
run({ fix, logger }: LintDomainEngineContext, detection: LintDomainDetection): LintDomainPluginResult;
|
|
10
|
+
}
|
|
11
|
+
export default MarkdownDomainPlugin;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import childProcess from 'node:child_process';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
7
|
+
import { resolveFilesFromPatterns } from '../utils.js';
|
|
8
|
+
const platform = os.platform();
|
|
9
|
+
const MARKDOWN_FILE_EXTENSIONS = ['.md', '.mdx'];
|
|
10
|
+
const DEFAULT_MARKDOWN_ROOT_FILES = ['README.md', 'AGENTS.md'];
|
|
11
|
+
const DEFAULT_MARKDOWN_SEARCH_ROOTS = [
|
|
12
|
+
'./README.md',
|
|
13
|
+
'./AGENTS.md',
|
|
14
|
+
'./pages',
|
|
15
|
+
'./blog',
|
|
16
|
+
'./docs',
|
|
17
|
+
];
|
|
18
|
+
function collectMarkdownFilesFromScope(patterns) {
|
|
19
|
+
const matchedRelativeFiles = resolveFilesFromPatterns(patterns, MARKDOWN_FILE_EXTENSIONS);
|
|
20
|
+
for (const rootFile of [...DEFAULT_MARKDOWN_ROOT_FILES].reverse()) {
|
|
21
|
+
if (!matchedRelativeFiles.includes(rootFile) && fs.existsSync(rootFile)) {
|
|
22
|
+
matchedRelativeFiles.unshift(rootFile);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return matchedRelativeFiles;
|
|
26
|
+
}
|
|
27
|
+
function resolveMarkdownPatterns(markdownPatterns) {
|
|
28
|
+
return markdownPatterns != null && markdownPatterns.length > 0
|
|
29
|
+
? [...markdownPatterns]
|
|
30
|
+
: [...DEFAULT_MARKDOWN_SEARCH_ROOTS];
|
|
31
|
+
}
|
|
32
|
+
class MarkdownDomainPlugin extends LintDomainPluginBase {
|
|
33
|
+
prettierConfigPath;
|
|
34
|
+
domain = 'markdown';
|
|
35
|
+
description = 'Format and check Markdown/MDX files with Prettier.';
|
|
36
|
+
constructor(prettierConfigPath) {
|
|
37
|
+
super();
|
|
38
|
+
this.prettierConfigPath = prettierConfigPath;
|
|
39
|
+
}
|
|
40
|
+
detect({ markdownPatterns, }) {
|
|
41
|
+
const patterns = resolveMarkdownPatterns(markdownPatterns);
|
|
42
|
+
const matchedFiles = collectMarkdownFilesFromScope(patterns);
|
|
43
|
+
return {
|
|
44
|
+
relevant: matchedFiles.length > 0,
|
|
45
|
+
relevanceReason: matchedFiles.length > 0
|
|
46
|
+
? undefined
|
|
47
|
+
: 'No Markdown/MDX files matched in effective scope.',
|
|
48
|
+
available: true,
|
|
49
|
+
availabilityKind: 'required',
|
|
50
|
+
matchedFiles,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
run({ fix, logger }, detection) {
|
|
54
|
+
const markdownFiles = detection.matchedFiles ?? [];
|
|
55
|
+
if (markdownFiles.length === 0) {
|
|
56
|
+
return { hadFailure: false };
|
|
57
|
+
}
|
|
58
|
+
const prettierArgs = [
|
|
59
|
+
'--config',
|
|
60
|
+
this.prettierConfigPath,
|
|
61
|
+
'--config-precedence',
|
|
62
|
+
'cli-override',
|
|
63
|
+
'--no-editorconfig',
|
|
64
|
+
fix ? '--write' : '--check',
|
|
65
|
+
...markdownFiles,
|
|
66
|
+
];
|
|
67
|
+
logger.info('Running prettier:');
|
|
68
|
+
const require = createRequire(import.meta.url);
|
|
69
|
+
let prettierBin = null;
|
|
70
|
+
try {
|
|
71
|
+
// Resolves to @matrixai/lint/node_modules/prettier/bin/prettier.cjs
|
|
72
|
+
prettierBin = require.resolve('prettier/bin/prettier.cjs');
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Bundled copy not found
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
if (prettierBin) {
|
|
79
|
+
logger.info(`Running prettier command: ${process.execPath} ${prettierBin} ${prettierArgs.join(' ')}`);
|
|
80
|
+
childProcess.execFileSync(process.execPath, [prettierBin, ...prettierArgs], {
|
|
81
|
+
stdio: 'inherit',
|
|
82
|
+
windowsHide: true,
|
|
83
|
+
encoding: 'utf-8',
|
|
84
|
+
cwd: process.cwd(),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
logger.info(`Running prettier command: prettier ${prettierArgs.join(' ')}`);
|
|
89
|
+
childProcess.execFileSync('prettier', prettierArgs, {
|
|
90
|
+
stdio: 'inherit',
|
|
91
|
+
windowsHide: true,
|
|
92
|
+
encoding: 'utf-8',
|
|
93
|
+
shell: platform === 'win32',
|
|
94
|
+
cwd: process.cwd(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
const errorDetail = this.normalizeLogDetail(err);
|
|
100
|
+
if (!fix) {
|
|
101
|
+
logger.error(errorDetail.length > 0
|
|
102
|
+
? `Prettier check failed. ${errorDetail}`
|
|
103
|
+
: 'Prettier check failed.');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
logger.error(errorDetail.length > 0
|
|
107
|
+
? `Prettier write failed. ${errorDetail}`
|
|
108
|
+
: 'Prettier write failed.');
|
|
109
|
+
}
|
|
110
|
+
return { hadFailure: true };
|
|
111
|
+
}
|
|
112
|
+
return { hadFailure: false };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export default MarkdownDomainPlugin;
|
|
116
|
+
//# sourceMappingURL=MarkdownDomainPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownDomainPlugin.js","sourceRoot":"","sources":["../../src/markdown/MarkdownDomainPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LintDomainDetection, LintDomainEngineContext, LintDomainPluginResult } from '../types.js';
|
|
2
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
3
|
+
declare class NixDomainPlugin extends LintDomainPluginBase {
|
|
4
|
+
private readonly defaultSearchPatterns;
|
|
5
|
+
readonly domain = "nix";
|
|
6
|
+
readonly description = "Format and check Nix files with nixfmt when available.";
|
|
7
|
+
constructor(defaultSearchPatterns: readonly string[]);
|
|
8
|
+
detect({ nixPatterns }: LintDomainEngineContext): LintDomainDetection;
|
|
9
|
+
run({ fix, logger }: LintDomainEngineContext, detection: LintDomainDetection): LintDomainPluginResult;
|
|
10
|
+
}
|
|
11
|
+
export default NixDomainPlugin;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import childProcess from 'node:child_process';
|
|
4
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
5
|
+
import { commandExists, resolveFilesFromPatterns } from '../utils.js';
|
|
6
|
+
const platform = os.platform();
|
|
7
|
+
const NIX_FILE_EXTENSIONS = ['.nix'];
|
|
8
|
+
function resolveNixPatterns(nixPatterns, defaultSearchPatterns) {
|
|
9
|
+
return nixPatterns != null && nixPatterns.length > 0
|
|
10
|
+
? [...nixPatterns]
|
|
11
|
+
: [...defaultSearchPatterns];
|
|
12
|
+
}
|
|
13
|
+
class NixDomainPlugin extends LintDomainPluginBase {
|
|
14
|
+
defaultSearchPatterns;
|
|
15
|
+
domain = 'nix';
|
|
16
|
+
description = 'Format and check Nix files with nixfmt when available.';
|
|
17
|
+
constructor(defaultSearchPatterns) {
|
|
18
|
+
super();
|
|
19
|
+
this.defaultSearchPatterns = defaultSearchPatterns;
|
|
20
|
+
}
|
|
21
|
+
detect({ nixPatterns }) {
|
|
22
|
+
const patterns = resolveNixPatterns(nixPatterns, this.defaultSearchPatterns);
|
|
23
|
+
const matchedFiles = resolveFilesFromPatterns(patterns, NIX_FILE_EXTENSIONS);
|
|
24
|
+
const hasNixfmt = commandExists('nixfmt');
|
|
25
|
+
return {
|
|
26
|
+
relevant: matchedFiles.length > 0,
|
|
27
|
+
relevanceReason: matchedFiles.length > 0
|
|
28
|
+
? undefined
|
|
29
|
+
: 'No Nix files matched in effective scope.',
|
|
30
|
+
available: hasNixfmt,
|
|
31
|
+
availabilityKind: 'optional',
|
|
32
|
+
unavailableReason: hasNixfmt
|
|
33
|
+
? undefined
|
|
34
|
+
: 'nixfmt not found in environment.',
|
|
35
|
+
matchedFiles,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
run({ fix, logger }, detection) {
|
|
39
|
+
const matchedFiles = detection.matchedFiles ?? [];
|
|
40
|
+
if (matchedFiles.length === 0) {
|
|
41
|
+
return { hadFailure: false };
|
|
42
|
+
}
|
|
43
|
+
const nixfmtArgs = [...(fix ? [] : ['--check']), ...matchedFiles];
|
|
44
|
+
logger.info(fix ? 'Running nixfmt write:' : 'Running nixfmt check:');
|
|
45
|
+
logger.info(`Running nixfmt command: nixfmt ${nixfmtArgs.join(' ')}`);
|
|
46
|
+
try {
|
|
47
|
+
childProcess.execFileSync('nixfmt', nixfmtArgs, {
|
|
48
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
49
|
+
windowsHide: true,
|
|
50
|
+
encoding: 'utf-8',
|
|
51
|
+
shell: platform === 'win32',
|
|
52
|
+
cwd: process.cwd(),
|
|
53
|
+
});
|
|
54
|
+
return { hadFailure: false };
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const errorDetail = this.normalizeLogDetail(err);
|
|
58
|
+
if (!fix) {
|
|
59
|
+
logger.error(errorDetail.length > 0
|
|
60
|
+
? `nixfmt check failed. ${errorDetail}`
|
|
61
|
+
: 'nixfmt check failed.');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
logger.error(errorDetail.length > 0
|
|
65
|
+
? `nixfmt write failed. ${errorDetail}`
|
|
66
|
+
: 'nixfmt write failed.');
|
|
67
|
+
}
|
|
68
|
+
return { hadFailure: true };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export default NixDomainPlugin;
|
|
73
|
+
//# sourceMappingURL=NixDomainPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NixDomainPlugin.js","sourceRoot":"","sources":["../../src/nix/NixDomainPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LintDomainDetection, LintDomainEngineContext, LintDomainPluginResult } from '../types.js';
|
|
2
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
3
|
+
declare class ShellDomainPlugin extends LintDomainPluginBase {
|
|
4
|
+
private readonly defaultSearchRoots;
|
|
5
|
+
readonly domain = "shell";
|
|
6
|
+
readonly description = "Lint shell scripts with shellcheck when available.";
|
|
7
|
+
constructor(defaultSearchRoots: readonly string[]);
|
|
8
|
+
detect({ shellPatterns, }: LintDomainEngineContext): LintDomainDetection;
|
|
9
|
+
run({ logger }: LintDomainEngineContext, detection: LintDomainDetection): LintDomainPluginResult;
|
|
10
|
+
}
|
|
11
|
+
export default ShellDomainPlugin;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import childProcess from 'node:child_process';
|
|
4
|
+
import LintDomainPluginBase from '../LintDomainPluginBase.js';
|
|
5
|
+
import { commandExists, resolveFilesFromPatterns } from '../utils.js';
|
|
6
|
+
const platform = os.platform();
|
|
7
|
+
const SHELL_FILE_EXTENSIONS = ['.sh'];
|
|
8
|
+
function resolveShellPatterns(shellPatterns, defaultSearchRoots) {
|
|
9
|
+
return shellPatterns != null && shellPatterns.length > 0
|
|
10
|
+
? [...shellPatterns]
|
|
11
|
+
: [...defaultSearchRoots];
|
|
12
|
+
}
|
|
13
|
+
class ShellDomainPlugin extends LintDomainPluginBase {
|
|
14
|
+
defaultSearchRoots;
|
|
15
|
+
domain = 'shell';
|
|
16
|
+
description = 'Lint shell scripts with shellcheck when available.';
|
|
17
|
+
constructor(defaultSearchRoots) {
|
|
18
|
+
super();
|
|
19
|
+
this.defaultSearchRoots = defaultSearchRoots;
|
|
20
|
+
}
|
|
21
|
+
detect({ shellPatterns, }) {
|
|
22
|
+
const patterns = resolveShellPatterns(shellPatterns, this.defaultSearchRoots);
|
|
23
|
+
const matchedFiles = resolveFilesFromPatterns(patterns, SHELL_FILE_EXTENSIONS);
|
|
24
|
+
const hasShellcheck = commandExists('shellcheck');
|
|
25
|
+
return {
|
|
26
|
+
relevant: matchedFiles.length > 0,
|
|
27
|
+
relevanceReason: matchedFiles.length > 0
|
|
28
|
+
? undefined
|
|
29
|
+
: 'No shell script files matched in effective scope.',
|
|
30
|
+
available: hasShellcheck,
|
|
31
|
+
availabilityKind: 'optional',
|
|
32
|
+
unavailableReason: hasShellcheck
|
|
33
|
+
? undefined
|
|
34
|
+
: 'shellcheck not found in environment.',
|
|
35
|
+
matchedFiles,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
run({ logger }, detection) {
|
|
39
|
+
const matchedFiles = detection.matchedFiles ?? [];
|
|
40
|
+
if (matchedFiles.length === 0) {
|
|
41
|
+
return { hadFailure: false };
|
|
42
|
+
}
|
|
43
|
+
logger.info('Running shellcheck:');
|
|
44
|
+
logger.info(`Running shellcheck command: shellcheck ${matchedFiles.join(' ')}`);
|
|
45
|
+
try {
|
|
46
|
+
childProcess.execFileSync('shellcheck', matchedFiles, {
|
|
47
|
+
stdio: ['inherit', 'inherit', 'inherit'],
|
|
48
|
+
windowsHide: true,
|
|
49
|
+
encoding: 'utf-8',
|
|
50
|
+
shell: platform === 'win32',
|
|
51
|
+
cwd: process.cwd(),
|
|
52
|
+
});
|
|
53
|
+
return { hadFailure: false };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const errorDetail = this.normalizeLogDetail(err);
|
|
57
|
+
logger.error(errorDetail.length > 0
|
|
58
|
+
? `Shellcheck failed. ${errorDetail}`
|
|
59
|
+
: 'Shellcheck failed.');
|
|
60
|
+
return { hadFailure: true };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export default ShellDomainPlugin;
|
|
65
|
+
//# sourceMappingURL=ShellDomainPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellDomainPlugin.js","sourceRoot":"","sources":["../../src/shell/ShellDomainPlugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,oBAAoB,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE/B,MAAM,qBAAqB,GAAG,CAAC,KAAK,CAAU,CAAC;AAE/C,SAAS,oBAAoB,CAC3B,aAA4C,EAC5C,kBAAqC;IAErC,OAAO,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;QACtD,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QACpB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,iBAAkB,SAAQ,oBAAoB;IAKd;IAJpB,MAAM,GAAG,OAAO,CAAC;IACjB,WAAW,GACzB,oDAAoD,CAAC;IAEvD,YAAoC,kBAAqC;QACvE,KAAK,EAAE,CAAC;QAD0B,uBAAkB,GAAlB,kBAAkB,CAAmB;IAEzE,CAAC;IAEM,MAAM,CAAC,EACZ,aAAa,GACW;QACxB,MAAM,QAAQ,GAAG,oBAAoB,CACnC,aAAa,EACb,IAAI,CAAC,kBAAkB,CACxB,CAAC;QACF,MAAM,YAAY,GAAG,wBAAwB,CAC3C,QAAQ,EACR,qBAAqB,CACtB,CAAC;QACF,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAElD,OAAO;YACL,QAAQ,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;YACjC,eAAe,EACb,YAAY,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,mDAAmD;YACzD,SAAS,EAAE,aAAa;YACxB,gBAAgB,EAAE,UAAmB;YACrC,iBAAiB,EAAE,aAAa;gBAC9B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,sCAAsC;YAC1C,YAAY;SACb,CAAC;IACJ,CAAC;IAEM,GAAG,CACR,EAAE,MAAM,EAA2B,EACnC,SAA8B;QAE9B,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;SAC9B;QAED,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CACT,0CAA0C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACnE,CAAC;QAEF,IAAI;YACF,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,EAAE;gBACpD,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;gBACxC,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,QAAQ,KAAK,OAAO;gBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;aACnB,CAAC,CAAC;YAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;SAC9B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CACV,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,sBAAsB,WAAW,EAAE;gBACrC,CAAC,CAAC,oBAAoB,CACzB,CAAC;YACF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SAC7B;IACH,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
|