mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-02 21:10:08 +00:00
128 lines
4.3 KiB
Diff
128 lines
4.3 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index 868f7fc..2e4d94d 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -24,7 +24,6 @@ cover:
|
|
|
|
.PHONY: install-vet
|
|
install-vet:
|
|
- go install github.com/nishanths/exhaustive/cmd/exhaustive@latest
|
|
go install github.com/gordonklaus/ineffassign@latest
|
|
go install github.com/kisielk/errcheck@latest
|
|
go install honnef.co/go/tools/cmd/staticcheck@latest
|
|
@@ -32,7 +31,6 @@ install-vet:
|
|
.PHONY: vet
|
|
vet:
|
|
go vet ./...
|
|
- exhaustive ./...
|
|
ineffassign ./...
|
|
errcheck ./...
|
|
staticcheck -checks="inherit,-S1034" ./...
|
|
diff --git a/common.go b/common.go
|
|
index 71bc8d5..bf30ff7 100644
|
|
--- a/common.go
|
|
+++ b/common.go
|
|
@@ -73,6 +73,9 @@ func fromTypeParam(pass *analysis.Pass, tp *types.TypeParam, typeparam bool) (re
|
|
|
|
func fromType(pass *analysis.Pass, t types.Type, typeparam bool) (result []enumTypeAndMembers, ok bool) {
|
|
switch t := t.(type) {
|
|
+ case *types.Alias:
|
|
+ return fromType(pass, types.Unalias(t), typeparam)
|
|
+
|
|
case *types.Named:
|
|
return fromNamed(pass, t, typeparam)
|
|
|
|
diff --git a/enum.go b/enum.go
|
|
index e95e78e..1960edd 100644
|
|
--- a/enum.go
|
|
+++ b/enum.go
|
|
@@ -144,7 +144,7 @@ func possibleEnumMember(constName *ast.Ident, info *types.Info) (et enumType, na
|
|
return enumType{}, "", "", false
|
|
}
|
|
|
|
- named := obj.Type().(*types.Named) // guaranteed by validNamedBasic
|
|
+ named := types.Unalias(obj.Type()).(*types.Named) // guaranteed by validNamedBasic
|
|
tn := named.Obj()
|
|
|
|
// By definition, enum type's scope and enum member's scope must be the
|
|
@@ -216,8 +216,9 @@ func hasIgnoreDecl(pass *analysis.Pass, doc *ast.CommentGroup) bool {
|
|
//
|
|
// The following is guaranteed:
|
|
//
|
|
-// validNamedBasic(t) == true => t.(*types.Named)
|
|
+// validNamedBasic(t) == true => types.Unalias(t).(*types.Named)
|
|
func validNamedBasic(t types.Type) bool {
|
|
+ t = types.Unalias(t)
|
|
named, ok := t.(*types.Named)
|
|
if !ok {
|
|
return false
|
|
diff --git a/go.mod b/go.mod
|
|
index 0a3984a..d3caaf5 100644
|
|
--- a/go.mod
|
|
+++ b/go.mod
|
|
@@ -1,10 +1,10 @@
|
|
module github.com/nishanths/exhaustive
|
|
|
|
-go 1.18
|
|
+go 1.24.0
|
|
|
|
-require golang.org/x/tools v0.15.0
|
|
+require golang.org/x/tools v0.38.0
|
|
|
|
require (
|
|
- golang.org/x/mod v0.14.0 // indirect
|
|
- golang.org/x/sys v0.14.0 // indirect
|
|
+ golang.org/x/mod v0.29.0 // indirect
|
|
+ golang.org/x/sync v0.17.0 // indirect
|
|
)
|
|
diff --git a/go.sum b/go.sum
|
|
index 3041532..9b34f09 100644
|
|
--- a/go.sum
|
|
+++ b/go.sum
|
|
@@ -1,7 +1,8 @@
|
|
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
|
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
|
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
|
-golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
|
-golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
|
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
|
|
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
|
|
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
|
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
|
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
|
|
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
|
|
+golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
|
|
+golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
|
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
|
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
|
diff --git a/map.go b/map.go
|
|
index aa5e9bd..4243f32 100644
|
|
--- a/map.go
|
|
+++ b/map.go
|
|
@@ -34,16 +34,18 @@ func mapChecker(pass *analysis.Pass, cfg mapConfig, generated boolCache, comment
|
|
|
|
lit := n.(*ast.CompositeLit)
|
|
|
|
- mapType, ok := pass.TypesInfo.Types[lit.Type].Type.(*types.Map)
|
|
- if !ok {
|
|
- namedType, ok2 := pass.TypesInfo.Types[lit.Type].Type.(*types.Named)
|
|
- if !ok2 {
|
|
- return true, resultNotMapLiteral
|
|
- }
|
|
- mapType, ok = namedType.Underlying().(*types.Map)
|
|
+ var mapType *types.Map
|
|
+ switch tt := types.Unalias(pass.TypesInfo.Types[lit.Type].Type).(type) {
|
|
+ case *types.Map:
|
|
+ mapType = tt
|
|
+ case *types.Named:
|
|
+ var ok bool
|
|
+ mapType, ok = tt.Underlying().(*types.Map)
|
|
if !ok {
|
|
return true, resultNotMapLiteral
|
|
}
|
|
+ default:
|
|
+ return true, resultNotMapLiteral
|
|
}
|
|
|
|
if len(lit.Elts) == 0 {
|