Class: ImproveYourCode::Context::MethodContext

Inherits:
CodeContext
  • Object
show all
Defined in:
lib/improve_your_code/context/method_context.rb

Direct Known Subclasses

SingletonMethodContext

Instance Attribute Summary collapse

Attributes inherited from CodeContext

#children, #exp, #parent, #statement_counter

Instance Method Summary collapse

Methods inherited from CodeContext

#append_child_context, #config_for, #each, #full_name, #local_nodes, #matches?, #number_of_statements, #record_call_to, #record_use_of_self, #register_with_parent

Constructor Details

#initialize(exp, parent_exp) ⇒ MethodContext

Returns a new instance of MethodContext.



11
12
13
14
15
# File 'lib/improve_your_code/context/method_context.rb', line 11

def initialize(exp, parent_exp)
  @parent_exp = parent_exp
  @visibility = :public
  super exp
end

Instance Attribute Details

#refsObject (readonly)

Returns the value of attribute refs.



9
10
11
# File 'lib/improve_your_code/context/method_context.rb', line 9

def refs
  @refs
end

#visibilityObject

Returns the value of attribute visibility.



8
9
10
# File 'lib/improve_your_code/context/method_context.rb', line 8

def visibility
  @visibility
end

Instance Method Details

#apply_current_visibility(current_visibility) ⇒ Object



55
56
57
# File 'lib/improve_your_code/context/method_context.rb', line 55

def apply_current_visibility(current_visibility)
  self.visibility = current_visibility
end

#default_assignmentsObject



38
39
40
41
# File 'lib/improve_your_code/context/method_context.rb', line 38

def default_assignments
  @default_assignments ||=
    exp.parameters.select(&:optional_argument?).map(&:children)
end

#full_commentObject



67
68
69
70
71
72
# File 'lib/improve_your_code/context/method_context.rb', line 67

def full_comment
  own = super
  return own unless own.empty?
  return parent_exp.full_comment if parent_exp
  ''
end

#instance_method?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/improve_your_code/context/method_context.rb', line 51

def instance_method?
  true
end

#method_context_classObject



43
44
45
# File 'lib/improve_your_code/context/method_context.rb', line 43

def method_context_class
  self.class
end

#module_function?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/improve_your_code/context/method_context.rb', line 59

def module_function?
  visibility == :module_function
end

#non_public_visibility?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/improve_your_code/context/method_context.rb', line 63

def non_public_visibility?
  visibility != :public
end

#references_self?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/improve_your_code/context/method_context.rb', line 17

def references_self?
  exp.depends_on_instance?
end

#singleton_method?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/improve_your_code/context/method_context.rb', line 47

def singleton_method?
  false
end

#unused_paramsObject



26
27
28
29
30
31
32
# File 'lib/improve_your_code/context/method_context.rb', line 26

def unused_params
  exp.arguments.reject do |param|
    param.anonymous_splat? ||
      param.marked_unused? ||
      uses_param?(param)
  end
end

#uses_param?(param) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
# File 'lib/improve_your_code/context/method_context.rb', line 21

def uses_param?(param)
  (local_nodes(:lvar) + local_nodes(:lvasgn))
    .find { |node| node.var_name == param.name }
end

#uses_super_with_implicit_arguments?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/improve_your_code/context/method_context.rb', line 34

def uses_super_with_implicit_arguments?
  (body = exp.body) && body.contains_nested_node?(:zsuper)
end