From 72181c086b347d8b1c7bcc0fc5398663dccc87a7 Mon Sep 17 00:00:00 2001 From: Oleksandr Redko Date: Fri, 27 Dec 2024 14:06:47 +0200 Subject: [PATCH] fix: handle scan error (#13) --- godox.go | 19 ++++++++++++++----- godox_test.go | 7 +++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/godox.go b/godox.go index 24c4c18..5bcc7e9 100644 --- a/godox.go +++ b/godox.go @@ -22,7 +22,7 @@ type Message struct { Message string } -func getMessages(comment *ast.Comment, fset *token.FileSet, keywords []string) []Message { +func getMessages(comment *ast.Comment, fset *token.FileSet, keywords []string) ([]Message, error) { commentText := extractComment(comment.Text) scanner := bufio.NewScanner(bytes.NewBufferString(commentText)) @@ -65,7 +65,11 @@ func getMessages(comment *ast.Comment, fset *token.FileSet, keywords []string) [ } } - return comments + if err := scanner.Err(); err != nil { + return nil, fmt.Errorf("scan: %w", err) + } + + return comments, nil } func extractComment(commentText string) string { @@ -96,7 +100,7 @@ func hasAlphanumRuneAdjacent(rest []byte) bool { // Run runs the godox linter on given file. // Godox searches for comments starting with given keywords and reports them. -func Run(file *ast.File, fset *token.FileSet, keywords ...string) []Message { +func Run(file *ast.File, fset *token.FileSet, keywords ...string) ([]Message, error) { if len(keywords) == 0 { keywords = defaultKeywords } @@ -105,9 +109,14 @@ func Run(file *ast.File, fset *token.FileSet, keywords ...string) []Message { for _, c := range file.Comments { for _, ci := range c.List { - messages = append(messages, getMessages(ci, fset, keywords)...) + msgs, err := getMessages(ci, fset, keywords) + if err != nil { + return nil, err + } + + messages = append(messages, msgs...) } } - return messages + return messages, nil } diff --git a/godox_test.go b/godox_test.go index 111eb95..1139685 100644 --- a/godox_test.go +++ b/godox_test.go @@ -84,10 +84,13 @@ func TestParse(t *testing.T) { f, err := parser.ParseFile(fset, path, nil, parser.ParseComments) if err != nil { - panic(err) + t.Fatal(err) } - res := godox.Run(f, fset) + res, err := godox.Run(f, fset) + if err != nil { + t.Fatal(err) + } messages = append(messages, res...) return nil