ckaznocha/intrange

intrange is a program for checking for loops that could use the Go 1.22 integer range feature.

Go

38

159 commits

updated Oct 30, 2025

See the code

README

intrange

CodeQL coverage OpenSSF Scorecard GoDoc

intrange is a program for checking for loops that could use the Go 1.22 integer range feature.

Installation

go install github.com/ckaznocha/intrange/cmd/intrange@latest

Usage

go vet -vettool=$(which intrange) ./...

Examples

A loop that uses the value of the loop variable

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

Running intrange on the above code will produce the following output:

main.go:5:2: for loop can be changed to use an integer range (Go 1.22+)

The loop can be rewritten as:

package main

import "fmt"

func main() {
    for i := range 10 {
        fmt.Println(i)
    }
}

A loop that does not use the value of the loop variable

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println("Hello again!")
    }
}

Running intrange on the above code will produce the following output:

main.go:5:2: for loop can be changed to use an integer range (Go 1.22+)

The loop can be rewritten as:

package main

import "fmt"

func main() {
    for range 10 {
        fmt.Println("Hello again!")
    }
}
go
golang
lint
linter
linting
static-analysis
static-code-analysis
style-lint
style-linter

Significant stargazers

Shun Sakai

368 followers · starred May 2025

ckaznocha/intrange

intrange is a program for checking for loops that could use the Go 1.22 integer range feature.

Go

38

159 commits

updated Oct 30, 2025

See the code

README

intrange

CodeQL coverage OpenSSF Scorecard GoDoc

intrange is a program for checking for loops that could use the Go 1.22 integer range feature.

Installation

go install github.com/ckaznocha/intrange/cmd/intrange@latest

Usage

go vet -vettool=$(which intrange) ./...

Examples

A loop that uses the value of the loop variable

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

Running intrange on the above code will produce the following output:

main.go:5:2: for loop can be changed to use an integer range (Go 1.22+)

The loop can be rewritten as:

package main

import "fmt"

func main() {
    for i := range 10 {
        fmt.Println(i)
    }
}

A loop that does not use the value of the loop variable

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println("Hello again!")
    }
}

Running intrange on the above code will produce the following output:

main.go:5:2: for loop can be changed to use an integer range (Go 1.22+)

The loop can be rewritten as:

package main

import "fmt"

func main() {
    for range 10 {
        fmt.Println("Hello again!")
    }
}
go
golang
lint
linter
linting
static-analysis
static-code-analysis
style-lint
style-linter

Significant stargazers

Shun Sakai

368 followers · starred May 2025

Languages

Go

100.0%