eslint-plugin-ecmascript-compat
Version:
ESLint plugin for checking JavaScript code compatibility with target browsers and Node.js versions
65 lines (61 loc) • 1.83 kB
JavaScript
const { RuleTester } = require('eslint');
// Browser that doesn't support any features of this version - see es-versions.md
process.env.BROWSERSLIST = 'Chrome >= 74';
const ruleTester = new RuleTester({
parserOptions: {
ecmaVersion: 2021,
},
globals: {
// ES2021 global, required by es/no-weakrefs
WeakRef: 'readonly',
FinalizationRegistry: 'readonly',
// ES6 global, required by es/no-promise-all-settled
Promise: 'readonly',
},
});
ruleTester.run('compat', require('../rule'), {
valid: [
{
code: '"A dog".replaceAll("dog", "monkey");',
options: [{ polyfills: ['String.prototype.replaceAll'] }],
},
{
code: 'const a = Promise.any([]);',
options: [{ polyfills: ['Promise.prototype.any'] }],
},
],
invalid: [
{
code: '"A dog".replaceAll("dog", "monkey");',
errors: [{ message: "ES2021 method 'String.prototype.replaceAll' is forbidden" }],
},
{
code: 'a ||= 1;',
errors: [{ message: 'ES2021 logical assignment operators are forbidden.' }],
},
{
code: 'a &&= 1;',
errors: [{ message: 'ES2021 logical assignment operators are forbidden.' }],
},
{
code: 'a ??= 1;',
errors: [{ message: 'ES2021 logical assignment operators are forbidden.' }],
},
{
code: 'const a = 1_000_00;',
errors: [{ message: 'ES2021 numeric separators are forbidden.' }],
},
{
code: 'const a = Promise.any([]);',
errors: [{ message: "ES2021 'Promise.any' is forbidden." }],
},
{
code: 'const a = new WeakRef();',
errors: [{ message: "ES2021 'WeakRef' class is forbidden." }],
},
{
code: 'const a = new FinalizationRegistry(() => {});',
errors: [{ message: "ES2021 'FinalizationRegistry' class is forbidden." }],
},
],
});