lint: swap IfStmt tests to not skip every other IfStmt in a chain Fixes golang/lint#382 The fix works by moving the test for ignored nodes after the else-node check. Change-Id: I508c65ec0b49409a5a7340b5fa5ccc1ccd4a4b05 GitHub-Last-Rev: 738b20a6ab33ac6bc03664eb6887f4951ed3d067 GitHub-Pull-Request: golang/lint#383 Reviewed-on: https://go-review.googlesource.com/97256 Reviewed-by: Alan Donovan <adonovan@google.com>
diff --git a/lint.go b/lint.go index bb71cc2..46bd45f 100644 --- a/lint.go +++ b/lint.go
@@ -1045,13 +1045,13 @@ if !ok || ifStmt.Else == nil { return true } - if ignore[ifStmt] { - return true - } if elseif, ok := ifStmt.Else.(*ast.IfStmt); ok { ignore[elseif] = true return true } + if ignore[ifStmt] { + return true + } if _, ok := ifStmt.Else.(*ast.BlockStmt); !ok { // only care about elses without conditions return true
diff --git a/testdata/else-multi.go b/testdata/else-multi.go index 98f39a3..bd68daa 100644 --- a/testdata/else-multi.go +++ b/testdata/else-multi.go
@@ -16,3 +16,31 @@ } return false } + +func g(x int) int { + if x == 0 { + log.Print("x is zero") + } else if x > 9 { + return 2 + } else if x > 0 { + return 1 + } else { + log.Printf("non-positive x: %d", x) + } + return 0 +} + +func h(x int) int { + if x == 0 { + log.Print("x is zero") + } else if x > 99 { + return 3 + } else if x > 9 { + return 2 + } else if x > 0 { + return 1 + } else { + log.Printf("non-positive x: %d", x) + } + return 0 +}