diff --git a/rules/prefer-default-parameters.js b/rules/prefer-default-parameters.js index 165d003555..ecd5be19ce 100644 --- a/rules/prefer-default-parameters.js +++ b/rules/prefer-default-parameters.js @@ -1,4 +1,5 @@ 'use strict'; +const eslintVisitorKeys = require('eslint-visitor-keys'); const {findVariable} = require('eslint-utils'); const getDocumentationUrl = require('./utils/get-documentation-url'); @@ -33,7 +34,12 @@ const containsCallExpression = (source, node) => { return true; } - for (const key of source.visitorKeys[node.type]) { + // The Babel AST doesn't have visitor keys for certain types of nodes + // Use `eslint-visitor-keys` in those cases + // TODO: Remove this when we drop support for `babel-eslint` #1040 + const keys = source.visitorKeys[node.type] || eslintVisitorKeys.KEYS[node.type]; + + for (const key of keys) { const value = node[key]; if (Array.isArray(value)) { diff --git a/test/prefer-default-parameters.js b/test/prefer-default-parameters.js index 14926d757c..859ae62dd2 100644 --- a/test/prefer-default-parameters.js +++ b/test/prefer-default-parameters.js @@ -1,13 +1,5 @@ -import test from 'ava'; -import avaRuleTester from 'eslint-ava-rule-tester'; import {outdent} from 'outdent'; -import rule from '../rules/prefer-default-parameters.js'; - -const ruleTester = avaRuleTester(test, { - parserOptions: { - ecmaVersion: 2020 - } -}); +import {test} from './utils/test.js'; const invalidTestCase = ({code, suggestions}) => { if (!suggestions) { @@ -33,7 +25,7 @@ const invalidTestCase = ({code, suggestions}) => { }; }; -ruleTester.run('prefer-default-parameters', rule, { +test({ valid: [ 'function abc(foo = { bar: 123 }) { }', 'function abc({ bar } = { bar: 123 }) { }', @@ -655,3 +647,28 @@ ruleTester.run('prefer-default-parameters', rule, { }) ] }); + +test.babelLegacy({ + valid: [ + // These tests verify that the fallback to `eslint-visitor-keys` is working correctly + outdent` + function abc(foo, bar) { + const { baz, ...rest } = bar; + foo = foo || 123; + } + `, + outdent` + function abc(foo, bar) { + const baz = foo?.bar; + foo = foo || 123; + } + `, + outdent` + function abc(foo, bar) { + import('foo'); + foo = foo || 123; + } + ` + ], + invalid: [] +});