Skip to content

Commit af2583e

Browse files
committed
Align type checker linters on helpers inspector
1 parent 8037397 commit af2583e

File tree

3 files changed

+36
-51
lines changed

3 files changed

+36
-51
lines changed

pkg/analysis/integers/analyzer.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ import (
1919
"go/ast"
2020

2121
"golang.org/x/tools/go/analysis"
22-
"golang.org/x/tools/go/analysis/passes/inspect"
23-
"golang.org/x/tools/go/ast/inspector"
22+
2423
kalerrors "sigs.k8s.io/kube-api-linter/pkg/analysis/errors"
24+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
25+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
26+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
2527
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2628
)
2729

@@ -33,30 +35,23 @@ var Analyzer = &analysis.Analyzer{
3335
Name: name,
3436
Doc: "All integers should be explicit about their size, int32 and int64 should be used over plain int. Unsigned ints are not allowed.",
3537
Run: run,
36-
Requires: []*analysis.Analyzer{inspect.Analyzer},
38+
Requires: []*analysis.Analyzer{inspector.Analyzer},
3739
}
3840

3941
func run(pass *analysis.Pass) (any, error) {
40-
inspect, ok := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
42+
inspect, ok := pass.ResultOf[inspector.Analyzer].(inspector.Inspector)
4143
if !ok {
4244
return nil, kalerrors.ErrCouldNotGetInspector
4345
}
4446

45-
// Filter to fields so that we can look at fields within structs.
46-
// Filter typespecs so that we can look at type aliases.
47-
nodeFilter := []ast.Node{
48-
(*ast.StructType)(nil),
49-
(*ast.TypeSpec)(nil),
50-
}
51-
5247
typeChecker := utils.NewTypeChecker(utils.IsBasicType, checkIntegers)
5348

54-
// Preorder visits all the nodes of the AST in depth-first order. It calls
55-
// f(n) for each node n before it visits n's children.
56-
//
57-
// We use the filter defined above, ensuring we only look at struct fields and type declarations.
58-
inspect.Preorder(nodeFilter, func(n ast.Node) {
59-
typeChecker.CheckNode(pass, n)
49+
inspect.InspectFields(func(field *ast.Field, _ extractjsontags.FieldTagInfo, _ markers.Markers, _ string) {
50+
typeChecker.CheckNode(pass, field)
51+
})
52+
53+
inspect.InspectTypeSpec(func(typeSpec *ast.TypeSpec, markersAccess markers.Markers) {
54+
typeChecker.CheckNode(pass, typeSpec)
6055
})
6156

6257
return nil, nil //nolint:nilnil

pkg/analysis/nobools/analyzer.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ import (
1919
"go/ast"
2020

2121
"golang.org/x/tools/go/analysis"
22-
"golang.org/x/tools/go/analysis/passes/inspect"
23-
"golang.org/x/tools/go/ast/inspector"
22+
2423
kalerrors "sigs.k8s.io/kube-api-linter/pkg/analysis/errors"
24+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
25+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
26+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
2527
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2628
)
2729

@@ -33,30 +35,23 @@ var Analyzer = &analysis.Analyzer{
3335
Name: name,
3436
Doc: "Boolean values cannot evolve over time, use an enum with meaningful values instead",
3537
Run: run,
36-
Requires: []*analysis.Analyzer{inspect.Analyzer},
38+
Requires: []*analysis.Analyzer{inspector.Analyzer},
3739
}
3840

3941
func run(pass *analysis.Pass) (any, error) {
40-
inspect, ok := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
42+
inspect, ok := pass.ResultOf[inspector.Analyzer].(inspector.Inspector)
4143
if !ok {
4244
return nil, kalerrors.ErrCouldNotGetInspector
4345
}
4446

45-
// Filter to fields so that we can look at fields within structs.
46-
// Filter typespecs so that we can look at type aliases.
47-
nodeFilter := []ast.Node{
48-
(*ast.StructType)(nil),
49-
(*ast.TypeSpec)(nil),
50-
}
51-
5247
typeChecker := utils.NewTypeChecker(utils.IsBasicType, checkBool)
5348

54-
// Preorder visits all the nodes of the AST in depth-first order. It calls
55-
// f(n) for each node n before it visits n's children.
56-
//
57-
// We use the filter defined above, ensuring we only look at struct fields and type declarations.
58-
inspect.Preorder(nodeFilter, func(n ast.Node) {
59-
typeChecker.CheckNode(pass, n)
49+
inspect.InspectFields(func(field *ast.Field, _ extractjsontags.FieldTagInfo, _ markers.Markers, _ string) {
50+
typeChecker.CheckNode(pass, field)
51+
})
52+
53+
inspect.InspectTypeSpec(func(typeSpec *ast.TypeSpec, markersAccess markers.Markers) {
54+
typeChecker.CheckNode(pass, typeSpec)
6055
})
6156

6257
return nil, nil //nolint:nilnil

pkg/analysis/nofloats/analyzer.go

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ import (
1919
"go/ast"
2020

2121
"golang.org/x/tools/go/analysis"
22-
"golang.org/x/tools/go/analysis/passes/inspect"
23-
"golang.org/x/tools/go/ast/inspector"
22+
2423
kalerrors "sigs.k8s.io/kube-api-linter/pkg/analysis/errors"
24+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/extractjsontags"
25+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/inspector"
26+
"sigs.k8s.io/kube-api-linter/pkg/analysis/helpers/markers"
2527
"sigs.k8s.io/kube-api-linter/pkg/analysis/utils"
2628
)
2729

@@ -33,30 +35,23 @@ var Analyzer = &analysis.Analyzer{
3335
Name: name,
3436
Doc: "Float values cannot be reliably round-tripped without changing and have varying precisions and representations across languages and architectures.",
3537
Run: run,
36-
Requires: []*analysis.Analyzer{inspect.Analyzer},
38+
Requires: []*analysis.Analyzer{inspector.Analyzer},
3739
}
3840

3941
func run(pass *analysis.Pass) (any, error) {
40-
inspect, ok := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
42+
inspect, ok := pass.ResultOf[inspector.Analyzer].(inspector.Inspector)
4143
if !ok {
4244
return nil, kalerrors.ErrCouldNotGetInspector
4345
}
4446

45-
// Filter to structs so that we can look at fields within structs.
46-
// Filter typespecs so that we can look at type aliases.
47-
nodeFilter := []ast.Node{
48-
(*ast.StructType)(nil),
49-
(*ast.TypeSpec)(nil),
50-
}
51-
5247
typeChecker := utils.NewTypeChecker(utils.IsBasicType, checkFloat)
5348

54-
// Preorder visits all the nodes of the AST in depth-first order. It calls
55-
// f(n) for each node n before it visits n's children.
56-
//
57-
// We use the filter defined above, ensuring we only look at struct fields and type declarations.
58-
inspect.Preorder(nodeFilter, func(n ast.Node) {
59-
typeChecker.CheckNode(pass, n)
49+
inspect.InspectFields(func(field *ast.Field, _ extractjsontags.FieldTagInfo, _ markers.Markers, _ string) {
50+
typeChecker.CheckNode(pass, field)
51+
})
52+
53+
inspect.InspectTypeSpec(func(typeSpec *ast.TypeSpec, markersAccess markers.Markers) {
54+
typeChecker.CheckNode(pass, typeSpec)
6055
})
6156

6257
return nil, nil //nolint:nilnil

0 commit comments

Comments
 (0)