Назначение eslint-plugin-jsdoc
Плагин eslint-plugin-jsdoc предназначен для анализа и
проверки корректности JSDoc-комментариев в JavaScript-коде. Он расширяет
возможности ESLint, добавляя набор правил, ориентированных на структуру,
полноту и согласованность документации, встроенной непосредственно в
исходный код. Основная задача заключается в поддержании единообразного
формата документации функций, методов, классов и модулей, а также в
предотвращении расхождений между фактической реализацией и описанием
API.
JSDoc используется как стандарт документирования в JavaScript-проектах, особенно в библиотечном и инфраструктурном коде. При отсутствии контроля качества документации легко возникают ситуации, когда параметры, возвращаемые значения или типы устаревают и перестают соответствовать коду. Плагин решает эту проблему на уровне статического анализа.
Установка и подключение
Плагин устанавливается как обычная зависимость проекта:
npm install eslint-plugin-jsdoc --save-dev
После установки он подключается в конфигурации ESLint:
{
"plugins": ["jsdoc"]
}
Далее активируются правила:
{
"extends": ["plugin:jsdoc/recommended"]
}
Рекомендуемый пресет включает базовый набор проверок, обеспечивающих согласованность документации без избыточной строгости.
Поддерживается также ручная конфигурация:
{
"plugins": ["jsdoc"],
"rules": {
"jsdoc/require-jsdoc": "warn",
"jsdoc/check-alignment": "error"
}
}
Структура правил eslint-plugin-jsdoc
Плагин состоит из набора правил, сгруппированных по типам проверок:
Каждое правило работает независимо и может быть включено или отключено точечно.
require-jsdoc
Правило jsdoc/require-jsdoc контролирует наличие
JSDoc-комментариев у заданных конструкций: функций, методов классов,
экспортируемых сущностей.
Типичная конфигурация:
{
"jsdoc/require-jsdoc": [
"error",
{
"publicOnly": true,
"contexts": ["FunctionDeclaration", "MethodDefinition"]
}
]
}
Поведение правила зависит от контекста. При включении
publicOnly проверка ограничивается экспортируемыми или
публичными элементами, что снижает шум в утилитарных внутренних
функциях.
Пример нарушения:
function sum(a, b) {
return a + b;
}
Исправленный вариант:
/**
* Суммирует два числа
* @param {number} a
* @param {number} b
* @returns {number}
*/
function sum(a, b) {
return a + b;
}
require-param
Правило jsdoc/require-param проверяет наличие описаний
всех параметров функции в JSDoc-блоке. Оно сопоставляет параметры
сигнатуры с тегами @param.
Конфигурация:
{
"jsdoc/require-param": "error"
}
Поддерживается строгая проверка соответствия количества и имен параметров.
Пример несоответствия:
/**
* Формирует строку
* @param {string} value
*/
function build(value, suffix) {
return value + suffix;
}
В данном случае отсутствует описание suffix, что
считается ошибкой.
require-returns
Правило jsdoc/require-returns контролирует наличие
описания возвращаемого значения через тег @returns.
Конфигурация:
{
"jsdoc/require-returns": "error"
}
Особенно важно для функций, где тип возвращаемого значения не очевиден из контекста.
Пример:
/**
* Проверяет значение
*/
function isValid(value) {
return value != null;
}
Корректный вариант:
/**
* Проверяет значение
* @returns {boolean}
*/
function isValid(value) {
return value != null;
}
check-alignment
Правило jsdoc/check-alignment отвечает за форматирование
блоков JSDoc. Оно проверяет выравнивание звездочек, пробелов и структуры
строк внутри комментария.
Пример нарушения:
/**
* Некорректное выравнивание
*/
function test() {}
Исправленный вариант:
/**
* Корректное выравнивание
*/
function test() {}
Несмотря на визуальную простоту, это правило играет значительную роль в поддержании единообразного стиля в больших кодовых базах.
no-undefined-types
Правило jsdoc/no-undefined-types контролирует
использование типов, не определённых в проекте или в стандартной
среде.
Пример ошибки:
/**
* @param {UserModel} user
*/
function save(user) {}
Если UserModel не определён в области видимости или не
импортирован, фиксируется нарушение.
Правило полезно при интеграции с TypeScript-проектами, где JSDoc может дублировать типизацию. В таких случаях оно помогает избежать расхождения между TypeScript и документацией.
require-description
Правило jsdoc/require-description требует наличия
текстового описания в JSDoc-блоке. Оно предотвращает появление
формальных, но пустых комментариев.
Пример:
/**
* @param {number} x
* @returns {number}
*/
function square(x) {
return x * x;
}
Такой комментарий считается неполным, поскольку отсутствует смысловое описание функции.
Корректный вариант:
/**
* Возводит число в квадрат
* @param {number} x
* @returns {number}
*/
function square(x) {
return x * x;
}
Теговая структура и строгая проверка JSDoc
eslint-plugin-jsdoc анализирует не только наличие тегов, но и их корректное сочетание. Проверяются:
@param, @returns,
@throws)Это позволяет рассматривать JSDoc как формализованный контракт API, а не как свободный текстовый комментарий.
Интеграция с TypeScript
При использовании TypeScript часть функциональности JSDoc дублируется системой типов. Однако eslint-plugin-jsdoc сохраняет значение в нескольких сценариях:
В таких конфигурациях часто отключаются правила проверки типов, но сохраняются правила структуры и наличия описаний.
{
"rules": {
"jsdoc/no-types": "off",
"jsdoc/require-description": "error",
"jsdoc/check-alignment": "error"
}
}
Расширенные сценарии использования
В крупных кодовых базах плагин используется для стандартизации документации API. Часто задаются строгие политики:
@throws для функций с выбросами
исключенийПример комплексной функции с полной документацией:
/**
* Выполняет безопасное деление двух чисел
* @param {number} a - делимое
* @param {number} b - делитель
* @returns {number} результат деления
* @throws {Error} при делении на ноль
*/
function safeDivide(a, b) {
if (b === 0) {
throw new Error("Division by zero");
}
return a / b;
}
Механизмы подавления проверок
Плагин поддерживает локальное отключение правил:
// eslint-disable-next-line jsdoc/require-param
function legacy(a, b) {}
Также возможно отключение отдельных тегов или контекстов через конфигурацию, что используется при работе с устаревшим кодом.
Стратегии применения в проекте
При внедрении eslint-plugin-jsdoc обычно выделяются несколько уровней строгости:
Такая градация позволяет адаптировать линтинг под размер и зрелость проекта без перегрузки разработчиков избыточными требованиями.