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
18
# File 'lib/hashira/analysis/namespace_prefix.rb', line 12

def build(fulls, prefix = [])
  depth = prefix.length
  wrapper = shared_wrapper(fulls, depth)
  return prefix unless wrapper

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

.deepest_definition_per_package(definitions) ⇒ Object



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

def deepest_definition_per_package(definitions)
  definitions.map { |_node, full, package| [package, full] }
             .sort_by { |_package, full| full.length }
             .to_h.values
end

.infer(definitions) ⇒ Object



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

def infer(definitions)
  build(deepest_definition_per_package(definitions))
end

.shared_wrapper(fulls, depth) ⇒ Object



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

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