• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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