From 5f1fdfa6c166c2f7cc4fd10408cd2cc0092ba086 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sat, 15 Nov 2025 16:42:46 +0100 Subject: [PATCH] Fix some go linter warnings --- go.mod | 4 +-- isolate_test.go | 20 ++++++------ main.go | 14 ++++----- processor/json.go | 58 +++++++++++++---------------------- processor/processor.go | 6 ++-- processor/regex.go | 9 ++---- processor/regex_test.go | 68 ++++++++++++++++++++--------------------- toml_test.go | 4 ++- 8 files changed, 84 insertions(+), 99 deletions(-) diff --git a/go.mod b/go.mod index 497162b..92f5e7e 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( ) require ( - github.com/BurntSushi/toml v1.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/hexops/valast v1.5.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -22,7 +21,6 @@ require ( github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/spf13/cobra v1.10.1 // indirect github.com/spf13/pflag v1.0.9 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect @@ -35,7 +33,9 @@ require ( ) require ( + github.com/BurntSushi/toml v1.5.0 github.com/google/go-cmp v0.6.0 + github.com/spf13/cobra v1.10.1 github.com/tidwall/gjson v1.18.0 gorm.io/driver/sqlite v1.6.0 ) diff --git a/isolate_test.go b/isolate_test.go index 7fdde37..df61836 100644 --- a/isolate_test.go +++ b/isolate_test.go @@ -85,7 +85,7 @@ END` // Run the isolate commands result, err := RunIsolateCommands(association, "test.txt", testContent, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run isolate commands: %v", err) } @@ -163,7 +163,7 @@ END_SECTION2` // Run the isolate commands result, err := RunIsolateCommands(associations["test.txt"], "test.txt", testContent, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run isolate commands: %v", err) } @@ -235,7 +235,7 @@ func TestIsolateCommandsWithJSONMode(t *testing.T) { // Run the isolate commands result, err := RunIsolateCommands(associations["test.json"], "test.json", testContent, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run isolate commands: %v", err) } @@ -310,7 +310,7 @@ END_REGULAR` // First run isolate commands isolateResult, err := RunIsolateCommands(association, "test.txt", testContent, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run isolate commands: %v", err) } @@ -321,7 +321,7 @@ END_REGULAR` // Then run regular commands commandLoggers := make(map[string]*logger.Logger) finalResult, err := RunOtherCommands("test.txt", isolateResult, association, commandLoggers, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run regular commands: %v", err) } @@ -364,12 +364,12 @@ irons_spellbooks:chain_lightning // Second command: targets all SpellPowerMultiplier with multiplier *4 commands := []utils.ModifyCommand{ { - Name: "healing", + Name: "healing", Regexes: []string{ `irons_spellbooks:chain_creeper[\s\S]*?SpellPowerMultiplier = !num`, `irons_spellbooks:chain_lightning[\s\S]*?SpellPowerMultiplier = !num`, }, - Lua: `v1 * 4`, // This should multiply by 4 + Lua: `v1 * 4`, // This should multiply by 4 Files: []string{"irons_spellbooks-server.toml"}, Reset: true, Isolate: true, @@ -377,7 +377,7 @@ irons_spellbooks:chain_lightning { Name: "spellpower", Regex: `SpellPowerMultiplier = !num`, - Lua: `v1 * 4`, // This should multiply by 4 again + Lua: `v1 * 4`, // This should multiply by 4 again Files: []string{"irons_spellbooks-server.toml"}, Reset: true, Isolate: true, @@ -398,7 +398,7 @@ irons_spellbooks:chain_lightning // Run the isolate commands result, err := RunIsolateCommands(association, "irons_spellbooks-server.toml", testContent, false) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { t.Fatalf("Failed to run isolate commands: %v", err) } @@ -414,4 +414,4 @@ irons_spellbooks:chain_lightning t.Logf("Original content:\n%s\n", testContent) t.Logf("Result content:\n%s\n", result) -} \ No newline at end of file +} diff --git a/main.go b/main.go index 29691e4..9336def 100644 --- a/main.go +++ b/main.go @@ -340,23 +340,23 @@ func runModifier(args []string, cmd *cobra.Command) { isChanged := false mainLogger.Debug("Running isolate commands for file %q", file) fileDataStr, err = RunIsolateCommands(association, file, fileDataStr, jsonFlag) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { mainLogger.Error("Failed to run isolate commands for file %q: %v", file, err) atomic.AddInt64(&stats.FailedFiles, 1) return } - if err != NothingToDo { + if err != ErrNothingToDo { isChanged = true } mainLogger.Debug("Running other commands for file %q", file) fileDataStr, err = RunOtherCommands(file, fileDataStr, association, commandLoggers, jsonFlag) - if err != nil && err != NothingToDo { + if err != nil && err != ErrNothingToDo { mainLogger.Error("Failed to run other commands for file %q: %v", file, err) atomic.AddInt64(&stats.FailedFiles, 1) return } - if err != NothingToDo { + if err != ErrNothingToDo { isChanged = true } @@ -474,7 +474,7 @@ func CreateExampleConfig() { createExampleConfigLogger.Info("Wrote example_cook.toml") } -var NothingToDo = errors.New("nothing to do") +var ErrNothingToDo = errors.New("nothing to do") func RunOtherCommands(file string, fileDataStr string, association utils.FileCommandAssociation, commandLoggers map[string]*logger.Logger, jsonFlag bool) (string, error) { runOtherCommandsLogger := mainLogger.WithPrefix("RunOtherCommands").WithField("file", file) @@ -565,7 +565,7 @@ func RunOtherCommands(file string, fileDataStr string, association utils.FileCom if len(modifications) == 0 { runOtherCommandsLogger.Warning("No modifications found for file") - return fileDataStr, NothingToDo + return fileDataStr, ErrNothingToDo } runOtherCommandsLogger.Debug("Executing %d modifications for file", len(modifications)) @@ -663,7 +663,7 @@ func RunIsolateCommands(association utils.FileCommandAssociation, file string, f } if !anythingDone { runIsolateCommandsLogger.Debug("No isolate modifications were made for file") - return fileDataStr, NothingToDo + return fileDataStr, ErrNothingToDo } return currentFileData, nil } diff --git a/processor/json.go b/processor/json.go index cb3a080..f4cfa32 100644 --- a/processor/json.go +++ b/processor/json.go @@ -1,3 +1,5 @@ +// Package processor provides JSON processing and Lua script execution capabilities +// for data transformation and manipulation. package processor import ( @@ -19,9 +21,9 @@ var jsonLogger = logger.Default.WithPrefix("processor/json") // ProcessJSON applies Lua processing to JSON content func ProcessJSON(content string, command utils.ModifyCommand, filename string) ([]utils.ReplaceCommand, error) { - processJsonLogger := jsonLogger.WithPrefix("ProcessJSON").WithField("commandName", command.Name).WithField("file", filename) - processJsonLogger.Debug("Starting JSON processing for file") - processJsonLogger.Trace("Initial file content length: %d", len(content)) + processJSONLogger := jsonLogger.WithPrefix("ProcessJSON").WithField("commandName", command.Name).WithField("file", filename) + processJSONLogger.Debug("Starting JSON processing for file") + processJSONLogger.Trace("Initial file content length: %d", len(content)) var commands []utils.ReplaceCommand startTime := time.Now() @@ -30,15 +32,15 @@ func ProcessJSON(content string, command utils.ModifyCommand, filename string) ( var jsonData interface{} err := json.Unmarshal([]byte(content), &jsonData) if err != nil { - processJsonLogger.Error("Failed to parse JSON content: %v", err) + processJSONLogger.Error("Failed to parse JSON content: %v", err) return commands, fmt.Errorf("failed to parse JSON: %v", err) } - processJsonLogger.Debug("Successfully parsed JSON content") + processJSONLogger.Debug("Successfully parsed JSON content") // Create Lua state L, err := NewLuaState() if err != nil { - processJsonLogger.Error("Error creating Lua state: %v", err) + processJSONLogger.Error("Error creating Lua state: %v", err) return commands, fmt.Errorf("error creating Lua state: %v", err) } defer L.Close() @@ -49,70 +51,58 @@ func ProcessJSON(content string, command utils.ModifyCommand, filename string) ( // Convert JSON data to Lua table luaTable, err := ToLuaTable(L, jsonData) if err != nil { - processJsonLogger.Error("Failed to convert JSON to Lua table: %v", err) + processJSONLogger.Error("Failed to convert JSON to Lua table: %v", err) return commands, fmt.Errorf("failed to convert JSON to Lua table: %v", err) } // Set the JSON data as a global variable L.SetGlobal("data", luaTable) - processJsonLogger.Debug("Set JSON data as Lua global 'data'") + processJSONLogger.Debug("Set JSON data as Lua global 'data'") // Build and execute Lua script for JSON mode luaExpr := BuildJSONLuaScript(command.Lua) - processJsonLogger.Debug("Built Lua script from expression: %q", command.Lua) - processJsonLogger.Trace("Full Lua script: %q", utils.LimitString(luaExpr, 200)) + processJSONLogger.Debug("Built Lua script from expression: %q", command.Lua) + processJSONLogger.Trace("Full Lua script: %q", utils.LimitString(luaExpr, 200)) if err := L.DoString(luaExpr); err != nil { - processJsonLogger.Error("Lua script execution failed: %v\nScript: %s", err, utils.LimitString(luaExpr, 200)) + processJSONLogger.Error("Lua script execution failed: %v\nScript: %s", err, utils.LimitString(luaExpr, 200)) return commands, fmt.Errorf("lua script execution failed: %v", err) } - processJsonLogger.Debug("Lua script executed successfully") + processJSONLogger.Debug("Lua script executed successfully") // Check if modification flag is set modifiedVal := L.GetGlobal("modified") if modifiedVal.Type() != lua.LTBool || !lua.LVAsBool(modifiedVal) { - processJsonLogger.Debug("Skipping - no modifications indicated by Lua script") + processJSONLogger.Debug("Skipping - no modifications indicated by Lua script") return commands, nil } // Get the modified data from Lua modifiedData := L.GetGlobal("data") if modifiedData.Type() != lua.LTTable { - processJsonLogger.Error("Expected 'data' to be a table after Lua processing, got %s", modifiedData.Type().String()) + processJSONLogger.Error("Expected 'data' to be a table after Lua processing, got %s", modifiedData.Type().String()) return commands, fmt.Errorf("expected 'data' to be a table after Lua processing") } // Convert back to Go interface goData, err := FromLua(L, modifiedData) if err != nil { - processJsonLogger.Error("Failed to convert Lua table back to Go: %v", err) + processJSONLogger.Error("Failed to convert Lua table back to Go: %v", err) return commands, fmt.Errorf("failed to convert Lua table back to Go: %v", err) } - processJsonLogger.Debug("About to call applyChanges with original data and modified data") + processJSONLogger.Debug("About to call applyChanges with original data and modified data") commands, err = applyChanges(content, jsonData, goData) if err != nil { - processJsonLogger.Error("Failed to apply surgical JSON changes: %v", err) + processJSONLogger.Error("Failed to apply surgical JSON changes: %v", err) return commands, fmt.Errorf("failed to apply surgical JSON changes: %v", err) } - processJsonLogger.Debug("Total JSON processing time: %v", time.Since(startTime)) - processJsonLogger.Debug("Generated %d total modifications", len(commands)) + processJSONLogger.Debug("Total JSON processing time: %v", time.Since(startTime)) + processJSONLogger.Debug("Generated %d total modifications", len(commands)) return commands, nil } -// applyJSONChanges compares original and modified data and applies changes surgically -func applyJSONChanges(content string, originalData, modifiedData interface{}) ([]utils.ReplaceCommand, error) { - var commands []utils.ReplaceCommand - - appliedCommands, err := applyChanges(content, originalData, modifiedData) - if err == nil && len(appliedCommands) > 0 { - return appliedCommands, nil - } - - return commands, fmt.Errorf("failed to make any changes to the json") -} - // applyChanges attempts to make surgical changes while preserving exact formatting func applyChanges(content string, originalData, modifiedData interface{}) ([]utils.ReplaceCommand, error) { var commands []utils.ReplaceCommand @@ -199,12 +189,10 @@ func applyChanges(content string, originalData, modifiedData interface{}) ([]uti // Convert the new value to JSON string newValueStr := convertValueToJSONString(newValue) - - + // Insert the new field with pretty-printed formatting // Format: ,"fieldName": { ... } insertText := fmt.Sprintf(`,"%s": %s`, fieldName, newValueStr) - commands = append(commands, utils.ReplaceCommand{ From: startPos, @@ -437,8 +425,6 @@ func findDeepChanges(basePath string, original, modified interface{}) map[string } changes[currentPath] = nil // Mark for removal } - } else { - // Elements added - more complex, skip for now } } else { // Same length - check individual elements for value changes diff --git a/processor/processor.go b/processor/processor.go index 4ad915c..3064fa0 100644 --- a/processor/processor.go +++ b/processor/processor.go @@ -229,8 +229,8 @@ func BuildLuaScript(luaExpr string) string { // BuildJSONLuaScript prepares a Lua expression for JSON mode func BuildJSONLuaScript(luaExpr string) string { - buildJsonLuaScriptLogger := processorLogger.WithPrefix("BuildJSONLuaScript").WithField("inputLuaExpr", luaExpr) - buildJsonLuaScriptLogger.Debug("Building full Lua script for JSON mode from expression") + buildJSONLuaScriptLogger := processorLogger.WithPrefix("BuildJSONLuaScript").WithField("inputLuaExpr", luaExpr) + buildJSONLuaScriptLogger.Debug("Building full Lua script for JSON mode from expression") // Perform $var substitutions from globalVariables luaExpr = replaceVariables(luaExpr) @@ -242,7 +242,7 @@ func BuildJSONLuaScript(luaExpr string) string { local res = run() modified = res == nil or res `, luaExpr) - buildJsonLuaScriptLogger.Trace("Generated full JSON Lua script: %q", utils.LimitString(fullScript, 200)) + buildJSONLuaScriptLogger.Trace("Generated full JSON Lua script: %q", utils.LimitString(fullScript, 200)) return fullScript } diff --git a/processor/regex.go b/processor/regex.go index c8adf6e..fce8638 100644 --- a/processor/regex.go +++ b/processor/regex.go @@ -22,9 +22,9 @@ type CaptureGroup struct { Range [2]int } -// ProcessContent applies regex replacement with Lua processing -// The filename here exists ONLY so we can pass it to the lua environment -// It's not used for anything else +// ProcessRegex applies regex replacement with Lua processing. +// The filename here exists ONLY so we can pass it to the lua environment. +// It's not used for anything else. func ProcessRegex(content string, command utils.ModifyCommand, filename string) ([]utils.ReplaceCommand, error) { processRegexLogger := regexLogger.WithPrefix("ProcessRegex").WithField("commandName", command.Name).WithField("file", filename) processRegexLogger.Debug("Starting regex processing for file") @@ -216,9 +216,6 @@ func ProcessRegex(content string, command utils.ModifyCommand, filename string) } if replacement == "" { - // Apply the modifications to the original match - replacement = matchContent - // Count groups that were actually modified modifiedGroupsCount := 0 for _, capture := range updatedCaptureGroups { diff --git a/processor/regex_test.go b/processor/regex_test.go index 3e364e5..451afc8 100644 --- a/processor/regex_test.go +++ b/processor/regex_test.go @@ -30,7 +30,7 @@ func normalizeWhitespace(s string) string { return re.ReplaceAllString(strings.TrimSpace(s), " ") } -func ApiAdaptor(content string, regex string, lua string) (string, int, int, error) { +func APIAdaptor(content string, regex string, lua string) (string, int, int, error) { command := utils.ModifyCommand{ Regex: regex, Lua: lua, @@ -79,7 +79,7 @@ func TestSimpleValueMultiplication(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(\d+)`, "v1 = v1*1.5") + result, mods, matches, err := APIAdaptor(content, `(?s)(\d+)`, "v1 = v1*1.5") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 1, matches, "Expected 1 match, got %d", matches) @@ -100,7 +100,7 @@ func TestShorthandNotation(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(\d+)`, "v1*1.5") + result, mods, matches, err := APIAdaptor(content, `(?s)(\d+)`, "v1*1.5") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 1, matches, "Expected 1 match, got %d", matches) @@ -121,7 +121,7 @@ func TestShorthandNotationFloats(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(\d+\.\d+)`, "v1*1.5") + result, mods, matches, err := APIAdaptor(content, `(?s)(\d+\.\d+)`, "v1*1.5") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 1, matches, "Expected 1 match, got %d", matches) @@ -146,7 +146,7 @@ func TestArrayNotation(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(\d+)`, "v1*2") + result, mods, matches, err := APIAdaptor(content, `(?s)(\d+)`, "v1*2") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 3, matches, "Expected 3 matches, got %d", matches) @@ -167,7 +167,7 @@ func TestMultipleNumericMatches(t *testing.T) { 400 ` - result, mods, matches, err := ApiAdaptor(content, `(\d+)`, "v1*2") + result, mods, matches, err := APIAdaptor(content, `(\d+)`, "v1*2") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 3, matches, "Expected 3 matches, got %d", matches) @@ -186,7 +186,7 @@ func TestMultipleStringMatches(t *testing.T) { Mary_modified ` - result, mods, matches, err := ApiAdaptor(content, `([A-Za-z]+)`, `s1 = s1 .. "_modified"`) + result, mods, matches, err := APIAdaptor(content, `([A-Za-z]+)`, `s1 = s1 .. "_modified"`) assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 2, matches, "Expected 2 matches, got %d", matches) @@ -205,7 +205,7 @@ func TestStringUpperCase(t *testing.T) { MARY ` - result, mods, matches, err := ApiAdaptor(content, `([A-Za-z]+)`, `s1 = string.upper(s1)`) + result, mods, matches, err := APIAdaptor(content, `([A-Za-z]+)`, `s1 = string.upper(s1)`) assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 2, matches, "Expected 2 matches, got %d", matches) @@ -224,7 +224,7 @@ func TestStringConcatenation(t *testing.T) { Banana_fruit ` - result, mods, matches, err := ApiAdaptor(content, `([A-Za-z]+)`, `s1 = s1 .. "_fruit"`) + result, mods, matches, err := APIAdaptor(content, `([A-Za-z]+)`, `s1 = s1 .. "_fruit"`) assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 2, matches, "Expected 2 matches, got %d", matches) @@ -254,7 +254,7 @@ func TestDecimalValues(t *testing.T) { regex := regexp.MustCompile(`(?s)([0-9.]+).*?([0-9.]+)`) luaExpr := BuildLuaScript("v1 = v1 * v2") - result, _, _, err := ApiAdaptor(content, regex.String(), luaExpr) + result, _, _, err := APIAdaptor(content, regex.String(), luaExpr) assert.NoError(t, err, "Error processing content: %v", err) normalizedModified := normalizeWhitespace(result) @@ -282,7 +282,7 @@ func TestLuaMathFunctions(t *testing.T) { regex := regexp.MustCompile(`(?s)(\d+)`) luaExpr := BuildLuaScript("v1 = math.sqrt(v1)") - modifiedContent, _, _, err := ApiAdaptor(content, regex.String(), luaExpr) + modifiedContent, _, _, err := APIAdaptor(content, regex.String(), luaExpr) assert.NoError(t, err, "Error processing content: %v", err) normalizedModified := normalizeWhitespace(modifiedContent) @@ -310,7 +310,7 @@ func TestDirectAssignment(t *testing.T) { regex := regexp.MustCompile(`(?s)(\d+)`) luaExpr := BuildLuaScript("=0") - modifiedContent, _, _, err := ApiAdaptor(content, regex.String(), luaExpr) + modifiedContent, _, _, err := APIAdaptor(content, regex.String(), luaExpr) assert.NoError(t, err, "Error processing content: %v", err) normalizedModified := normalizeWhitespace(modifiedContent) @@ -369,7 +369,7 @@ func TestStringAndNumericOperations(t *testing.T) { luaExpr := BuildLuaScript(tt.luaExpression) // Process with our function - result, modCount, _, err := ApiAdaptor(tt.input, pattern, luaExpr) + result, modCount, _, err := APIAdaptor(tt.input, pattern, luaExpr) assert.NoError(t, err, "Process function failed: %v", err) // Check results @@ -430,7 +430,7 @@ func TestEdgeCases(t *testing.T) { luaExpr := BuildLuaScript(tt.luaExpression) // Process with our function - result, modCount, _, err := ApiAdaptor(tt.input, pattern, luaExpr) + result, modCount, _, err := APIAdaptor(tt.input, pattern, luaExpr) assert.NoError(t, err, "Process function failed: %v", err) // Check results @@ -453,7 +453,7 @@ func TestNamedCaptureGroups(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(?\d+)`, "amount = amount * 2") + result, mods, matches, err := APIAdaptor(content, `(?s)(?\d+)`, "amount = amount * 2") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 1, matches, "Expected 1 match, got %d", matches) @@ -474,7 +474,7 @@ func TestNamedCaptureGroupsNum(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, `(?s)(?!num)`, "amount = amount * 2") + result, mods, matches, err := APIAdaptor(content, `(?s)(?!num)`, "amount = amount * 2") assert.NoError(t, err, "Error processing content: %v", err) assert.Equal(t, 1, matches, "Expected 1 match, got %d", matches) @@ -495,7 +495,7 @@ func TestMultipleNamedCaptureGroups(t *testing.T) { 15 ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)(?[^<]+).*?(?\d+\.\d+).*?(?\d+)`, `prodName = string.upper(prodName) prodPrice = round(prodPrice + 8, 2) @@ -518,7 +518,7 @@ func TestMixedIndexedAndNamedCaptures(t *testing.T) { VALUE ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)(\d+).*?(?[^<]+)`, `v1 = v1 * 2 dataField = string.upper(dataField)`) @@ -550,7 +550,7 @@ func TestComplexNestedNamedCaptures(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)
.*?(?[^<]+).*?(?\d+)`, `fullName = string.upper(fullName) .. " (" .. age .. ")"`) @@ -571,7 +571,7 @@ func TestNamedCaptureWithVariableReadback(t *testing.T) { 300 ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)(?\d+).*?(?\d+)`, `hp = hp * 1.5 mp = mp * 1.5`) @@ -587,7 +587,7 @@ func TestNamedCaptureWithSpecialCharsInName(t *testing.T) { expected := `` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `attr="(?.*?)"`, `value = value == "" and "default" or value`) @@ -617,7 +617,7 @@ func TestMultipleNamedCapturesInSameLine(t *testing.T) { expected := `` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `x="(?\d+)" y="(?\d+)" width="(?\d+)" height="(?\d+)"`, `x = x * 2 y = y * 2 @@ -641,7 +641,7 @@ func TestConditionalNamedCapture(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, ` ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, ` ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `', @@ -712,7 +712,7 @@ func TestNamedCaptureWithGlobals(t *testing.T) { expected := `77` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?\d+)`, `if unit == "C" then value = value * 9/5 + 32 @@ -739,7 +739,7 @@ func TestMixedDynamicAndNamedCaptures(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, ``, `-- Uppercase the name colorName = string.upper(colorName) @@ -765,7 +765,7 @@ func TestNamedCapturesWithMultipleReferences(t *testing.T) { expected := `HELLO WORLD` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?[^<]+)`, `local uppercaseContent = string.upper(content) local contentLength = string.len(content) @@ -783,7 +783,7 @@ func TestNamedCaptureWithJsonData(t *testing.T) { expected := `{"name":"JOHN","age":30}` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?\{.*?\})`, `-- Parse JSON (simplified, assumes valid JSON) local name = json:match('"name":"([^"]+)"') @@ -813,7 +813,7 @@ func TestNamedCaptureInXML(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)(?\d+\.\d+).*?(?\d+)`, `-- Add 20% to price if USD if currency == "USD" then @@ -870,7 +870,7 @@ func TestComprehensiveNamedCaptures(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `(?s)]*>\s*(?[^<]+)\s*(?\d+\.\d+)\s*(?\d+)`, `-- Only process in-stock items if status == "in-stock" then @@ -924,7 +924,7 @@ func TestVariousNamedCaptureFormats(t *testing.T) { ` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, ``, `-- Prefix the ID with "ID-" id_num = "ID-" .. id_num @@ -963,7 +963,7 @@ func TestSimpleNamedCapture(t *testing.T) { expected := `` - result, mods, matches, err := ApiAdaptor(content, + result, mods, matches, err := APIAdaptor(content, `name="(?[^"]+)"`, `product_name = string.upper(product_name)`) diff --git a/toml_test.go b/toml_test.go index b5cd29a..cd47bb4 100644 --- a/toml_test.go +++ b/toml_test.go @@ -404,6 +404,7 @@ files = ["test.txt" invalidFile := filepath.Join(tmpDir, "invalid.toml") err = os.WriteFile(invalidFile, []byte(invalidTOML), 0644) + assert.NoError(t, err, "Should write invalid TOML file") commands, err := utils.LoadCommandsFromTomlFiles("invalid.toml") assert.Error(t, err, "Should return error for invalid TOML syntax") @@ -418,6 +419,7 @@ files = ["test.txt" // Test 3: Empty TOML file creates an error (this is expected behavior) emptyFile := filepath.Join(tmpDir, "empty.toml") err = os.WriteFile(emptyFile, []byte(""), 0644) + assert.NoError(t, err, "Should write empty TOML file") commands, err = utils.LoadCommandsFromTomlFiles("empty.toml") assert.Error(t, err, "Should return error for empty TOML file") @@ -508,4 +510,4 @@ func TestYAMLToTOMLConversion(t *testing.T) { assert.Equal(t, tomlData, originalTomlData, "TOML file content should be unchanged") t.Logf("YAML to TOML conversion test completed successfully") -} \ No newline at end of file +}