8
8
DiagnosticMessages ,
9
9
LibraryInstance ,
10
10
LinterDefinition ,
11
+ LinterResolvedDefinition ,
11
12
LinterRule ,
12
13
LinterRuleContext ,
13
14
LinterRuleDiagnosticReport ,
@@ -22,6 +23,34 @@ export interface Linter {
22
23
lint ( ) : readonly Diagnostic [ ] ;
23
24
}
24
25
26
+ /**
27
+ * Resolve the linter definition
28
+ */
29
+ export function resolveLinterDefinition (
30
+ libName : string ,
31
+ linter : LinterDefinition
32
+ ) : LinterResolvedDefinition {
33
+ const rules : LinterRule < string , any > [ ] = linter . rules . map ( ( rule ) => {
34
+ return { ...rule , id : `${ libName } /${ rule . name } ` } ;
35
+ } ) ;
36
+ if ( linter . ruleSets && "all" in linter . ruleSets ) {
37
+ return {
38
+ rules,
39
+ ruleSets : linter . ruleSets as any ,
40
+ } ;
41
+ } else {
42
+ return {
43
+ rules,
44
+ ruleSets : {
45
+ all : {
46
+ enable : Object . fromEntries ( rules . map ( ( x ) => [ x . id , true ] ) ) as any ,
47
+ } ,
48
+ ...linter . ruleSets ,
49
+ } ,
50
+ } ;
51
+ }
52
+ }
53
+
25
54
export function createLinter (
26
55
program : Program ,
27
56
loadLibrary : ( name : string ) => Promise < LibraryInstance | undefined >
@@ -37,11 +66,6 @@ export function createLinter(
37
66
lint,
38
67
} ;
39
68
40
- function getLinterDefinition ( library : LibraryInstance ) : LinterDefinition | undefined {
41
- // eslint-disable-next-line deprecation/deprecation
42
- return library ?. linter ?? library ?. definition ?. linter ;
43
- }
44
-
45
69
async function extendRuleSet ( ruleSet : LinterRuleSet ) : Promise < readonly Diagnostic [ ] > {
46
70
tracer . trace ( "extend-rule-set.start" , JSON . stringify ( ruleSet , null , 2 ) ) ;
47
71
const diagnostics = createDiagnosticCollector ( ) ;
@@ -50,7 +74,7 @@ export function createLinter(
50
74
const ref = diagnostics . pipe ( parseRuleReference ( extendingRuleSetName ) ) ;
51
75
if ( ref ) {
52
76
const library = await resolveLibrary ( ref . libraryName ) ;
53
- const libLinterDefinition = library && getLinterDefinition ( library ) ;
77
+ const libLinterDefinition = library ?. linter ;
54
78
const extendingRuleSet = libLinterDefinition ?. ruleSets ?. [ ref . name ] ;
55
79
if ( extendingRuleSet ) {
56
80
await extendRuleSet ( extendingRuleSet ) ;
@@ -146,19 +170,17 @@ export function createLinter(
146
170
tracer . trace ( "register-library" , name ) ;
147
171
148
172
const library = await loadLibrary ( name ) ;
149
- const linter = library && getLinterDefinition ( library ) ;
173
+ const linter = library ?. linter ;
150
174
if ( linter ?. rules ) {
151
- for ( const ruleDef of linter . rules ) {
152
- const ruleId = `${ name } /${ ruleDef . name } ` ;
175
+ for ( const rule of linter . rules ) {
153
176
tracer . trace (
154
177
"register-library.rule" ,
155
- `Registering rule "${ ruleId } " for library "${ name } ".`
178
+ `Registering rule "${ rule . id } " for library "${ name } ".`
156
179
) ;
157
- const rule : LinterRule < string , any > = { ...ruleDef , id : ruleId } ;
158
- if ( ruleMap . has ( ruleId ) ) {
159
- compilerAssert ( false , `Unexpected duplicate linter rule: "${ ruleId } "` ) ;
180
+ if ( ruleMap . has ( rule . id ) ) {
181
+ compilerAssert ( false , `Unexpected duplicate linter rule: "${ rule . id } "` ) ;
160
182
} else {
161
- ruleMap . set ( ruleId , rule ) ;
183
+ ruleMap . set ( rule . id , rule ) ;
162
184
}
163
185
}
164
186
}
0 commit comments