all: fix exptostd, ineffassign, unconvert, intrange, predeclared issues

- Replace exp/maps and exp/slices with stdlib (Go 1.21+)
- Fix ineffective assignments by checking errors or using blank identifier
- Remove unnecessary type conversions
- Use integer range syntax for loops (Go 1.22+)
- Rename variables shadowing predeclared identifiers (min, max)
This commit is contained in:
Kristoffer Dalby 2026-01-20 16:52:18 +00:00
parent 3b59a91112
commit d3bddbf172
10 changed files with 26 additions and 20 deletions

View file

@ -409,25 +409,25 @@ func calculateStatsSummary(values []float64) StatsSummary {
return StatsSummary{} return StatsSummary{}
} }
min := values[0] minVal := values[0]
max := values[0] maxVal := values[0]
sum := 0.0 sum := 0.0
for _, value := range values { for _, value := range values {
if value < min { if value < minVal {
min = value minVal = value
} }
if value > max { if value > maxVal {
max = value maxVal = value
} }
sum += value sum += value
} }
return StatsSummary{ return StatsSummary{
Min: min, Min: minVal,
Max: max, Max: maxVal,
Average: sum / float64(len(values)), Average: sum / float64(len(values)),
} }
} }

View file

@ -3113,7 +3113,7 @@ func TestWebFlowReauthDifferentUser(t *testing.T) {
user1Nodes := 0 user1Nodes := 0
user2Nodes := 0 user2Nodes := 0
for i := 0; i < allNodesSlice.Len(); i++ { for i := range allNodesSlice.Len() {
n := allNodesSlice.At(i) n := allNodesSlice.At(i)
if n.UserID().Get() == user1.ID { if n.UserID().Get() == user1.ID {
user1Nodes++ user1Nodes++

View file

@ -173,6 +173,9 @@ AND auth_key_id NOT IN (
routes = slices.Compact(routes) routes = slices.Compact(routes)
data, err := json.Marshal(routes) data, err := json.Marshal(routes)
if err != nil {
return fmt.Errorf("marshaling routes for node %d: %w", nodeID, err)
}
err = tx.Model(&types.Node{}).Where("id = ?", nodeID).Update("approved_routes", data).Error err = tx.Model(&types.Node{}).Where("id = ?", nodeID).Update("approved_routes", data).Error
if err != nil { if err != nil {

View file

@ -754,6 +754,9 @@ func TestNodeNaming(t *testing.T) {
} }
_, err = RegisterNodeForTest(tx, nodeInvalidHostname, new(mpp("100.64.0.66/32").Addr()), nil) _, err = RegisterNodeForTest(tx, nodeInvalidHostname, new(mpp("100.64.0.66/32").Addr()), nil)
if err != nil {
return err
}
_, err = RegisterNodeForTest(tx, nodeShortHostname, new(mpp("100.64.0.67/32").Addr()), nil) _, err = RegisterNodeForTest(tx, nodeShortHostname, new(mpp("100.64.0.67/32").Addr()), nil)
return err return err

View file

@ -1860,7 +1860,7 @@ func TestResolvePolicy(t *testing.T) {
}, },
{ {
name: "autogroup-member-comprehensive", name: "autogroup-member-comprehensive",
toResolve: new(AutoGroup(AutoGroupMember)), toResolve: new(AutoGroupMember),
nodes: types.Nodes{ nodes: types.Nodes{
// Node with no tags (should be included - is a member) // Node with no tags (should be included - is a member)
{ {
@ -1910,7 +1910,7 @@ func TestResolvePolicy(t *testing.T) {
}, },
{ {
name: "autogroup-tagged", name: "autogroup-tagged",
toResolve: new(AutoGroup(AutoGroupTagged)), toResolve: new(AutoGroupTagged),
nodes: types.Nodes{ nodes: types.Nodes{
// Node with no tags (should be excluded - not tagged) // Node with no tags (should be excluded - not tagged)
{ {

View file

@ -749,7 +749,7 @@ func (s *State) RenameNode(nodeID types.NodeID, newName string) (types.NodeView,
// Check name uniqueness against NodeStore // Check name uniqueness against NodeStore
allNodes := s.nodeStore.ListNodes() allNodes := s.nodeStore.ListNodes()
for i := 0; i < allNodes.Len(); i++ { for i := range allNodes.Len() {
node := allNodes.At(i) node := allNodes.At(i)
if node.ID() != nodeID && node.AsStruct().GivenName == newName { if node.ID() != nodeID && node.AsStruct().GivenName == newName {
return types.NodeView{}, change.Change{}, fmt.Errorf("%w: %s", ErrNodeNameNotUnique, newName) return types.NodeView{}, change.Change{}, fmt.Errorf("%w: %s", ErrNodeNameNotUnique, newName)

View file

@ -245,7 +245,7 @@ func TestAuthWebFlowLogoutAndReloginNewUser(t *testing.T) {
allClients, err := scenario.ListTailscaleClients() allClients, err := scenario.ListTailscaleClients()
requireNoErrListClients(t, err) requireNoErrListClients(t, err)
allIps, err := scenario.ListTailscaleClientsIPs() _, err = scenario.ListTailscaleClientsIPs()
requireNoErrListClientIPs(t, err) requireNoErrListClientIPs(t, err)
err = scenario.WaitForTailscaleSync() err = scenario.WaitForTailscaleSync()
@ -367,7 +367,7 @@ func TestAuthWebFlowLogoutAndReloginNewUser(t *testing.T) {
} }
// Test connectivity after user switch // Test connectivity after user switch
allIps, err = scenario.ListTailscaleClientsIPs() allIps, err := scenario.ListTailscaleClientsIPs()
requireNoErrListClientIPs(t, err) requireNoErrListClientIPs(t, err)
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string { allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {

View file

@ -23,8 +23,8 @@ import (
"github.com/oauth2-proxy/mockoidc" "github.com/oauth2-proxy/mockoidc"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"golang.org/x/exp/maps" "maps"
"golang.org/x/exp/slices" "slices"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
) )
@ -332,7 +332,7 @@ func requireAllClientsOnlineWithSingleTimeout(t *testing.T, headscale ControlSer
var failureReport strings.Builder var failureReport strings.Builder
ids := types.NodeIDs(maps.Keys(nodeStatus)) ids := slices.Collect(maps.Keys(nodeStatus))
slices.Sort(ids) slices.Sort(ids)
for _, nodeID := range ids { for _, nodeID := range ids {

View file

@ -1158,7 +1158,7 @@ var errParseAuthPage = errors.New("failed to parse auth page")
func (s *Scenario) runHeadscaleRegister(userStr string, body string) error { func (s *Scenario) runHeadscaleRegister(userStr string, body string) error {
// see api.go HTML template // see api.go HTML template
codeSep := strings.Split(string(body), "</code>") codeSep := strings.Split(body, "</code>")
if len(codeSep) != expectedHTMLSplitParts { if len(codeSep) != expectedHTMLSplitParts {
return errParseAuthPage return errParseAuthPage
} }

View file

@ -731,12 +731,12 @@ func (t *TailscaleInContainer) LoginWithURL(
// Logout runs the logout routine on the given Tailscale instance. // Logout runs the logout routine on the given Tailscale instance.
func (t *TailscaleInContainer) Logout() error { func (t *TailscaleInContainer) Logout() error {
stdout, stderr, err := t.Execute([]string{"tailscale", "logout"}) _, _, err := t.Execute([]string{"tailscale", "logout"})
if err != nil { if err != nil {
return err return err
} }
stdout, stderr, _ = t.Execute([]string{"tailscale", "status"}) stdout, stderr, _ := t.Execute([]string{"tailscale", "status"})
if !strings.Contains(stdout+stderr, "Logged out.") { if !strings.Contains(stdout+stderr, "Logged out.") {
return fmt.Errorf("%w: stdout: %s, stderr: %s", errLogoutFailed, stdout, stderr) return fmt.Errorf("%w: stdout: %s, stderr: %s", errLogoutFailed, stdout, stderr)
} }