Spec-Zone.ru › ESLint

Руководство по интеграции с API Node.js

В этом руководстве показано, как использовать класс ESLint для проверки файлов и получения результатов. Это может пригодиться при создании интеграций с другими проектами.

Зачем создавать интеграцию?

Интеграция с ESLint может понадобиться при разработке инструментов для разработчиков, например:

  • Редакторы кода и IDE: интеграция ESLint с редакторами кода и IDE позволяет получать обратную связь о качестве кода в реальном времени и автоматически подсвечивать возможные проблемы по мере ввода. Во многих редакторах уже есть плагины ESLint, но может потребоваться создать собственную интеграцию, если существующие плагины не отвечают вашим требованиям.

  • Пользовательские инструменты для проверки кода: если вы создаёте собственный инструмент, который объединяет несколько средств проверки или добавляет определённые функции, можно интегрировать ESLint, чтобы обеспечить проверку JavaScript.

  • Инструменты для проверки кода: интеграция ESLint с инструментами для проверки кода помогает автоматизировать поиск возможных проблем в кодовой базе.

  • Образовательные платформы: если вы разрабатываете образовательную платформу или учебное пособие по программированию, интеграция ESLint позволит предоставлять пользователям обратную связь в реальном времени во время изучения JavaScript, помогая им совершенствовать навыки программирования и осваивать лучшие практики.

  • Интеграция с инструментами разработчика: если вы создаёте или расширяете инструмент для разработчиков, например сборщик или среду тестирования, можно интегрировать ESLint для проверки кода. ESLint можно встроить непосредственно в инструмент или подключить в качестве плагина.

Что вы создадите

В этом руководстве вы создадите простой проект Node.js, который использует класс ESLint для проверки файлов и получения результатов.

Требования

Предполагается, что вы знакомы с JavaScript и Node.js.

Для выполнения этого руководства вам понадобятся:

  • Node.js (^20.19.0, ^22.13.0 или >=24)
  • npm
  • Текстовый редактор

Шаг 1. Настройка

Сначала создайте каталог для нового проекта:

mkdir eslint-integration
cd eslint-integration

Инициализируйте проект с помощью файла package.json:

npm

npm init -y

yarn

yarn init -y

pnpm

pnpm init -y

bun

bun init -y

Установите пакет eslint как зависимость (не как dev-зависимость):

npm

npm install eslint

yarn

yarn add eslint

pnpm

pnpm add eslint

bun

bun add eslint

Создайте в корневом каталоге проекта файл example-eslint-integration.js:

touch example-eslint-integration.js

Шаг 2. Импорт и настройка экземпляра ESLint

Импортируйте класс ESLint из пакета eslint и создайте его экземпляр.

Настроить ESLint можно, передав объект параметров конструктору ESLint:

// example-eslint-integration.js

const { ESLint } = require("eslint");

// Create an instance of ESLint with the configuration passed to the function
function createESLintInstance(overrideConfig) {
	return new ESLint({
		overrideConfigFile: true,
		overrideConfig,
		fix: true,
	});
}

Шаг 3. Проверка и исправление файлов

Для проверки файла используйте метод lintFiles экземпляра ESLint. Аргумент filePaths, передаваемый в ESLint#lintFiles(), может быть строкой или массивом строк с путём (путями) к файлу, который нужно проверить. Пути к файлам могут быть шаблонами glob или именами файлов.

Статический метод ESLint.outputFixes() принимает результаты проверки, полученные при вызове ESLint#lintFiles(), а затем записывает исправленный код обратно в исходные файлы.

// example-eslint-integration.js

// ... previous step's code to instantiate the ESLint instance

// Lint the specified files and return the results
async function lintAndFix(eslint, filePaths) {
	const results = await eslint.lintFiles(filePaths);

	// Apply automatic fixes and output fixed code
	await ESLint.outputFixes(results);

	return results;
}

Шаг 4. Вывод результатов

Создайте функцию для вывода результатов проверки в консоль. Она должна соответствовать потребностям вашей интеграции. Например, результаты проверки можно отображать в пользовательском интерфейсе.

В этом примере мы просто выведем результаты в консоль:

// example-eslint-integration.js

// ... previous step's code to instantiate the ESLint instance
// and get linting results.

// Log results to console if there are any problems
function outputLintingResults(results) {
	// Identify the number of problems found
	const problems = results.reduce(
		(acc, result) => acc + result.errorCount + result.warningCount,
		0,
	);

	if (problems > 0) {
		console.log("Linting errors found!");
		console.log(results);
	} else {
		console.log("No linting errors found.");
	}
	return results;
}

Шаг 5. Объединение всех частей

Объедините приведённые выше функции в новую функцию под названием lintFiles. Эта функция станет главной точкой входа вашей интеграции:

// example-eslint-integration.js

// Put previous functions all together
async function lintFiles(filePaths) {
	// The ESLint configuration. Alternatively, you could load the configuration
	// from a .eslintrc file or just use the default config.
	const overrideConfig = {
		languageOptions: {
			ecmaVersion: 2018,
			sourceType: "commonjs",
		},
		rules: {
			"no-console": "error",
			"no-unused-vars": "warn",
		},
	};

	const eslint = createESLintInstance(overrideConfig);
	const results = await lintAndFix(eslint, filePaths);
	return outputLintingResults(results);
}

// Export integration
module.exports = { lintFiles };

Ниже приведён полный пример кода для example-eslint-integration.js:

const { ESLint } = require("eslint");

// Create an instance of ESLint with the configuration passed to the function
function createESLintInstance(overrideConfig) {
	return new ESLint({
		overrideConfigFile: true,
		overrideConfig,
		fix: true,
	});
}

// Lint the specified files and return the results
async function lintAndFix(eslint, filePaths) {
	const results = await eslint.lintFiles(filePaths);

	// Apply automatic fixes and output fixed code
	await ESLint.outputFixes(results);

	return results;
}

// Log results to console if there are any problems
function outputLintingResults(results) {
	// Identify the number of problems found
	const problems = results.reduce(
		(acc, result) => acc + result.errorCount + result.warningCount,
		0,
	);

	if (problems > 0) {
		console.log("Linting errors found!");
		console.log(results);
	} else {
		console.log("No linting errors found.");
	}
	return results;
}

// Put previous functions all together
async function lintFiles(filePaths) {
	// The ESLint configuration. Alternatively, you could load the configuration
	// from an eslint.config.js file or just use the default config.
	const overrideConfig = {
		languageOptions: {
			ecmaVersion: 2018,
			sourceType: "commonjs",
		},
		rules: {
			"no-console": "error",
			"no-unused-vars": "warn",
		},
	};

	const eslint = createESLintInstance(overrideConfig);
	const results = await lintAndFix(eslint, filePaths);
	return outputLintingResults(results);
}

// Export integration
module.exports = { lintFiles };

Заключение

В этом руководстве мы рассмотрели основы использования класса ESLint для проверки файлов и получения результатов в проектах. Эти знания можно применить для создания пользовательских интеграций, например плагинов для редакторов кода, которые предоставляют обратную связь о качестве кода в реальном времени.

Просмотр кода руководства

Вы можете ознакомиться с исходным кодом руководства с комментариями.

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/integrate/integration-tutorial

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API