Module: MetzScan::Analyzers::SubclassOverridePressure::Triage

Included in:
MetzScan::Analyzers::SubclassOverridePressure
Defined in:
lib/metz_scan/analyzers/subclass_override_pressure/triage.rb

Instance Method Summary collapse

Instance Method Details

#abstract_hook_message_for(family) ⇒ Object



83
84
85
86
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 83

def abstract_hook_message_for(family)
  "#{family.base.name} descendants implement #{family.method_name} as an abstract hook in " \
    "#{family.overrides.size} subclasses; consider naming the hook protocol."
end

#broad_root_triage_attributesObject



66
67
68
69
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 66

def broad_root_triage_attributes
  { project_analyzer_status: PROJECT_ANALYZER_STATUS, confidence: BROAD_ROOT_CONFIDENCE,
    triage_severity: BROAD_ROOT_TRIAGE_SEVERITY, triage_summary: BROAD_ROOT_TRIAGE_SUMMARY }
end

#cooperative_override_message_for(family) ⇒ Object



88
89
90
91
92
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 88

def cooperative_override_message_for(family)
  "#{family.base.name} descendants extend #{family.method_name} with super in " \
    "#{family.overrides_calling_super_count} of #{family.overrides.size} overrides; " \
    "consider making the extension contract explicit."
end

#generic_override_message_for(family) ⇒ Object



99
100
101
102
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 99

def generic_override_message_for(family)
  "#{family.base.name} descendants override #{family.method_name} in #{family.overrides.size} subclasses; " \
    "consider whether the hook protocol should be explicit."
end

#generic_triage_profileObject



75
76
77
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 75

def generic_triage_profile
  { triage_summary: TRIAGE_SUMMARY, why: WHY, suggested_next_moves: SUGGESTED_NEXT_MOVES }
end

#message_for(family) ⇒ Object



62
63
64
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 62

def message_for(family)
  public_send(message_method_for(family), family)
end

#message_method_for(family) ⇒ Object



79
80
81
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 79

def message_method_for(family)
  MESSAGE_METHODS.fetch(subclass_override_category(family), :generic_override_message_for)
end

#project_analyzer_context_attributes(family) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 54

def project_analyzer_context_attributes(family)
  profile = triage_profile_for(family)

  { project_analyzer_metadata: (family),
    why_it_matters: profile.fetch(:why),
    suggested_next_moves: profile.fetch(:suggested_next_moves) }
end

#replacement_override_message_for(family) ⇒ Object



94
95
96
97
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 94

def replacement_override_message_for(family)
  "#{family.base.name} descendants replace concrete #{family.method_name} behavior in " \
    "#{family.overrides.size} subclasses; consider whether composition would make the variation explicit."
end

#triage_attributes_for(family) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 46

def triage_attributes_for(family)
  return broad_root_triage_attributes if family.root_kind

  project_analyzer_triage_attributes.merge(
    triage_summary: triage_profile_for(family).fetch(:triage_summary)
  )
end

#triage_profile_for(family) ⇒ Object



71
72
73
# File 'lib/metz_scan/analyzers/subclass_override_pressure/triage.rb', line 71

def triage_profile_for(family)
  CATEGORY_TRIAGE.fetch(subclass_override_category(family)) { generic_triage_profile }
end