summaryrefslogtreecommitdiff
path: root/tools/eslint/lib/rules/no-empty-class.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/eslint/lib/rules/no-empty-class.js')
-rw-r--r--tools/eslint/lib/rules/no-empty-class.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/tools/eslint/lib/rules/no-empty-class.js b/tools/eslint/lib/rules/no-empty-class.js
new file mode 100644
index 0000000000..009c1446b4
--- /dev/null
+++ b/tools/eslint/lib/rules/no-empty-class.js
@@ -0,0 +1,43 @@
+/**
+ * @fileoverview Rule to flag the use of empty character classes in regular expressions
+ * @author Ian Christian Myers
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+/*
+plain-English description of the following regexp:
+0. `^` fix the match at the beginning of the string
+1. `\/`: the `/` that begins the regexp
+2. `([^\\[]|\\.|\[([^\\\]]|\\.)+\])*`: regexp contents; 0 or more of the following
+ 2.0. `[^\\[]`: any character that's not a `\` or a `[` (anything but escape sequences and character classes)
+ 2.1. `\\.`: an escape sequence
+ 2.2. `\[([^\\\]]|\\.)+\]`: a character class that isn't empty
+3. `\/` the `/` that ends the regexp
+4. `[gimy]*`: optional regexp flags
+5. `$`: fix the match at the end of the string
+*/
+var regex = /^\/([^\\[]|\\.|\[([^\\\]]|\\.)+\])*\/[gimy]*$/;
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+module.exports = function(context) {
+
+ return {
+
+ "Literal": function(node) {
+ var token = context.getFirstToken(node);
+ if (token.type === "RegularExpression" && !regex.test(token.value)) {
+ context.report(node, "Empty class.");
+ }
+ }
+
+ };
+
+};