summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.eslintrc2
-rw-r--r--tools/eslint-rules/new-with-error.js36
2 files changed, 38 insertions, 0 deletions
diff --git a/.eslintrc b/.eslintrc
index 1d14b72abb..bf3fc3378f 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -87,6 +87,8 @@ rules:
# Custom rules in tools/eslint-rules
require-buffer: 2
+ new-with-error: [2, "Error", "RangeError", "TypeError", "SyntaxError", "ReferenceError"]
+
# Global scoped method and vars
globals:
diff --git a/tools/eslint-rules/new-with-error.js b/tools/eslint-rules/new-with-error.js
new file mode 100644
index 0000000000..b0f550db2f
--- /dev/null
+++ b/tools/eslint-rules/new-with-error.js
@@ -0,0 +1,36 @@
+/**
+ * @fileoverview Require `throw new Error()` rather than `throw Error()`
+ * @author Rich Trott
+ */
+'use strict';
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+module.exports = function(context) {
+
+ var errorList = context.options.length !== 0 ? context.options : ['Error'];
+
+ return {
+ 'ThrowStatement': function(node) {
+ if (node.argument.type === 'CallExpression' &&
+ errorList.indexOf(node.argument.callee.name) !== -1) {
+ context.report(node, 'Use new keyword when throwing.');
+ }
+ }
+ };
+};
+
+module.exports.schema = {
+ 'type': 'array',
+ 'items': [
+ {
+ 'enum': [0, 1, 2]
+ }
+ ],
+ 'additionalItems': {
+ 'type': 'string'
+ },
+ 'uniqueItems': true
+};