Skip to content

Commit efd83bc

Browse files
committed
Drop CJS handling
1 parent 24109be commit efd83bc

10 files changed

Lines changed: 13 additions & 142 deletions

create-ava-rule.js

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import enhance from 'enhance-visitors';
22
import {getTestModifiers, unwrapTypeExpression} from './util.js';
33

4-
function isRequireCall(node, moduleName) {
5-
return node?.type === 'CallExpression'
6-
&& node.callee?.type === 'Identifier'
7-
&& node.callee.name === 'require'
8-
&& node.arguments[0]?.value === moduleName;
9-
}
10-
114
export default () => {
125
let isTestFile = false;
136
let currentTestNode;
@@ -53,22 +46,6 @@ export default () => {
5346
VariableDeclarator(node) {
5447
const init = unwrapTypeExpression(node.init);
5548

56-
if (isRequireCall(init, 'ava')) {
57-
if (node.id.type === 'Identifier') {
58-
isTestFile = true;
59-
testIdentifiers.add(node.id.name);
60-
} else if (node.id.type === 'ObjectPattern') {
61-
for (const property of node.id.properties) {
62-
if (property.key?.name === 'serial') {
63-
isTestFile = true;
64-
testIdentifiers.add(property.value.name);
65-
}
66-
}
67-
}
68-
69-
return;
70-
}
71-
7249
// Track re-assignment from a test identifier (e.g., `const test = anyTest as TestFn<Context>`)
7350
if (init?.type === 'Identifier' && testIdentifiers.has(init.name) && node.id.type === 'Identifier') {
7451
testIdentifiers.add(node.id.name);

index.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {createRequire} from 'node:module';
21
import json from '@eslint/json';
2+
import packageJson from './package.json' with {type: 'json'};
33
import assertionArguments from './rules/assertion-arguments.js';
44
import failingTestUrl from './rules/failing-test-url.js';
55
import hooksOrder from './rules/hooks-order.js';
@@ -39,8 +39,7 @@ import useTWell from './rules/use-t-well.js';
3939
import useTest from './rules/use-test.js';
4040
import useTrueFalse from './rules/use-true-false.js';
4141

42-
const require = createRequire(import.meta.url);
43-
const {name, version} = require('./package.json');
42+
const {name, version} = packageJson;
4443

4544
const rules = {
4645
'assertion-arguments': assertionArguments,

rules/no-import-test-files.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,6 @@ const create = context => {
5858
ImportDeclaration(node) {
5959
validateImportPath(node, node.source.value);
6060
},
61-
CallExpression(node) {
62-
if (!(node.callee.type === 'Identifier' && node.callee.name === 'require')) {
63-
return;
64-
}
65-
66-
if (node.arguments[0]) {
67-
validateImportPath(node, node.arguments[0].value);
68-
}
69-
},
7061
};
7162
};
7263

rules/use-test.js

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,8 @@
11
import path from 'node:path';
2-
import {isDeepStrictEqual} from 'node:util';
3-
import espurify from 'espurify';
42
import util from '../util.js';
53

64
const MESSAGE_ID = 'use-test';
75

8-
const avaVariableDeclaratorInitAst = {
9-
type: 'CallExpression',
10-
callee: {
11-
type: 'Identifier',
12-
name: 'require',
13-
},
14-
arguments: [
15-
{
16-
type: 'Literal',
17-
value: 'ava',
18-
},
19-
],
20-
optional: false,
21-
};
22-
236
function report(context, node) {
247
context.report({
258
node,
@@ -45,14 +28,6 @@ const create = context => {
4528
}
4629
}
4730
},
48-
VariableDeclarator(node) {
49-
if (node.init && isDeepStrictEqual(espurify(node.init), avaVariableDeclaratorInitAst)) {
50-
const {name} = node.id;
51-
if (name !== 'test' && (!isTypeScript || name !== 'anyTest')) {
52-
report(context, node);
53-
}
54-
}
55-
},
5631
};
5732
};
5833

test/create-ava-rule.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,6 @@ const errors = [
3333

3434
ruleTester.run('rule-fixture', rule, {
3535
valid: [
36-
// `require` patterns
37-
'const test = require(\'ava\');',
38-
'let test = require(\'ava\');',
39-
'var test = require(\'ava\');',
40-
{name: 'require in multi-declaration', code: 'const a = 1, test = require(\'ava\'), b = 2;'},
41-
'const {serial} = require(\'ava\');',
42-
'const {serial: test} = require(\'ava\');',
43-
{name: 'require anyTest', code: 'const anyTest = require(\'ava\');'},
44-
{name: 'require destructure with rest element', code: 'const { serial, ...rest } = require(\'ava\');'},
4536
// `import` patterns
4637
'import test from \'ava\';',
4738
'import {serial} from \'ava\';',
@@ -55,13 +46,10 @@ ruleTester.run('rule-fixture', rule, {
5546

5647
invalid: [
5748
// Non-ava source
58-
{name: 'require non-ava', code: 'const test = require(\'not-ava\');', errors},
5949
{name: 'import non-ava', code: 'import test from \'not-ava\';', errors},
60-
// No import/require at all
50+
// No AVA import at all
6151
{name: 'no ava import', code: 'test(t => {});', errors},
6252
// Unknown named exports
63-
{code: 'const {serial2} = require(\'ava\');', errors},
64-
{code: 'const {serial2: test} = require(\'ava\');', errors},
6553
{code: 'import {serial2} from \'ava\';', errors},
6654
{code: 'import {serial2 as test} from \'ava\';', errors},
6755
],

test/no-import-test-files.js

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,36 +51,12 @@ ruleTester.run('no-import-test-files', rule, {
5151
'import test from \'ava\';',
5252
'import foo from \'@foo/bar\';',
5353
'import foo from \'/foo/bar\';', // Classfied as not a test.
54-
'const test = require(\'ava\');',
5554
'console.log()',
56-
'const value = require(somePath);',
57-
'const highlight = require(\'highlight.js\')',
58-
{
59-
code: 'const highlight = require(\'highlight.js\')',
60-
filename: toPath('test/index.js'),
61-
},
62-
'const value = require(true);',
63-
'const value = require();',
64-
{ // Regression test for https://github.com/avajs/eslint-plugin-ava/issues/311
65-
code: 'const helpers = require(\'./test\');',
66-
filename: toPath('foo.js'),
67-
name: 'directory-import-require',
68-
},
6955
{ // Regression test for https://github.com/avajs/eslint-plugin-ava/issues/311
7056
code: 'import helpers from \'./test\';',
7157
filename: toPath('foo.js'),
7258
name: 'directory-import-esm',
7359
},
74-
{
75-
code: 'const value = require(true);',
76-
filename: toPath('foo.js'),
77-
name: 'require-non-string-arg',
78-
},
79-
{
80-
code: 'foo(\'./bar.js\');',
81-
filename: toPath('foo.js'),
82-
name: 'non-require-call',
83-
},
8460
{
8561
code: 'import foo from \'./bar.js\';',
8662
filename: toPath('no-helper.js'),
@@ -89,12 +65,12 @@ ruleTester.run('no-import-test-files', rule, {
8965
],
9066
invalid: [
9167
{
92-
code: 'const test = require(\'./foo.test.js\');',
68+
code: 'import test from \'./foo.test.js\';',
9369
filename: toPath('lib/foo.js'),
9470
errors,
9571
},
9672
{
97-
code: 'const test = require(\'../foo.test.js\');',
73+
code: 'import test from \'../foo.test.js\';',
9874
filename: toPath('foo.js'),
9975
errors,
10076
},

test/prefer-power-assert.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,6 @@ function testDeclaration(declaration) {
113113
}
114114

115115
for (const declaration of [
116-
'var test = require(\'ava\');',
117-
'let test = require(\'ava\');',
118-
'const test = require(\'ava\');',
119116
'import test from \'ava\';',
120117
]) {
121118
testDeclaration(declaration);

test/use-test.js

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,20 @@ const prefixTestCases = (testCases, prefix) => ({
2828

2929
const commonTestCases = {
3030
valid: [
31-
{code: 'var test = require(\'ava\');', filename: 'file.js'},
32-
{code: 'let test = require(\'ava\');', filename: 'file.js'},
33-
{code: 'const test = require(\'ava\');', filename: 'file.js'},
34-
{code: 'const a = 1, test = require(\'ava\'), b = 2;', filename: 'file.js'},
35-
{code: 'const test = require(\'foo\');', filename: 'file.js'},
3631
{code: 'import test from \'ava\';', filename: 'file.js'},
3732
{code: 'import test, {} from \'ava\';', filename: 'file.js'},
3833
{code: 'import test from \'foo\';', filename: 'file.js'},
3934
...typescriptExtensions.flatMap(extension => [
40-
{code: 'var anyTest = require(\'ava\');', filename: `file${extension}`},
41-
{code: 'let anyTest = require(\'ava\');', filename: `file${extension}`},
42-
{code: 'const anyTest = require(\'ava\');', filename: `file${extension}`},
43-
{code: 'const a = 1, anyTest = require(\'ava\'), b = 2;', filename: `file${extension}`},
44-
{code: 'const anyTest = require(\'foo\');', filename: `file${extension}`},
4535
{code: 'import anyTest from \'ava\';', filename: `file${extension}`},
4636
{code: 'import anyTest, {} from \'ava\';', filename: `file${extension}`},
4737
{code: 'import anyTest from \'foo\';', filename: `file${extension}`},
4838
]),
4939
],
5040
invalid: [
5141
...typescriptExtensions.flatMap(extension => [
52-
{code: 'var ava = require(\'ava\');', errors, filename: `file${extension}`},
53-
{code: 'let ava = require(\'ava\');', errors, filename: `file${extension}`},
54-
{code: 'const ava = require(\'ava\');', errors, filename: `file${extension}`},
55-
{code: 'const a = 1, ava = require(\'ava\'), b = 2;', errors, filename: `file${extension}`},
5642
{code: 'import ava from \'ava\';', errors, filename: `file${extension}`},
5743
]),
58-
{
59-
code: 'var anyTest = require(\'ava\');',
60-
errors,
61-
filename: 'file.js',
62-
},
44+
{code: 'import anyTest from \'ava\';', errors, filename: 'file.js'},
6345
],
6446
};
6547

test/util.js

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import fs from 'node:fs/promises';
22
import path from 'node:path';
33
import process from 'node:process';
4-
import {createRequire} from 'node:module';
54
import test from 'ava';
65
import resolveFrom from 'resolve-from';
6+
import packageJson from '../package.json' with {type: 'json'};
77
import util, {findProjectRoot} from '../util.js';
88

9-
const require = createRequire(import.meta.url);
10-
const packageJson = require('../package.json');
11-
129
test('returns the URL of the a named rule\'s documentation', t => {
1310
const url = `https://github.com/avajs/eslint-plugin-ava/blob/v${packageJson.version}/docs/rules/foo.md`;
1411
t.is(util.getDocsUrl('foo.js'), url);
@@ -36,7 +33,7 @@ test.serial('loadAvaHelper retries lookup when helper becomes available', async
3633

3734
const overrides = {files: ['test.js']};
3835
const helperPath = path.join(fixtureRootDirectory, 'eslint-plugin-helper.js');
39-
await fs.writeFile(helperPath, 'module.exports = {load(rootDirectory, options) { return {rootDirectory, options}; }};');
36+
await fs.writeFile(helperPath, 'exports.load = (rootDirectory, options) => ({rootDirectory, options});');
4037

4138
const originalResolveFromSilent = resolveFrom.silent;
4239
let isHelperAvailable = false;
@@ -68,7 +65,7 @@ test.serial('loadAvaHelper resolves helper from sub-package when config is at wo
6865
await fs.writeFile(testFilename, '');
6966

7067
const helperPath = path.join(workspaceRootDirectory, 'eslint-plugin-helper.js');
71-
await fs.writeFile(helperPath, 'module.exports = {load(rootDirectory, options) { return {rootDirectory, options}; }};');
68+
await fs.writeFile(helperPath, 'exports.load = (rootDirectory, options) => ({rootDirectory, options});');
7269

7370
const originalResolveFromSilent = resolveFrom.silent;
7471
resolveFrom.silent = fromDirectory => {
@@ -106,7 +103,7 @@ test.serial('loadAvaHelper resolves hoisted helper outside sub-package root', as
106103
// The helper lives at the workspace root (hoisted node_modules), outside the sub-package.
107104
const helperPath = path.join(workspaceRootDirectory, 'node_modules', 'ava', 'eslint-plugin-helper.js');
108105
await fs.mkdir(path.dirname(helperPath), {recursive: true});
109-
await fs.writeFile(helperPath, 'module.exports = {load(rootDirectory, options) { return {rootDirectory, options}; }};');
106+
await fs.writeFile(helperPath, 'exports.load = (rootDirectory, options) => ({rootDirectory, options});');
110107

111108
const originalResolveFromSilent = resolveFrom.silent;
112109
resolveFrom.silent = () => helperPath;
@@ -150,17 +147,6 @@ test('findProjectRoot: finds directory with ava.config.js', async t => {
150147
t.is(findProjectRoot(testFile), root);
151148
});
152149

153-
test('findProjectRoot: finds directory with ava.config.cjs', async t => {
154-
const root = await createFixtureDirectory(t);
155-
await fs.writeFile(path.join(root, 'package.json'), '{"name":"fixture"}');
156-
await fs.writeFile(path.join(root, 'ava.config.cjs'), '');
157-
const testFile = path.join(root, 'test', 'foo.test.js');
158-
await fs.mkdir(path.join(root, 'test'), {recursive: true});
159-
await fs.writeFile(testFile, '');
160-
161-
t.is(findProjectRoot(testFile), root);
162-
});
163-
164150
test('findProjectRoot: finds directory with ava.config.mjs', async t => {
165151
const root = await createFixtureDirectory(t);
166152
await fs.writeFile(path.join(root, 'package.json'), '{"name":"fixture"}');

util.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import fs from 'node:fs';
22
import path from 'node:path';
33
import {createRequire} from 'node:module';
44
import resolveFrom from 'resolve-from';
5+
import packageJson from './package.json' with {type: 'json'};
56

67
const require = createRequire(import.meta.url);
7-
const pkg = require('./package.json');
88

9-
const avaConfigFiles = ['ava.config.js', 'ava.config.cjs', 'ava.config.mjs'];
9+
const avaConfigFiles = ['ava.config.js', 'ava.config.mjs'];
1010

1111
// Walk up from the file to find the directory where AVA is configured.
1212
// In a monorepo, the nearest package.json may belong to a sub-package
@@ -157,7 +157,7 @@ export {getMembers};
157157

158158
const repoUrl = 'https://github.com/avajs/eslint-plugin-ava';
159159

160-
const getDocumentationUrl = (filename, commitHash = `v${pkg.version}`) => {
160+
const getDocumentationUrl = (filename, commitHash = `v${packageJson.version}`) => {
161161
const ruleName = path.basename(filename, '.js');
162162
return `${repoUrl}/blob/${commitHash}/docs/rules/${ruleName}.md`;
163163
};

0 commit comments

Comments
 (0)