Bug 1872674 - Add an ESLint rule to reject new uses of Console.sys.mjs/Log.sys.mjs. r=mossop

Differential Revision: https://phabricator.services.mozilla.com/D197504
This commit is contained in:
Mark Banner 2024-01-16 13:37:07 +00:00
parent 298efaf1ce
commit c7947b6868
9 changed files with 167 additions and 1 deletions

View file

@ -211,6 +211,63 @@ module.exports = {
...testPaths.chrome.map(path => `${path}/**/*.js`),
],
},
{
// Bug 881389 - Complete switching to console.createInstance from custom
// modules. To support the gradual switch, we log these as warnings until
// they have been transitioned.
files: [
"browser/base/content/browser-data-submission-info-bar.js",
"browser/base/content/browser-sync.js",
"browser/base/content/browser.js",
"browser/components/BrowserGlue.sys.mjs",
"browser/components/attribution/AttributionCode.sys.mjs",
"browser/components/customizableui/**",
"browser/components/downloads/**",
"browser/components/enterprisepolicies/**",
"browser/components/firefoxview/**",
"browser/components/migration/**",
"browser/components/newtab/lib/ASRouterPreferences.jsm",
"browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs",
"browser/components/shell/ShellService.sys.mjs",
"browser/components/syncedtabs/TabListComponent.sys.mjs",
"browser/components/uitour/UITour.sys.mjs",
"browser/components/urlbar/**",
"browser/tools/mozscreenshots/mozscreenshots/extension/Screenshot.sys.mjs",
"devtools/client/webconsole/test/**",
"devtools/shared/tests/xpcshell/test_console_filtering.js",
"devtools/shared/webconsole/test/chrome/test_consoleapi_innerID.html",
"dom/push/Push*.sys.mjs",
"mobile/android/modules/geckoview/GeckoViewUtils.sys.mjs",
"remote/shared/**",
"security/manager/ssl/RemoteSecuritySettings.sys.mjs",
"services/**",
"testing/mochitest/api.js",
"toolkit/components/backgroundtasks/**",
"toolkit/components/crashes/**",
"toolkit/components/enterprisepolicies/**",
"toolkit/components/extensions/**",
"toolkit/components/formautofill/**",
"toolkit/components/messaging-system/**",
"toolkit/components/normandy/**",
"toolkit/components/places/**",
"toolkit/components/printing/**",
"toolkit/components/taskscheduler/**",
"toolkit/components/telemetry/**",
"toolkit/components/utils/JsonSchemaValidator.sys.mjs",
"toolkit/modules/AsanReporter.sys.mjs",
"toolkit/modules/GMPInstallManager.sys.mjs",
"toolkit/modules/OSKeyStore.sys.mjs",
"toolkit/modules/ProfileAge.sys.mjs",
"toolkit/modules/Sqlite.sys.mjs",
"toolkit/modules/tests/xpcshell/test_Log*.js",
"toolkit/mozapps/defaultagent/BackgroundTask_defaultagent.sys.mjs",
"toolkit/mozapps/extensions/**",
"toolkit/mozapps/update/**",
],
rules: {
"mozilla/use-console-createInstance": "off",
},
},
{
// Bug 877389 - Gradually migrate from Cu.reportError to console.error.
// Enable these as we fix more areas.

View file

@ -28,6 +28,7 @@ const known_scripts = {
"resource://gre/modules/XPCOMUtils.sys.mjs",
// Logging related
// eslint-disable-next-line mozilla/use-console-createInstance
"resource://gre/modules/Log.sys.mjs",
// Browser front-end

View file

@ -41,6 +41,7 @@ const known_scripts = {
"resource://gre/modules/XPCOMUtils.sys.mjs",
// Logging related
// eslint-disable-next-line mozilla/use-console-createInstance
"resource://gre/modules/Log.sys.mjs",
// Telemetry

View file

@ -47,7 +47,7 @@ const TEST_CASES = [
},
{
type: "resource",
testURL: "resource://gre/modules/Log.sys.mjs",
testURL: "resource://gre/modules/AppConstants.sys.mjs",
img_url: `url("chrome://global/skin/icons/page-portrait.svg")`,
},
{

View file

@ -0,0 +1,20 @@
use-console-createInstance
==========================
Rejects usage of Console.sys.mjs or Log.sys.mjs, preferring use of
``console.createInstance`` instead. See `Javascript Logging </toolkit/javascript-logging.html>`__ for more information.
Examples of incorrect code for this rule:
-----------------------------------------
.. code-block:: js
"resource://gre/modules/Console.sys.mjs"
"resource://gre/modules/Log.sys.mjs"
Examples of correct code for this rule:
---------------------------------------
.. code-block:: js
console.createInstance({ prefix: "Foo" });

View file

@ -190,6 +190,7 @@ module.exports = {
"mozilla/use-cc-etc": "error",
"mozilla/use-chromeutils-generateqi": "error",
"mozilla/use-chromeutils-import": "error",
"mozilla/use-console-createInstance": "error",
"mozilla/use-default-preference-values": "error",
"mozilla/use-includes-instead-of-indexOf": "error",
"mozilla/use-isInstance": "error",

View file

@ -83,6 +83,7 @@ module.exports = {
"use-cc-etc": require("../lib/rules/use-cc-etc"),
"use-chromeutils-generateqi": require("../lib/rules/use-chromeutils-generateqi"),
"use-chromeutils-import": require("../lib/rules/use-chromeutils-import"),
"use-console-createInstance": require("../lib/rules/use-console-createInstance"),
"use-default-preference-values": require("../lib/rules/use-default-preference-values"),
"use-ownerGlobal": require("../lib/rules/use-ownerGlobal"),
"use-includes-instead-of-indexOf": require("../lib/rules/use-includes-instead-of-indexOf"),

View file

@ -0,0 +1,44 @@
/**
* @fileoverview Reject use of Console.sys.mjs and Log.sys.mjs.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
"use strict";
module.exports = {
meta: {
docs: {
url: "https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla/rules/use-console-createInstance.html",
},
messages: {
useConsoleRatherThanModule:
"Use console.createInstance rather than {{module}}",
},
schema: [],
type: "suggestion",
},
create(context) {
return {
Literal(node) {
if (typeof node.value != "string") {
return;
}
/* eslint-disable mozilla/use-console-createInstance */
if (
node.value == "resource://gre/modules/Console.sys.mjs" ||
node.value == "resource://gre/modules/Log.sys.mjs"
) {
context.report({
node,
messageId: "useConsoleRatherThanModule",
data: { module: node.value.split("/").at(-1) },
});
}
},
};
},
};

View file

@ -0,0 +1,41 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// ------------------------------------------------------------------------------
// Requirements
// ------------------------------------------------------------------------------
var rule = require("../lib/rules/use-console-createInstance");
var RuleTester = require("eslint").RuleTester;
const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: "latest" } });
// ------------------------------------------------------------------------------
// Tests
// ------------------------------------------------------------------------------
ruleTester.run("use-console-createInstance", rule, {
valid: ['"resource://gre/modules/Foo.sys.mjs"'],
invalid: [
{
code: '"resource://gre/modules/Console.sys.mjs"',
errors: [
{
messageId: "useConsoleRatherThanModule",
data: { module: "Console.sys.mjs" },
},
],
},
{
code: '"resource://gre/modules/Log.sys.mjs"',
errors: [
{
messageId: "useConsoleRatherThanModule",
data: { module: "Log.sys.mjs" },
},
],
},
],
});