aboutsummaryrefslogtreecommitdiff
path: root/parser/errors.go
diff options
context:
space:
mode:
author2026-03-10 14:44:50 +0300
committer2026-03-10 14:44:50 +0300
commit92d84f6633767830ed964ebab8c3b94c77663394 (patch)
tree5e087e3631d46e6cb81ccf895c408a79bc154ee2 /parser/errors.go
parentПолностью переписал библиотеку. Перевёл с... (diff)
downloadconf-0.2.0.tar.gz
conf-0.2.0.tar.bz2
conf-0.2.0.tar.xz
conf-0.2.0.zip
Отполировал библиотеку, чтобы в идеале больше её не менять долгие годыv1.0.0v0.2.0
Diffstat (limited to 'parser/errors.go')
-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 {