Skip to content

Commit

Permalink
Update errors and lint message (#5)
Browse files Browse the repository at this point in the history
Co-authored-by: Clifton Kaznocha <ckaznocha@users.noreply.github.com>
  • Loading branch information
ckaznocha and ckaznocha committed Feb 12, 2024
1 parent 0b12b1e commit 53a9c24
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 40 deletions.
3 changes: 3 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,6 @@ linters:
- wastedassign
- whitespace
- wsl
run:
skip-dirs:
- testdata/
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"cSpell.words": ["intrange"]
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func main() {
Running `intrange` on the above code will produce the following output:

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

The loop can be rewritten as:
Expand Down
22 changes: 16 additions & 6 deletions intrange.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package intrange

import (
"errors"
"fmt"
"go/ast"
"go/token"
"strconv"
Expand All @@ -14,24 +15,33 @@ import (
var (
Analyzer = &analysis.Analyzer{
Name: "intrange",
Doc: "intrange is a linter to find places where for loops can make use of an int range.",
Doc: "intrange is a linter to find places where for loops could make use of an integer range.",
Run: run,
Requires: []*analysis.Analyzer{inspect.Analyzer},
}

ErrNoResult = errors.New("no inspect result")
ErrResultType = errors.New("inspect result has wrong type")
errFailedAnalysis = errors.New("failed analysis")
)

const msg = "for loop can be changed to use an integer range (Go 1.22+)"

func run(pass *analysis.Pass) (any, error) {
result, ok := pass.ResultOf[inspect.Analyzer]
if !ok {
return nil, ErrNoResult
return nil, fmt.Errorf(
"%w: %s",
errFailedAnalysis,
inspect.Analyzer.Name,
)
}

resultInspector, ok := result.(*inspector.Inspector)
if !ok {
return nil, ErrResultType
return nil, fmt.Errorf(
"%w: %s",
errFailedAnalysis,
inspect.Analyzer.Name,
)
}

resultInspector.Preorder([]ast.Node{(*ast.ForStmt)(nil)}, check(pass))
Expand Down Expand Up @@ -201,7 +211,7 @@ func check(pass *analysis.Pass) func(node ast.Node) {

pass.Report(analysis.Diagnostic{
Pos: forStmt.Pos(),
Message: "for loop can use an int range",
Message: msg,
})
}
}
Expand Down
66 changes: 33 additions & 33 deletions testdata/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,55 +19,55 @@ func main() {
i = i + 1
}

for i := 0; i < 10; i++ { // want `for loop can use an int range`
for i := 0; i < 10; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := uint32(0); i < 10; i++ { // want `for loop can use an int range`
for i := uint32(0); i < 10; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0x0; i < 10; i++ { // want `for loop can use an int range`
for i := 0x0; i < 10; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i += 1 { // want `for loop can use an int range`
for i := 0; i < 10; i += 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i += 0x1 { // want `for loop can use an int range`
for i := 0; i < 10; i += 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i = i + 1 { // want `for loop can use an int range`
for i := 0; i < 10; i = i + 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i = i + 0x1 { // want `for loop can use an int range`
for i := 0; i < 10; i = i + 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i = 1 + i { // want `for loop can use an int range`
for i := 0; i < 10; i = 1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < 10; i = 0x1 + i { // want `for loop can use an int range`
for i := 0; i < 10; i = 0x1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i++ { // want `for loop can use an int range`
for i := 0; 10 > i; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0x0; 10 > i; i++ { // want `for loop can use an int range`
for i := 0x0; 10 > i; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i += 1 { // want `for loop can use an int range`
for i := 0; 10 > i; i += 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i += 0x1 { // want `for loop can use an int range`
for i := 0; 10 > i; i += 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i = i + 1 { // want `for loop can use an int range`
for i := 0; 10 > i; i = i + 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i = i + 0x1 { // want `for loop can use an int range`
for i := 0; 10 > i; i = i + 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i = 1 + i { // want `for loop can use an int range`
for i := 0; 10 > i; i = 1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; 10 > i; i = 0x1 + i { // want `for loop can use an int range`
for i := 0; 10 > i; i = 0x1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

const x = 10
Expand All @@ -78,51 +78,51 @@ func main() {
for i := 0; i < x; i += 2 {
}

for i := 0; i < x; i++ { // want `for loop can use an int range`
for i := 0; i < x; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := uint32(0); i < uint32(x); i++ { // want `for loop can use an int range`
for i := uint32(0); i < uint32(x); i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0x0; i < x; i++ { // want `for loop can use an int range`
for i := 0x0; i < x; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i += 1 { // want `for loop can use an int range`
for i := 0; i < x; i += 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i += 0x1 { // want `for loop can use an int range`
for i := 0; i < x; i += 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i = i + 1 { // want `for loop can use an int range`
for i := 0; i < x; i = i + 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i = i + 0x1 { // want `for loop can use an int range`
for i := 0; i < x; i = i + 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i = 1 + i { // want `for loop can use an int range`
for i := 0; i < x; i = 1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; i < x; i = 0x1 + i { // want `for loop can use an int range`
for i := 0; i < x; i = 0x1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i++ { // want `for loop can use an int range`
for i := 0; x > i; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i += 1 { // want `for loop can use an int range`
for i := 0; x > i; i += 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i += 0x1 { // want `for loop can use an int range`
for i := 0; x > i; i += 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i = i + 1 { // want `for loop can use an int range`
for i := 0; x > i; i = i + 1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i = i + 0x1 { // want `for loop can use an int range`
for i := 0; x > i; i = i + 0x1 { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i = 1 + i { // want `for loop can use an int range`
for i := 0; x > i; i = 1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}

for i := 0; x > i; i = 0x1 + i { // want `for loop can use an int range`
for i := 0; x > i; i = 0x1 + i { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
}
}

0 comments on commit 53a9c24

Please sign in to comment.