-
Notifications
You must be signed in to change notification settings - Fork 0
/
vars.go
94 lines (86 loc) · 1.99 KB
/
vars.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package internal
import (
"strings"
"github.com/fatih/color"
)
type UsedVar struct {
Name string
Value interface{}
LastWrite int
SourceLastWrite string
}
func GoFindUsedArgsLastWrite(
funcLine int,
funcSrc string,
src []string,
failingArgs []string) []UsedVar {
var usedVars []UsedVar
for _, fa := range failingArgs {
if isValidVariable(fa) {
lastWrite := GoLastWriteToVar(funcSrc, fa)
lastWriteSrc := ""
if lastWrite > -1 {
lastWrite = lastWrite + funcLine
lastWriteSrc = strings.TrimSpace(src[lastWrite-1])
}
uv := UsedVar{
Name: fa,
Value: nil,
LastWrite: lastWrite,
SourceLastWrite: lastWriteSrc,
}
usedVars = append(usedVars, uv)
}
}
return usedVars
}
func findUsedArgsLastWrite(
funcLine int,
funcSrc string,
src []string,
argNames []string,
varValues []interface{},
failingArgs []string) []UsedVar {
var usedVars []UsedVar
for i, ar := range argNames {
lastWrite := GoLastWriteToVar(funcSrc, ar)
uv := UsedVar{
Name: ar,
Value: varValues[i],
LastWrite: lastWrite,
SourceLastWrite: strings.TrimSpace(src[lastWrite+funcLine-1]),
}
usedVars = append(usedVars, uv)
}
for _, fa := range diff(failingArgs, argNames) {
lastWrite := GoLastWriteToVar(funcSrc, fa)
lastWriteSrc := ""
if lastWrite > -1 {
lastWrite = lastWrite + funcLine
lastWriteSrc = strings.TrimSpace(src[lastWrite-1])
}
uv := UsedVar{
Name: fa,
Value: nil,
LastWrite: lastWrite,
SourceLastWrite: lastWriteSrc,
}
usedVars = append(usedVars, uv)
}
return usedVars
}
func printUsedVariables(vars []UsedVar) {
if len(vars) > 0 {
printf(color.BlueString("Variables:"))
for _, arg := range vars {
if arg.Value != nil {
printf(" %v : %v\n", arg.Name, arg.Value)
} else {
printf(" %v : ?\n", arg.Name)
}
if arg.LastWrite > -1 {
printf(" ╰╴ %d : %v\n", arg.LastWrite, arg.SourceLastWrite)
}
}
}
}