Class: MetzScan::Analyzers::ImplicitContextPressure

Inherits:
Object
  • Object
show all
Includes:
Triage, ProjectAnalyzerTriage
Defined in:
lib/metz_scan/analyzers/implicit_context_pressure.rb,
lib/metz_scan/analyzers/implicit_context_pressure/triage.rb,
lib/metz_scan/analyzers/implicit_context_pressure/reference_set.rb,
lib/metz_scan/analyzers/implicit_context_pressure/thread_current_collector.rb,
lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_collector.rb,
lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_reference.rb,
lib/metz_scan/analyzers/implicit_context_pressure/current_attribute_collector.rb

Overview

Reports repeated ambient CurrentAttributes-style context access.

Defined Under Namespace

Modules: Triage Classes: AmbientContextCollector, Finding, ReferenceSet

Constant Summary collapse

RULE_ID =
"MetzProject/ImplicitContextPressure"
PROJECT_ANALYZER_STATUS =
"candidate"
CONFIDENCE =
"medium"
TRIAGE_SEVERITY =
"manual review"
TRIAGE_SUMMARY =
"Candidate ambient context signal; review whether dependencies should be explicit."
WHY =
"Ambient context hides dependencies from method signatures and makes workflows harder to reason about."
SUGGESTED_NEXT_MOVES =
[
  "Pass the context value explicitly into collaborators that use it.",
  "Keep request-scoped globals at application boundaries when possible."
].freeze
MINIMUM_FILES =
3
MINIMUM_PACKAGES =
2

Instance Method Summary collapse

Constructor Details

#initialize(paths: nil, index: nil, minimum_files: MINIMUM_FILES, minimum_packages: MINIMUM_PACKAGES) ⇒ ImplicitContextPressure

Returns a new instance of ImplicitContextPressure.



40
41
42
43
44
45
# File 'lib/metz_scan/analyzers/implicit_context_pressure.rb', line 40

def initialize(paths: nil, index: nil, minimum_files: MINIMUM_FILES, minimum_packages: MINIMUM_PACKAGES)
  @paths = Array(paths)
  @index = index
  @minimum_files = minimum_files
  @minimum_packages = minimum_packages
end

Instance Method Details

#callObject



47
48
49
50
51
# File 'lib/metz_scan/analyzers/implicit_context_pressure.rb', line 47

def call
  ambient_references.group_by(&:ambient_context).filter_map do |ambient_context, references|
    finding_for(ambient_context, references)
  end
end