summaryrefslogtreecommitdiff
path: root/tools/eslint-rules/documented-errors.js
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2017-10-24 10:57:21 -0700
committerJames M Snell <jasnell@gmail.com>2017-10-26 07:58:29 -0700
commit76b8803630f9a324810f38d00610792033e862c7 (patch)
treeca38518860d9796d8ad206eda30c69635a34178d /tools/eslint-rules/documented-errors.js
parentfb477f3fa5c944e24b3b8275e4986ea3319b63a0 (diff)
downloadandroid-node-v8-76b8803630f9a324810f38d00610792033e862c7.tar.gz
android-node-v8-76b8803630f9a324810f38d00610792033e862c7.tar.bz2
android-node-v8-76b8803630f9a324810f38d00610792033e862c7.zip
tools: add eslint rule for documented errors
PR-URL: https://github.com/nodejs/node/pull/16450 Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Teddy Katz <teddy.katz@gmail.com>
Diffstat (limited to 'tools/eslint-rules/documented-errors.js')
-rw-r--r--tools/eslint-rules/documented-errors.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/tools/eslint-rules/documented-errors.js b/tools/eslint-rules/documented-errors.js
new file mode 100644
index 0000000000..471452d67a
--- /dev/null
+++ b/tools/eslint-rules/documented-errors.js
@@ -0,0 +1,46 @@
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+
+const doc = fs.readFileSync(path.resolve(__dirname, '../../doc/api/errors.md'),
+ 'utf8');
+
+function isInDoc(code) {
+ return doc.match(`### ${code}`) != null;
+}
+
+function includesAnchor(code) {
+ return doc.match(`<a id="${code}"></a>`) != null;
+}
+
+function errorForNode(node) {
+ return node.expression.arguments[0].value;
+}
+
+function isDefiningError(node) {
+ return node.expression &&
+ node.expression.type === 'CallExpression' &&
+ node.expression.callee &&
+ node.expression.callee.name === 'E';
+}
+
+module.exports = {
+ create: function(context) {
+ return {
+ ExpressionStatement: function(node) {
+ if (!isDefiningError(node)) return;
+ const code = errorForNode(node);
+ if (!isInDoc(code)) {
+ const message = `"${code}" is not documented in doc/api/errors.md`;
+ context.report({ node, message });
+ }
+ if (!includesAnchor(code)) {
+ const message =
+ `doc/api/errors.md does not have an anchor for "${code}"`;
+ context.report({ node, message });
+ }
+ }
+ };
+ }
+};