From fc1857e1b485e7011fb80b40ee7e5146fe2350e7 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 8 Apr 2026 10:15:35 +0300 Subject: batch: pre-allocate WordEntry slice from line count in ReadBatchFile Use make([]WordEntry, 0, len(lines)) after splitting normalized content to avoid repeated growth on append. Return nil when no entries are parsed so empty batch files still yield a nil slice like before. Made-with: Cursor --- internal/batch/processor.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/batch/processor.go b/internal/batch/processor.go index c785a91..3432c8b 100644 --- a/internal/batch/processor.go +++ b/internal/batch/processor.go @@ -30,11 +30,12 @@ func ReadBatchFile(filename string) ([]WordEntry, error) { return nil, fmt.Errorf("failed to read batch file: %w", err) } - var entries []WordEntry // Normalize \r\n to \n before splitting so both Windows and Unix line // endings are handled uniformly by strings.Split. normalized := strings.ReplaceAll(string(content), "\r\n", "\n") - for _, line := range strings.Split(normalized, "\n") { + lines := strings.Split(normalized, "\n") + entries := make([]WordEntry, 0, len(lines)) + for _, line := range lines { if line = strings.TrimSpace(line); line != "" { entry := parseBatchLine(line) if entry != nil { @@ -43,6 +44,9 @@ func ReadBatchFile(filename string) ([]WordEntry, error) { } } + if len(entries) == 0 { + return nil, nil + } return entries, nil } -- cgit v1.2.3