Skip to content

tools: import rather than require ESLint plugins #57315

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions benchmark/eslint.config_partial.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { requireEslintTool } from '../tools/eslint/eslint.config_utils.mjs';

const globals = requireEslintTool('globals');
import { globals } from '../tools/eslint/eslint.config_utils.mjs';

export default [
{
Expand Down
4 changes: 1 addition & 3 deletions doc/eslint.config_partial.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import {
globals,
noRestrictedSyntaxCommonAll,
noRestrictedSyntaxCommonLib,
requireEslintTool,
} from '../tools/eslint/eslint.config_utils.mjs';
import { builtinModules } from 'node:module';

const builtin = builtinModules.filter((name) => !name.startsWith('node:'));

const globals = requireEslintTool('globals');

export default [
{
files: ['doc/**/*.md/*.{js,mjs,cjs}'],
Expand Down
12 changes: 6 additions & 6 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@ import libConfig from './lib/eslint.config_partial.mjs';
import testConfig from './test/eslint.config_partial.mjs';
import toolsConfig from './tools/eslint/eslint.config_partial.mjs';
import {
importEslintTool,
noRestrictedSyntaxCommonAll,
noRestrictedSyntaxCommonLib,
requireEslintTool,
resolveEslintTool,
} from './tools/eslint/eslint.config_utils.mjs';
import nodeCore from './tools/eslint/eslint-plugin-node-core.js';

const js = requireEslintTool('@eslint/js');
const babelEslintParser = requireEslintTool('@babel/eslint-parser');
const { default: js } = await importEslintTool('@eslint/js');
const { default: babelEslintParser } = await importEslintTool('@babel/eslint-parser');
const babelPluginSyntaxImportAttributes = resolveEslintTool('@babel/plugin-syntax-import-attributes');
const babelPluginSyntaxImportSource = resolveEslintTool('@babel/plugin-syntax-import-source');
const jsdoc = requireEslintTool('eslint-plugin-jsdoc');
const markdown = requireEslintTool('eslint-plugin-markdown');
const stylisticJs = requireEslintTool('@stylistic/eslint-plugin-js');
const { default: jsdoc } = await importEslintTool('eslint-plugin-jsdoc');
const { default: markdown } = await importEslintTool('eslint-plugin-markdown');
const { default: stylisticJs } = await importEslintTool('@stylistic/eslint-plugin-js');

nodeCore.RULES_DIR = fileURLToPath(new URL('./tools/eslint-rules', import.meta.url));

Expand Down
4 changes: 1 addition & 3 deletions test/eslint.config_partial.mjs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
/* eslint-disable @stylistic/js/max-len */

import {
globals,
noRestrictedSyntaxCommonAll,
requireEslintTool,
} from '../tools/eslint/eslint.config_utils.mjs';

const globals = requireEslintTool('globals');

export default [
{
files: ['test/**/*.{js,mjs,cjs}'],
Expand Down
4 changes: 1 addition & 3 deletions tools/eslint/eslint.config_partial.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import { requireEslintTool } from './eslint.config_utils.mjs';

const globals = requireEslintTool('globals');
import { globals } from './eslint.config_utils.mjs';

export default [
{
Expand Down
8 changes: 6 additions & 2 deletions tools/eslint/eslint.config_utils.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import { createRequire } from 'node:module';

export const requireEslintTool = createRequire(new URL(import.meta.url));
export const resolveEslintTool = (request) => requireEslintTool.resolve(request);
export { default as globals } from 'globals';

export const importEslintTool = (specifier) => import(specifier);

const localRequire = createRequire(new URL(import.meta.url));
export const resolveEslintTool = (request) => localRequire.resolve(request);

export const noRestrictedSyntaxCommonAll = [
{
Expand Down
Loading