11/* eslint-disable eslint-plugin/prefer-message-ids, eslint-plugin/prefer-object-rule, eslint-plugin/require-meta-docs-description, eslint-plugin/require-meta-docs-recommended, eslint-plugin/require-meta-schema, eslint-plugin/require-meta-type */
2- import enhance from 'enhance-visitors' ;
32import { findVariable } from '@eslint-community/eslint-utils' ;
43import { hasComputedTestModifier , unwrapTypeExpression } from './util.js' ;
54
@@ -17,6 +16,32 @@ const trackedAliasModifiers = new Set([
1716 'todo' ,
1817] ) ;
1918
19+ const mergeVisitors = ( ...visitors ) => {
20+ const visitor = { } ;
21+
22+ for ( const customVisitor of visitors ) {
23+ for ( const [ selector , customHandler ] of Object . entries ( customVisitor ) ) {
24+ const predefinedHandler = visitor [ selector ] ;
25+ if ( ! predefinedHandler ) {
26+ visitor [ selector ] = customHandler ;
27+ continue ;
28+ }
29+
30+ visitor [ selector ] = selector . endsWith ( ':exit' )
31+ ? node => {
32+ customHandler ( node ) ;
33+ predefinedHandler ( node ) ;
34+ }
35+ : node => {
36+ predefinedHandler ( node ) ;
37+ customHandler ( node ) ;
38+ } ;
39+ }
40+ }
41+
42+ return visitor ;
43+ } ;
44+
2045const createAvaRule = sourceCode => {
2146 let isTestFile = false ;
2247 let currentTestNode ;
@@ -194,8 +219,14 @@ const createAvaRule = sourceCode => {
194219 isInTestFile : ( ) => isTestFile ,
195220 isInTestNode : ( ) => currentTestNode ,
196221 isTestNode : node => currentTestNode === node ,
197- merge : customHandlers => enhance . mergeVisitors ( [ predefinedRules , customHandlers ] ) ,
222+ merge : customHandlers => mergeVisitors ( predefinedRules , customHandlers ) ,
198223 } ;
199224} ;
200225
226+ export const visitIf = predicates => visitor => node => {
227+ if ( predicates . every ( predicate => predicate ( node ) ) ) {
228+ return visitor ( node ) ;
229+ }
230+ } ;
231+
201232export default createAvaRule ;
0 commit comments