Skip to content

Commit b2f3683

Browse files
committed
add nil check
Signed-off-by: sivchari <shibuuuu5@gmail.com>
1 parent ac3e5e2 commit b2f3683

File tree

8 files changed

+30
-26
lines changed

8 files changed

+30
-26
lines changed

pkg/analysis/commentstart/analyzer.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
2828
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
2929
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
30+
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
3031
)
3132

3233
const name = "commentstart"
@@ -58,10 +59,8 @@ func checkField(pass *analysis.Pass, field *ast.Field, tagInfo extractjsontags.F
5859
return
5960
}
6061

61-
var fieldName string
62-
if len(field.Names) > 0 {
63-
fieldName = field.Names[0].Name
64-
} else {
62+
fieldName := utils.FieldName(field)
63+
if fieldName == "" {
6564
fieldName = types.ExprString(field.Type)
6665
}
6766

pkg/analysis/jsontags/analyzer.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,15 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
7676
}
7777

7878
func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field, tagInfo extractjsontags.FieldTagInfo) {
79-
prefix := "embedded field %s"
80-
if len(field.Names) > 0 && field.Names[0] != nil {
81-
prefix = "field %s"
79+
prefix := "field %s"
80+
if len(field.Names) == 0 || field.Names[0] == nil {
81+
prefix = "embedded field %s"
8282
}
8383

84+
prefix = fmt.Sprintf(prefix, utils.FieldName(field))
85+
8486
if tagInfo.Missing {
85-
pass.Reportf(field.Pos(), "%s is missing json tag", fmt.Sprintf(prefix, utils.FieldName(field)))
87+
pass.Reportf(field.Pos(), "%s is missing json tag", prefix)
8688
return
8789
}
8890

@@ -91,13 +93,13 @@ func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field, tagInfo ext
9193
}
9294

9395
if tagInfo.Name == "" {
94-
pass.Reportf(field.Pos(), "%s has empty json tag", fmt.Sprintf(prefix, utils.FieldName(field)))
96+
pass.Reportf(field.Pos(), "%s has empty json tag", prefix)
9597
return
9698
}
9799

98100
matched := a.jsonTagRegex.Match([]byte(tagInfo.Name))
99101
if !matched {
100-
pass.Reportf(field.Pos(), "%s json tag does not match pattern %q: %s", fmt.Sprintf(prefix, utils.FieldName(field)), a.jsonTagRegex.String(), tagInfo.Name)
102+
pass.Reportf(field.Pos(), "%s json tag does not match pattern %q: %s", prefix, a.jsonTagRegex.String(), tagInfo.Name)
101103
}
102104
}
103105

pkg/analysis/maxlength/analyzer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ func run(pass *analysis.Pass) (any, error) {
5555
}
5656

5757
func checkField(pass *analysis.Pass, field *ast.Field, markersAccess markershelper.Markers) {
58-
if len(field.Names) == 0 || field.Names[0] == nil {
58+
fieldName := utils.FieldName(field)
59+
if fieldName == "" {
5960
return
6061
}
6162

62-
fieldName := field.Names[0].Name
6363
prefix := fmt.Sprintf("field %s", fieldName)
6464

6565
checkTypeExpr(pass, field.Type, field, nil, markersAccess, prefix, markers.KubebuilderMaxLengthMarker, needsStringMaxLength)

pkg/analysis/nomaps/analyzer.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
2727
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
2828
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
29+
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2930
"sigs.k8s.io/kube-api-linter/pkg/config"
3031
)
3132

@@ -81,7 +82,7 @@ func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field) {
8182
}
8283

8384
if a.policy == config.NoMapsEnforce {
84-
report(pass, field.Pos(), field.Names[0].Name)
85+
report(pass, field.Pos(), utils.FieldName(field))
8586
return
8687
}
8788

@@ -90,7 +91,7 @@ func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field) {
9091
return
9192
}
9293

93-
report(pass, field.Pos(), field.Names[0].Name)
94+
report(pass, field.Pos(), utils.FieldName(field))
9495
}
9596

9697
if a.policy == config.NoMapsIgnore {
@@ -104,7 +105,7 @@ func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field) {
104105
return
105106
}
106107

107-
report(pass, field.Pos(), field.Names[0].Name)
108+
report(pass, field.Pos(), utils.FieldName(field))
108109
}
109110
}
110111

pkg/analysis/nophase/analyzer.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"golang.org/x/tools/go/ast/inspector"
2525
kalerrors "sigs.k8s.io/kube-api-linter/pkg/analysis/errors"
2626
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
27+
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2728
)
2829

2930
const name = "nophase"
@@ -68,7 +69,7 @@ func run(pass *analysis.Pass) (any, error) {
6869
return
6970
}
7071

71-
fieldName := field.Names[0].Name
72+
fieldName := utils.FieldName(field)
7273

7374
// First check if the struct field name contains 'phase'
7475
if strings.Contains(strings.ToLower(fieldName), "phase") {

pkg/analysis/optionalorrequired/analyzer.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
2525
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
2626
markershelper "sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
27+
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2728
"sigs.k8s.io/kube-api-linter/pkg/config"
2829
"sigs.k8s.io/kube-api-linter/pkg/markers"
2930
)
@@ -107,13 +108,13 @@ func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field, fieldMarker
107108
return
108109
}
109110

110-
var prefix string
111-
if len(field.Names) > 0 && field.Names[0] != nil {
112-
prefix = fmt.Sprintf("field %s", field.Names[0].Name)
113-
} else if ident, ok := field.Type.(*ast.Ident); ok {
114-
prefix = fmt.Sprintf("embedded field %s", ident.Name)
111+
prefix := "field %s"
112+
if len(field.Names) == 0 || field.Names[0] == nil {
113+
prefix = "embedded field %s"
115114
}
116115

116+
prefix = fmt.Sprintf(prefix, utils.FieldName(field))
117+
117118
hasPrimaryOptional := fieldMarkers.Has(a.primaryOptionalMarker)
118119
hasPrimaryRequired := fieldMarkers.Has(a.primaryRequiredMarker)
119120

pkg/analysis/requiredfields/analyzer.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
2626
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
2727
markershelper "sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
28+
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2829
"sigs.k8s.io/kube-api-linter/pkg/config"
2930
"sigs.k8s.io/kube-api-linter/pkg/markers"
3031
)
@@ -71,12 +72,11 @@ func (a *analyzer) run(pass *analysis.Pass) (any, error) {
7172
}
7273

7374
func (a *analyzer) checkField(pass *analysis.Pass, field *ast.Field, fieldMarkers markershelper.MarkerSet, fieldTagInfo extractjsontags.FieldTagInfo) {
74-
if field == nil || len(field.Names) == 0 {
75+
fieldName := utils.FieldName(field)
76+
if fieldName == "" {
7577
return
7678
}
7779

78-
fieldName := field.Names[0].Name
79-
8080
if !fieldMarkers.Has(markers.RequiredMarker) && !fieldMarkers.Has(markers.KubebuilderRequiredMarker) {
8181
// The field is not marked required, so we don't need to check it.
8282
return

pkg/analysis/utils/type_check.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ func (t *typeChecker) CheckNode(pass *analysis.Pass, node ast.Node) {
6262
}
6363

6464
func (t *typeChecker) checkField(pass *analysis.Pass, field *ast.Field) {
65-
if field == nil || len(field.Names) == 0 || field.Names[0] == nil {
65+
fieldName := FieldName(field)
66+
if fieldName == "" {
6667
return
6768
}
6869

69-
fieldName := field.Names[0].Name
7070
prefix := fmt.Sprintf("field %s", fieldName)
7171

7272
t.checkTypeExpr(pass, field.Type, field, prefix)

0 commit comments

Comments
 (0)