From 1729f9ea4d7b2945b2b701d72027fd4aace954cf Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Fri, 16 Sep 2022 23:49:40 +0200 Subject: [PATCH] feat: account for `sourceType: "commonjs"` in the strict rule (#16308) Fixes #16304 --- lib/rules/strict.js | 2 +- tests/lib/rules/strict.js | 46 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/rules/strict.js b/lib/rules/strict.js index e677c95e717..75bb561253e 100644 --- a/lib/rules/strict.js +++ b/lib/rules/strict.js @@ -105,7 +105,7 @@ module.exports = { if (ecmaFeatures.impliedStrict) { mode = "implied"; } else if (mode === "safe") { - mode = ecmaFeatures.globalReturn ? "global" : "function"; + mode = ecmaFeatures.globalReturn || context.languageOptions.sourceType === "commonjs" ? "global" : "function"; } /** diff --git a/tests/lib/rules/strict.js b/tests/lib/rules/strict.js index e3ea705fe7e..2798bc8cd53 100644 --- a/tests/lib/rules/strict.js +++ b/tests/lib/rules/strict.js @@ -10,7 +10,8 @@ //------------------------------------------------------------------------------ const rule = require("../../../lib/rules/strict"), - { RuleTester } = require("../../../lib/rule-tester"); + { RuleTester } = require("../../../lib/rule-tester"), + FlatRuleTester = require("../../../lib/rule-tester/flat-rule-tester"); //------------------------------------------------------------------------------ // Tests @@ -659,3 +660,46 @@ ruleTester.run("strict", rule, { } ] }); + +const flatRuleTester = new FlatRuleTester(); + +// TODO: merge these tests into `ruleTester.run` once we switch to FlatRuleTester (when FlatRuleTester becomes RuleTester). +flatRuleTester.run("strict", rule, { + valid: [ + { + code: "'use strict'; module.exports = function identity (value) { return value; }", + languageOptions: { + sourceType: "commonjs" + } + }, + { + code: "'use strict'; module.exports = function identity (value) { return value; }", + options: ["safe"], + languageOptions: { + sourceType: "commonjs" + } + } + ], + + invalid: [ + { + code: "module.exports = function identity (value) { return value; }", + options: ["safe"], + languageOptions: { + sourceType: "commonjs" + }, + errors: [ + { messageId: "global", line: 1 } + ] + }, + { + code: "module.exports = function identity (value) { return value; }", + languageOptions: { + sourceType: "commonjs" + }, + errors: [ + { messageId: "global", line: 1 } + ] + } + ] +});