1'use strict'; 2 3const fs = require('fs'); 4const path = require('path'); 5const { isDefiningError } = require('./rules-utils.js'); 6 7const doc = fs.readFileSync(path.resolve(__dirname, '../../doc/api/errors.md'), 8 'utf8'); 9 10function isInDoc(code) { 11 return doc.includes(`### \`${code}\``); 12} 13 14function includesAnchor(code) { 15 return doc.includes(`<a id="${code}"></a>`); 16} 17 18function errorForNode(node) { 19 return node.expression.arguments[0].value; 20} 21 22module.exports = { 23 create: function(context) { 24 return { 25 ExpressionStatement: function(node) { 26 if (!isDefiningError(node) || !errorForNode(node)) return; 27 const code = errorForNode(node); 28 if (!isInDoc(code)) { 29 const message = `"${code}" is not documented in doc/api/errors.md`; 30 context.report({ node, message }); 31 } 32 if (!includesAnchor(code)) { 33 const message = 34 `doc/api/errors.md does not have an anchor for "${code}"`; 35 context.report({ node, message }); 36 } 37 } 38 }; 39 } 40}; 41