/
deadassign.go
62 lines (56 loc) · 922 Bytes
/
deadassign.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package main
import (
"go/ast"
"go/token"
)
func init() {
register(deadassignFix)
}
var deadassignFix = fix{
name: "deadassign",
date: "2015-03-11",
f: deadassign,
desc: `Remove "x = x" assignments.`,
disabled: false,
}
func deadassign(file *ast.File) bool {
fixed := false
// Apply the following transitions:
//
// 1)
// // from:
// a := 1
// x = x
//
// // to:
// a := 1
walk(file, func(n interface{}) {
stmt, ok := n.(*ast.Stmt)
if !ok {
return
}
assignStmt, ok := (*stmt).(*ast.AssignStmt)
if !ok {
return
}
if assignStmt.Tok != token.ASSIGN {
return
}
if len(assignStmt.Lhs) != 1 {
return
}
lid, ok := assignStmt.Lhs[0].(*ast.Ident)
if !ok {
return
}
rid, ok := assignStmt.Rhs[0].(*ast.Ident)
if !ok {
return
}
if isName(lid, rid.Name) {
*stmt = &ast.EmptyStmt{}
fixed = true
}
})
return fixed
}