Module: MetzScan::Analyzers::SubclassOverridePressure::Metadata
- Included in:
- MetzScan::Analyzers::SubclassOverridePressure
- Defined in:
- lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb
Instance Method Summary collapse
- #abstract_hook_body?(body_kind) ⇒ Boolean
- #body_fact_metadata(family) ⇒ Object
- #category_metadata(category) ⇒ Object
- #core_project_analyzer_metadata(family) ⇒ Object
- #count_metadata(family) ⇒ Object
- #family_identity_metadata(family) ⇒ Object
- #family_metadata(family) ⇒ Object
- #override_identity_location(declaration) ⇒ Object
- #override_location(family, declaration) ⇒ Object
- #override_locations(family) ⇒ Object
- #project_analyzer_metadata_for(family) ⇒ Object
- #subclass_override_category(family) ⇒ Object
Instance Method Details
#abstract_hook_body?(body_kind) ⇒ Boolean
68 69 70 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 68 def abstract_hook_body?(body_kind) %w[abstract_raise empty default_value].include?(body_kind) end |
#body_fact_metadata(family) ⇒ Object
34 35 36 37 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 34 def (family) { "base_method_body_kind" => family.base_method_body_kind, "overrides_calling_super_count" => family.overrides_calling_super_count } end |
#category_metadata(category) ⇒ Object
18 19 20 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 18 def (category) { "project_analyzer_category" => category, "subclass_override_category" => category } end |
#core_project_analyzer_metadata(family) ⇒ Object
14 15 16 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 14 def (family) (subclass_override_category(family)).merge((family)) end |
#count_metadata(family) ⇒ Object
39 40 41 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 39 def (family) { "descendant_count" => family.descendants.size, "override_count" => family.overrides.size } end |
#family_identity_metadata(family) ⇒ Object
28 29 30 31 32 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 28 def (family) { "base_name" => family.base.name, "method_name" => family.method_name, "method_identity" => family.method_identity, "receiver_kind" => family.receiver_kind, "root_kind" => family.root_kind } end |
#family_metadata(family) ⇒ Object
22 23 24 25 26 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 22 def (family) (family) .merge((family)) .merge((family)) end |
#override_identity_location(declaration) ⇒ Object
53 54 55 56 57 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 53 def override_identity_location(declaration) { "owner_name" => declaration.owner_name, "path" => declaration.path, "line" => declaration.line, "receiver_kind" => receiver_kind_for(declaration), "method_identity" => method_identity_for(declaration) } end |
#override_location(family, declaration) ⇒ Object
47 48 49 50 51 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 47 def override_location(family, declaration) override_identity_location(declaration) .merge("calls_super" => family.override_body_facts.fetch(declaration.owner_name).calls_super) .compact end |
#override_locations(family) ⇒ Object
43 44 45 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 43 def override_locations(family) family.overrides.map { |declaration| override_location(family, declaration) } end |
#project_analyzer_metadata_for(family) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 7 def (family) (family) .merge("overriding_descendants" => family.overrides.map(&:owner_name), "override_locations" => override_locations(family)) .compact end |
#subclass_override_category(family) ⇒ Object
59 60 61 62 63 64 65 66 |
# File 'lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb', line 59 def subclass_override_category(family) return "broad_root_override" if family.root_kind return "abstract_hook_override" if abstract_hook_body?(family.base_method_body_kind) return "cooperative_override" if family.overrides_calling_super_count.positive? return "replacement_override" unless family.base_method_body_kind == "unknown" "subclass_override" end |