diff --git a/lib/utils/__tests__/isStandardSyntaxValue.test.js b/lib/utils/__tests__/isStandardSyntaxValue.test.js index 44031c13ac..f5a66559a2 100644 --- a/lib/utils/__tests__/isStandardSyntaxValue.test.js +++ b/lib/utils/__tests__/isStandardSyntaxValue.test.js @@ -42,4 +42,10 @@ describe('isStandardSyntaxValue', () => { it('less interpolation', () => { expect(isStandardSyntaxValue('@{var}')).toBeFalsy(); }); + it('WebExtension replacement keyword', () => { + expect(isStandardSyntaxValue('__MSG_@@bidi_dir__')).toBeFalsy(); + }); + it('negative WebExtension replacement keyword', () => { + expect(isStandardSyntaxValue('__msg_@@bidi_dir__')).toBeTruthy(); + }); }); diff --git a/lib/utils/isStandardSyntaxValue.js b/lib/utils/isStandardSyntaxValue.js index f7da6ef853..5f8b430301 100644 --- a/lib/utils/isStandardSyntaxValue.js +++ b/lib/utils/isStandardSyntaxValue.js @@ -36,5 +36,12 @@ module.exports = function (value) { return false; } + // WebExtension replacement keyword used by Chrome/Firefox + // more information: https://developer.chrome.com/extensions/i18n + // and https://github.com/stylelint/stylelint/issues/4707 + if (/__MSG_[^\s]+__/.test(value)) { + return false; + } + return true; };