arui-presets-lint
Version:
Config files for arui-apps
64 lines (63 loc) • 2.26 kB
JavaScript
import {} from '@typescript-eslint/utils';
import { MESSAGES, SUPPORTED_DIRECTIVES } from '../constants/index.js';
import {} from '../types/index.js';
import { buildSuggestions, CommentValidator } from '../utils/index.js';
export const requireDescriptionRule = {
defaultOptions: [
{
ignore: [],
},
],
meta: {
type: 'suggestion',
docs: {
description: 'Требует добавления описаний к ESLint директивам в комментариях',
},
schema: [
{
type: 'object',
properties: {
ignore: {
type: 'array',
items: {
type: 'string',
enum: [...SUPPORTED_DIRECTIVES],
},
additionalItems: false,
uniqueItems: true,
},
},
additionalProperties: false,
},
],
messages: MESSAGES,
hasSuggestions: true,
},
create(context) {
const { sourceCode } = context;
const ignoredDirectives = context.options[0]?.ignore || [];
const allComments = sourceCode.getAllComments();
const validator = new CommentValidator(ignoredDirectives, allComments);
return {
Program() {
for (const comment of allComments) {
const validationResult = validator.validate(comment);
if (validationResult.needsReport) {
context.report({
loc: {
start: {
line: comment.loc.start.line,
column: 0,
},
end: comment.loc.end,
},
messageId: validationResult.messageId,
node: comment,
suggest: buildSuggestions(comment),
});
}
}
},
};
},
};