From 202adf07867851b042587157b433c01070074107 Mon Sep 17 00:00:00 2001 From: SalvadorC Date: Thu, 24 Jan 2019 18:14:43 +0100 Subject: [PATCH] Fix 102 (#103) Do not require additional newline for disabling multiple rules --- fixtures/disable-annotations2.go | 24 +++++++++++++++++ lint/file.go | 44 +++++++++++++++++--------------- test/disable-annotations_test.go | 4 +++ 3 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 fixtures/disable-annotations2.go diff --git a/fixtures/disable-annotations2.go b/fixtures/disable-annotations2.go new file mode 100644 index 0000000..36cd65b --- /dev/null +++ b/fixtures/disable-annotations2.go @@ -0,0 +1,24 @@ +package fixtures + +func foo1() { + //revive:disable-next-line:var-naming + var invalid_name = 0 + var invalid_name2 = 1 //revive:disable-line:var-naming +} + +func foo2() { + // revive:disable-next-line:var-naming + //revive:disable + var invalid_name = 0 + var invalid_name2 = 1 +} + +func foo3() { + //revive:enable + // revive:disable-next-line:var-naming + var invalid_name = 0 + // not a valid annotation revive:disable-next-line:var-naming + var invalid_name2 = 1 // MATCH /don't use underscores in Go names; var invalid_name2 should be invalidName2/ + /* revive:disable-next-line:var-naming */ + var invalid_name3 = 0 // MATCH /don't use underscores in Go names; var invalid_name3 should be invalidName3/ +} diff --git a/lint/file.go b/lint/file.go index 5e0a779..99dd69c 100644 --- a/lint/file.go +++ b/lint/file.go @@ -127,7 +127,7 @@ type enableDisableConfig struct { } func (f *File) disabledIntervals(rules []Rule) disabledIntervalsMap { - re := regexp.MustCompile(`^\s*revive:(enable|disable)(?:-(line|next-line))?(:)?([^\s]*)?(\s|$)`) + re := regexp.MustCompile(`^//[\s]*revive:(enable|disable)(?:-(line|next-line))?(?::([^\s]+))?[\s]*$`) enabledDisabledRulesMap := make(map[string][]enableDisableConfig) @@ -194,36 +194,38 @@ func (f *File) disabledIntervals(rules []Rule) disabledIntervalsMap { } handleComment := func(filename string, c *ast.CommentGroup, line int) { - text := c.Text() - parts := re.FindStringSubmatch(text) - if len(parts) == 0 { - return - } + comments := c.List + for _, c := range comments { + match := re.FindStringSubmatch(c.Text) + if len(match) == 0 { + return + } - ruleNames := []string{} - if len(parts) > 4 { - tempNames := strings.Split(parts[4], ",") - for _, name := range tempNames { - name = strings.Trim(name, "\n") - if len(name) > 0 { - ruleNames = append(ruleNames, name) + ruleNames := []string{} + if len(match) > 2 { + tempNames := strings.Split(match[3], ",") + for _, name := range tempNames { + name = strings.Trim(name, "\n") + if len(name) > 0 { + ruleNames = append(ruleNames, name) + } } } - } - // TODO: optimize - if len(ruleNames) == 0 { - for _, rule := range rules { - ruleNames = append(ruleNames, rule.Name()) + // TODO: optimize + if len(ruleNames) == 0 { + for _, rule := range rules { + ruleNames = append(ruleNames, rule.Name()) + } } - } - handleRules(filename, parts[2], parts[1] == "enable", line, ruleNames) + handleRules(filename, match[2], match[1] == "enable", line, ruleNames) + } } comments := f.AST.Comments for _, c := range comments { - handleComment(f.Name, c, f.ToPosition(c.Pos()).Line) + handleComment(f.Name, c, f.ToPosition(c.End()).Line) } return getEnabledDisabledIntervals() diff --git a/test/disable-annotations_test.go b/test/disable-annotations_test.go index f29c433..b716734 100644 --- a/test/disable-annotations_test.go +++ b/test/disable-annotations_test.go @@ -10,3 +10,7 @@ import ( func TestDisabledAnnotations(t *testing.T) { testRule(t, "disable-annotations", &rule.ExportedRule{}, &lint.RuleConfig{}) } + +func TestModifiedAnnotations(t *testing.T) { + testRule(t, "disable-annotations2", &rule.VarNamingRule{}, &lint.RuleConfig{}) +}