From 345e37bbf9359380e1f7fe3e5ee0fe9b9b368489 Mon Sep 17 00:00:00 2001 From: Arto Simonyan Date: Wed, 1 May 2024 01:34:57 +0300 Subject: [PATCH] Extend rule structure and nip rule parser (#16) --- pkg/itemfilter/itemfilter_test.go | 2 +- pkg/nip/file_reader.go | 2 +- pkg/nip/nip_parser.go | 5 ++++- pkg/nip/nip_parser_test.go | 2 +- pkg/nip/rule.go | 3 +++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/itemfilter/itemfilter_test.go b/pkg/itemfilter/itemfilter_test.go index 1c6ddfd..2dbbedb 100644 --- a/pkg/itemfilter/itemfilter_test.go +++ b/pkg/itemfilter/itemfilter_test.go @@ -34,7 +34,7 @@ func TestEvaluate(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - rule, err := nip.ParseLine(tt.args.nipRule) + rule, err := nip.ParseLine(tt.args.nipRule, "dummy", 0) require.NoError(t, err) if _, got := Evaluate(tt.args.i, []nip.Rule{rule}); got != tt.want { diff --git a/pkg/nip/file_reader.go b/pkg/nip/file_reader.go index 7d87e33..677e4e9 100644 --- a/pkg/nip/file_reader.go +++ b/pkg/nip/file_reader.go @@ -45,7 +45,7 @@ func ParseNIPFile(filePath string) ([]Rule, error) { lineNumber := 0 for fileScanner.Scan() { lineNumber++ - rule, err := ParseLine(fileScanner.Text()) + rule, err := ParseLine(fileScanner.Text(), filePath, lineNumber) if errors.Is(err, errEmptyLine) { continue } diff --git a/pkg/nip/nip_parser.go b/pkg/nip/nip_parser.go index 6f22f5f..0b5f908 100644 --- a/pkg/nip/nip_parser.go +++ b/pkg/nip/nip_parser.go @@ -14,7 +14,7 @@ var ( propertyNameRegex = regexp.MustCompile(`\[(.*)\]`) ) -func ParseLine(line string) (Rule, error) { +func ParseLine(line string, filename string, linenum int) (Rule, error) { line = lineCleanup(line) if line == "" { return Rule{}, errEmptyLine @@ -46,6 +46,9 @@ func ParseLine(line string) (Rule, error) { Properties: properties, Stats: stats, MaxQuantity: maxQuantity, + Filename: filename, + LineNumber: linenum, + Enabled: true, }, nil } diff --git a/pkg/nip/nip_parser_test.go b/pkg/nip/nip_parser_test.go index 76ec831..b64828b 100644 --- a/pkg/nip/nip_parser_test.go +++ b/pkg/nip/nip_parser_test.go @@ -10,7 +10,7 @@ import ( const nipLine = "[type] == boots && [quality] == rare # [frw] >= 10 && [fireresist] >= 10 && ([lightresist]+[coldresist] >= 10 && [dexterity] >= 1 && [fireresist]+[poisonresist] >= 10) // this is a comment" func Test_parseLine(t *testing.T) { - rules, err := ParseLine(nipLine) + rules, err := ParseLine(nipLine, "dummy", 0) require.NoError(t, err) expected := Rule{ diff --git a/pkg/nip/rule.go b/pkg/nip/rule.go index 8548d43..94dae96 100644 --- a/pkg/nip/rule.go +++ b/pkg/nip/rule.go @@ -16,6 +16,9 @@ type Rule struct { Properties []Group Stats []Group MaxQuantity []Group + Filename string + LineNumber int + Enabled bool } type Keyword string