const DIRECTIVE_PATTERNS = [ /^\s*eslint-disable/, /^\s*eslint-enable/, /^\s*eslint-disable-next-line/, /^\s*eslint-disable-line/, /^\s*@ts-ignore/, /^\s*@ts-expect-error/, /^\s*@ts-nocheck/, /^\s*@ts-check/, /^\s*@type\s/, /^\s*@param\s/, /^\s*@returns?\s/, /^\s*@typedef\s/, /^\s*prettier-ignore/, /^\s*webpackChunkName/, ] function isDirectiveComment(value) { return DIRECTIVE_PATTERNS.some((pattern) => pattern.test(value)) } const rule = { meta: { type: "suggestion", docs: { description: "disallow comments in favour of self-documenting code", }, messages: { noComment: "avoid comments — code should be self-documenting. refactor to make the intent clear from the code itself.", }, schema: [], }, create(context) { const sourceCode = context.sourceCode ?? context.getSourceCode() return { Program() { for (const comment of sourceCode.getAllComments()) { const value = comment.value.trim() if (!value) continue if (isDirectiveComment(value)) continue context.report({ loc: comment.loc, messageId: "noComment", }) } }, } }, } const plugin = { meta: { name: "asa-no-comments", version: "1.0.0", }, rules: { "no-comments": rule, }, } export default plugin