Skip to content

Commit 03c3a4b

Browse files
authored
Handle Op with index expressions (#18)
1 parent cd5eb8c commit 03c3a4b

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

intrange.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ func findNExpr(expr ast.Expr) ast.Expr {
245245
return e
246246
case *ast.SelectorExpr:
247247
return e
248+
case *ast.IndexExpr:
249+
return e
248250
default:
249251
return nil
250252
}
@@ -293,7 +295,19 @@ func identEqual(a, b ast.Expr) bool {
293295

294296
return identEqual(aT.Sel, selectorB.Sel) && identEqual(aT.X, selectorB.X)
295297
case *ast.IndexExpr:
298+
indexB, ok := b.(*ast.IndexExpr)
299+
if ok {
300+
return identEqual(aT.X, indexB.X) && identEqual(aT.Index, indexB.Index)
301+
}
302+
296303
return identEqual(aT.X, b)
304+
case *ast.BasicLit:
305+
litB, ok := b.(*ast.BasicLit)
306+
if !ok {
307+
return false
308+
}
309+
310+
return aT.Value == litB.Value
297311
default:
298312
return false
299313
}

testdata/main.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,31 @@ func issue16(service protoreflect.ServiceDescriptor) {
198198
print(i)
199199
}
200200
}
201+
202+
func opReEval_IndexExpressions_ArrayLike(n []int) {
203+
for i := 0; i < n[0]; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
204+
print(i)
205+
}
206+
207+
for i := 0; i < n[0]; i++ {
208+
n[0]++
209+
}
210+
211+
for i := 0; i < n[0]; i++ {
212+
n[0] = 5
213+
}
214+
}
215+
216+
func opReEval_IndexExpressions_Map(n map[string]int) {
217+
for i := 0; i < n["N"]; i++ { // want `for loop can be changed to use an integer range \(Go 1\.22\+\)`
218+
print(i)
219+
}
220+
221+
for i := 0; i < n["N"]; i++ {
222+
n["N"]++
223+
}
224+
225+
for i := 0; i < n["N"]; i++ {
226+
n["N"] = 5
227+
}
228+
}

0 commit comments

Comments
 (0)