@@ -174,52 +174,50 @@ func stditerators(pass *analysis.Pass) (any, error) {
174174 curCmp = curLenCall .Parent ()
175175 cmp = curCmp .Node ().(* ast.BinaryExpr )
176176 )
177- if cmp .Op != token .LSS {
177+ if cmp .Op != token .LSS ||
178+ ! analysisinternal .IsChildOf (curCmp , edge .ForStmt_Cond ) {
178179 continue
179180 }
180- if ek , _ := curCmp .ParentEdge (); ek == edge .ForStmt_Cond {
181- if id , ok := cmp .X .(* ast.Ident ); ok {
182- // Have: for _; i < x.Len(); _ { ... }
183- var (
184- v = info .Uses [id ].(* types.Var )
185- curFor = curCmp .Parent ()
186- loop = curFor .Node ().(* ast.ForStmt )
187- )
188- if v != isIncrementLoop (info , loop ) {
189- continue
190- }
191- // Have: for i := 0; i < x.Len(); i++ { ... }.
192- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
193-
194- rng = analysisinternal .Range (loop .For , loop .Post .End ())
195- indexVar = v
196- curBody = curFor .ChildAt (edge .ForStmt_Body , - 1 )
197- elem , elemVar = chooseName (curBody , lenSel .X , indexVar )
181+ if id , ok := cmp .X .(* ast.Ident ); ok {
182+ // Have: for _; i < x.Len(); _ { ... }
183+ var (
184+ v = info .Uses [id ].(* types.Var )
185+ curFor = curCmp .Parent ()
186+ loop = curFor .Node ().(* ast.ForStmt )
187+ )
188+ if v != isIncrementLoop (info , loop ) {
189+ continue
190+ }
191+ // Have: for i := 0; i < x.Len(); i++ { ... }.
192+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
193+ rng = analysisinternal .Range (loop .For , loop .Post .End ())
194+ indexVar = v
195+ curBody = curFor .ChildAt (edge .ForStmt_Body , - 1 )
196+ elem , elemVar = chooseName (curBody , lenSel .X , indexVar )
198197
199- // for i := 0; i < x.Len(); i++ {
200- // ---- ------- --- -----
201- // for elem := range x.All() {
202- edits = []analysis.TextEdit {
203- {
204- Pos : v .Pos (),
205- End : v .Pos () + token .Pos (len (v .Name ())),
206- NewText : []byte (elem ),
207- },
208- {
209- Pos : loop .Init .(* ast.AssignStmt ).Rhs [0 ].Pos (),
210- End : cmp .Y .Pos (),
211- NewText : []byte ("range " ),
212- },
213- {
214- Pos : lenSel .Sel .Pos (),
215- End : lenSel .Sel .End (),
216- NewText : []byte (row .itermethod ),
217- },
218- {
219- Pos : curLenCall .Node ().End (),
220- End : loop .Post .End (),
221- },
222- }
198+ // for i := 0; i < x.Len(); i++ {
199+ // ---- ------- --- -----
200+ // for elem := range x.All() {
201+ edits = []analysis.TextEdit {
202+ {
203+ Pos : v .Pos (),
204+ End : v .Pos () + token .Pos (len (v .Name ())),
205+ NewText : []byte (elem ),
206+ },
207+ {
208+ Pos : loop .Init .(* ast.AssignStmt ).Rhs [0 ].Pos (),
209+ End : cmp .Y .Pos (),
210+ NewText : []byte ("range " ),
211+ },
212+ {
213+ Pos : lenSel .Sel .Pos (),
214+ End : lenSel .Sel .End (),
215+ NewText : []byte (row .itermethod ),
216+ },
217+ {
218+ Pos : curLenCall .Node ().End (),
219+ End : loop .Post .End (),
220+ },
223221 }
224222 }
225223
0 commit comments