Module: Hashira::Analysis::NamespacePrefix

Defined in:
lib/hashira/analysis/namespace_prefix.rb

Class Method Summary collapse

Class Method Details

.build(fulls, prefix = []) ⇒ Object



12
13
14
15
16
17
# File 'lib/hashira/analysis/namespace_prefix.rb', line 12

def build(fulls, prefix = [])
  depth = prefix.length
  wrapper = wrapper(fulls, depth)
  return prefix unless wrapper
  build(fulls.select { it[depth] == wrapper }, prefix + [wrapper])
end

.infer(definitions) ⇒ Object



8
9
10
# File 'lib/hashira/analysis/namespace_prefix.rb', line 8

def infer(definitions)
  build(definitions.map { |_node, full, _package| full }.uniq)
end

.peers(fulls, depth, wrapper) ⇒ Object



24
25
26
27
28
29
# File 'lib/hashira/analysis/namespace_prefix.rb', line 24

def peers(fulls, depth, wrapper)
  fulls.count do |full|
    size = full.length
    size > depth && !(size == depth + 1 && full[depth] == wrapper)
  end
end

.wrapper(fulls, depth) ⇒ Object



19
20
21
22
# File 'lib/hashira/analysis/namespace_prefix.rb', line 19

def wrapper(fulls, depth)
  wrapper, count = fulls.filter_map { it[depth] if it[depth + 1] }.tally.max_by { |_wrapper, tally| tally }
  wrapper if wrapper && count == peers(fulls, depth, wrapper)
end