Skip to content

Commit c3fe960

Browse files
committed
refactor(eslint): enhance convertRules and convertFormattingRules with resolve parameter
1 parent 09cd06a commit c3fe960

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

packages/eslint/index.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ export function convertConfig(rulesConfig: ESLintRulesConfig) {
106106
return rules;
107107
}
108108

109-
export async function convertRules(rulesConfig: ESLintRulesConfig) {
109+
export async function convertRules(
110+
rulesConfig: ESLintRulesConfig,
111+
resolve = resolveRuleKey
112+
) {
110113
const rules: TSSLint.Rules = {};
111114
for (const [rule, severityOrOptions] of Object.entries(rulesConfig)) {
112115
let rawSeverity: 'error' | 'warn' | 'suggestion' | 'off' | 0 | 1 | 2;
@@ -137,7 +140,7 @@ export async function convertRules(rulesConfig: ESLintRulesConfig) {
137140
rules[rule] = noop;
138141
continue;
139142
}
140-
const ruleModule = await getRuleByKey(rule);
143+
const ruleModule = await getRule(...resolve(rule));
141144
if (!ruleModule) {
142145
rules[rule] = noop;
143146
continue;
@@ -147,12 +150,15 @@ export async function convertRules(rulesConfig: ESLintRulesConfig) {
147150
return rules;
148151
}
149152

150-
export async function convertFormattingRules(config: {
151-
[K in keyof ESLintRulesConfig]?: ESLintRulesConfig[K] extends O<infer T> | undefined ? T : never;
152-
}) {
153+
export async function convertFormattingRules(
154+
config: {
155+
[K in keyof ESLintRulesConfig]?: ESLintRulesConfig[K] extends O<infer T> | undefined ? T : never;
156+
},
157+
resolve = resolveRuleKey
158+
) {
153159
const processes: TSSLint.FormattingProcess[] = [];
154160
for (const [rule, options] of Object.entries(config)) {
155-
const ruleModule = await getRuleByKey(rule);
161+
const ruleModule = await getRule(...resolve(rule));
156162
if (!ruleModule) {
157163
continue;
158164
}
@@ -190,14 +196,25 @@ export async function convertFormattingRules(config: {
190196
return processes;
191197
}
192198

193-
async function getRuleByKey(rule: string) {
199+
function resolveRuleKey(rule: string): [
200+
pluginName: string | undefined,
201+
ruleName: string,
202+
] {
194203
const slashIndex = rule.indexOf('/');
195204
if (slashIndex !== -1) {
196205
const pluginName = rule.startsWith('@')
197206
? `${rule.slice(0, slashIndex)}/eslint-plugin`
198207
: `eslint-plugin-${rule.slice(0, slashIndex)}`;
199208
const ruleName = rule.slice(slashIndex + 1);
209+
return [pluginName, ruleName];
210+
}
211+
else {
212+
return [undefined, rule];
213+
}
214+
}
200215

216+
async function getRule(pluginName: string | undefined, ruleName: string) {
217+
if (pluginName) {
201218
try {
202219
plugins[pluginName] ??= loader(pluginName);
203220
} catch (e) {
@@ -218,9 +235,9 @@ async function getRuleByKey(rule: string) {
218235
}
219236
else {
220237
try {
221-
return require(`../../eslint/lib/rules/${rule}.js`);
238+
return require(`../../eslint/lib/rules/${ruleName}.js`);
222239
} catch {
223-
return require(`./node_modules/eslint/lib/rules/${rule}.js`);
240+
return require(`./node_modules/eslint/lib/rules/${ruleName}.js`);
224241
}
225242
}
226243
}

0 commit comments

Comments
 (0)