@@ -106,7 +106,10 @@ export function convertConfig(rulesConfig: ESLintRulesConfig) {
106
106
return rules ;
107
107
}
108
108
109
- export async function convertRules ( rulesConfig : ESLintRulesConfig ) {
109
+ export async function convertRules (
110
+ rulesConfig : ESLintRulesConfig ,
111
+ resolve = resolveRuleKey
112
+ ) {
110
113
const rules : TSSLint . Rules = { } ;
111
114
for ( const [ rule , severityOrOptions ] of Object . entries ( rulesConfig ) ) {
112
115
let rawSeverity : 'error' | 'warn' | 'suggestion' | 'off' | 0 | 1 | 2 ;
@@ -137,7 +140,7 @@ export async function convertRules(rulesConfig: ESLintRulesConfig) {
137
140
rules [ rule ] = noop ;
138
141
continue ;
139
142
}
140
- const ruleModule = await getRuleByKey ( rule ) ;
143
+ const ruleModule = await getRule ( ... resolve ( rule ) ) ;
141
144
if ( ! ruleModule ) {
142
145
rules [ rule ] = noop ;
143
146
continue ;
@@ -147,12 +150,15 @@ export async function convertRules(rulesConfig: ESLintRulesConfig) {
147
150
return rules ;
148
151
}
149
152
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
+ ) {
153
159
const processes : TSSLint . FormattingProcess [ ] = [ ] ;
154
160
for ( const [ rule , options ] of Object . entries ( config ) ) {
155
- const ruleModule = await getRuleByKey ( rule ) ;
161
+ const ruleModule = await getRule ( ... resolve ( rule ) ) ;
156
162
if ( ! ruleModule ) {
157
163
continue ;
158
164
}
@@ -190,14 +196,25 @@ export async function convertFormattingRules(config: {
190
196
return processes ;
191
197
}
192
198
193
- async function getRuleByKey ( rule : string ) {
199
+ function resolveRuleKey ( rule : string ) : [
200
+ pluginName : string | undefined ,
201
+ ruleName : string ,
202
+ ] {
194
203
const slashIndex = rule . indexOf ( '/' ) ;
195
204
if ( slashIndex !== - 1 ) {
196
205
const pluginName = rule . startsWith ( '@' )
197
206
? `${ rule . slice ( 0 , slashIndex ) } /eslint-plugin`
198
207
: `eslint-plugin-${ rule . slice ( 0 , slashIndex ) } ` ;
199
208
const ruleName = rule . slice ( slashIndex + 1 ) ;
209
+ return [ pluginName , ruleName ] ;
210
+ }
211
+ else {
212
+ return [ undefined , rule ] ;
213
+ }
214
+ }
200
215
216
+ async function getRule ( pluginName : string | undefined , ruleName : string ) {
217
+ if ( pluginName ) {
201
218
try {
202
219
plugins [ pluginName ] ??= loader ( pluginName ) ;
203
220
} catch ( e ) {
@@ -218,9 +235,9 @@ async function getRuleByKey(rule: string) {
218
235
}
219
236
else {
220
237
try {
221
- return require ( `../../eslint/lib/rules/${ rule } .js` ) ;
238
+ return require ( `../../eslint/lib/rules/${ ruleName } .js` ) ;
222
239
} catch {
223
- return require ( `./node_modules/eslint/lib/rules/${ rule } .js` ) ;
240
+ return require ( `./node_modules/eslint/lib/rules/${ ruleName } .js` ) ;
224
241
}
225
242
}
226
243
}
0 commit comments