Class: RuboCop::Cop::Style::OpenStructUse

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/style/open_struct_use.rb

Overview

Flags uses of ‘OpenStruct`, as it is now officially discouraged to be used for performance, version compatibility, and potential security issues.

Examples:


# bad
point = OpenStruct.new(x: 0, y: 1)

# good
Point = Struct.new(:x, :y)
point = Point.new(0, 1)

# also good
point = { x: 0, y: 1 }

# bad
test_double = OpenStruct.new(a: 'b')

# good (assumes test using rspec-mocks)
test_double = double
allow(test_double).to receive(:a).and_return('b')

Constant Summary collapse

MSG =
'Avoid using `OpenStruct`; use `Struct`, `Hash`, a class or test doubles instead.'

Instance Method Summary collapse

Instance Method Details

#on_const(node) ⇒ Object



52
53
54
55
56
57
# File 'lib/rubocop/cop/style/open_struct_use.rb', line 52

def on_const(node)
  return unless uses_open_struct?(node)
  return if custom_class_or_module_definition?(node)

  add_offense(node)
end

#uses_open_struct?(node) ⇒ Object



48
49
50
# File 'lib/rubocop/cop/style/open_struct_use.rb', line 48

def_node_matcher :uses_open_struct?, <<~PATTERN
  (const {nil? (cbase)} :OpenStruct)
PATTERN