Skip to content

Commit e1c4df2

Browse files
author
andrey
committed
Used precompile regexp
1 parent fd39388 commit e1c4df2

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

generators/vt/generator.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"html/template"
77
"path"
8+
"regexp"
89
"slices"
910
"strings"
1011

@@ -265,11 +266,15 @@ func (g *Generator) PartialUpdate(project *mfd.Project, modelTemplate, converter
265266

266267
baseName := mfd.GoFileName(ns.Name)
267268

269+
// precompile regexp
270+
funcRe := regexp.MustCompile(FuncPattern)
271+
structRe := regexp.MustCompile(StructPattern)
272+
268273
for _, e := range ee {
269274
// generate service file
270275
output := path.Join(g.options.Output, fmt.Sprintf("%s.go", baseName))
271276
serviceData.Entities = []ServiceEntityData{e}
272-
if _, err := mfd.UpdateFile(serviceData, output, serviceTemplate, StructPattern); err != nil {
277+
if _, err := mfd.UpdateFile(serviceData, output, serviceTemplate, structRe); err != nil {
273278
return fmt.Errorf("generate service %s error: %w", namespace, err)
274279
}
275280
}
@@ -278,12 +283,12 @@ func (g *Generator) PartialUpdate(project *mfd.Project, modelTemplate, converter
278283
// generate model file
279284
output := path.Join(g.options.Output, fmt.Sprintf("%s_model.go", baseName))
280285
modelData.Entities = []EntityData{entity}
281-
if _, err := mfd.UpdateFile(modelData, output, modelTemplate, StructPattern); err != nil {
286+
if _, err := mfd.UpdateFile(modelData, output, modelTemplate, structRe); err != nil {
282287
return fmt.Errorf("generate vt model error: %w", err)
283288
}
284289
// generate converter file
285290
output = path.Join(g.options.Output, fmt.Sprintf("%s_converter.go", baseName))
286-
if _, err := mfd.UpdateFile(modelData, output, converterTemplate, FuncPattern); err != nil {
291+
if _, err := mfd.UpdateFile(modelData, output, converterTemplate, funcRe); err != nil {
287292
return fmt.Errorf("generate vt converter error: %w", err)
288293
}
289294
}

mfd/files.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func renderTemplate(data interface{}, tmpl string) (bytes.Buffer, error) {
208208
return buffer, nil
209209
}
210210

211-
func replaceFragmentInFile(output, findData, newData, pattern string) (bool, error) {
211+
func replaceFragmentInFile(output, findData, newData string, pattern *regexp.Regexp) (bool, error) {
212212
content, err := os.ReadFile(output)
213213
if err != nil {
214214
return false, fmt.Errorf("read file err: %w", err)
@@ -246,16 +246,12 @@ func replaceFragmentInFile(output, findData, newData, pattern string) (bool, err
246246
}
247247

248248
// extractFragments returned array with coordinates start and end text
249-
func extractFragments(pattern string, lines []string) ([][2]int, error) {
249+
func extractFragments(re *regexp.Regexp, lines []string) ([][2]int, error) {
250250
var (
251251
reFragments [][2]int
252252
start = -1
253253
)
254254

255-
re, err := regexp.Compile(pattern)
256-
if err != nil {
257-
return nil, fmt.Errorf("regexp error: %w", err)
258-
}
259255
for i, line := range lines {
260256
if re.MatchString(line) {
261257
if start != -1 {
@@ -270,7 +266,7 @@ func extractFragments(pattern string, lines []string) ([][2]int, error) {
270266
}
271267

272268
if len(reFragments) == 0 {
273-
return nil, fmt.Errorf("no reFragments found with pattern: %s", pattern)
269+
return nil, fmt.Errorf("no reFragments found with pattern")
274270
}
275271

276272
var ff [][2]int
@@ -291,7 +287,7 @@ func extractFragments(pattern string, lines []string) ([][2]int, error) {
291287
return ff, nil
292288
}
293289

294-
func UpdateFile(data interface{}, output, tmpl, pattern string) (bool, error) {
290+
func UpdateFile(data interface{}, output, tmpl string, pattern *regexp.Regexp) (bool, error) {
295291
buffer, err := renderTemplate(data, tmpl)
296292
if err != nil {
297293
return false, fmt.Errorf("generating data error: %w", err)

0 commit comments

Comments
 (0)