pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
51 lines (40 loc) • 1.11 kB
YAML
# Ruby Open Struct
# Detects OpenStruct usage (performance and debugging issues)
id: ruby-open-struct
name: OpenStruct Usage
severity: warning
category: best-practices
defect_class: safety
inline_tier: warning
language: ruby
message: "OpenStruct is slow and makes debugging hard — use a plain class or Struct"
description: |
OpenStruct is convenient but has poor performance and hides method
definitions from static analysis. Prefer Struct or plain classes.
✅ FIX: Use Struct.new or a plain class with attr_accessor.
query: |
(call_expression
receiver: (constant) @RECV
(#eq? @RECV "OpenStruct")
method: (identifier) @METHOD
(#eq? @METHOD "new"))
metavars:
- RECV
- METHOD
has_fix: false
tags:
- ruby
- performance
- maintainability
examples:
bad: |
person = OpenStruct.new(name: "Ada", age: 30)
person.name # Slow, hidden method definition
good: |
Person = Struct.new(:name, :age)
person = Person.new("Ada", 30)
person.name # Fast, explicit method
# Or plain class
class Person
attr_accessor :name, :age
end