diff --git a/rule/empty-block.go b/rule/empty-block.go index 4eb0ce8..fbec4d9 100644 --- a/rule/empty-block.go +++ b/rule/empty-block.go @@ -2,7 +2,6 @@ package rule import ( "go/ast" - "go/types" "github.com/mgechev/revive/lint" ) @@ -18,12 +17,7 @@ func (r *EmptyBlockRule) Apply(file *lint.File, _ lint.Arguments) []lint.Failure failures = append(failures, failure) } - err := file.Pkg.TypeCheck() - if err != nil { - panic("unable to type check " + file.Name + ":" + err.Error()) - } - - w := lintEmptyBlock{make(map[*ast.BlockStmt]bool, 0), file.Pkg, onFailure} + w := lintEmptyBlock{make(map[*ast.BlockStmt]bool, 0), onFailure} ast.Walk(w, file.AST) return failures } @@ -35,7 +29,6 @@ func (r *EmptyBlockRule) Name() string { type lintEmptyBlock struct { ignore map[*ast.BlockStmt]bool - pkg *lint.Package onFailure func(lint.Failure) } @@ -48,10 +41,14 @@ func (w lintEmptyBlock) Visit(node ast.Node) ast.Visitor { w.ignore[n.Body] = true return w case *ast.RangeStmt: - t := w.pkg.TypeOf(n.X) - - if _, ok := t.(*types.Chan); ok { - w.ignore[n.Body] = true + if len(n.Body.List) == 0 { + w.onFailure(lint.Failure{ + Confidence: 0.9, + Node: n, + Category: "logic", + Failure: "this block is empty, you can remove it", + }) + return nil // skip visiting the range subtree (it will produce a duplicated failure) } case *ast.BlockStmt: if !w.ignore[n] && len(n.List) == 0 { diff --git a/testdata/empty-block.go b/testdata/empty-block.go index 81b7262..d750157 100644 --- a/testdata/empty-block.go +++ b/testdata/empty-block.go @@ -35,9 +35,9 @@ func g(f func() bool) { } - // issue 386 + // issue 386, then overwritten by issue 416 var c = make(chan int) - for range c { + for range c { // MATCH /this block is empty, you can remove it/ } var s = "a string"