Skip to content

Commit f454646

Browse files
authored
perf - lazy create complex RegExp (microsoft#159537)
1 parent e9d0bed commit f454646

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/vs/base/common/strings.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -600,15 +600,21 @@ export function getCharContainingOffset(str: string, offset: number): [number, n
600600
return [startOffset, endOffset];
601601
}
602602

603-
/**
604-
* Generated using https://github.com/alexdima/unicode-utils/blob/main/rtl-test.js
605-
*/
606-
const CONTAINS_RTL = /(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA\u07FE-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u088E\u08A0-\u08C9\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDC7\uFDF0-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE35\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDD23\uDE80-\uDEA9\uDEAD-\uDF45\uDF51-\uDF81\uDF86-\uDFF6]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD4B-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;
603+
let CONTAINS_RTL: RegExp | undefined = undefined;
604+
605+
function makeContainsRtl() {
606+
// Generated using https://github.com/alexdima/unicode-utils/blob/main/rtl-test.js
607+
return /(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA\u07FE-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u088E\u08A0-\u08C9\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDC7\uFDF0-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE35\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDD23\uDE80-\uDEA9\uDEAD-\uDF45\uDF51-\uDF81\uDF86-\uDFF6]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD4B-\uDFFF]|\uD83B[\uDC00-\uDEBB])/;
608+
}
607609

608610
/**
609611
* Returns true if `str` contains any Unicode character that is classified as "R" or "AL".
610612
*/
611613
export function containsRTL(str: string): boolean {
614+
if (!CONTAINS_RTL) {
615+
CONTAINS_RTL = makeContainsRtl();
616+
}
617+
612618
return CONTAINS_RTL.test(str);
613619
}
614620

0 commit comments

Comments
 (0)