Bug 1955738 - Update mozilla/no-browser-refs-in-toolkit to account for moz-src. r=frontend-codestyle-reviewers,Gijs

Differential Revision: https://phabricator.services.mozilla.com/D245215
This commit is contained in:
Mark Banner
2025-04-14 11:24:57 +00:00
parent 1b7eae0b6a
commit 4e078501aa
3 changed files with 70 additions and 1 deletions

View File

@@ -11,6 +11,8 @@ Examples of incorrect code for this rule:
.. code-block:: js
"chrome://browser/content/browser.xhtml"
"moz-src:///browser/components/search/SearchUIUtils.sys.mjs"
"moz-src://foo/browser/components/search/Foo.sys.mjs"
"resource:///modules/BrowserWindowTracker.sys.mjs"
"browser/browser.ftl"
@@ -20,5 +22,6 @@ Examples of correct code for this rule:
.. code-block:: js
"chrome://global/content/aboutAbout.html"
"moz-src:///toolkit/components/search/SearchService.sys.mjs"
"resource://gre/modules/AppConstants.sys.mjs"
"toolkit/global/aboutFoo.ftl"

View File

@@ -34,7 +34,8 @@ module.exports = {
node.value.startsWith("chrome://browser") ||
node.value.startsWith("resource:///") ||
node.value.startsWith("resource://app/") ||
(node.value.startsWith("browser/") && node.value.endsWith(".ftl"))
(node.value.startsWith("browser/") && node.value.endsWith(".ftl")) ||
/moz-src:\/\/\w*\/browser\//.test(node.value)
) {
context.report({
node,

View File

@@ -0,0 +1,65 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// ------------------------------------------------------------------------------
// Requirements
// ------------------------------------------------------------------------------
var rule = require("../lib/rules/no-browser-refs-in-toolkit");
var RuleTester = require("eslint").RuleTester;
const ruleTester = new RuleTester({
parserOptions: { ecmaVersion: "latest", sourceType: "module" },
});
// ------------------------------------------------------------------------------
// Tests
// ------------------------------------------------------------------------------
function invalidCode(code, url) {
return {
code,
errors: [
{
messageId: "noBrowserChrome",
data: { url },
type: "Literal",
},
],
};
}
ruleTester.run("no-browser-refs-in-toolkit", rule, {
valid: [
'import foo from "chrome://global/content/aboutAbout.html"',
'ChromeUtils.importESModule("resource://gre/modules/AppConstants.sys.mjs")',
'ChromeUtils.defineESModuleGetters(null, {foo: "toolkit/global/aboutFoo.ftl"})',
'import foo from "moz-src:///toolkit/Foo.sys.mjs"',
'import foo from "moz-src:///toolkit/browser.js"',
'import foo from "moz-src://bar/toolkit/browser.js"',
],
invalid: [
invalidCode(
'import foo from "chrome://browser/content/browser.xhtml"',
"chrome://browser/content/browser.xhtml"
),
invalidCode(
'ChromeUtils.importESModule("resource:///modules/BrowserWindowTracker.sys.mjs")',
"resource:///modules/BrowserWindowTracker.sys.mjs"
),
invalidCode(
'ChromeUtils.defineESModuleGetters(null, {foo: "browser/browser.ftl"})',
"browser/browser.ftl"
),
invalidCode(
'import foo from "moz-src:///browser/Foo.sys.mjs"',
"moz-src:///browser/Foo.sys.mjs"
),
invalidCode(
'import foo from "moz-src://bar/browser/Foo.sys.mjs"',
"moz-src://bar/browser/Foo.sys.mjs"
),
],
});