eslint / eslint

Find and fix problems in your JavaScript code.
https://eslint.org
MIT License
24.39k stars 4.4k forks source link

feat: update Unicode letter detection in capitalized-comments rule #18375

Closed fasttime closed 3 weeks ago

fasttime commented 3 weeks ago

Prerequisites checklist

What is the purpose of this pull request? (put an "X" next to an item)

[ ] Documentation update [ ] Bug fix (template) [ ] New rule (template) [X] Changes an existing rule (template) [ ] Add autofix to a rule [ ] Add a CLI option [ ] Add something to the core [ ] Other, please explain:

What rule do you want to change?

capitalized-comments

What change do you want to make (place an "X" next to just one item)?

[X] Generate more warnings [ ] Generate fewer warnings [ ] Implement autofix [ ] Implement suggestions

How will the change be implemented (place an "X" next to just one item)?

[ ] A new option [X] A new default behavior [ ] Other

Please provide some example code that this change will affect:

/* eslint capitalized-comments: "error" */

// ๊ฎณ๊ฎƒ๊ญน
/* eslint capitalized-comments: ["error", "never"] */

// แฒ’
// ๐‘ขฎ

What does the rule currently do for this code?

Reports no errors.

What will the rule do after it's changed?

It will report the line comments in both examples as errors. All line comments use wrong capitalization according to current versions of Unicode.

What changes did you make? (Give an overview)

This PR updates the capitalized-comments rule to recognize characters that are considered letters in current versions of Unicode. Currently, the rule only recognizes letters that were such in Unicode 7.0.0, and only if composed by a single code unit (up to code point U+FFFF).

Compared to the current regex, the new one will match 698 more letters that have uppercase or lowercase variations. These are the characters that could report more problems with the capitalized-comments rule.

Analysis details The following script can be placed in the eslint repo directory with the main branch checked out to find characters that are considered letters: ```js // check-letters.js const letters = require('./lib/rules/utils/patterns/letters'); const added = []; const removed = []; let allAdded = 0; let allRemoved = 0; for (let codePoint = 0; codePoint <= 0xffff; ++codePoint) { const char = String.fromCodePoint(codePoint); const lettersMatch = letters.test(char); const newMatch = /\p{L}/u.test(char); if (lettersMatch !== newMatch) { if (newMatch) { allAdded++; } else { allRemoved++; } if (char === char.toLocaleLowerCase() && char === char.toLocaleUpperCase()) { continue; } if (newMatch) { added.push(codePoint); } else { removed.push(codePoint); } } } function formatCodePoint(codePoint) { return `"${String.fromCodePoint(codePoint)}" (U+${codePoint.toString(16).toUpperCase().padStart(4, '0')})`; } console.log(`${added.length} new letters (${allAdded} including caseless)`); console.log(`${removed.length} removed letters (${allRemoved} including caseless)`); console.log('The new letters with case variations are:'); for (const codePoint of added) { let line = formatCodePoint(codePoint); const char = String.fromCodePoint(codePoint); const lowerChar = char.toLocaleLowerCase(); const upperChar = char.toLocaleUpperCase(); if (char !== lowerChar) { line += ` - lowercase: ${formatCodePoint(lowerChar.codePointAt())}`; } if (char !== upperChar) { line += ` - uppercase: ${formatCodePoint(upperChar.codePointAt())}`; } console.log(line); } ``` This is the output: ``` 698 new letters (88142 including caseless) 0 removed letters (2 including caseless) The new letters with case variations are: "แต" (U+13F5) - lowercase: "แฝ" (U+13FD) "แธ" (U+13F8) - uppercase: "แฐ" (U+13F0) "แน" (U+13F9) - uppercase: "แฑ" (U+13F1) "แบ" (U+13FA) - uppercase: "แฒ" (U+13F2) "แป" (U+13FB) - uppercase: "แณ" (U+13F3) "แผ" (U+13FC) - uppercase: "แด" (U+13F4) "แฝ" (U+13FD) - uppercase: "แต" (U+13F5) "แฒ€" (U+1C80) - uppercase: "ะ’" (U+0412) "แฒ" (U+1C81) - uppercase: "ะ”" (U+0414) "แฒ‚" (U+1C82) - uppercase: "ะž" (U+041E) "แฒƒ" (U+1C83) - uppercase: "ะก" (U+0421) "แฒ„" (U+1C84) - uppercase: "ะข" (U+0422) "แฒ…" (U+1C85) - uppercase: "ะข" (U+0422) "แฒ†" (U+1C86) - uppercase: "ะช" (U+042A) "แฒ‡" (U+1C87) - uppercase: "ัข" (U+0462) "แฒˆ" (U+1C88) - uppercase: "๊™Š" (U+A64A) "แฒ" (U+1C90) - lowercase: "แƒ" (U+10D0) "แฒ‘" (U+1C91) - lowercase: "แƒ‘" (U+10D1) "แฒ’" (U+1C92) - lowercase: "แƒ’" (U+10D2) "แฒ“" (U+1C93) - lowercase: "แƒ“" (U+10D3) "แฒ”" (U+1C94) - lowercase: "แƒ”" (U+10D4) "แฒ•" (U+1C95) - lowercase: "แƒ•" (U+10D5) "แฒ–" (U+1C96) - lowercase: "แƒ–" (U+10D6) "แฒ—" (U+1C97) - lowercase: "แƒ—" (U+10D7) "แฒ˜" (U+1C98) - lowercase: "แƒ˜" (U+10D8) "แฒ™" (U+1C99) - lowercase: "แƒ™" (U+10D9) "แฒš" (U+1C9A) - lowercase: "แƒš" (U+10DA) "แฒ›" (U+1C9B) - lowercase: "แƒ›" (U+10DB) "แฒœ" (U+1C9C) - lowercase: "แƒœ" (U+10DC) "แฒ" (U+1C9D) - lowercase: "แƒ" (U+10DD) "แฒž" (U+1C9E) - lowercase: "แƒž" (U+10DE) "แฒŸ" (U+1C9F) - lowercase: "แƒŸ" (U+10DF) "แฒ " (U+1CA0) - lowercase: "แƒ " (U+10E0) "แฒก" (U+1CA1) - lowercase: "แƒก" (U+10E1) "แฒข" (U+1CA2) - lowercase: "แƒข" (U+10E2) "แฒฃ" (U+1CA3) - lowercase: "แƒฃ" (U+10E3) "แฒค" (U+1CA4) - lowercase: "แƒค" (U+10E4) "แฒฅ" (U+1CA5) - lowercase: "แƒฅ" (U+10E5) "แฒฆ" (U+1CA6) - lowercase: "แƒฆ" (U+10E6) "แฒง" (U+1CA7) - lowercase: "แƒง" (U+10E7) "แฒจ" (U+1CA8) - lowercase: "แƒจ" (U+10E8) "แฒฉ" (U+1CA9) - lowercase: "แƒฉ" (U+10E9) "แฒช" (U+1CAA) - lowercase: "แƒช" (U+10EA) "แฒซ" (U+1CAB) - lowercase: "แƒซ" (U+10EB) "แฒฌ" (U+1CAC) - lowercase: "แƒฌ" (U+10EC) "แฒญ" (U+1CAD) - lowercase: "แƒญ" (U+10ED) "แฒฎ" (U+1CAE) - lowercase: "แƒฎ" (U+10EE) "แฒฏ" (U+1CAF) - lowercase: "แƒฏ" (U+10EF) "แฒฐ" (U+1CB0) - lowercase: "แƒฐ" (U+10F0) "แฒฑ" (U+1CB1) - lowercase: "แƒฑ" (U+10F1) "แฒฒ" (U+1CB2) - lowercase: "แƒฒ" (U+10F2) "แฒณ" (U+1CB3) - lowercase: "แƒณ" (U+10F3) "แฒด" (U+1CB4) - lowercase: "แƒด" (U+10F4) "แฒต" (U+1CB5) - lowercase: "แƒต" (U+10F5) "แฒถ" (U+1CB6) - lowercase: "แƒถ" (U+10F6) "แฒท" (U+1CB7) - lowercase: "แƒท" (U+10F7) "แฒธ" (U+1CB8) - lowercase: "แƒธ" (U+10F8) "แฒน" (U+1CB9) - lowercase: "แƒน" (U+10F9) "แฒบ" (U+1CBA) - lowercase: "แƒบ" (U+10FA) "แฒฝ" (U+1CBD) - lowercase: "แƒฝ" (U+10FD) "แฒพ" (U+1CBE) - lowercase: "แƒพ" (U+10FE) "แฒฟ" (U+1CBF) - lowercase: "แƒฟ" (U+10FF) "โฐฏ" (U+2C2F) - lowercase: "โฑŸ" (U+2C5F) "โฑŸ" (U+2C5F) - uppercase: "โฐฏ" (U+2C2F) "๊žฎ" (U+A7AE) - lowercase: "ษช" (U+026A) "๊žฒ" (U+A7B2) - lowercase: "ส" (U+029D) "๊žณ" (U+A7B3) - lowercase: "๊ญ“" (U+AB53) "๊žด" (U+A7B4) - lowercase: "๊žต" (U+A7B5) "๊žต" (U+A7B5) - uppercase: "๊žด" (U+A7B4) "๊žถ" (U+A7B6) - lowercase: "๊žท" (U+A7B7) "๊žท" (U+A7B7) - uppercase: "๊žถ" (U+A7B6) "๊žธ" (U+A7B8) - lowercase: "๊žน" (U+A7B9) "๊žน" (U+A7B9) - uppercase: "๊žธ" (U+A7B8) "๊žบ" (U+A7BA) - lowercase: "๊žป" (U+A7BB) "๊žป" (U+A7BB) - uppercase: "๊žบ" (U+A7BA) "๊žผ" (U+A7BC) - lowercase: "๊žฝ" (U+A7BD) "๊žฝ" (U+A7BD) - uppercase: "๊žผ" (U+A7BC) "๊žพ" (U+A7BE) - lowercase: "๊žฟ" (U+A7BF) "๊žฟ" (U+A7BF) - uppercase: "๊žพ" (U+A7BE) "๊Ÿ€" (U+A7C0) - lowercase: "๊Ÿ" (U+A7C1) "๊Ÿ" (U+A7C1) - uppercase: "๊Ÿ€" (U+A7C0) "๊Ÿ‚" (U+A7C2) - lowercase: "๊Ÿƒ" (U+A7C3) "๊Ÿƒ" (U+A7C3) - uppercase: "๊Ÿ‚" (U+A7C2) "๊Ÿ„" (U+A7C4) - lowercase: "๊ž”" (U+A794) "๊Ÿ…" (U+A7C5) - lowercase: "ส‚" (U+0282) "๊Ÿ†" (U+A7C6) - lowercase: "แถŽ" (U+1D8E) "๊Ÿ‡" (U+A7C7) - lowercase: "๊Ÿˆ" (U+A7C8) "๊Ÿˆ" (U+A7C8) - uppercase: "๊Ÿ‡" (U+A7C7) "๊Ÿ‰" (U+A7C9) - lowercase: "๊ŸŠ" (U+A7CA) "๊ŸŠ" (U+A7CA) - uppercase: "๊Ÿ‰" (U+A7C9) "๊Ÿ" (U+A7D0) - lowercase: "๊Ÿ‘" (U+A7D1) "๊Ÿ‘" (U+A7D1) - uppercase: "๊Ÿ" (U+A7D0) "๊Ÿ–" (U+A7D6) - lowercase: "๊Ÿ—" (U+A7D7) "๊Ÿ—" (U+A7D7) - uppercase: "๊Ÿ–" (U+A7D6) "๊Ÿ˜" (U+A7D8) - lowercase: "๊Ÿ™" (U+A7D9) "๊Ÿ™" (U+A7D9) - uppercase: "๊Ÿ˜" (U+A7D8) "๊Ÿต" (U+A7F5) - lowercase: "๊Ÿถ" (U+A7F6) "๊Ÿถ" (U+A7F6) - uppercase: "๊Ÿต" (U+A7F5) "๊ญฐ" (U+AB70) - uppercase: "แŽ " (U+13A0) "๊ญฑ" (U+AB71) - uppercase: "แŽก" (U+13A1) "๊ญฒ" (U+AB72) - uppercase: "แŽข" (U+13A2) "๊ญณ" (U+AB73) - uppercase: "แŽฃ" (U+13A3) "๊ญด" (U+AB74) - uppercase: "แŽค" (U+13A4) "๊ญต" (U+AB75) - uppercase: "แŽฅ" (U+13A5) "๊ญถ" (U+AB76) - uppercase: "แŽฆ" (U+13A6) "๊ญท" (U+AB77) - uppercase: "แŽง" (U+13A7) "๊ญธ" (U+AB78) - uppercase: "แŽจ" (U+13A8) "๊ญน" (U+AB79) - uppercase: "แŽฉ" (U+13A9) "๊ญบ" (U+AB7A) - uppercase: "แŽช" (U+13AA) "๊ญป" (U+AB7B) - uppercase: "แŽซ" (U+13AB) "๊ญผ" (U+AB7C) - uppercase: "แŽฌ" (U+13AC) "๊ญฝ" (U+AB7D) - uppercase: "แŽญ" (U+13AD) "๊ญพ" (U+AB7E) - uppercase: "แŽฎ" (U+13AE) "๊ญฟ" (U+AB7F) - uppercase: "แŽฏ" (U+13AF) "๊ฎ€" (U+AB80) - uppercase: "แŽฐ" (U+13B0) "๊ฎ" (U+AB81) - uppercase: "แŽฑ" (U+13B1) "๊ฎ‚" (U+AB82) - uppercase: "แŽฒ" (U+13B2) "๊ฎƒ" (U+AB83) - uppercase: "แŽณ" (U+13B3) "๊ฎ„" (U+AB84) - uppercase: "แŽด" (U+13B4) "๊ฎ…" (U+AB85) - uppercase: "แŽต" (U+13B5) "๊ฎ†" (U+AB86) - uppercase: "แŽถ" (U+13B6) "๊ฎ‡" (U+AB87) - uppercase: "แŽท" (U+13B7) "๊ฎˆ" (U+AB88) - uppercase: "แŽธ" (U+13B8) "๊ฎ‰" (U+AB89) - uppercase: "แŽน" (U+13B9) "๊ฎŠ" (U+AB8A) - uppercase: "แŽบ" (U+13BA) "๊ฎ‹" (U+AB8B) - uppercase: "แŽป" (U+13BB) "๊ฎŒ" (U+AB8C) - uppercase: "แŽผ" (U+13BC) "๊ฎ" (U+AB8D) - uppercase: "แŽฝ" (U+13BD) "๊ฎŽ" (U+AB8E) - uppercase: "แŽพ" (U+13BE) "๊ฎ" (U+AB8F) - uppercase: "แŽฟ" (U+13BF) "๊ฎ" (U+AB90) - uppercase: "แ€" (U+13C0) "๊ฎ‘" (U+AB91) - uppercase: "แ" (U+13C1) "๊ฎ’" (U+AB92) - uppercase: "แ‚" (U+13C2) "๊ฎ“" (U+AB93) - uppercase: "แƒ" (U+13C3) "๊ฎ”" (U+AB94) - uppercase: "แ„" (U+13C4) "๊ฎ•" (U+AB95) - uppercase: "แ…" (U+13C5) "๊ฎ–" (U+AB96) - uppercase: "แ†" (U+13C6) "๊ฎ—" (U+AB97) - uppercase: "แ‡" (U+13C7) "๊ฎ˜" (U+AB98) - uppercase: "แˆ" (U+13C8) "๊ฎ™" (U+AB99) - uppercase: "แ‰" (U+13C9) "๊ฎš" (U+AB9A) - uppercase: "แŠ" (U+13CA) "๊ฎ›" (U+AB9B) - uppercase: "แ‹" (U+13CB) "๊ฎœ" (U+AB9C) - uppercase: "แŒ" (U+13CC) "๊ฎ" (U+AB9D) - uppercase: "แ" (U+13CD) "๊ฎž" (U+AB9E) - uppercase: "แŽ" (U+13CE) "๊ฎŸ" (U+AB9F) - uppercase: "แ" (U+13CF) "๊ฎ " (U+ABA0) - uppercase: "แ" (U+13D0) "๊ฎก" (U+ABA1) - uppercase: "แ‘" (U+13D1) "๊ฎข" (U+ABA2) - uppercase: "แ’" (U+13D2) "๊ฎฃ" (U+ABA3) - uppercase: "แ“" (U+13D3) "๊ฎค" (U+ABA4) - uppercase: "แ”" (U+13D4) "๊ฎฅ" (U+ABA5) - uppercase: "แ•" (U+13D5) "๊ฎฆ" (U+ABA6) - uppercase: "แ–" (U+13D6) "๊ฎง" (U+ABA7) - uppercase: "แ—" (U+13D7) "๊ฎจ" (U+ABA8) - uppercase: "แ˜" (U+13D8) "๊ฎฉ" (U+ABA9) - uppercase: "แ™" (U+13D9) "๊ฎช" (U+ABAA) - uppercase: "แš" (U+13DA) "๊ฎซ" (U+ABAB) - uppercase: "แ›" (U+13DB) "๊ฎฌ" (U+ABAC) - uppercase: "แœ" (U+13DC) "๊ฎญ" (U+ABAD) - uppercase: "แ" (U+13DD) "๊ฎฎ" (U+ABAE) - uppercase: "แž" (U+13DE) "๊ฎฏ" (U+ABAF) - uppercase: "แŸ" (U+13DF) "๊ฎฐ" (U+ABB0) - uppercase: "แ " (U+13E0) "๊ฎฑ" (U+ABB1) - uppercase: "แก" (U+13E1) "๊ฎฒ" (U+ABB2) - uppercase: "แข" (U+13E2) "๊ฎณ" (U+ABB3) - uppercase: "แฃ" (U+13E3) "๊ฎด" (U+ABB4) - uppercase: "แค" (U+13E4) "๊ฎต" (U+ABB5) - uppercase: "แฅ" (U+13E5) "๊ฎถ" (U+ABB6) - uppercase: "แฆ" (U+13E6) "๊ฎท" (U+ABB7) - uppercase: "แง" (U+13E7) "๊ฎธ" (U+ABB8) - uppercase: "แจ" (U+13E8) "๊ฎน" (U+ABB9) - uppercase: "แฉ" (U+13E9) "๊ฎบ" (U+ABBA) - uppercase: "แช" (U+13EA) "๊ฎป" (U+ABBB) - uppercase: "แซ" (U+13EB) "๊ฎผ" (U+ABBC) - uppercase: "แฌ" (U+13EC) "๊ฎฝ" (U+ABBD) - uppercase: "แญ" (U+13ED) "๊ฎพ" (U+ABBE) - uppercase: "แฎ" (U+13EE) "๊ฎฟ" (U+ABBF) - uppercase: "แฏ" (U+13EF) "๐€" (U+10400) - lowercase: "๐จ" (U+10428) "๐" (U+10401) - lowercase: "๐ฉ" (U+10429) "๐‚" (U+10402) - lowercase: "๐ช" (U+1042A) "๐ƒ" (U+10403) - lowercase: "๐ซ" (U+1042B) "๐„" (U+10404) - lowercase: "๐ฌ" (U+1042C) "๐…" (U+10405) - lowercase: "๐ญ" (U+1042D) "๐†" (U+10406) - lowercase: "๐ฎ" (U+1042E) "๐‡" (U+10407) - lowercase: "๐ฏ" (U+1042F) "๐ˆ" (U+10408) - lowercase: "๐ฐ" (U+10430) "๐‰" (U+10409) - lowercase: "๐ฑ" (U+10431) "๐Š" (U+1040A) - lowercase: "๐ฒ" (U+10432) "๐‹" (U+1040B) - lowercase: "๐ณ" (U+10433) "๐Œ" (U+1040C) - lowercase: "๐ด" (U+10434) "๐" (U+1040D) - lowercase: "๐ต" (U+10435) "๐Ž" (U+1040E) - lowercase: "๐ถ" (U+10436) "๐" (U+1040F) - lowercase: "๐ท" (U+10437) "๐" (U+10410) - lowercase: "๐ธ" (U+10438) "๐‘" (U+10411) - lowercase: "๐น" (U+10439) "๐’" (U+10412) - lowercase: "๐บ" (U+1043A) "๐“" (U+10413) - lowercase: "๐ป" (U+1043B) "๐”" (U+10414) - lowercase: "๐ผ" (U+1043C) "๐•" (U+10415) - lowercase: "๐ฝ" (U+1043D) "๐–" (U+10416) - lowercase: "๐พ" (U+1043E) "๐—" (U+10417) - lowercase: "๐ฟ" (U+1043F) "๐˜" (U+10418) - lowercase: "๐‘€" (U+10440) "๐™" (U+10419) - lowercase: "๐‘" (U+10441) "๐š" (U+1041A) - lowercase: "๐‘‚" (U+10442) "๐›" (U+1041B) - lowercase: "๐‘ƒ" (U+10443) "๐œ" (U+1041C) - lowercase: "๐‘„" (U+10444) "๐" (U+1041D) - lowercase: "๐‘…" (U+10445) "๐ž" (U+1041E) - lowercase: "๐‘†" (U+10446) "๐Ÿ" (U+1041F) - lowercase: "๐‘‡" (U+10447) "๐ " (U+10420) - lowercase: "๐‘ˆ" (U+10448) "๐ก" (U+10421) - lowercase: "๐‘‰" (U+10449) "๐ข" (U+10422) - lowercase: "๐‘Š" (U+1044A) "๐ฃ" (U+10423) - lowercase: "๐‘‹" (U+1044B) "๐ค" (U+10424) - lowercase: "๐‘Œ" (U+1044C) "๐ฅ" (U+10425) - lowercase: "๐‘" (U+1044D) "๐ฆ" (U+10426) - lowercase: "๐‘Ž" (U+1044E) "๐ง" (U+10427) - lowercase: "๐‘" (U+1044F) "๐จ" (U+10428) - uppercase: "๐€" (U+10400) "๐ฉ" (U+10429) - uppercase: "๐" (U+10401) "๐ช" (U+1042A) - uppercase: "๐‚" (U+10402) "๐ซ" (U+1042B) - uppercase: "๐ƒ" (U+10403) "๐ฌ" (U+1042C) - uppercase: "๐„" (U+10404) "๐ญ" (U+1042D) - uppercase: "๐…" (U+10405) "๐ฎ" (U+1042E) - uppercase: "๐†" (U+10406) "๐ฏ" (U+1042F) - uppercase: "๐‡" (U+10407) "๐ฐ" (U+10430) - uppercase: "๐ˆ" (U+10408) "๐ฑ" (U+10431) - uppercase: "๐‰" (U+10409) "๐ฒ" (U+10432) - uppercase: "๐Š" (U+1040A) "๐ณ" (U+10433) - uppercase: "๐‹" (U+1040B) "๐ด" (U+10434) - uppercase: "๐Œ" (U+1040C) "๐ต" (U+10435) - uppercase: "๐" (U+1040D) "๐ถ" (U+10436) - uppercase: "๐Ž" (U+1040E) "๐ท" (U+10437) - uppercase: "๐" (U+1040F) "๐ธ" (U+10438) - uppercase: "๐" (U+10410) "๐น" (U+10439) - uppercase: "๐‘" (U+10411) "๐บ" (U+1043A) - uppercase: "๐’" (U+10412) "๐ป" (U+1043B) - uppercase: "๐“" (U+10413) "๐ผ" (U+1043C) - uppercase: "๐”" (U+10414) "๐ฝ" (U+1043D) - uppercase: "๐•" (U+10415) "๐พ" (U+1043E) - uppercase: "๐–" (U+10416) "๐ฟ" (U+1043F) - uppercase: "๐—" (U+10417) "๐‘€" (U+10440) - uppercase: "๐˜" (U+10418) "๐‘" (U+10441) - uppercase: "๐™" (U+10419) "๐‘‚" (U+10442) - uppercase: "๐š" (U+1041A) "๐‘ƒ" (U+10443) - uppercase: "๐›" (U+1041B) "๐‘„" (U+10444) - uppercase: "๐œ" (U+1041C) "๐‘…" (U+10445) - uppercase: "๐" (U+1041D) "๐‘†" (U+10446) - uppercase: "๐ž" (U+1041E) "๐‘‡" (U+10447) - uppercase: "๐Ÿ" (U+1041F) "๐‘ˆ" (U+10448) - uppercase: "๐ " (U+10420) "๐‘‰" (U+10449) - uppercase: "๐ก" (U+10421) "๐‘Š" (U+1044A) - uppercase: "๐ข" (U+10422) "๐‘‹" (U+1044B) - uppercase: "๐ฃ" (U+10423) "๐‘Œ" (U+1044C) - uppercase: "๐ค" (U+10424) "๐‘" (U+1044D) - uppercase: "๐ฅ" (U+10425) "๐‘Ž" (U+1044E) - uppercase: "๐ฆ" (U+10426) "๐‘" (U+1044F) - uppercase: "๐ง" (U+10427) "๐’ฐ" (U+104B0) - lowercase: "๐“˜" (U+104D8) "๐’ฑ" (U+104B1) - lowercase: "๐“™" (U+104D9) "๐’ฒ" (U+104B2) - lowercase: "๐“š" (U+104DA) "๐’ณ" (U+104B3) - lowercase: "๐“›" (U+104DB) "๐’ด" (U+104B4) - lowercase: "๐“œ" (U+104DC) "๐’ต" (U+104B5) - lowercase: "๐“" (U+104DD) "๐’ถ" (U+104B6) - lowercase: "๐“ž" (U+104DE) "๐’ท" (U+104B7) - lowercase: "๐“Ÿ" (U+104DF) "๐’ธ" (U+104B8) - lowercase: "๐“ " (U+104E0) "๐’น" (U+104B9) - lowercase: "๐“ก" (U+104E1) "๐’บ" (U+104BA) - lowercase: "๐“ข" (U+104E2) "๐’ป" (U+104BB) - lowercase: "๐“ฃ" (U+104E3) "๐’ผ" (U+104BC) - lowercase: "๐“ค" (U+104E4) "๐’ฝ" (U+104BD) - lowercase: "๐“ฅ" (U+104E5) "๐’พ" (U+104BE) - lowercase: "๐“ฆ" (U+104E6) "๐’ฟ" (U+104BF) - lowercase: "๐“ง" (U+104E7) "๐“€" (U+104C0) - lowercase: "๐“จ" (U+104E8) "๐“" (U+104C1) - lowercase: "๐“ฉ" (U+104E9) "๐“‚" (U+104C2) - lowercase: "๐“ช" (U+104EA) "๐“ƒ" (U+104C3) - lowercase: "๐“ซ" (U+104EB) "๐“„" (U+104C4) - lowercase: "๐“ฌ" (U+104EC) "๐“…" (U+104C5) - lowercase: "๐“ญ" (U+104ED) "๐“†" (U+104C6) - lowercase: "๐“ฎ" (U+104EE) "๐“‡" (U+104C7) - lowercase: "๐“ฏ" (U+104EF) "๐“ˆ" (U+104C8) - lowercase: "๐“ฐ" (U+104F0) "๐“‰" (U+104C9) - lowercase: "๐“ฑ" (U+104F1) "๐“Š" (U+104CA) - lowercase: "๐“ฒ" (U+104F2) "๐“‹" (U+104CB) - lowercase: "๐“ณ" (U+104F3) "๐“Œ" (U+104CC) - lowercase: "๐“ด" (U+104F4) "๐“" (U+104CD) - lowercase: "๐“ต" (U+104F5) "๐“Ž" (U+104CE) - lowercase: "๐“ถ" (U+104F6) "๐“" (U+104CF) - lowercase: "๐“ท" (U+104F7) "๐“" (U+104D0) - lowercase: "๐“ธ" (U+104F8) "๐“‘" (U+104D1) - lowercase: "๐“น" (U+104F9) "๐“’" (U+104D2) - lowercase: "๐“บ" (U+104FA) "๐““" (U+104D3) - lowercase: "๐“ป" (U+104FB) "๐“˜" (U+104D8) - uppercase: "๐’ฐ" (U+104B0) "๐“™" (U+104D9) - uppercase: "๐’ฑ" (U+104B1) "๐“š" (U+104DA) - uppercase: "๐’ฒ" (U+104B2) "๐“›" (U+104DB) - uppercase: "๐’ณ" (U+104B3) "๐“œ" (U+104DC) - uppercase: "๐’ด" (U+104B4) "๐“" (U+104DD) - uppercase: "๐’ต" (U+104B5) "๐“ž" (U+104DE) - uppercase: "๐’ถ" (U+104B6) "๐“Ÿ" (U+104DF) - uppercase: "๐’ท" (U+104B7) "๐“ " (U+104E0) - uppercase: "๐’ธ" (U+104B8) "๐“ก" (U+104E1) - uppercase: "๐’น" (U+104B9) "๐“ข" (U+104E2) - uppercase: "๐’บ" (U+104BA) "๐“ฃ" (U+104E3) - uppercase: "๐’ป" (U+104BB) "๐“ค" (U+104E4) - uppercase: "๐’ผ" (U+104BC) "๐“ฅ" (U+104E5) - uppercase: "๐’ฝ" (U+104BD) "๐“ฆ" (U+104E6) - uppercase: "๐’พ" (U+104BE) "๐“ง" (U+104E7) - uppercase: "๐’ฟ" (U+104BF) "๐“จ" (U+104E8) - uppercase: "๐“€" (U+104C0) "๐“ฉ" (U+104E9) - uppercase: "๐“" (U+104C1) "๐“ช" (U+104EA) - uppercase: "๐“‚" (U+104C2) "๐“ซ" (U+104EB) - uppercase: "๐“ƒ" (U+104C3) "๐“ฌ" (U+104EC) - uppercase: "๐“„" (U+104C4) "๐“ญ" (U+104ED) - uppercase: "๐“…" (U+104C5) "๐“ฎ" (U+104EE) - uppercase: "๐“†" (U+104C6) "๐“ฏ" (U+104EF) - uppercase: "๐“‡" (U+104C7) "๐“ฐ" (U+104F0) - uppercase: "๐“ˆ" (U+104C8) "๐“ฑ" (U+104F1) - uppercase: "๐“‰" (U+104C9) "๐“ฒ" (U+104F2) - uppercase: "๐“Š" (U+104CA) "๐“ณ" (U+104F3) - uppercase: "๐“‹" (U+104CB) "๐“ด" (U+104F4) - uppercase: "๐“Œ" (U+104CC) "๐“ต" (U+104F5) - uppercase: "๐“" (U+104CD) "๐“ถ" (U+104F6) - uppercase: "๐“Ž" (U+104CE) "๐“ท" (U+104F7) - uppercase: "๐“" (U+104CF) "๐“ธ" (U+104F8) - uppercase: "๐“" (U+104D0) "๐“น" (U+104F9) - uppercase: "๐“‘" (U+104D1) "๐“บ" (U+104FA) - uppercase: "๐“’" (U+104D2) "๐“ป" (U+104FB) - uppercase: "๐““" (U+104D3) "๐•ฐ" (U+10570) - lowercase: "๐–—" (U+10597) "๐•ฑ" (U+10571) - lowercase: "๐–˜" (U+10598) "๐•ฒ" (U+10572) - lowercase: "๐–™" (U+10599) "๐•ณ" (U+10573) - lowercase: "๐–š" (U+1059A) "๐•ด" (U+10574) - lowercase: "๐–›" (U+1059B) "๐•ต" (U+10575) - lowercase: "๐–œ" (U+1059C) "๐•ถ" (U+10576) - lowercase: "๐–" (U+1059D) "๐•ท" (U+10577) - lowercase: "๐–ž" (U+1059E) "๐•ธ" (U+10578) - lowercase: "๐–Ÿ" (U+1059F) "๐•น" (U+10579) - lowercase: "๐– " (U+105A0) "๐•บ" (U+1057A) - lowercase: "๐–ก" (U+105A1) "๐•ผ" (U+1057C) - lowercase: "๐–ฃ" (U+105A3) "๐•ฝ" (U+1057D) - lowercase: "๐–ค" (U+105A4) "๐•พ" (U+1057E) - lowercase: "๐–ฅ" (U+105A5) "๐•ฟ" (U+1057F) - lowercase: "๐–ฆ" (U+105A6) "๐–€" (U+10580) - lowercase: "๐–ง" (U+105A7) "๐–" (U+10581) - lowercase: "๐–จ" (U+105A8) "๐–‚" (U+10582) - lowercase: "๐–ฉ" (U+105A9) "๐–ƒ" (U+10583) - lowercase: "๐–ช" (U+105AA) "๐–„" (U+10584) - lowercase: "๐–ซ" (U+105AB) "๐–…" (U+10585) - lowercase: "๐–ฌ" (U+105AC) "๐–†" (U+10586) - lowercase: "๐–ญ" (U+105AD) "๐–‡" (U+10587) - lowercase: "๐–ฎ" (U+105AE) "๐–ˆ" (U+10588) - lowercase: "๐–ฏ" (U+105AF) "๐–‰" (U+10589) - lowercase: "๐–ฐ" (U+105B0) "๐–Š" (U+1058A) - lowercase: "๐–ฑ" (U+105B1) "๐–Œ" (U+1058C) - lowercase: "๐–ณ" (U+105B3) "๐–" (U+1058D) - lowercase: "๐–ด" (U+105B4) "๐–Ž" (U+1058E) - lowercase: "๐–ต" (U+105B5) "๐–" (U+1058F) - lowercase: "๐–ถ" (U+105B6) "๐–" (U+10590) - lowercase: "๐–ท" (U+105B7) "๐–‘" (U+10591) - lowercase: "๐–ธ" (U+105B8) "๐–’" (U+10592) - lowercase: "๐–น" (U+105B9) "๐–”" (U+10594) - lowercase: "๐–ป" (U+105BB) "๐–•" (U+10595) - lowercase: "๐–ผ" (U+105BC) "๐–—" (U+10597) - uppercase: "๐•ฐ" (U+10570) "๐–˜" (U+10598) - uppercase: "๐•ฑ" (U+10571) "๐–™" (U+10599) - uppercase: "๐•ฒ" (U+10572) "๐–š" (U+1059A) - uppercase: "๐•ณ" (U+10573) "๐–›" (U+1059B) - uppercase: "๐•ด" (U+10574) "๐–œ" (U+1059C) - uppercase: "๐•ต" (U+10575) "๐–" (U+1059D) - uppercase: "๐•ถ" (U+10576) "๐–ž" (U+1059E) - uppercase: "๐•ท" (U+10577) "๐–Ÿ" (U+1059F) - uppercase: "๐•ธ" (U+10578) "๐– " (U+105A0) - uppercase: "๐•น" (U+10579) "๐–ก" (U+105A1) - uppercase: "๐•บ" (U+1057A) "๐–ฃ" (U+105A3) - uppercase: "๐•ผ" (U+1057C) "๐–ค" (U+105A4) - uppercase: "๐•ฝ" (U+1057D) "๐–ฅ" (U+105A5) - uppercase: "๐•พ" (U+1057E) "๐–ฆ" (U+105A6) - uppercase: "๐•ฟ" (U+1057F) "๐–ง" (U+105A7) - uppercase: "๐–€" (U+10580) "๐–จ" (U+105A8) - uppercase: "๐–" (U+10581) "๐–ฉ" (U+105A9) - uppercase: "๐–‚" (U+10582) "๐–ช" (U+105AA) - uppercase: "๐–ƒ" (U+10583) "๐–ซ" (U+105AB) - uppercase: "๐–„" (U+10584) "๐–ฌ" (U+105AC) - uppercase: "๐–…" (U+10585) "๐–ญ" (U+105AD) - uppercase: "๐–†" (U+10586) "๐–ฎ" (U+105AE) - uppercase: "๐–‡" (U+10587) "๐–ฏ" (U+105AF) - uppercase: "๐–ˆ" (U+10588) "๐–ฐ" (U+105B0) - uppercase: "๐–‰" (U+10589) "๐–ฑ" (U+105B1) - uppercase: "๐–Š" (U+1058A) "๐–ณ" (U+105B3) - uppercase: "๐–Œ" (U+1058C) "๐–ด" (U+105B4) - uppercase: "๐–" (U+1058D) "๐–ต" (U+105B5) - uppercase: "๐–Ž" (U+1058E) "๐–ถ" (U+105B6) - uppercase: "๐–" (U+1058F) "๐–ท" (U+105B7) - uppercase: "๐–" (U+10590) "๐–ธ" (U+105B8) - uppercase: "๐–‘" (U+10591) "๐–น" (U+105B9) - uppercase: "๐–’" (U+10592) "๐–ป" (U+105BB) - uppercase: "๐–”" (U+10594) "๐–ผ" (U+105BC) - uppercase: "๐–•" (U+10595) "๐ฒ€" (U+10C80) - lowercase: "๐ณ€" (U+10CC0) "๐ฒ" (U+10C81) - lowercase: "๐ณ" (U+10CC1) "๐ฒ‚" (U+10C82) - lowercase: "๐ณ‚" (U+10CC2) "๐ฒƒ" (U+10C83) - lowercase: "๐ณƒ" (U+10CC3) "๐ฒ„" (U+10C84) - lowercase: "๐ณ„" (U+10CC4) "๐ฒ…" (U+10C85) - lowercase: "๐ณ…" (U+10CC5) "๐ฒ†" (U+10C86) - lowercase: "๐ณ†" (U+10CC6) "๐ฒ‡" (U+10C87) - lowercase: "๐ณ‡" (U+10CC7) "๐ฒˆ" (U+10C88) - lowercase: "๐ณˆ" (U+10CC8) "๐ฒ‰" (U+10C89) - lowercase: "๐ณ‰" (U+10CC9) "๐ฒŠ" (U+10C8A) - lowercase: "๐ณŠ" (U+10CCA) "๐ฒ‹" (U+10C8B) - lowercase: "๐ณ‹" (U+10CCB) "๐ฒŒ" (U+10C8C) - lowercase: "๐ณŒ" (U+10CCC) "๐ฒ" (U+10C8D) - lowercase: "๐ณ" (U+10CCD) "๐ฒŽ" (U+10C8E) - lowercase: "๐ณŽ" (U+10CCE) "๐ฒ" (U+10C8F) - lowercase: "๐ณ" (U+10CCF) "๐ฒ" (U+10C90) - lowercase: "๐ณ" (U+10CD0) "๐ฒ‘" (U+10C91) - lowercase: "๐ณ‘" (U+10CD1) "๐ฒ’" (U+10C92) - lowercase: "๐ณ’" (U+10CD2) "๐ฒ“" (U+10C93) - lowercase: "๐ณ“" (U+10CD3) "๐ฒ”" (U+10C94) - lowercase: "๐ณ”" (U+10CD4) "๐ฒ•" (U+10C95) - lowercase: "๐ณ•" (U+10CD5) "๐ฒ–" (U+10C96) - lowercase: "๐ณ–" (U+10CD6) "๐ฒ—" (U+10C97) - lowercase: "๐ณ—" (U+10CD7) "๐ฒ˜" (U+10C98) - lowercase: "๐ณ˜" (U+10CD8) "๐ฒ™" (U+10C99) - lowercase: "๐ณ™" (U+10CD9) "๐ฒš" (U+10C9A) - lowercase: "๐ณš" (U+10CDA) "๐ฒ›" (U+10C9B) - lowercase: "๐ณ›" (U+10CDB) "๐ฒœ" (U+10C9C) - lowercase: "๐ณœ" (U+10CDC) "๐ฒ" (U+10C9D) - lowercase: "๐ณ" (U+10CDD) "๐ฒž" (U+10C9E) - lowercase: "๐ณž" (U+10CDE) "๐ฒŸ" (U+10C9F) - lowercase: "๐ณŸ" (U+10CDF) "๐ฒ " (U+10CA0) - lowercase: "๐ณ " (U+10CE0) "๐ฒก" (U+10CA1) - lowercase: "๐ณก" (U+10CE1) "๐ฒข" (U+10CA2) - lowercase: "๐ณข" (U+10CE2) "๐ฒฃ" (U+10CA3) - lowercase: "๐ณฃ" (U+10CE3) "๐ฒค" (U+10CA4) - lowercase: "๐ณค" (U+10CE4) "๐ฒฅ" (U+10CA5) - lowercase: "๐ณฅ" (U+10CE5) "๐ฒฆ" (U+10CA6) - lowercase: "๐ณฆ" (U+10CE6) "๐ฒง" (U+10CA7) - lowercase: "๐ณง" (U+10CE7) "๐ฒจ" (U+10CA8) - lowercase: "๐ณจ" (U+10CE8) "๐ฒฉ" (U+10CA9) - lowercase: "๐ณฉ" (U+10CE9) "๐ฒช" (U+10CAA) - lowercase: "๐ณช" (U+10CEA) "๐ฒซ" (U+10CAB) - lowercase: "๐ณซ" (U+10CEB) "๐ฒฌ" (U+10CAC) - lowercase: "๐ณฌ" (U+10CEC) "๐ฒญ" (U+10CAD) - lowercase: "๐ณญ" (U+10CED) "๐ฒฎ" (U+10CAE) - lowercase: "๐ณฎ" (U+10CEE) "๐ฒฏ" (U+10CAF) - lowercase: "๐ณฏ" (U+10CEF) "๐ฒฐ" (U+10CB0) - lowercase: "๐ณฐ" (U+10CF0) "๐ฒฑ" (U+10CB1) - lowercase: "๐ณฑ" (U+10CF1) "๐ฒฒ" (U+10CB2) - lowercase: "๐ณฒ" (U+10CF2) "๐ณ€" (U+10CC0) - uppercase: "๐ฒ€" (U+10C80) "๐ณ" (U+10CC1) - uppercase: "๐ฒ" (U+10C81) "๐ณ‚" (U+10CC2) - uppercase: "๐ฒ‚" (U+10C82) "๐ณƒ" (U+10CC3) - uppercase: "๐ฒƒ" (U+10C83) "๐ณ„" (U+10CC4) - uppercase: "๐ฒ„" (U+10C84) "๐ณ…" (U+10CC5) - uppercase: "๐ฒ…" (U+10C85) "๐ณ†" (U+10CC6) - uppercase: "๐ฒ†" (U+10C86) "๐ณ‡" (U+10CC7) - uppercase: "๐ฒ‡" (U+10C87) "๐ณˆ" (U+10CC8) - uppercase: "๐ฒˆ" (U+10C88) "๐ณ‰" (U+10CC9) - uppercase: "๐ฒ‰" (U+10C89) "๐ณŠ" (U+10CCA) - uppercase: "๐ฒŠ" (U+10C8A) "๐ณ‹" (U+10CCB) - uppercase: "๐ฒ‹" (U+10C8B) "๐ณŒ" (U+10CCC) - uppercase: "๐ฒŒ" (U+10C8C) "๐ณ" (U+10CCD) - uppercase: "๐ฒ" (U+10C8D) "๐ณŽ" (U+10CCE) - uppercase: "๐ฒŽ" (U+10C8E) "๐ณ" (U+10CCF) - uppercase: "๐ฒ" (U+10C8F) "๐ณ" (U+10CD0) - uppercase: "๐ฒ" (U+10C90) "๐ณ‘" (U+10CD1) - uppercase: "๐ฒ‘" (U+10C91) "๐ณ’" (U+10CD2) - uppercase: "๐ฒ’" (U+10C92) "๐ณ“" (U+10CD3) - uppercase: "๐ฒ“" (U+10C93) "๐ณ”" (U+10CD4) - uppercase: "๐ฒ”" (U+10C94) "๐ณ•" (U+10CD5) - uppercase: "๐ฒ•" (U+10C95) "๐ณ–" (U+10CD6) - uppercase: "๐ฒ–" (U+10C96) "๐ณ—" (U+10CD7) - uppercase: "๐ฒ—" (U+10C97) "๐ณ˜" (U+10CD8) - uppercase: "๐ฒ˜" (U+10C98) "๐ณ™" (U+10CD9) - uppercase: "๐ฒ™" (U+10C99) "๐ณš" (U+10CDA) - uppercase: "๐ฒš" (U+10C9A) "๐ณ›" (U+10CDB) - uppercase: "๐ฒ›" (U+10C9B) "๐ณœ" (U+10CDC) - uppercase: "๐ฒœ" (U+10C9C) "๐ณ" (U+10CDD) - uppercase: "๐ฒ" (U+10C9D) "๐ณž" (U+10CDE) - uppercase: "๐ฒž" (U+10C9E) "๐ณŸ" (U+10CDF) - uppercase: "๐ฒŸ" (U+10C9F) "๐ณ " (U+10CE0) - uppercase: "๐ฒ " (U+10CA0) "๐ณก" (U+10CE1) - uppercase: "๐ฒก" (U+10CA1) "๐ณข" (U+10CE2) - uppercase: "๐ฒข" (U+10CA2) "๐ณฃ" (U+10CE3) - uppercase: "๐ฒฃ" (U+10CA3) "๐ณค" (U+10CE4) - uppercase: "๐ฒค" (U+10CA4) "๐ณฅ" (U+10CE5) - uppercase: "๐ฒฅ" (U+10CA5) "๐ณฆ" (U+10CE6) - uppercase: "๐ฒฆ" (U+10CA6) "๐ณง" (U+10CE7) - uppercase: "๐ฒง" (U+10CA7) "๐ณจ" (U+10CE8) - uppercase: "๐ฒจ" (U+10CA8) "๐ณฉ" (U+10CE9) - uppercase: "๐ฒฉ" (U+10CA9) "๐ณช" (U+10CEA) - uppercase: "๐ฒช" (U+10CAA) "๐ณซ" (U+10CEB) - uppercase: "๐ฒซ" (U+10CAB) "๐ณฌ" (U+10CEC) - uppercase: "๐ฒฌ" (U+10CAC) "๐ณญ" (U+10CED) - uppercase: "๐ฒญ" (U+10CAD) "๐ณฎ" (U+10CEE) - uppercase: "๐ฒฎ" (U+10CAE) "๐ณฏ" (U+10CEF) - uppercase: "๐ฒฏ" (U+10CAF) "๐ณฐ" (U+10CF0) - uppercase: "๐ฒฐ" (U+10CB0) "๐ณฑ" (U+10CF1) - uppercase: "๐ฒฑ" (U+10CB1) "๐ณฒ" (U+10CF2) - uppercase: "๐ฒฒ" (U+10CB2) "๐‘ข " (U+118A0) - lowercase: "๐‘ฃ€" (U+118C0) "๐‘ขก" (U+118A1) - lowercase: "๐‘ฃ" (U+118C1) "๐‘ขข" (U+118A2) - lowercase: "๐‘ฃ‚" (U+118C2) "๐‘ขฃ" (U+118A3) - lowercase: "๐‘ฃƒ" (U+118C3) "๐‘ขค" (U+118A4) - lowercase: "๐‘ฃ„" (U+118C4) "๐‘ขฅ" (U+118A5) - lowercase: "๐‘ฃ…" (U+118C5) "๐‘ขฆ" (U+118A6) - lowercase: "๐‘ฃ†" (U+118C6) "๐‘ขง" (U+118A7) - lowercase: "๐‘ฃ‡" (U+118C7) "๐‘ขจ" (U+118A8) - lowercase: "๐‘ฃˆ" (U+118C8) "๐‘ขฉ" (U+118A9) - lowercase: "๐‘ฃ‰" (U+118C9) "๐‘ขช" (U+118AA) - lowercase: "๐‘ฃŠ" (U+118CA) "๐‘ขซ" (U+118AB) - lowercase: "๐‘ฃ‹" (U+118CB) "๐‘ขฌ" (U+118AC) - lowercase: "๐‘ฃŒ" (U+118CC) "๐‘ขญ" (U+118AD) - lowercase: "๐‘ฃ" (U+118CD) "๐‘ขฎ" (U+118AE) - lowercase: "๐‘ฃŽ" (U+118CE) "๐‘ขฏ" (U+118AF) - lowercase: "๐‘ฃ" (U+118CF) "๐‘ขฐ" (U+118B0) - lowercase: "๐‘ฃ" (U+118D0) "๐‘ขฑ" (U+118B1) - lowercase: "๐‘ฃ‘" (U+118D1) "๐‘ขฒ" (U+118B2) - lowercase: "๐‘ฃ’" (U+118D2) "๐‘ขณ" (U+118B3) - lowercase: "๐‘ฃ“" (U+118D3) "๐‘ขด" (U+118B4) - lowercase: "๐‘ฃ”" (U+118D4) "๐‘ขต" (U+118B5) - lowercase: "๐‘ฃ•" (U+118D5) "๐‘ขถ" (U+118B6) - lowercase: "๐‘ฃ–" (U+118D6) "๐‘ขท" (U+118B7) - lowercase: "๐‘ฃ—" (U+118D7) "๐‘ขธ" (U+118B8) - lowercase: "๐‘ฃ˜" (U+118D8) "๐‘ขน" (U+118B9) - lowercase: "๐‘ฃ™" (U+118D9) "๐‘ขบ" (U+118BA) - lowercase: "๐‘ฃš" (U+118DA) "๐‘ขป" (U+118BB) - lowercase: "๐‘ฃ›" (U+118DB) "๐‘ขผ" (U+118BC) - lowercase: "๐‘ฃœ" (U+118DC) "๐‘ขฝ" (U+118BD) - lowercase: "๐‘ฃ" (U+118DD) "๐‘ขพ" (U+118BE) - lowercase: "๐‘ฃž" (U+118DE) "๐‘ขฟ" (U+118BF) - lowercase: "๐‘ฃŸ" (U+118DF) "๐‘ฃ€" (U+118C0) - uppercase: "๐‘ข " (U+118A0) "๐‘ฃ" (U+118C1) - uppercase: "๐‘ขก" (U+118A1) "๐‘ฃ‚" (U+118C2) - uppercase: "๐‘ขข" (U+118A2) "๐‘ฃƒ" (U+118C3) - uppercase: "๐‘ขฃ" (U+118A3) "๐‘ฃ„" (U+118C4) - uppercase: "๐‘ขค" (U+118A4) "๐‘ฃ…" (U+118C5) - uppercase: "๐‘ขฅ" (U+118A5) "๐‘ฃ†" (U+118C6) - uppercase: "๐‘ขฆ" (U+118A6) "๐‘ฃ‡" (U+118C7) - uppercase: "๐‘ขง" (U+118A7) "๐‘ฃˆ" (U+118C8) - uppercase: "๐‘ขจ" (U+118A8) "๐‘ฃ‰" (U+118C9) - uppercase: "๐‘ขฉ" (U+118A9) "๐‘ฃŠ" (U+118CA) - uppercase: "๐‘ขช" (U+118AA) "๐‘ฃ‹" (U+118CB) - uppercase: "๐‘ขซ" (U+118AB) "๐‘ฃŒ" (U+118CC) - uppercase: "๐‘ขฌ" (U+118AC) "๐‘ฃ" (U+118CD) - uppercase: "๐‘ขญ" (U+118AD) "๐‘ฃŽ" (U+118CE) - uppercase: "๐‘ขฎ" (U+118AE) "๐‘ฃ" (U+118CF) - uppercase: "๐‘ขฏ" (U+118AF) "๐‘ฃ" (U+118D0) - uppercase: "๐‘ขฐ" (U+118B0) "๐‘ฃ‘" (U+118D1) - uppercase: "๐‘ขฑ" (U+118B1) "๐‘ฃ’" (U+118D2) - uppercase: "๐‘ขฒ" (U+118B2) "๐‘ฃ“" (U+118D3) - uppercase: "๐‘ขณ" (U+118B3) "๐‘ฃ”" (U+118D4) - uppercase: "๐‘ขด" (U+118B4) "๐‘ฃ•" (U+118D5) - uppercase: "๐‘ขต" (U+118B5) "๐‘ฃ–" (U+118D6) - uppercase: "๐‘ขถ" (U+118B6) "๐‘ฃ—" (U+118D7) - uppercase: "๐‘ขท" (U+118B7) "๐‘ฃ˜" (U+118D8) - uppercase: "๐‘ขธ" (U+118B8) "๐‘ฃ™" (U+118D9) - uppercase: "๐‘ขน" (U+118B9) "๐‘ฃš" (U+118DA) - uppercase: "๐‘ขบ" (U+118BA) "๐‘ฃ›" (U+118DB) - uppercase: "๐‘ขป" (U+118BB) "๐‘ฃœ" (U+118DC) - uppercase: "๐‘ขผ" (U+118BC) "๐‘ฃ" (U+118DD) - uppercase: "๐‘ขฝ" (U+118BD) "๐‘ฃž" (U+118DE) - uppercase: "๐‘ขพ" (U+118BE) "๐‘ฃŸ" (U+118DF) - uppercase: "๐‘ขฟ" (U+118BF) "๐–น€" (U+16E40) - lowercase: "๐–น " (U+16E60) "๐–น" (U+16E41) - lowercase: "๐–นก" (U+16E61) "๐–น‚" (U+16E42) - lowercase: "๐–นข" (U+16E62) "๐–นƒ" (U+16E43) - lowercase: "๐–นฃ" (U+16E63) "๐–น„" (U+16E44) - lowercase: "๐–นค" (U+16E64) "๐–น…" (U+16E45) - lowercase: "๐–นฅ" (U+16E65) "๐–น†" (U+16E46) - lowercase: "๐–นฆ" (U+16E66) "๐–น‡" (U+16E47) - lowercase: "๐–นง" (U+16E67) "๐–นˆ" (U+16E48) - lowercase: "๐–นจ" (U+16E68) "๐–น‰" (U+16E49) - lowercase: "๐–นฉ" (U+16E69) "๐–นŠ" (U+16E4A) - lowercase: "๐–นช" (U+16E6A) "๐–น‹" (U+16E4B) - lowercase: "๐–นซ" (U+16E6B) "๐–นŒ" (U+16E4C) - lowercase: "๐–นฌ" (U+16E6C) "๐–น" (U+16E4D) - lowercase: "๐–นญ" (U+16E6D) "๐–นŽ" (U+16E4E) - lowercase: "๐–นฎ" (U+16E6E) "๐–น" (U+16E4F) - lowercase: "๐–นฏ" (U+16E6F) "๐–น" (U+16E50) - lowercase: "๐–นฐ" (U+16E70) "๐–น‘" (U+16E51) - lowercase: "๐–นฑ" (U+16E71) "๐–น’" (U+16E52) - lowercase: "๐–นฒ" (U+16E72) "๐–น“" (U+16E53) - lowercase: "๐–นณ" (U+16E73) "๐–น”" (U+16E54) - lowercase: "๐–นด" (U+16E74) "๐–น•" (U+16E55) - lowercase: "๐–นต" (U+16E75) "๐–น–" (U+16E56) - lowercase: "๐–นถ" (U+16E76) "๐–น—" (U+16E57) - lowercase: "๐–นท" (U+16E77) "๐–น˜" (U+16E58) - lowercase: "๐–นธ" (U+16E78) "๐–น™" (U+16E59) - lowercase: "๐–นน" (U+16E79) "๐–นš" (U+16E5A) - lowercase: "๐–นบ" (U+16E7A) "๐–น›" (U+16E5B) - lowercase: "๐–นป" (U+16E7B) "๐–นœ" (U+16E5C) - lowercase: "๐–นผ" (U+16E7C) "๐–น" (U+16E5D) - lowercase: "๐–นฝ" (U+16E7D) "๐–นž" (U+16E5E) - lowercase: "๐–นพ" (U+16E7E) "๐–นŸ" (U+16E5F) - lowercase: "๐–นฟ" (U+16E7F) "๐–น " (U+16E60) - uppercase: "๐–น€" (U+16E40) "๐–นก" (U+16E61) - uppercase: "๐–น" (U+16E41) "๐–นข" (U+16E62) - uppercase: "๐–น‚" (U+16E42) "๐–นฃ" (U+16E63) - uppercase: "๐–นƒ" (U+16E43) "๐–นค" (U+16E64) - uppercase: "๐–น„" (U+16E44) "๐–นฅ" (U+16E65) - uppercase: "๐–น…" (U+16E45) "๐–นฆ" (U+16E66) - uppercase: "๐–น†" (U+16E46) "๐–นง" (U+16E67) - uppercase: "๐–น‡" (U+16E47) "๐–นจ" (U+16E68) - uppercase: "๐–นˆ" (U+16E48) "๐–นฉ" (U+16E69) - uppercase: "๐–น‰" (U+16E49) "๐–นช" (U+16E6A) - uppercase: "๐–นŠ" (U+16E4A) "๐–นซ" (U+16E6B) - uppercase: "๐–น‹" (U+16E4B) "๐–นฌ" (U+16E6C) - uppercase: "๐–นŒ" (U+16E4C) "๐–นญ" (U+16E6D) - uppercase: "๐–น" (U+16E4D) "๐–นฎ" (U+16E6E) - uppercase: "๐–นŽ" (U+16E4E) "๐–นฏ" (U+16E6F) - uppercase: "๐–น" (U+16E4F) "๐–นฐ" (U+16E70) - uppercase: "๐–น" (U+16E50) "๐–นฑ" (U+16E71) - uppercase: "๐–น‘" (U+16E51) "๐–นฒ" (U+16E72) - uppercase: "๐–น’" (U+16E52) "๐–นณ" (U+16E73) - uppercase: "๐–น“" (U+16E53) "๐–นด" (U+16E74) - uppercase: "๐–น”" (U+16E54) "๐–นต" (U+16E75) - uppercase: "๐–น•" (U+16E55) "๐–นถ" (U+16E76) - uppercase: "๐–น–" (U+16E56) "๐–นท" (U+16E77) - uppercase: "๐–น—" (U+16E57) "๐–นธ" (U+16E78) - uppercase: "๐–น˜" (U+16E58) "๐–นน" (U+16E79) - uppercase: "๐–น™" (U+16E59) "๐–นบ" (U+16E7A) - uppercase: "๐–นš" (U+16E5A) "๐–นป" (U+16E7B) - uppercase: "๐–น›" (U+16E5B) "๐–นผ" (U+16E7C) - uppercase: "๐–นœ" (U+16E5C) "๐–นฝ" (U+16E7D) - uppercase: "๐–น" (U+16E5D) "๐–นพ" (U+16E7E) - uppercase: "๐–นž" (U+16E5E) "๐–นฟ" (U+16E7F) - uppercase: "๐–นŸ" (U+16E5F) "๐žค€" (U+1E900) - lowercase: "๐žคข" (U+1E922) "๐žค" (U+1E901) - lowercase: "๐žคฃ" (U+1E923) "๐žค‚" (U+1E902) - lowercase: "๐žคค" (U+1E924) "๐žคƒ" (U+1E903) - lowercase: "๐žคฅ" (U+1E925) "๐žค„" (U+1E904) - lowercase: "๐žคฆ" (U+1E926) "๐žค…" (U+1E905) - lowercase: "๐žคง" (U+1E927) "๐žค†" (U+1E906) - lowercase: "๐žคจ" (U+1E928) "๐žค‡" (U+1E907) - lowercase: "๐žคฉ" (U+1E929) "๐žคˆ" (U+1E908) - lowercase: "๐žคช" (U+1E92A) "๐žค‰" (U+1E909) - lowercase: "๐žคซ" (U+1E92B) "๐žคŠ" (U+1E90A) - lowercase: "๐žคฌ" (U+1E92C) "๐žค‹" (U+1E90B) - lowercase: "๐žคญ" (U+1E92D) "๐žคŒ" (U+1E90C) - lowercase: "๐žคฎ" (U+1E92E) "๐žค" (U+1E90D) - lowercase: "๐žคฏ" (U+1E92F) "๐žคŽ" (U+1E90E) - lowercase: "๐žคฐ" (U+1E930) "๐žค" (U+1E90F) - lowercase: "๐žคฑ" (U+1E931) "๐žค" (U+1E910) - lowercase: "๐žคฒ" (U+1E932) "๐žค‘" (U+1E911) - lowercase: "๐žคณ" (U+1E933) "๐žค’" (U+1E912) - lowercase: "๐žคด" (U+1E934) "๐žค“" (U+1E913) - lowercase: "๐žคต" (U+1E935) "๐žค”" (U+1E914) - lowercase: "๐žคถ" (U+1E936) "๐žค•" (U+1E915) - lowercase: "๐žคท" (U+1E937) "๐žค–" (U+1E916) - lowercase: "๐žคธ" (U+1E938) "๐žค—" (U+1E917) - lowercase: "๐žคน" (U+1E939) "๐žค˜" (U+1E918) - lowercase: "๐žคบ" (U+1E93A) "๐žค™" (U+1E919) - lowercase: "๐žคป" (U+1E93B) "๐žคš" (U+1E91A) - lowercase: "๐žคผ" (U+1E93C) "๐žค›" (U+1E91B) - lowercase: "๐žคฝ" (U+1E93D) "๐žคœ" (U+1E91C) - lowercase: "๐žคพ" (U+1E93E) "๐žค" (U+1E91D) - lowercase: "๐žคฟ" (U+1E93F) "๐žคž" (U+1E91E) - lowercase: "๐žฅ€" (U+1E940) "๐žคŸ" (U+1E91F) - lowercase: "๐žฅ" (U+1E941) "๐žค " (U+1E920) - lowercase: "๐žฅ‚" (U+1E942) "๐žคก" (U+1E921) - lowercase: "๐žฅƒ" (U+1E943) "๐žคข" (U+1E922) - uppercase: "๐žค€" (U+1E900) "๐žคฃ" (U+1E923) - uppercase: "๐žค" (U+1E901) "๐žคค" (U+1E924) - uppercase: "๐žค‚" (U+1E902) "๐žคฅ" (U+1E925) - uppercase: "๐žคƒ" (U+1E903) "๐žคฆ" (U+1E926) - uppercase: "๐žค„" (U+1E904) "๐žคง" (U+1E927) - uppercase: "๐žค…" (U+1E905) "๐žคจ" (U+1E928) - uppercase: "๐žค†" (U+1E906) "๐žคฉ" (U+1E929) - uppercase: "๐žค‡" (U+1E907) "๐žคช" (U+1E92A) - uppercase: "๐žคˆ" (U+1E908) "๐žคซ" (U+1E92B) - uppercase: "๐žค‰" (U+1E909) "๐žคฌ" (U+1E92C) - uppercase: "๐žคŠ" (U+1E90A) "๐žคญ" (U+1E92D) - uppercase: "๐žค‹" (U+1E90B) "๐žคฎ" (U+1E92E) - uppercase: "๐žคŒ" (U+1E90C) "๐žคฏ" (U+1E92F) - uppercase: "๐žค" (U+1E90D) "๐žคฐ" (U+1E930) - uppercase: "๐žคŽ" (U+1E90E) "๐žคฑ" (U+1E931) - uppercase: "๐žค" (U+1E90F) "๐žคฒ" (U+1E932) - uppercase: "๐žค" (U+1E910) "๐žคณ" (U+1E933) - uppercase: "๐žค‘" (U+1E911) "๐žคด" (U+1E934) - uppercase: "๐žค’" (U+1E912) "๐žคต" (U+1E935) - uppercase: "๐žค“" (U+1E913) "๐žคถ" (U+1E936) - uppercase: "๐žค”" (U+1E914) "๐žคท" (U+1E937) - uppercase: "๐žค•" (U+1E915) "๐žคธ" (U+1E938) - uppercase: "๐žค–" (U+1E916) "๐žคน" (U+1E939) - uppercase: "๐žค—" (U+1E917) "๐žคบ" (U+1E93A) - uppercase: "๐žค˜" (U+1E918) "๐žคป" (U+1E93B) - uppercase: "๐žค™" (U+1E919) "๐žคผ" (U+1E93C) - uppercase: "๐žคš" (U+1E91A) "๐žคฝ" (U+1E93D) - uppercase: "๐žค›" (U+1E91B) "๐žคพ" (U+1E93E) - uppercase: "๐žคœ" (U+1E91C) "๐žคฟ" (U+1E93F) - uppercase: "๐žค" (U+1E91D) "๐žฅ€" (U+1E940) - uppercase: "๐žคž" (U+1E91E) "๐žฅ" (U+1E941) - uppercase: "๐žคŸ" (U+1E91F) "๐žฅ‚" (U+1E942) - uppercase: "๐žค " (U+1E920) "๐žฅƒ" (U+1E943) - uppercase: "๐žคก" (U+1E921) ```

Is there anything you'd like reviewers to focus on?

JavaScript engines are routinely updated to implement the latest version of Unicode. If the Unicode specification changes, there is a chance that the Unicode character class escape \p{L} may start to work differently in new version of Node.js. This means that the rule's behavior may change depending on the version of Node.js used by the user. The advantage is that the regex will never become outdated.

We have the same situation for other Unicode features in our code, like the \p{Mc} escape, or for Intl.Segmenter.

netlify[bot] commented 3 weeks ago

Deploy Preview for docs-eslint canceled.

Name Link
Latest commit 2c6a4b60de8b9c0128aaf4f0e3877d05dcb6b1cc
Latest deploy log https://app.netlify.com/sites/docs-eslint/deploys/6625fc54eb040a0009623dee
nzakas commented 3 weeks ago

A couple of things:

  1. This is a stylistic rule, which we aren't updating any more.
  2. The point of this rule is to make comments more human-readable. Will this really catch problems that are useful to developers?

I think overall, I'm not sure of the utility of this change. I suppose it's technically a bug, but pragmatically, I'm not sure how this change benefits users.

That said, if people feel strongly that this should be fixed, we can merge this. Let's just please be careful about spending time on rules that are just enforcing stylistic preferences.

fasttime commented 3 weeks ago

The main purpose was to remove lib/rules/utils/patterns/letters.js, which has the character of legacy internationalization code, and is now covered by built-in language functionality. The remaining changes are to ensure that the affected rule is still working as intended after the Unicode upgrade.

This is in fact a change request in form of a PR, so it's fine to close it if there is no consensus that it should be merged.

mdjermanovic commented 3 weeks ago

As we have 3 people in favor, and @nzakas is not opposed to merging this, I'm going to merge it now.