diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000..4fa1b15 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2026-05-10 - Extract Dynamic Regex Declarations +**Learning:** In Kotlin, declaring `Regex` objects dynamically within functions incurs a performance penalty due to recompilation on every invocation. +**Action:** Always hoist frequently used regexes (e.g., `Regex("""\s+""")`) to class-level or object-level constants (e.g., `private val`) to optimize performance in hot paths. diff --git a/halogen-engine/src/commonMain/kotlin/halogen/engine/HintExtractor.kt b/halogen-engine/src/commonMain/kotlin/halogen/engine/HintExtractor.kt index c5cb8cb..da90f01 100644 --- a/halogen-engine/src/commonMain/kotlin/halogen/engine/HintExtractor.kt +++ b/halogen-engine/src/commonMain/kotlin/halogen/engine/HintExtractor.kt @@ -14,6 +14,7 @@ internal object HintExtractor { private val CAMEL_SPLIT = Regex("""(?<=[a-z])(?=[A-Z])""") private val ID_PATTERN = Regex("""^[0-9a-f]{8,}$""", RegexOption.IGNORE_CASE) private val NUMERIC_ONLY = Regex("""^\d+$""") + private val WHITESPACE_PATTERN = Regex("""\s+""") fun extract(key: String): String? { if (key.isBlank()) return null @@ -36,7 +37,7 @@ internal object HintExtractor { cleaned = cleaned.replace('_', ' ').replace('-', ' ') // Normalize whitespace - cleaned = cleaned.trim().replace(Regex("""\s+"""), " ") + cleaned = cleaned.trim().replace(WHITESPACE_PATTERN, " ") if (cleaned.isBlank()) return null