fix: localize toml parse errors

This commit is contained in:
Yoilun
2026-05-25 21:13:56 +08:00
parent 4b5237fda2
commit a01dd36fb0
5 changed files with 29 additions and 7 deletions

View File

@@ -2,7 +2,6 @@ package agents
import (
"bufio"
"errors"
"fmt"
"os"
"path/filepath"
@@ -136,7 +135,7 @@ func parseSimpleTOML(input string) (map[string]string, error) {
return values, fmt.Errorf("第 %d 行重复字段名 %q", lineNumber, key)
}
value, err := parseTOMLString(raw, scanner)
value, err := parseTOMLString(raw, scanner, lineNumber)
if err != nil {
return values, err
}
@@ -167,27 +166,27 @@ func isValidBareKey(key string) bool {
return true
}
func parseTOMLString(raw string, scanner *bufio.Scanner) (string, error) {
func parseTOMLString(raw string, scanner *bufio.Scanner, lineNumber int) (string, error) {
if strings.HasPrefix(raw, `"""`) {
block := strings.TrimPrefix(raw, `"""`)
for !strings.Contains(block, `"""`) && scanner.Scan() {
block += "\n" + scanner.Text()
}
if !strings.Contains(block, `"""`) {
return "", errors.New("未闭合的多行字符串")
return "", fmt.Errorf("第 %d 行未闭合的多行字符串", lineNumber)
}
value, trailing, _ := strings.Cut(block, `"""`)
if strings.TrimSpace(trailing) != "" {
return "", errors.New("多行字符串后存在不支持的内容")
return "", fmt.Errorf("第 %d 行多行字符串后存在不支持的内容", lineNumber)
}
return value, nil
}
if !strings.HasPrefix(raw, `"`) {
return "", errors.New("仅支持字符串字段")
return "", fmt.Errorf("第 %d 行仅支持字符串字段", lineNumber)
}
value, err := strconv.Unquote(raw)
if err != nil {
return "", err
return "", fmt.Errorf("第 %d 行字符串字段语法无效", lineNumber)
}
return value, nil
}