Bug 1455112 - 2. Add eslint rules to enforce debug/warn usage; r?esawin draft
authorJim Chen <nchen@mozilla.com>
Thu, 19 Apr 2018 14:41:24 -0400
changeset 785159 a76552cfbfdb1bed18caf33c59a69b95e3432e0a
parent 785158 058dc10619825a2463ac8a9e1f3f7f34560f76d0
child 785160 607875cb433b8df6e3bdc9808e20db3387f033b7
push id107160
push userbmo:nchen@mozilla.com
push dateThu, 19 Apr 2018 18:45:36 +0000
reviewersesawin
bugs1455112
milestone61.0a1
Bug 1455112 - 2. Add eslint rules to enforce debug/warn usage; r?esawin Add some eslint rules to prevent mistakes and help correct debug/warn usage. * Make sure debug/warn are used with template literals. * Make sure debug/warn are used with single template literal instead of concatenated expressions. * Make sure debug/warn literals don't include unnecessary JSON.stringify calls. MozReview-Commit-ID: LOLYbwIxGuf
mobile/android/.eslintrc.js
--- a/mobile/android/.eslintrc.js
+++ b/mobile/android/.eslintrc.js
@@ -30,10 +30,41 @@ module.exports = {
       "modules/WebsiteMetadata.jsm",
       // Bug 1425051.
       "tests/browser/robocop/**",
     ],
     rules: {
       "no-unused-vars": "off",
       "no-undef": "off",
     }
+  }, {
+    files: [
+      "chrome/geckoview/**",
+      "components/geckoview/**",
+      "modules/geckoview/**",
+    ],
+    rules: {
+      "no-restricted-syntax": [
+        "error",
+        {
+            "selector": `CallExpression > \
+                         Identifier.callee[name = /^debug$|^warn$/]`,
+            "message": "Use debug and warn with template literals, e.g. debug `foo`;",
+        },
+        {
+            "selector": `BinaryExpression[operator = '+'] > \
+                         TaggedTemplateExpression.left > \
+                         Identifier.tag[name = /^debug$|^warn$/]`,
+            "message": "Use only one template literal with debug/warn instead of concatenating multiple expressions,\n" +
+                       "    e.g. (debug `foo ${42} bar`) instead of (debug `foo` + 42 + `bar`)",
+        },
+        {
+            "selector": `TaggedTemplateExpression[tag.type = 'Identifier'][tag.name = /^debug$|^warn$/] > \
+                         TemplateLiteral.quasi CallExpression > \
+                         MemberExpression.callee[object.type = 'Identifier'][object.name = 'JSON'] > \
+                         Identifier.property[name = 'stringify']`,
+            "message": "Don't call JSON.stringify within debug/warn literals,\n" +
+                       "    e.g. (debug `foo=${foo}`) instead of (debug `foo=${JSON.stringify(foo)}`)",
+        },
+      ],
+    },
   }],
 };