From 65cbaddd5f0d6949577d038820eb1e85436f44f0 Mon Sep 17 00:00:00 2001 From: Thomas von Dein Date: Mon, 3 Oct 2022 12:52:26 +0200 Subject: [PATCH] don't use die() anymore, butt dtd go errros --- lib/helpers.go | 6 ------ lib/io.go | 6 +++++- lib/parser.go | 12 +++++------- lib/parser_test.go | 7 ++++++- lib/printer_test.go | 7 ++++++- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/lib/helpers.go b/lib/helpers.go index ddda4ee..0ed1ed0 100644 --- a/lib/helpers.go +++ b/lib/helpers.go @@ -20,17 +20,11 @@ package lib import ( "errors" "fmt" - "os" "regexp" "strconv" "strings" ) -func die(v ...interface{}) { - fmt.Fprintln(os.Stderr, v...) - os.Exit(1) -} - func contains(s []int, e int) bool { for _, a := range s { if a == e { diff --git a/lib/io.go b/lib/io.go index 4c6a726..4d70b94 100644 --- a/lib/io.go +++ b/lib/io.go @@ -31,7 +31,11 @@ func ProcessFiles(args []string) error { } for _, fd := range fds { - printData(parseFile(fd, pattern)) + data, err := parseFile(fd, pattern) + if err != nil { + return err + } + printData(data) } return nil diff --git a/lib/parser.go b/lib/parser.go index 0b19e14..53c0af6 100644 --- a/lib/parser.go +++ b/lib/parser.go @@ -19,6 +19,7 @@ package lib import ( "bufio" + "errors" "fmt" "github.com/alecthomas/repr" "io" @@ -43,7 +44,7 @@ type Tabdata struct { way we can turn "tabular data" (with fields containing whitespaces) into real tabular data. We re-tabulate our input if you will. */ -func parseFile(input io.Reader, pattern string) Tabdata { +func parseFile(input io.Reader, pattern string) (Tabdata, error) { data := Tabdata{} var scanner *bufio.Scanner @@ -65,7 +66,7 @@ func parseFile(input io.Reader, pattern string) Tabdata { patternR, err := regexp.Compile(pattern) if err != nil { - die(err) + return data, errors.Unwrap(fmt.Errorf("Regexp pattern %s is invalid: %w", pattern, err)) } if !hadFirst { @@ -145,20 +146,17 @@ func parseFile(input io.Reader, pattern string) Tabdata { idx++ } - if Debug { - fmt.Println() - } data.entries = append(data.entries, values) } } if scanner.Err() != nil { - die(scanner.Err()) + return data, errors.Unwrap(fmt.Errorf("Regexp pattern %s is invalid: %w", pattern, scanner.Err())) } if Debug { repr.Print(data) } - return data + return data, nil } diff --git a/lib/parser_test.go b/lib/parser_test.go index 19218b3..24fca81 100644 --- a/lib/parser_test.go +++ b/lib/parser_test.go @@ -70,7 +70,12 @@ asd igig cxxxncnc 19191 EDD 1 X` readFd := strings.NewReader(table) - gotdata := parseFile(readFd, "") + gotdata, err := parseFile(readFd, "") + + if err != nil { + t.Errorf("Parser returned error: %s\nData processed so far: %+v", err, gotdata) + } + if !reflect.DeepEqual(data, gotdata) { t.Errorf("Parser returned invalid data\nExp: %+v\nGot: %+v\n", data, gotdata) } diff --git a/lib/printer_test.go b/lib/printer_test.go index 5abb75a..2131156 100644 --- a/lib/printer_test.go +++ b/lib/printer_test.go @@ -54,7 +54,12 @@ asd igig cxxxncnc for mode, expect := range expects { OutputMode = mode fd := strings.NewReader(table) - data := parseFile(fd, "") + data, err := parseFile(fd, "") + + if err != nil { + t.Errorf("Parser returned error: %s\nData processed so far: %+v", err, data) + } + printData(data) buf := make([]byte, 1024)