Class/Module Index [+]

Quicksearch

Reek::Smells::UtilityFunction

A Utility Function is any instance method that has no dependency on the state of the instance.

Currently UtilityFunction will warn about any method that:

A Utility Function often arises because it must manipulate other objects (usually its arguments) to get them into a useful form; one force preventing them (the arguments) doing this themselves is that the common knowledge lives outside the arguments, or the arguments are of too basic a type to justify extending that type. Therefore there must be something which ‘knows’ about the contents or purposes of the arguments. That thing would have to be more than just a basic type, because the basic types are either containers which don’t know about their contents, or they are single objects which can’t capture their relationship with their fellows of the same type. So, this thing with the extra knowledge should be reified into a class, and the utility method will most likely belong there.

Constants

DEFAULT_HELPER_CALLS_LIMIT
HELPER_CALLS_LIMIT_KEY

The name of the config field that sets the maximum number of calls permitted within a helper method. Any method with more than this number of method calls on other objects will be considered a candidate Utility Function.

SMELL_CLASS
SMELL_SUBCLASS

Public Class Methods

default_config() click to toggle source
# File lib/reek/smells/utility_function.rb, line 53
def default_config
  super.adopt(HELPER_CALLS_LIMIT_KEY => DEFAULT_HELPER_CALLS_LIMIT)
end
new(source, config = UtilityFunction.default_config) click to toggle source
# File lib/reek/smells/utility_function.rb, line 58
def initialize(source, config = UtilityFunction.default_config)
  super(source, config)
end

Public Instance Methods

examine_context(method_ctx) click to toggle source

Checks whether the given method is a utility function.

@return [Array<SmellWarning>]

# File lib/reek/smells/utility_function.rb, line 67
def examine_context(method_ctx)
  return [] if method_ctx.num_statements == 0
  return [] if depends_on_instance?(method_ctx.exp)
  return [] if num_helper_methods(method_ctx) <= value(HELPER_CALLS_LIMIT_KEY, method_ctx, DEFAULT_HELPER_CALLS_LIMIT)
    # SMELL: loads of calls to value{} with the above pattern
  smell = SmellWarning.new(SMELL_CLASS, method_ctx.full_name, [method_ctx.exp.line],
    "doesn't depend on instance state",
    @source, SMELL_SUBCLASS)
  [smell]
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.