aboutsummaryrefslogtreecommitdiff
path: root/parser/errors.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--parser/errors.go34
1 files changed, 23 insertions, 11 deletions
diff --git a/parser/errors.go b/parser/errors.go
index c2ed049..b1f839e 100644
--- a/parser/errors.go
+++ b/parser/errors.go
@@ -1,3 +1,20 @@
+// Package parser parses conf language.
+//
+// This file is part of conf library.
+// Copyright (C) 2026 Alexander NeonXP Kiryukhin <i@neonxp.ru>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <https://www.gnu.org/licenses/>.
package parser
import (
@@ -39,9 +56,8 @@ func CaretErrors(err error, input string) error {
if el, ok := err.(ErrorLister); ok {
var buffer bytes.Buffer
for _, e := range el.Errors() {
- err1, shouldReturn := caretError(e, input, buffer, err)
- if shouldReturn {
- return err1
+ if err := caretError(e, input); err != nil {
+ buffer.WriteString(err.Error())
}
}
return errors.New(buffer.String())
@@ -49,8 +65,8 @@ func CaretErrors(err error, input string) error {
return err
}
-func caretError(e error, input string, buffer bytes.Buffer, err error) (error, bool) {
- if parserErr, ok := e.(ParserError); ok {
+func caretError(err error, input string) error {
+ if parserErr, ok := err.(ParserError); ok {
_, col, off := parserErr.Pos()
line := extractLine(input, off)
if col >= len(line) {
@@ -69,13 +85,9 @@ func caretError(e error, input string, buffer bytes.Buffer, err error) (error, b
pos += 7
}
}
- fmt.Fprintf(&buffer, "%s\n%s\n%s\n", line, strings.Repeat(" ", pos)+"^", err.Error())
-
- return err, true
- } else {
- return err, true
+ return fmt.Errorf("%s\n%s\n%w", line, strings.Repeat(" ", pos)+"^", err)
}
- return nil, false
+ return err
}
func extractLine(input string, initPos int) string {