fix(regular_expression): Improve RegExp to_string() results (#5635)

Hopefully fixes #5487

- `/^([a-zA-Z]+:)?[\p{L}0-9@/.\-_\\]+$/u`
- e3bc0ddcba/packages/cli-tools/src/launchEditor.ts (L53-L57)
This commit is contained in:
leaysgur 2024-09-09 08:17:55 +00:00
parent e3ae5dbb02
commit 41582ea00c

View file

@ -189,12 +189,13 @@ impl<'a> Display for UnicodePropertyEscape<'a> {
write!(f, r"\p")?; write!(f, r"\p")?;
} }
if let Some(value) = &self.value { write!(f, r"{{")?;
let name = &self.name; match (&self.name, &self.value) {
write!(f, "{{{name}={value}}}") (name, Some(value)) if name == "General_Category" => write!(f, r"{value}")?,
} else { (name, Some(value)) => write!(f, r"{name}={value}")?,
write!(f, "{{{}}}", self.name) _ => write!(f, r"{}", self.name)?,
} }
write!(f, r"}}")
} }
} }
@ -390,8 +391,7 @@ fn character_to_string(
CharacterKind::Symbol => format!("{ch}"), CharacterKind::Symbol => format!("{ch}"),
CharacterKind::Null => String::from(r"\0"), CharacterKind::Null => String::from(r"\0"),
CharacterKind::UnicodeEscape => { CharacterKind::UnicodeEscape => {
// we remove the leading `0x` of our 4 digit hex number. let hex = &format!("{cp:04X}");
let hex = &format!("{cp:#4X}")[2..];
if hex.len() <= 4 { if hex.len() <= 4 {
format!(r"\u{hex}") format!(r"\u{hex}")
} else { } else {
@ -399,8 +399,7 @@ fn character_to_string(
} }
} }
CharacterKind::HexadecimalEscape => { CharacterKind::HexadecimalEscape => {
// we remove the leading `0x` of our 2 digit hex number. let hex = &format!("{cp:02X}");
let hex = &format!("{cp:#2X}")[2..];
format!(r"\x{hex}") format!(r"\x{hex}")
} }
CharacterKind::Octal => { CharacterKind::Octal => {
@ -488,13 +487,15 @@ mod test {
(r"/\s+/gu", None), (r"/\s+/gu", None),
(r"/\t\n\v\f\r/", None), (r"/\t\n\v\f\r/", None),
(r"/\t\n\v\f\r/u", None), (r"/\t\n\v\f\r/u", None),
// we lose the flags ordering (r"/\p{L}/u", None),
("/abcd/igv", Some("/abcd/giv")),
(r"/\d/g", None), (r"/\d/g", None),
// we lose the flags ordering // Lose the flags ordering --
("/abcd/igv", Some("/abcd/giv")),
(r"/\d/ug", Some(r"/\d/gu")), (r"/\d/ug", Some(r"/\d/gu")),
// --
// we capitalize hex unicodes. // we capitalize hex unicodes.
(r"/\n\cM\0\x41\u{1f600}\./u", Some(r"/\n\cM\0\x41\u{1F600}\./u")), (r"/\n\cM\0\x41\u{1f600}\./u", Some(r"/\n\cM\0\x41\u{1F600}\./u")),
(r"/\u02c1/u", Some(r"/\u02C1/u")),
(r"/c]/", None), (r"/c]/", None),
// Octal tests from: <https://github.com/tc39/test262/blob/d62fa93c8f9ce5e687c0bbaa5d2b59670ab2ff60/test/annexB/language/literals/regexp/legacy-octal-escape.js> // Octal tests from: <https://github.com/tc39/test262/blob/d62fa93c8f9ce5e687c0bbaa5d2b59670ab2ff60/test/annexB/language/literals/regexp/legacy-octal-escape.js>
(r"/\1/", None), (r"/\1/", None),
@ -504,20 +505,19 @@ mod test {
(r"/\5/", None), (r"/\5/", None),
(r"/\6/", None), (r"/\6/", None),
(r"/\7/", None), (r"/\7/", None),
// NOTE: we remove leading zeroes // Remove leading zeroes --
(r"/\00/", Some(r"/\0/")), (r"/\00/", Some(r"/\0/")),
// NOTE: we remove leading zeroes
(r"/\07/", Some(r"/\7/")), (r"/\07/", Some(r"/\7/")),
// --
(r"/\40/", None), (r"/\40/", None),
(r"/\47/", None), (r"/\47/", None),
(r"/\70/", None), (r"/\70/", None),
(r"/\77/", None), (r"/\77/", None),
// NOTE: we remove leading zeroes // Remove leading zeroes --
(r"/\000/", Some(r"/\0/")), (r"/\000/", Some(r"/\0/")),
// NOTE: we remove leading zeroes
(r"/\007/", Some(r"/\7/")), (r"/\007/", Some(r"/\7/")),
// NOTE: we remove leading zeroes
(r"/\070/", Some(r"/\70/")), (r"/\070/", Some(r"/\70/")),
// --
(r"/\300/", None), (r"/\300/", None),
(r"/\307/", None), (r"/\307/", None),
(r"/\370/", None), (r"/\370/", None),
@ -540,14 +540,12 @@ mod test {
(r"/[\c8]/", None), (r"/[\c8]/", None),
(r"/[\c80]+/", None), (r"/[\c80]+/", None),
(r"/\c_/", None), (r"/\c_/", None),
// we capitalize hex unicodes. // Capitalize hex unicodes --
(r"/^|\udf06/gu", Some(r"/^|\uDF06/gu")), (r"/^|\udf06/gu", Some(r"/^|\uDF06/gu")),
// we capitalize hex unicodes.
(r"/\udf06/", Some(r"/\uDF06/")), (r"/\udf06/", Some(r"/\uDF06/")),
// we capitalize hex unicodes.
(r"/\udf06/u", Some(r"/\uDF06/u")), (r"/\udf06/u", Some(r"/\uDF06/u")),
// we capitalize hex unicodes.
(r"/^|\udf06/g", Some(r"/^|\uDF06/g")), (r"/^|\udf06/g", Some(r"/^|\uDF06/g")),
// --
(r"/[\-]/", None), (r"/[\-]/", None),
(r"/[\-]/u", None), (r"/[\-]/u", None),
(r"/[\-]/v", None), (r"/[\-]/v", None),