class Fasterer::MethodDefinitionScanner
Attributes
element[R]
Public Class Methods
new(element)
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 12 def initialize(element) @element = element check_offense end
Private Instance Methods
check_offense()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 19 def check_offense if method_definition.has_block? scan_block_call_offense else scan_getter_and_setter_offense end end
method_definition()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 42 def method_definition @method_definition ||= MethodDefinition.new(element) end
scan_block_call_offense()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 27 def scan_block_call_offense traverse_tree(method_definition.body) do |element| next unless element.sexp_type == :call method_call = MethodCall.new(element) if method_call.receiver.is_a?(Fasterer::VariableReference) && method_call.receiver.name == method_definition.block_argument_name && method_call.method_name == :call add_offense(:proc_call_vs_yield) && return end end end
scan_getter_and_setter_offense()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 54 def scan_getter_and_setter_offense method_definition.setter? ? scan_setter_offense : scan_getter_offense end
scan_getter_offense()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 73 def scan_getter_offense return if method_definition.arguments.size > 0 return if method_definition.body.size != 1 if method_definition.body.first.sexp_type == :ivar && method_definition.body.first[1].to_s == "@#{method_definition.name}" add_offense(:getter_vs_attr_reader) end end
scan_setter_offense()
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 58 def scan_setter_offense return if method_definition.arguments.size != 1 return if method_definition.body.size != 1 first_argument = method_definition.arguments.first return if first_argument.type != :regular_argument if method_definition.body.first.sexp_type == :iasgn && method_definition.body.first[1].to_s == "@#{method_definition.name.to_s[0..-2]}" && method_definition.body.first[2][1] == first_argument.name add_offense(:setter_vs_attr_writer) end end
traverse_tree(sexp_tree) { |element| ... }
click to toggle source
# File lib/fasterer/scanners/method_definition_scanner.rb, line 46 def traverse_tree(sexp_tree, &block) sexp_tree.each do |element| next unless element.is_a?(Array) yield element traverse_tree(element, &block) end end