Class: RuboCop::Cop::Vicenzo::Style::JsonParseSymbolizeNames

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

Overview

Enforces passing symbolize_names: true to JSON.parse so the resulting hash uses symbol keys instead of strings.

An explicit symbolize_names: false is treated as a deliberate opt-out and is allowed. Calls whose options cannot be analyzed statically (a variable, splat, or double splat) are ignored to avoid false positives.

Examples:

# bad
JSON.parse(payload)

# bad
JSON.parse(payload, max_nesting: 5)

# good
JSON.parse(payload, symbolize_names: true)

# good (deliberate opt-out)
JSON.parse(payload, symbolize_names: false)

Constant Summary collapse

MSG =
'Pass `symbolize_names: true` to `JSON.parse` so keys are symbols. ' \
'Only when string keys are truly required, set `symbolize_names: false` explicitly.'
RESTRICT_ON_SEND =
[:parse].freeze

Instance Method Summary collapse

Instance Method Details

#json_parse?(node) ⇒ Object



34
35
36
# File 'lib/rubocop/cop/vicenzo/style/json_parse_symbolize_names.rb', line 34

def_node_matcher :json_parse?, <<~PATTERN
  (send (const {nil? cbase} :JSON) :parse ...)
PATTERN

#on_send(node) ⇒ Object Also known as: on_csend



38
39
40
41
42
# File 'lib/rubocop/cop/vicenzo/style/json_parse_symbolize_names.rb', line 38

def on_send(node)
  return unless json_parse?(node)

  add_offense(node) if missing_symbolize_names?(node)
end