diff options
author | James M Snell <jasnell@gmail.com> | 2017-10-24 10:57:21 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-10-26 07:58:29 -0700 |
commit | 76b8803630f9a324810f38d00610792033e862c7 (patch) | |
tree | ca38518860d9796d8ad206eda30c69635a34178d /tools/eslint-rules/documented-errors.js | |
parent | fb477f3fa5c944e24b3b8275e4986ea3319b63a0 (diff) | |
download | android-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.js | 46 |
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 }); + } + } + }; + } +}; |