From 598277ecde6e55610af3a148f33777c8d7613454 Mon Sep 17 00:00:00 2001 From: Torleif Berger Date: Wed, 29 Jan 2020 12:16:40 +0100 Subject: [PATCH] [New] `jsx-pascal-case`: Support unicode characters Fixes #1654 --- lib/rules/jsx-pascal-case.js | 8 ++++++-- package.json | 3 ++- tests/lib/rules/jsx-pascal-case.js | 6 +++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/rules/jsx-pascal-case.js b/lib/rules/jsx-pascal-case.js index 43472c4067..e6e1339cc2 100644 --- a/lib/rules/jsx-pascal-case.js +++ b/lib/rules/jsx-pascal-case.js @@ -6,6 +6,7 @@ 'use strict'; const elementType = require('jsx-ast-utils/elementType'); +const XRegExp = require('xregexp'); const docsUrl = require('../util/docsUrl'); const jsxUtil = require('../util/jsx'); @@ -13,8 +14,11 @@ const jsxUtil = require('../util/jsx'); // Constants // ------------------------------------------------------------------------------ -const PASCAL_CASE_REGEX = /^(.*[.])*([A-Z]|[A-Z]+[a-z0-9]+(?:[A-Z0-9]+[a-z0-9]*)*)$/; -const ALL_CAPS_TAG_REGEX = /^[A-Z0-9]+([A-Z0-9_]*[A-Z0-9]+)?$/; +// eslint-disable-next-line no-new +const hasU = (function hasU() { try { new RegExp('o', 'u'); return true; } catch (e) { return false; } }()); + +const PASCAL_CASE_REGEX = XRegExp('^(.*[.])*([\\p{Lu}]|[\\p{Lu}]+[\\p{Ll}0-9]+(?:[\\p{Lu}0-9]+[\\p{Ll}0-9]*)*)$', hasU ? 'u' : ''); +const ALL_CAPS_TAG_REGEX = XRegExp('^[\\p{Lu}0-9]+([\\p{Lu}0-9_]*[\\p{Lu}0-9]+)?$', hasU ? 'u' : ''); // ------------------------------------------------------------------------------ // Rule Definition diff --git a/package.json b/package.json index 46ee88f440..7a440dfa71 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "object.values": "^1.1.1", "prop-types": "^15.7.2", "resolve": "^1.14.2", - "string.prototype.matchall": "^4.0.2" + "string.prototype.matchall": "^4.0.2", + "xregexp": "^4.2.4" }, "devDependencies": { "@types/eslint": "^6.1.3", diff --git a/tests/lib/rules/jsx-pascal-case.js b/tests/lib/rules/jsx-pascal-case.js index 68f0806780..8428783818 100644 --- a/tests/lib/rules/jsx-pascal-case.js +++ b/tests/lib/rules/jsx-pascal-case.js @@ -47,7 +47,11 @@ ruleTester.run('jsx-pascal-case', rule, { }, { code: '' }, { - code: '' + code: '<Éurströmming />' + }, { + code: '' + }, { + code: '' }, { code: '', parser: parsers.BABEL_ESLINT