Class: Snuffle::ArgsClump

Inherits:
Object
  • Object
show all
Includes:
PoroPlus
Defined in:
lib/snuffle/args_clump.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#elementObject

Returns the value of attribute element.



7
8
9
# File 'lib/snuffle/args_clump.rb', line 7

def element
  @element
end

#line_numbersObject

Returns the value of attribute line_numbers.



7
8
9
# File 'lib/snuffle/args_clump.rb', line 7

def line_numbers
  @line_numbers
end

#neighborsObject

Returns the value of attribute neighbors.



7
8
9
# File 'lib/snuffle/args_clump.rb', line 7

def neighbors
  @neighbors
end

Class Method Details

.from(nodes) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/snuffle/args_clump.rb', line 9

def self.from(nodes)
  nodes = nodes.method_defs
  clumps = Element::MethodDefinition.materialize(nodes.to_a).inject([]) do |clumps, element|
    clump = ArgsClump.new(element: element, line_numbers: element.node.line_numbers.first )
    if clump.values.count > 1 && clump.near_neighbors.any?
      clumps << clump
    end
    clumps
  end
end

Instance Method Details

#distance(primary_matrix, token_matrix) ⇒ Object



40
41
42
# File 'lib/snuffle/args_clump.rb', line 40

def distance(primary_matrix, token_matrix)
  Snuffle::Util::Correlation.distance(primary_matrix, token_matrix)
end

#has_near_neighbors?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/snuffle/args_clump.rb', line 20

def has_near_neighbors?
  near_neighbors.present?
end

#near_neighborsObject



24
25
26
# File 'lib/snuffle/args_clump.rb', line 24

def near_neighbors
  @near_neighbors ||= neighbors.select{ |n| (n.values & values).size > 0 }
end

#neighborObject



36
37
38
# File 'lib/snuffle/args_clump.rb', line 36

def neighbor
  Struct.new(:element, :distance)
end

#valuesObject



32
33
34
# File 'lib/snuffle/args_clump.rb', line 32

def values
  @values ||= self.element.values
end