From b873b4f35a2a8417de286c533330dc9e713c3aab Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 15 Apr 2022 17:27:48 +0300 Subject: [PATCH 1/5] add time range expr simplify --- checkers/rules/rules.go | 18 ++ checkers/rulesdata/rulesdata.go | 185 ++++++++++++------ .../timeRangeExprSimplify/negative_tests.go | 17 ++ .../timeRangeExprSimplify/positive_tests.go | 20 ++ 4 files changed, 180 insertions(+), 60 deletions(-) create mode 100644 checkers/testdata/timeRangeExprSimplify/negative_tests.go create mode 100644 checkers/testdata/timeRangeExprSimplify/positive_tests.go diff --git a/checkers/rules/rules.go b/checkers/rules/rules.go index ca5a5c067..bf6f8cc6f 100644 --- a/checkers/rules/rules.go +++ b/checkers/rules/rules.go @@ -655,6 +655,24 @@ func timeExprSimplify(m dsl.Matcher) { Report(`use $t.UnixMicro() instead of $$`) } +//doc:summary Detects Before/After call of time.Time that can be simplified. +//doc:tags style experimental +//doc:before !t.Before(tt) +//doc:after t.After(tt) +func timeRangeExprSimplify(m dsl.Matcher) { + isTime := func(v dsl.Var) bool { + return v.Type.Is(`time.Time`) || v.Type.Is(`*time.Time`) + } + + m.Match(`!$t.Before($tt)`). + Where(isTime(m["t"])). + Suggest("$t.After($tt)") + + m.Match(`!$t.After($tt)`). + Where(isTime(m["t"])). + Suggest("$t.Before($tt)") +} + //doc:summary Detects exposed methods from sync.Mutex and sync.RWMutex //doc:tags style experimental //doc:before type Foo struct{ ...; sync.Mutex; ... } diff --git a/checkers/rulesdata/rulesdata.go b/checkers/rulesdata/rulesdata.go index e145ba4fe..b0ec9f0dd 100644 --- a/checkers/rulesdata/rulesdata.go +++ b/checkers/rulesdata/rulesdata.go @@ -2060,6 +2060,71 @@ var PrecompiledRules = &ir.File{ }, { Line: 662, + Name: "timeRangeExprSimplify", + MatcherName: "m", + DocTags: []string{"style", "experimental"}, + DocSummary: "Detects Before/After call of time.Time that can be simplified.", + DocBefore: "!t.Before(tt)", + DocAfter: "t.After(tt)", + Rules: []ir.Rule{ + { + Line: 667, + SyntaxPatterns: []ir.PatternString{{Line: 667, Value: "!$t.Before($tt)"}}, + ReportTemplate: "suggestion: $t.After($tt)", + SuggestTemplate: "$t.After($tt)", + WhereExpr: ir.FilterExpr{ + Line: 668, + Op: ir.FilterOrOp, + Src: "isTime(m[\"t\"])", + Args: []ir.FilterExpr{ + { + Line: 668, + Op: ir.FilterVarTypeIsOp, + Src: "m[\"t\"].Type.Is(`time.Time`)", + Value: "t", + Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`time.Time`", Value: "time.Time"}}, + }, + { + Line: 668, + Op: ir.FilterVarTypeIsOp, + Src: "m[\"t\"].Type.Is(`*time.Time`)", + Value: "t", + Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`*time.Time`", Value: "*time.Time"}}, + }, + }, + }, + }, + { + Line: 671, + SyntaxPatterns: []ir.PatternString{{Line: 671, Value: "!$t.After($tt)"}}, + ReportTemplate: "suggestion: $t.Before($tt)", + SuggestTemplate: "$t.Before($tt)", + WhereExpr: ir.FilterExpr{ + Line: 672, + Op: ir.FilterOrOp, + Src: "isTime(m[\"t\"])", + Args: []ir.FilterExpr{ + { + Line: 672, + Op: ir.FilterVarTypeIsOp, + Src: "m[\"t\"].Type.Is(`time.Time`)", + Value: "t", + Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`time.Time`", Value: "time.Time"}}, + }, + { + Line: 672, + Op: ir.FilterVarTypeIsOp, + Src: "m[\"t\"].Type.Is(`*time.Time`)", + Value: "t", + Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`*time.Time`", Value: "*time.Time"}}, + }, + }, + }, + }, + }, + }, + { + Line: 680, Name: "exposedSyncMutex", MatcherName: "m", DocTags: []string{"style", "experimental"}, @@ -2068,57 +2133,57 @@ var PrecompiledRules = &ir.File{ DocAfter: "type Foo struct{ ...; mu sync.Mutex; ... }", Rules: []ir.Rule{ { - Line: 667, - SyntaxPatterns: []ir.PatternString{{Line: 667, Value: "type $x struct { $*_; sync.Mutex; $*_ }"}}, + Line: 685, + SyntaxPatterns: []ir.PatternString{{Line: 685, Value: "type $x struct { $*_; sync.Mutex; $*_ }"}}, ReportTemplate: "don't embed sync.Mutex", WhereExpr: ir.FilterExpr{ - Line: 668, + Line: 686, Op: ir.FilterVarTextMatchesOp, Src: "isExported(m[\"x\"])", Value: "x", - Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, + Args: []ir.FilterExpr{{Line: 682, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, }, }, { - Line: 671, - SyntaxPatterns: []ir.PatternString{{Line: 671, Value: "type $x struct { $*_; *sync.Mutex; $*_ }"}}, + Line: 689, + SyntaxPatterns: []ir.PatternString{{Line: 689, Value: "type $x struct { $*_; *sync.Mutex; $*_ }"}}, ReportTemplate: "don't embed *sync.Mutex", WhereExpr: ir.FilterExpr{ - Line: 672, + Line: 690, Op: ir.FilterVarTextMatchesOp, Src: "isExported(m[\"x\"])", Value: "x", - Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, + Args: []ir.FilterExpr{{Line: 682, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, }, }, { - Line: 675, - SyntaxPatterns: []ir.PatternString{{Line: 675, Value: "type $x struct { $*_; sync.RWMutex; $*_ }"}}, + Line: 693, + SyntaxPatterns: []ir.PatternString{{Line: 693, Value: "type $x struct { $*_; sync.RWMutex; $*_ }"}}, ReportTemplate: "don't embed sync.RWMutex", WhereExpr: ir.FilterExpr{ - Line: 676, + Line: 694, Op: ir.FilterVarTextMatchesOp, Src: "isExported(m[\"x\"])", Value: "x", - Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, + Args: []ir.FilterExpr{{Line: 682, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, }, }, { - Line: 679, - SyntaxPatterns: []ir.PatternString{{Line: 679, Value: "type $x struct { $*_; *sync.RWMutex; $*_ }"}}, + Line: 697, + SyntaxPatterns: []ir.PatternString{{Line: 697, Value: "type $x struct { $*_; *sync.RWMutex; $*_ }"}}, ReportTemplate: "don't embed *sync.RWMutex", WhereExpr: ir.FilterExpr{ - Line: 680, + Line: 698, Op: ir.FilterVarTextMatchesOp, Src: "isExported(m[\"x\"])", Value: "x", - Args: []ir.FilterExpr{{Line: 664, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, + Args: []ir.FilterExpr{{Line: 682, Op: ir.FilterStringOp, Src: "`^\\p{Lu}`", Value: "^\\p{Lu}"}}, }, }, }, }, { - Line: 688, + Line: 706, Name: "badSorting", MatcherName: "m", DocTags: []string{"diagnostic", "experimental"}, @@ -2127,48 +2192,48 @@ var PrecompiledRules = &ir.File{ DocAfter: "sort.Strings(xs)", Rules: []ir.Rule{ { - Line: 689, - SyntaxPatterns: []ir.PatternString{{Line: 689, Value: "$x = sort.IntSlice($x)"}}, + Line: 707, + SyntaxPatterns: []ir.PatternString{{Line: 707, Value: "$x = sort.IntSlice($x)"}}, ReportTemplate: "suspicious sort.IntSlice usage, maybe sort.Ints was intended?", SuggestTemplate: "sort.Ints($x)", WhereExpr: ir.FilterExpr{ - Line: 690, + Line: 708, Op: ir.FilterVarTypeIsOp, Src: "m[\"x\"].Type.Is(`[]int`)", Value: "x", - Args: []ir.FilterExpr{{Line: 690, Op: ir.FilterStringOp, Src: "`[]int`", Value: "[]int"}}, + Args: []ir.FilterExpr{{Line: 708, Op: ir.FilterStringOp, Src: "`[]int`", Value: "[]int"}}, }, }, { - Line: 694, - SyntaxPatterns: []ir.PatternString{{Line: 694, Value: "$x = sort.Float64Slice($x)"}}, + Line: 712, + SyntaxPatterns: []ir.PatternString{{Line: 712, Value: "$x = sort.Float64Slice($x)"}}, ReportTemplate: "suspicious sort.Float64s usage, maybe sort.Float64s was intended?", SuggestTemplate: "sort.Float64s($x)", WhereExpr: ir.FilterExpr{ - Line: 695, + Line: 713, Op: ir.FilterVarTypeIsOp, Src: "m[\"x\"].Type.Is(`[]float64`)", Value: "x", - Args: []ir.FilterExpr{{Line: 695, Op: ir.FilterStringOp, Src: "`[]float64`", Value: "[]float64"}}, + Args: []ir.FilterExpr{{Line: 713, Op: ir.FilterStringOp, Src: "`[]float64`", Value: "[]float64"}}, }, }, { - Line: 699, - SyntaxPatterns: []ir.PatternString{{Line: 699, Value: "$x = sort.StringSlice($x)"}}, + Line: 717, + SyntaxPatterns: []ir.PatternString{{Line: 717, Value: "$x = sort.StringSlice($x)"}}, ReportTemplate: "suspicious sort.StringSlice usage, maybe sort.Strings was intended?", SuggestTemplate: "sort.Strings($x)", WhereExpr: ir.FilterExpr{ - Line: 700, + Line: 718, Op: ir.FilterVarTypeIsOp, Src: "m[\"x\"].Type.Is(`[]string`)", Value: "x", - Args: []ir.FilterExpr{{Line: 700, Op: ir.FilterStringOp, Src: "`[]string`", Value: "[]string"}}, + Args: []ir.FilterExpr{{Line: 718, Op: ir.FilterStringOp, Src: "`[]string`", Value: "[]string"}}, }, }, }, }, { - Line: 709, + Line: 727, Name: "externalErrorReassign", MatcherName: "m", DocTags: []string{"diagnostic", "experimental"}, @@ -2176,34 +2241,34 @@ var PrecompiledRules = &ir.File{ DocBefore: "io.EOF = nil", DocAfter: "/* don't do it */", Rules: []ir.Rule{{ - Line: 710, - SyntaxPatterns: []ir.PatternString{{Line: 710, Value: "$pkg.$err = $x"}}, + Line: 728, + SyntaxPatterns: []ir.PatternString{{Line: 728, Value: "$pkg.$err = $x"}}, ReportTemplate: "suspicious reassigment of error from another package", WhereExpr: ir.FilterExpr{ - Line: 711, + Line: 729, Op: ir.FilterAndOp, Src: "m[\"err\"].Type.Is(`error`) && m[\"pkg\"].Object.Is(`PkgName`)", Args: []ir.FilterExpr{ { - Line: 711, + Line: 729, Op: ir.FilterVarTypeIsOp, Src: "m[\"err\"].Type.Is(`error`)", Value: "err", - Args: []ir.FilterExpr{{Line: 711, Op: ir.FilterStringOp, Src: "`error`", Value: "error"}}, + Args: []ir.FilterExpr{{Line: 729, Op: ir.FilterStringOp, Src: "`error`", Value: "error"}}, }, { - Line: 711, + Line: 729, Op: ir.FilterVarObjectIsOp, Src: "m[\"pkg\"].Object.Is(`PkgName`)", Value: "pkg", - Args: []ir.FilterExpr{{Line: 711, Op: ir.FilterStringOp, Src: "`PkgName`", Value: "PkgName"}}, + Args: []ir.FilterExpr{{Line: 729, Op: ir.FilterStringOp, Src: "`PkgName`", Value: "PkgName"}}, }, }, }, }}, }, { - Line: 719, + Line: 737, Name: "emptyDecl", MatcherName: "m", DocTags: []string{"diagnostic", "experimental"}, @@ -2212,24 +2277,24 @@ var PrecompiledRules = &ir.File{ DocAfter: "/* nothing */", Rules: []ir.Rule{ { - Line: 720, - SyntaxPatterns: []ir.PatternString{{Line: 720, Value: "var()"}}, + Line: 738, + SyntaxPatterns: []ir.PatternString{{Line: 738, Value: "var()"}}, ReportTemplate: "empty var() block", }, { - Line: 721, - SyntaxPatterns: []ir.PatternString{{Line: 721, Value: "const()"}}, + Line: 739, + SyntaxPatterns: []ir.PatternString{{Line: 739, Value: "const()"}}, ReportTemplate: "empty const() block", }, { - Line: 722, - SyntaxPatterns: []ir.PatternString{{Line: 722, Value: "type()"}}, + Line: 740, + SyntaxPatterns: []ir.PatternString{{Line: 740, Value: "type()"}}, ReportTemplate: "empty type() block", }, }, }, { - Line: 729, + Line: 747, Name: "dynamicFmtString", MatcherName: "m", DocTags: []string{"diagnostic", "experimental"}, @@ -2238,16 +2303,16 @@ var PrecompiledRules = &ir.File{ DocAfter: "fmt.Errorf(\"%s\", msg)", Rules: []ir.Rule{ { - Line: 730, - SyntaxPatterns: []ir.PatternString{{Line: 730, Value: "fmt.Errorf($f)"}}, + Line: 748, + SyntaxPatterns: []ir.PatternString{{Line: 748, Value: "fmt.Errorf($f)"}}, ReportTemplate: "use errors.New($f) or fmt.Errorf(\"%s\", $f) instead", SuggestTemplate: "errors.New($f)", WhereExpr: ir.FilterExpr{ - Line: 731, + Line: 749, Op: ir.FilterNotOp, Src: "!m[\"f\"].Const", Args: []ir.FilterExpr{{ - Line: 731, + Line: 749, Op: ir.FilterVarConstOp, Src: "m[\"f\"].Const", Value: "f", @@ -2255,15 +2320,15 @@ var PrecompiledRules = &ir.File{ }, }, { - Line: 735, - SyntaxPatterns: []ir.PatternString{{Line: 735, Value: "fmt.Errorf($f($*args))"}}, + Line: 753, + SyntaxPatterns: []ir.PatternString{{Line: 753, Value: "fmt.Errorf($f($*args))"}}, ReportTemplate: "use errors.New($f($*args)) or fmt.Errorf(\"%s\", $f($*args)) instead", SuggestTemplate: "errors.New($f($*args))", }, }, }, { - Line: 744, + Line: 762, Name: "stringsCompare", MatcherName: "m", DocTags: []string{"style", "experimental"}, @@ -2272,25 +2337,25 @@ var PrecompiledRules = &ir.File{ DocAfter: "x < y", Rules: []ir.Rule{ { - Line: 745, - SyntaxPatterns: []ir.PatternString{{Line: 745, Value: "strings.Compare($s1, $s2) == 0"}}, + Line: 763, + SyntaxPatterns: []ir.PatternString{{Line: 763, Value: "strings.Compare($s1, $s2) == 0"}}, ReportTemplate: "suggestion: $s1 == $s2", SuggestTemplate: "$s1 == $s2", }, { - Line: 748, + Line: 766, SyntaxPatterns: []ir.PatternString{ - {Line: 748, Value: "strings.Compare($s1, $s2) == -1"}, - {Line: 749, Value: "strings.Compare($s1, $s2) < 0"}, + {Line: 766, Value: "strings.Compare($s1, $s2) == -1"}, + {Line: 767, Value: "strings.Compare($s1, $s2) < 0"}, }, ReportTemplate: "suggestion: $s1 < $s2", SuggestTemplate: "$s1 < $s2", }, { - Line: 752, + Line: 770, SyntaxPatterns: []ir.PatternString{ - {Line: 752, Value: "strings.Compare($s1, $s2) == 1"}, - {Line: 753, Value: "strings.Compare($s1, $s2) > 0"}, + {Line: 770, Value: "strings.Compare($s1, $s2) == 1"}, + {Line: 771, Value: "strings.Compare($s1, $s2) > 0"}, }, ReportTemplate: "suggestion: $s1 > $s2", SuggestTemplate: "$s1 > $s2", diff --git a/checkers/testdata/timeRangeExprSimplify/negative_tests.go b/checkers/testdata/timeRangeExprSimplify/negative_tests.go new file mode 100644 index 000000000..63ee2b62f --- /dev/null +++ b/checkers/testdata/timeRangeExprSimplify/negative_tests.go @@ -0,0 +1,17 @@ +package timeRangeExprSimplify + +import ( + "time" +) + +func negative(x, y time.Time) { + if x.Before(y) { + print(1) + } + + if y.After(x) { + print(1) + } + + print(x.After(y)) +} diff --git a/checkers/testdata/timeRangeExprSimplify/positive_tests.go b/checkers/testdata/timeRangeExprSimplify/positive_tests.go new file mode 100644 index 000000000..8e175be7e --- /dev/null +++ b/checkers/testdata/timeRangeExprSimplify/positive_tests.go @@ -0,0 +1,20 @@ +package timeRangeExprSimplify + +import ( + "time" +) + +func _(x, y time.Time) { + /*! suggestion: x.After(y) */ + if !x.Before(y) { + print(42) + } + + /*! suggestion: y.Before(x) */ + if !y.After(x) { + print(51) + } + + /*! suggestion: y.After(x) */ + print(!y.Before(x)) +} From aa27ab211115427ae18636658733857ca4e8a870 Mon Sep 17 00:00:00 2001 From: Denis Date: Sat, 16 Apr 2022 11:42:00 +0300 Subject: [PATCH 2/5] rename rule --- checkers/rules/rules.go | 2 +- checkers/rulesdata/rulesdata.go | 2 +- .../negative_tests.go | 2 +- .../positive_tests.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename checkers/testdata/{timeRangeExprSimplify => timeComparisonSimplify}/negative_tests.go (81%) rename checkers/testdata/{timeRangeExprSimplify => timeComparisonSimplify}/positive_tests.go (89%) diff --git a/checkers/rules/rules.go b/checkers/rules/rules.go index bf6f8cc6f..9c046b8d7 100644 --- a/checkers/rules/rules.go +++ b/checkers/rules/rules.go @@ -659,7 +659,7 @@ func timeExprSimplify(m dsl.Matcher) { //doc:tags style experimental //doc:before !t.Before(tt) //doc:after t.After(tt) -func timeRangeExprSimplify(m dsl.Matcher) { +func timeComparisonSimplify(m dsl.Matcher) { isTime := func(v dsl.Var) bool { return v.Type.Is(`time.Time`) || v.Type.Is(`*time.Time`) } diff --git a/checkers/rulesdata/rulesdata.go b/checkers/rulesdata/rulesdata.go index b0ec9f0dd..828d3429b 100644 --- a/checkers/rulesdata/rulesdata.go +++ b/checkers/rulesdata/rulesdata.go @@ -2060,7 +2060,7 @@ var PrecompiledRules = &ir.File{ }, { Line: 662, - Name: "timeRangeExprSimplify", + Name: "timeComparisonSimplify", MatcherName: "m", DocTags: []string{"style", "experimental"}, DocSummary: "Detects Before/After call of time.Time that can be simplified.", diff --git a/checkers/testdata/timeRangeExprSimplify/negative_tests.go b/checkers/testdata/timeComparisonSimplify/negative_tests.go similarity index 81% rename from checkers/testdata/timeRangeExprSimplify/negative_tests.go rename to checkers/testdata/timeComparisonSimplify/negative_tests.go index 63ee2b62f..1dc017dc0 100644 --- a/checkers/testdata/timeRangeExprSimplify/negative_tests.go +++ b/checkers/testdata/timeComparisonSimplify/negative_tests.go @@ -1,4 +1,4 @@ -package timeRangeExprSimplify +package timeComparisonSimplify import ( "time" diff --git a/checkers/testdata/timeRangeExprSimplify/positive_tests.go b/checkers/testdata/timeComparisonSimplify/positive_tests.go similarity index 89% rename from checkers/testdata/timeRangeExprSimplify/positive_tests.go rename to checkers/testdata/timeComparisonSimplify/positive_tests.go index 8e175be7e..447322c8f 100644 --- a/checkers/testdata/timeRangeExprSimplify/positive_tests.go +++ b/checkers/testdata/timeComparisonSimplify/positive_tests.go @@ -1,4 +1,4 @@ -package timeRangeExprSimplify +package timeComparisonSimplify import ( "time" From 97be2968171fc1b7ac3f07b1399957e4041e331a Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 29 Apr 2022 23:59:10 +0300 Subject: [PATCH 3/5] rename --- checkers/rules/rules.go | 2 +- checkers/rulesdata/rulesdata.go | 2 +- .../negative_tests.go | 2 +- .../positive_tests.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename checkers/testdata/{timeComparisonSimplify => timeCmpSimplify}/negative_tests.go (81%) rename checkers/testdata/{timeComparisonSimplify => timeCmpSimplify}/positive_tests.go (89%) diff --git a/checkers/rules/rules.go b/checkers/rules/rules.go index 9c046b8d7..7035c05cc 100644 --- a/checkers/rules/rules.go +++ b/checkers/rules/rules.go @@ -659,7 +659,7 @@ func timeExprSimplify(m dsl.Matcher) { //doc:tags style experimental //doc:before !t.Before(tt) //doc:after t.After(tt) -func timeComparisonSimplify(m dsl.Matcher) { +func timeCmpSimplify(m dsl.Matcher) { isTime := func(v dsl.Var) bool { return v.Type.Is(`time.Time`) || v.Type.Is(`*time.Time`) } diff --git a/checkers/rulesdata/rulesdata.go b/checkers/rulesdata/rulesdata.go index 828d3429b..c3208834b 100644 --- a/checkers/rulesdata/rulesdata.go +++ b/checkers/rulesdata/rulesdata.go @@ -2060,7 +2060,7 @@ var PrecompiledRules = &ir.File{ }, { Line: 662, - Name: "timeComparisonSimplify", + Name: "timeCmpSimplify", MatcherName: "m", DocTags: []string{"style", "experimental"}, DocSummary: "Detects Before/After call of time.Time that can be simplified.", diff --git a/checkers/testdata/timeComparisonSimplify/negative_tests.go b/checkers/testdata/timeCmpSimplify/negative_tests.go similarity index 81% rename from checkers/testdata/timeComparisonSimplify/negative_tests.go rename to checkers/testdata/timeCmpSimplify/negative_tests.go index 1dc017dc0..80a0d1305 100644 --- a/checkers/testdata/timeComparisonSimplify/negative_tests.go +++ b/checkers/testdata/timeCmpSimplify/negative_tests.go @@ -1,4 +1,4 @@ -package timeComparisonSimplify +package timeCmpSimplify import ( "time" diff --git a/checkers/testdata/timeComparisonSimplify/positive_tests.go b/checkers/testdata/timeCmpSimplify/positive_tests.go similarity index 89% rename from checkers/testdata/timeComparisonSimplify/positive_tests.go rename to checkers/testdata/timeCmpSimplify/positive_tests.go index 447322c8f..3b4798ab8 100644 --- a/checkers/testdata/timeComparisonSimplify/positive_tests.go +++ b/checkers/testdata/timeCmpSimplify/positive_tests.go @@ -1,4 +1,4 @@ -package timeComparisonSimplify +package timeCmpSimplify import ( "time" From 6db284f5eb0cd598cb271ff65a462c6dbd83902c Mon Sep 17 00:00:00 2001 From: Denis Date: Sat, 30 Apr 2022 00:09:05 +0300 Subject: [PATCH 4/5] delete reduant dot --- checkers/rules/rules.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/checkers/rules/rules.go b/checkers/rules/rules.go index 7035c05cc..8cffe61ec 100644 --- a/checkers/rules/rules.go +++ b/checkers/rules/rules.go @@ -655,7 +655,7 @@ func timeExprSimplify(m dsl.Matcher) { Report(`use $t.UnixMicro() instead of $$`) } -//doc:summary Detects Before/After call of time.Time that can be simplified. +//doc:summary Detects Before/After call of time.Time that can be simplified //doc:tags style experimental //doc:before !t.Before(tt) //doc:after t.After(tt) From c177da2bb86d06bf40675e2f9478320db54d6ef3 Mon Sep 17 00:00:00 2001 From: Denis Date: Sat, 30 Apr 2022 00:10:15 +0300 Subject: [PATCH 5/5] delete reduant dot --- checkers/rulesdata/rulesdata.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/checkers/rulesdata/rulesdata.go b/checkers/rulesdata/rulesdata.go index c3208834b..fd63c9b14 100644 --- a/checkers/rulesdata/rulesdata.go +++ b/checkers/rulesdata/rulesdata.go @@ -2063,7 +2063,7 @@ var PrecompiledRules = &ir.File{ Name: "timeCmpSimplify", MatcherName: "m", DocTags: []string{"style", "experimental"}, - DocSummary: "Detects Before/After call of time.Time that can be simplified.", + DocSummary: "Detects Before/After call of time.Time that can be simplified", DocBefore: "!t.Before(tt)", DocAfter: "t.After(tt)", Rules: []ir.Rule{