File tree Expand file tree Collapse file tree 3 files changed +76
-0
lines changed Expand file tree Collapse file tree 3 files changed +76
-0
lines changed Original file line number Diff line number Diff line change 1+ package checker_test
2+
3+ func ExampleFoo () {
4+ // TODO: something important
5+ // TODO(jim)
6+ // FIX fix this
7+ // FIXME(bob)
8+ // TODO this
9+ // BUG: oh no this is broken
10+ }
Original file line number Diff line number Diff line change 1+ package checker_test
2+
3+ func singleLineCode () {
4+
5+ /*! may want to add detail/assignee to this TODO/FIXME/BUG comment */
6+ // TODO
7+
8+ /*! may want to add detail/assignee to this TODO/FIXME/BUG comment */
9+ // FIX
10+
11+ /*! may want to add detail/assignee to this TODO/FIXME/BUG comment */
12+ // FIXME
13+
14+ /*! may want to add detail/assignee to this TODO/FIXME/BUG comment */
15+ // BUG
16+ }
Original file line number Diff line number Diff line change 1+ package checkers
2+
3+ import (
4+ "go/ast"
5+ "regexp"
6+
7+ "github.com/go-critic/go-critic/checkers/internal/astwalk"
8+ "github.com/go-critic/go-critic/framework/linter"
9+ )
10+
11+ func init () {
12+ var info linter.CheckerInfo
13+ info .Name = "todoCommentWithoutDetail"
14+ info .Tags = []string {"style" , "opinionated" , "experimental" }
15+ info .Summary = "Detects TODO comments without detail/assignee"
16+ info .Before = `
17+ // TODO
18+ fiiWithCtx(nil, a, b)
19+ `
20+ info .After = `
21+ // TODO(admin): pass context.TODO() instead of nil
22+ fiiWithCtx(nil, a, b)
23+ `
24+ collection .AddChecker (& info , func (ctx * linter.CheckerContext ) (linter.FileWalker , error ) {
25+ visitor := & todoCommentWithoutCodeChecker {
26+ ctx : ctx ,
27+ regex : regexp .MustCompile (`^(//|/\*)?\s*(TODO|FIX|FIXME|BUG)\s*(\*/)?$` ),
28+ }
29+ return astwalk .WalkerForComment (visitor ), nil
30+ })
31+ }
32+
33+ type todoCommentWithoutCodeChecker struct {
34+ astwalk.WalkHandler
35+ ctx * linter.CheckerContext
36+ regex * regexp.Regexp
37+ }
38+
39+ func (c * todoCommentWithoutCodeChecker ) VisitComment (cg * ast.CommentGroup ) {
40+ for _ , comment := range cg .List {
41+ if c .regex .MatchString (comment .Text ) {
42+ c .warn (cg )
43+ break
44+ }
45+ }
46+ }
47+
48+ func (c * todoCommentWithoutCodeChecker ) warn (cause ast.Node ) {
49+ c .ctx .Warn (cause , "may want to add detail/assignee to this TODO/FIXME/BUG comment" )
50+ }
You can’t perform that action at this time.
0 commit comments