Module: Hashira::Analysis::NamespacePrefix
- Defined in:
- lib/hashira/analysis/namespace_prefix.rb
Class Method Summary collapse
- .build(fulls, prefix = []) ⇒ Object
- .deepest_definition_per_package(definitions) ⇒ Object
- .infer(definitions) ⇒ Object
- .shared_wrapper(fulls, depth) ⇒ Object
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 |