Class: MetzScan::Analyzers::NamespaceLeakPressure

Inherits:
Object
  • Object
show all
Includes:
ProjectAnalyzerTriage
Defined in:
lib/metz_scan/analyzers/namespace_leak_pressure.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/finding.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/metadata.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/namespace.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/reference_set.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/reference_collector.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage/exception_declaration.rb

Overview

Reports internal namespace constants referenced outside their namespace.

Defined Under Namespace

Modules: Metadata, SharedNamespaceTriage Classes: Finding, Location, Namespace, ReferenceCollector, ReferenceSet

Constant Summary collapse

RULE_ID =
"MetzProject/NamespaceLeakPressure"
PROJECT_ANALYZER_STATUS =
"candidate"
CONFIDENCE =
"medium"
TRIAGE_SEVERITY =
"manual review"
TRIAGE_SUMMARY =
"Candidate namespace-boundary signal; review internal constants used across layers."
WHY =
"Internal namespace constants can become implicit public APIs when distant callers reference them directly."
SUGGESTED_NEXT_MOVES =
[
  "Review whether callers should depend on a narrower public namespace interface.",
  "Look for behavior that belongs behind the namespace boundary instead of in external callers."
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(paths: nil, index: nil, minimum_referring_files: 3, minimum_referring_packages: 3) ⇒ NamespaceLeakPressure

Returns a new instance of NamespaceLeakPressure.



34
35
36
37
38
39
40
# File 'lib/metz_scan/analyzers/namespace_leak_pressure.rb', line 34

def initialize(paths: nil, index: nil, minimum_referring_files: 3, minimum_referring_packages: 3)
  @paths = Array(paths)
  @index = index || ProjectIndex.build(@paths)
  @reference_collector = ReferenceCollector.new(@index)
  @minimum_referring_files = minimum_referring_files
  @minimum_referring_packages = minimum_referring_packages
end

Instance Method Details

#callObject



42
43
44
45
46
# File 'lib/metz_scan/analyzers/namespace_leak_pressure.rb', line 42

def call
  return [] unless index.available?

  declarations.filter_map { |declaration| finding_for(declaration) }
end