Skip to content

Use //go:fix inline and go fix to modernize codebase #3280

@vdemeester

Description

@vdemeester

Description

Go 1.26 introduced a rewritten go fix subcommand with a source-level inliner. The //go:fix inline directive allows annotating deprecated functions, type aliases, and variables so that go fix (or IDEs) automatically rewrite call sites to the modern replacement.

For tektoncd/operator this is relevant in two ways:

  1. As a consumer: Once tektoncd/pipeline adds //go:fix inline annotations to its deprecated APIs, operator can run go fix ./... to auto-migrate usage of deprecated pipeline types and functions.

  2. Own deprecated APIs: operator has deprecated fields and generated code that could be annotated.

Prerequisite

Bump go.mod to Go 1.26 (currently at 1.25.5).

Opportunities

Own Deprecated APIs

The generated informer factory has the common deprecated wrapper pattern:

// pkg/client/informers/externalversions/factory.go

// Deprecated: Please use NewSharedInformerFactoryWithOptions instead
//
//go:fix inline
func NewFilteredSharedInformerFactory(client versioned.Interface, defaultResync time.Duration, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) SharedInformerFactory {
	return NewSharedInformerFactoryWithOptions(client, defaultResync, WithNamespace(namespace), WithTweakListOptions(tweakListOptions))
}

Deprecated fields in the operator API types (pkg/apis/operator/v1alpha1/) could also benefit from annotation where applicable.

Consuming pipeline's annotations

Once tektoncd/pipeline annotates its deprecated APIs (tektoncd/pipeline#9560), running go fix ./... in operator will automatically migrate:

  • Deprecated type aliases (e.g. ArrayOrStringParamValue)
  • Deprecated wrapper functions
  • Deprecated resolution package imports

Go 1.26 built-in modernizers

Beyond //go:fix inline, Go 1.26's go fix ships with 24+ built-in modernizers that automatically apply improvements like using slices.Sort, min/max builtins, strings.Cut, and more. Running go fix ./... after bumping to Go 1.26 would apply all applicable modernizations.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/cleanupCategorizes issue or PR as related to cleaning up code, process, or technical debt.

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions