Skip to content

Commit

Permalink
Add node-test-runner plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Sep 26, 2023
1 parent 82278f8 commit 9508c73
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ Knip contains a growing list of plugins:
- [markdownlint][plugin-markdownlint]
- [Mocha][plugin-mocha]
- [Next.js][plugin-next]
- [Node.js Test Runner][plugin-node-test-runner]
- [npm-package-json-lint][plugin-npm-package-json-lint]
- [Nx][plugin-nx]
- [nyc][plugin-nyc]
Expand Down Expand Up @@ -902,6 +903,7 @@ Special thanks to the wonderful people who have contributed to this project:
[plugin-markdownlint]: ./src/plugins/markdownlint
[plugin-mocha]: ./src/plugins/mocha
[plugin-next]: ./src/plugins/next
[plugin-node-test-runner]: ./src/plugins/node-test-runner
[plugin-npm-package-json-lint]: ./src/plugins/npm-package-json-lint
[plugin-nx]: ./src/plugins/nx
[plugin-nyc]: ./src/plugins/nyc
Expand Down
Empty file.
1 change: 1 addition & 0 deletions fixtures/plugins/node-test-runner/index.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import test from 'node:test';
6 changes: 6 additions & 0 deletions fixtures/plugins/node-test-runner/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "@fixtures/node-test-runner",
"scripts": {
"test": "node --test"
}
}
4 changes: 4 additions & 0 deletions schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,10 @@
"title": "Next.js plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/main/README.md)",
"$ref": "#/definitions/plugin"
},
"node-test-runner": {
"title": "node-test-runner plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/node-test-runner/README.md)",
"$ref": "#/definitions/plugin"
},
"npm-package-json-lint": {
"title": "npm-package-json-lint plugin configuration (https://github.com/webpro/knip/blob/main/src/plugins/npm-package-json-lint/README.md)",
"$ref": "#/definitions/plugin"
Expand Down
1 change: 1 addition & 0 deletions src/ConfigurationValidator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ const pluginsSchema = z.object({
markdownlint: pluginSchema,
mocha: pluginSchema,
next: pluginSchema,
'node-test-runner': pluginSchema,
'npm-package-json-lint': pluginSchema,
nx: pluginSchema,
nyc: pluginSchema,
Expand Down
1 change: 1 addition & 0 deletions src/plugins/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export * as lintStaged from './lint-staged/index.js';
export * as markdownlint from './markdownlint/index.js';
export * as mocha from './mocha/index.js';
export * as next from './next/index.js';
export * as nodeTestRunner from './node-test-runner/index.js';
export * as npmPackageJsonLint from './npm-package-json-lint/index.js';
export * as nx from './nx/index.js';
export * as nyc from './nyc/index.js';
Expand Down
27 changes: 27 additions & 0 deletions src/plugins/node-test-runner/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Node.js Test Runner

## Enabled

This plugin is enabled when any of the following package names and/or regular expressions has a match in `dependencies`
or `devDependencies`:

- \`\`

## Default configuration

```json
{
"node-test-runner": {
"entry": [
"**/test.{js,cjs,mjs}",
"**/test-*.{js,cjs,mjs}",
"**/*{.,-,_}test.{js,cjs,mjs}",
"**/test/**/*.{js,cjs,mjs}"
]
}
}
```

Also see [Knip plugins][1] for more information about plugins.

[1]: https://github.com/webpro/knip/blob/main/README.md#plugins
28 changes: 28 additions & 0 deletions src/plugins/node-test-runner/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { timerify } from '../../util/Performance.js';
import { toEntryPattern } from '../../util/protocols.js';
import type { IsPluginEnabledCallback, GenericPluginCallback } from '../../types/plugins.js';

// https://nodejs.dev/en/api/test/

export const NAME = 'Node.js Test Runner';

/** @public */
export const ENABLERS = [''];

export const isEnabled: IsPluginEnabledCallback = ({ manifest }) => {
// TODO Better to scan the entry files until the first `node:test` import, but that's expensive
return Boolean(manifest.scripts?.test && /node.+--test/.test(manifest.scripts?.test));
};

export const ENTRY_FILE_PATTERNS = [
'**/test.{js,cjs,mjs}',
'**/test-*.{js,cjs,mjs}',
'**/*{.,-,_}test.{js,cjs,mjs}',
'**/test/**/*.{js,cjs,mjs}',
];

const findNodeTestRunnerDependencies: GenericPluginCallback = async () => {
return ENTRY_FILE_PATTERNS.map(toEntryPattern);
};

export const findDependencies = timerify(findNodeTestRunnerDependencies);
19 changes: 19 additions & 0 deletions tests/plugins/node-test-runner.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import * as nodeTestRunner from '../../src/plugins/node-test-runner/index.js';
import { resolve, join } from '../../src/util/path.js';
import { getManifest } from '../helpers/index.js';

const cwd = resolve('fixtures/plugins/node-test-runner');
const manifest = getManifest(cwd);

test('Find dependencies in node-test-runner configuration (json)', async () => {
const configFilePath = join(cwd, 'package.json');
const dependencies = await nodeTestRunner.findDependencies(configFilePath, { manifest });
assert.deepEqual(dependencies, [
'e:**/test.{js,cjs,mjs}',
'e:**/test-*.{js,cjs,mjs}',
'e:**/*{.,-,_}test.{js,cjs,mjs}',
'e:**/test/**/*.{js,cjs,mjs}',
]);
});

0 comments on commit 9508c73

Please sign in to comment.