Browse Source

perf: move ANSI regex compilations to package level (#1040)

Signed-off-by: Matías Insaurralde <[email protected]>
Matias Insaurralde 7 months ago
parent
commit
e89972a396

+ 4 - 1
packages/tui/internal/components/diff/diff.go

@@ -38,6 +38,10 @@ const (
 	LineRemoved                 // Line removed from the old file
 )
 
+var (
+	ansiRegex = regexp.MustCompile(`\x1b(?:[@-Z\\-_]|\[[0-9?]*(?:;[0-9?]*)*[@-~])`)
+)
+
 // Segment represents a portion of a line for intra-line highlighting
 type Segment struct {
 	Start int
@@ -548,7 +552,6 @@ func createStyles(t theme.Theme) (removedLineStyle, addedLineStyle, contextLineS
 // applyHighlighting applies intra-line highlighting to a piece of text
 func applyHighlighting(content string, segments []Segment, segmentType LineType, highlightBg compat.AdaptiveColor) string {
 	// Find all ANSI sequences in the content
-	ansiRegex := regexp.MustCompile(`\x1b(?:[@-Z\\-_]|\[[0-9?]*(?:;[0-9?]*)*[@-~])`)
 	ansiMatches := ansiRegex.FindAllStringIndex(content, -1)
 
 	// Build a mapping of visible character positions to their actual indices

+ 5 - 3
packages/tui/internal/layout/overlay.go

@@ -15,6 +15,11 @@ import (
 	"github.com/sst/opencode/internal/util"
 )
 
+var (
+	// ANSI escape sequence regex
+	ansiRegex = regexp.MustCompile(`\x1b\[[0-9;]*m`)
+)
+
 // Split a string into lines, additionally returning the size of the widest line.
 func getLines(s string) (lines []string, widest int) {
 	lines = strings.Split(s, "\n")
@@ -272,9 +277,6 @@ func combineStyles(bgStyle ansiStyle, fgColor *compat.AdaptiveColor) string {
 
 // getStyleAtPosition extracts the active ANSI style at a given visual position
 func getStyleAtPosition(s string, targetPos int) ansiStyle {
-	// ANSI escape sequence regex
-	ansiRegex := regexp.MustCompile(`\x1b\[[0-9;]*m`)
-
 	visualPos := 0
 	currentStyle := ansiStyle{}