summaryrefslogtreecommitdiffstats
path: root/common/herrors/line_number_extractors.go
diff options
context:
space:
mode:
Diffstat (limited to 'common/herrors/line_number_extractors.go')
-rw-r--r--common/herrors/line_number_extractors.go27
1 files changed, 15 insertions, 12 deletions
diff --git a/common/herrors/line_number_extractors.go b/common/herrors/line_number_extractors.go
index 01a7450f9..8740afdf7 100644
--- a/common/herrors/line_number_extractors.go
+++ b/common/herrors/line_number_extractors.go
@@ -14,14 +14,13 @@
package herrors
import (
- "fmt"
"regexp"
"strconv"
)
var lineNumberExtractors = []lineNumberExtractor{
// Template/shortcode parse errors
- newLineNumberErrHandlerFromRegexp("(.*?:)(\\d+)(:.*)"),
+ newLineNumberErrHandlerFromRegexp("(.*?:)(\\d+)(:)(\\d+)?(.*)"),
// TOML parse errors
newLineNumberErrHandlerFromRegexp("(.*Near line )(\\d+)(\\s.*)"),
@@ -30,7 +29,7 @@ var lineNumberExtractors = []lineNumberExtractor{
newLineNumberErrHandlerFromRegexp("(line )(\\d+)(:)"),
}
-type lineNumberExtractor func(e error, offset int) (int, string)
+type lineNumberExtractor func(e error) (int, int)
func newLineNumberErrHandlerFromRegexp(expression string) lineNumberExtractor {
re := regexp.MustCompile(expression)
@@ -38,22 +37,26 @@ func newLineNumberErrHandlerFromRegexp(expression string) lineNumberExtractor {
}
func extractLineNo(re *regexp.Regexp) lineNumberExtractor {
- return func(e error, offset int) (int, string) {
+ return func(e error) (int, int) {
if e == nil {
panic("no error")
}
+ col := 1
s := e.Error()
m := re.FindStringSubmatch(s)
- if len(m) == 4 {
- i, _ := strconv.Atoi(m[2])
- msg := e.Error()
- if offset != 0 {
- i = i + offset
- msg = re.ReplaceAllString(s, fmt.Sprintf("${1}%d${3}", i))
+ if len(m) >= 4 {
+ lno, _ := strconv.Atoi(m[2])
+ if len(m) > 4 {
+ col, _ = strconv.Atoi(m[4])
}
- return i, msg
+
+ if col <= 0 {
+ col = 1
+ }
+
+ return lno, col
}
- return -1, ""
+ return -1, col
}
}