pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
50 lines (40 loc) • 1.11 kB
YAML
# Go Defer in Loop
# Detects defer statements inside loops (resource leak risk)
id: go-defer-in-loop
name: Defer Inside Loop
severity: warning
category: resource-management
defect_class: async-misuse
inline_tier: blocking
language: go
message: "defer in loop can cause resource exhaustion — move outside loop or use function"
description: |
Using defer inside a loop defers cleanup until the function returns,
not until the loop iteration ends. This can cause resource exhaustion.
✅ FIX: Move defer outside loop, or wrap loop body in a function.
query: |
(for_statement
body: (block
(defer_statement) @DEFER))
metavars:
- DEFER
has_fix: false
tags:
- go
- resource-leaks
- performance
examples:
bad: |
for _, file := range files {
f, _ := os.Open(file)
defer f.Close() // All closes deferred until function exit!
process(f)
}
good: |
for _, file := range files {
func() {
f, _ := os.Open(file)
defer f.Close() // Closes at end of anonymous function
process(f)
}()
}