summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/eslint-rules/non-ascii-character.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/eslint-rules/non-ascii-character.js b/tools/eslint-rules/non-ascii-character.js
new file mode 100644
index 0000000000..e67aac7cd9
--- /dev/null
+++ b/tools/eslint-rules/non-ascii-character.js
@@ -0,0 +1,61 @@
+/**
+ * @fileOverview Any non-ASCII characters in lib/ will increase the size
+ * of the compiled node binary. This linter rule ensures that
+ * any such character is reported.
+ * @author Sarat Addepalli <sarat.addepalli@gmail.com>
+ */
+
+'use strict';
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+const nonAsciiRegexPattern = /[^\r\n\x20-\x7e]/;
+const suggestions = {
+ '’': '\'',
+ '‛': '\'',
+ '‘': '\'',
+ '“': '"',
+ '‟': '"',
+ '”': '"',
+ '«': '"',
+ '»': '"',
+ '—': '-'
+};
+
+module.exports = (context) => {
+
+ const reportIfError = (node, sourceCode) => {
+
+ const matches = sourceCode.text.match(nonAsciiRegexPattern);
+
+ if (!matches) return;
+
+ const offendingCharacter = matches[0];
+ const offendingCharacterPosition = matches.index;
+ const suggestion = suggestions[offendingCharacter];
+
+ let message = `Non-ASCII character '${offendingCharacter}' detected.`;
+
+ message = suggestion ?
+ `${message} Consider replacing with: ${suggestion}` :
+ message;
+
+ context.report({
+ node,
+ message,
+ loc: sourceCode.getLocFromIndex(offendingCharacterPosition),
+ fix: (fixer) => {
+ return fixer.replaceText(
+ node,
+ suggestion ? `${suggestion}` : ''
+ );
+ }
+ });
+ };
+
+ return {
+ Program: (node) => reportIfError(node, context.getSourceCode())
+ };
+};