metz-scan 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/bin/metz-scan +10 -0
  4. data/lib/metz_scan/analyzers/contextual_node_walker.rb +82 -0
  5. data/lib/metz_scan/analyzers/cross_package_reference_metadata.rb +36 -0
  6. data/lib/metz_scan/analyzers/cross_package_reference_set.rb +33 -0
  7. data/lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_collector.rb +54 -0
  8. data/lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_reference.rb +37 -0
  9. data/lib/metz_scan/analyzers/implicit_context_pressure/current_attribute_collector.rb +73 -0
  10. data/lib/metz_scan/analyzers/implicit_context_pressure/reference_set.rb +37 -0
  11. data/lib/metz_scan/analyzers/implicit_context_pressure/thread_current_collector.rb +76 -0
  12. data/lib/metz_scan/analyzers/implicit_context_pressure/triage.rb +109 -0
  13. data/lib/metz_scan/analyzers/implicit_context_pressure.rb +139 -0
  14. data/lib/metz_scan/analyzers/inheritance_descendants/finding.rb +18 -0
  15. data/lib/metz_scan/analyzers/inheritance_descendants/metadata.rb +23 -0
  16. data/lib/metz_scan/analyzers/inheritance_descendants/root_kind.rb +58 -0
  17. data/lib/metz_scan/analyzers/inheritance_descendants/triage.rb +30 -0
  18. data/lib/metz_scan/analyzers/inheritance_descendants.rb +137 -0
  19. data/lib/metz_scan/analyzers/namespace_leak_pressure/finding.rb +20 -0
  20. data/lib/metz_scan/analyzers/namespace_leak_pressure/metadata.rb +40 -0
  21. data/lib/metz_scan/analyzers/namespace_leak_pressure/namespace.rb +41 -0
  22. data/lib/metz_scan/analyzers/namespace_leak_pressure/reference_collector.rb +50 -0
  23. data/lib/metz_scan/analyzers/namespace_leak_pressure/reference_set.rb +12 -0
  24. data/lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage/exception_declaration.rb +117 -0
  25. data/lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb +69 -0
  26. data/lib/metz_scan/analyzers/namespace_leak_pressure.rb +139 -0
  27. data/lib/metz_scan/analyzers/occurrence.rb +28 -0
  28. data/lib/metz_scan/analyzers/package_dependency_pressure/finding.rb +20 -0
  29. data/lib/metz_scan/analyzers/package_dependency_pressure/metadata.rb +27 -0
  30. data/lib/metz_scan/analyzers/package_dependency_pressure/package_map.rb +11 -0
  31. data/lib/metz_scan/analyzers/package_dependency_pressure/reference_collector.rb +38 -0
  32. data/lib/metz_scan/analyzers/package_dependency_pressure/reference_set.rb +12 -0
  33. data/lib/metz_scan/analyzers/package_dependency_pressure/shared_dependency_triage.rb +124 -0
  34. data/lib/metz_scan/analyzers/package_dependency_pressure.rb +139 -0
  35. data/lib/metz_scan/analyzers/package_map.rb +81 -0
  36. data/lib/metz_scan/analyzers/project_analyzer_triage.rb +20 -0
  37. data/lib/metz_scan/analyzers/repeated_branching/branch_site_collector.rb +138 -0
  38. data/lib/metz_scan/analyzers/repeated_branching/branch_value.rb +27 -0
  39. data/lib/metz_scan/analyzers/repeated_branching/contextual_node_walker.rb +11 -0
  40. data/lib/metz_scan/analyzers/repeated_branching/decision_subject.rb +46 -0
  41. data/lib/metz_scan/analyzers/repeated_branching/predicate_chain.rb +58 -0
  42. data/lib/metz_scan/analyzers/repeated_branching/triage.rb +28 -0
  43. data/lib/metz_scan/analyzers/repeated_branching.rb +135 -0
  44. data/lib/metz_scan/analyzers/repeated_query_criteria/triage.rb +103 -0
  45. data/lib/metz_scan/analyzers/repeated_query_criteria.rb +285 -0
  46. data/lib/metz_scan/analyzers/ruby_file_enumerator.rb +37 -0
  47. data/lib/metz_scan/analyzers/service_soup/service_call_pattern.rb +53 -0
  48. data/lib/metz_scan/analyzers/service_soup/setup_workflow_triage.rb +48 -0
  49. data/lib/metz_scan/analyzers/service_soup/workflow_collector.rb +130 -0
  50. data/lib/metz_scan/analyzers/service_soup.rb +128 -0
  51. data/lib/metz_scan/analyzers/subclass_override_pressure/family_builder.rb +69 -0
  52. data/lib/metz_scan/analyzers/subclass_override_pressure/finding.rb +30 -0
  53. data/lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb +74 -0
  54. data/lib/metz_scan/analyzers/subclass_override_pressure/method_body_facts.rb +100 -0
  55. data/lib/metz_scan/analyzers/subclass_override_pressure/triage.rb +106 -0
  56. data/lib/metz_scan/analyzers/subclass_override_pressure.rb +133 -0
  57. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/artifact_writer.rb +51 -0
  58. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/baseline_delta.rb +231 -0
  59. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/collaborators.rb +76 -0
  60. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/markdown_renderer.rb +353 -0
  61. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/readiness_catalog.rb +123 -0
  62. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/summary.rb +333 -0
  63. data/lib/metz_scan/calibration/project_analyzer_evidence_runner/target_set.rb +139 -0
  64. data/lib/metz_scan/calibration/project_analyzer_evidence_runner.rb +64 -0
  65. data/lib/metz_scan/calibration/rubydex_drift_formatter.rb +91 -0
  66. data/lib/metz_scan/cli.rb +120 -0
  67. data/lib/metz_scan/commands/explain.rb +128 -0
  68. data/lib/metz_scan/commands/project_analyzers.rb +105 -0
  69. data/lib/metz_scan/commands/report.rb +115 -0
  70. data/lib/metz_scan/commands/rules.rb +92 -0
  71. data/lib/metz_scan/commands/scan/auto_fix.rb +138 -0
  72. data/lib/metz_scan/commands/scan/compliance_scorecard.rb +124 -0
  73. data/lib/metz_scan/commands/scan/github_annotations_renderer.rb +55 -0
  74. data/lib/metz_scan/commands/scan/offense_extractor.rb +42 -0
  75. data/lib/metz_scan/commands/scan/project_analyzer_breakdown.rb +55 -0
  76. data/lib/metz_scan/commands/scan/project_analyzer_metadata.rb +78 -0
  77. data/lib/metz_scan/commands/scan/project_analyzer_offenses.rb +85 -0
  78. data/lib/metz_scan/commands/scan/project_analyzer_runner.rb +148 -0
  79. data/lib/metz_scan/commands/scan/project_analyzer_summary_aggregate_formatter.rb +74 -0
  80. data/lib/metz_scan/commands/scan/project_analyzer_summary_breakdown_formatter.rb +46 -0
  81. data/lib/metz_scan/commands/scan/project_analyzer_triage_formatter.rb +40 -0
  82. data/lib/metz_scan/commands/scan/project_analyzer_triage_priority.rb +38 -0
  83. data/lib/metz_scan/commands/scan/project_config_scope.rb +231 -0
  84. data/lib/metz_scan/commands/scan/runner.rb +199 -0
  85. data/lib/metz_scan/commands/scan/sarif_renderer.rb +103 -0
  86. data/lib/metz_scan/commands/scan/sarif_rule_descriptors.rb +82 -0
  87. data/lib/metz_scan/commands/scan/sarif_severity.rb +27 -0
  88. data/lib/metz_scan/commands/scan/target_ruby_version.rb +56 -0
  89. data/lib/metz_scan/commands/scan/text_renderer.rb +145 -0
  90. data/lib/metz_scan/commands/scan.rb +201 -0
  91. data/lib/metz_scan/project_index/null_backend.rb +35 -0
  92. data/lib/metz_scan/project_index/rubydex_backend/file_discovery.rb +33 -0
  93. data/lib/metz_scan/project_index/rubydex_backend/location_formatting.rb +36 -0
  94. data/lib/metz_scan/project_index/rubydex_backend/method_declarations.rb +118 -0
  95. data/lib/metz_scan/project_index/rubydex_backend.rb +133 -0
  96. data/lib/metz_scan/project_index.rb +109 -0
  97. data/lib/metz_scan/version.rb +5 -0
  98. data/lib/metz_scan.rb +5 -0
  99. data/metz-scan.gemspec +41 -0
  100. metadata +160 -0
data/metz-scan.gemspec ADDED
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/metz_scan/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "metz-scan"
7
+ spec.version = MetzScan::VERSION
8
+ spec.authors = ["Salvador Fuentes Jr"]
9
+ spec.email = ["fuentesjr@duck.com"]
10
+
11
+ spec.summary = "Sandi-Metz-inspired CLI wrapper around RuboCop."
12
+ spec.description = "metz-scan is the user-facing CLI for the Sandi-Metz-inspired " \
13
+ "code-quality toolchain. It runs RuboCop with the rubocop-metz " \
14
+ "plugin and renders developer-friendly reports."
15
+ spec.homepage = "https://github.com/fuentesjr/metz-scan"
16
+ spec.license = "MIT"
17
+
18
+ spec.required_ruby_version = ">= 3.3"
19
+
20
+ spec.metadata["source_code_uri"] = spec.homepage
21
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/releases"
22
+ spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues"
23
+ spec.metadata["github_repo"] = "ssh://github.com/fuentesjr/metz-scan"
24
+ spec.metadata["github_package_uri"] = "https://github.com/users/fuentesjr/packages/rubygems/package/metz-scan"
25
+
26
+ spec.files = Dir.glob("lib/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) } +
27
+ Dir.glob("bin/metz-scan").select { |f| File.file?(f) } +
28
+ ["LICENSE", "metz-scan.gemspec"].select { |f| File.exist?(f) }
29
+ # See rubocop-metz.gemspec: fail loudly if built from the wrong directory
30
+ # rather than shipping a gem missing its own lib. Build from the repo root:
31
+ # gem build metz-scan.gemspec
32
+ unless spec.files.include?("lib/metz_scan.rb")
33
+ raise "metz-scan.gemspec: lib/metz_scan.rb missing from packaged files; " \
34
+ "build from the repo root (gem build metz-scan.gemspec)."
35
+ end
36
+ spec.bindir = "bin"
37
+ spec.executables = ["metz-scan"]
38
+ spec.require_paths = ["lib"]
39
+
40
+ spec.add_dependency "rubocop-metz", "~> #{MetzScan::VERSION}"
41
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metz-scan
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.3
5
+ platform: ruby
6
+ authors:
7
+ - Salvador Fuentes Jr
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rubocop-metz
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.5.3
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.5.3
26
+ description: metz-scan is the user-facing CLI for the Sandi-Metz-inspired code-quality
27
+ toolchain. It runs RuboCop with the rubocop-metz plugin and renders developer-friendly
28
+ reports.
29
+ email:
30
+ - fuentesjr@duck.com
31
+ executables:
32
+ - metz-scan
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - LICENSE
37
+ - bin/metz-scan
38
+ - lib/metz_scan.rb
39
+ - lib/metz_scan/analyzers/contextual_node_walker.rb
40
+ - lib/metz_scan/analyzers/cross_package_reference_metadata.rb
41
+ - lib/metz_scan/analyzers/cross_package_reference_set.rb
42
+ - lib/metz_scan/analyzers/implicit_context_pressure.rb
43
+ - lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_collector.rb
44
+ - lib/metz_scan/analyzers/implicit_context_pressure/ambient_context_reference.rb
45
+ - lib/metz_scan/analyzers/implicit_context_pressure/current_attribute_collector.rb
46
+ - lib/metz_scan/analyzers/implicit_context_pressure/reference_set.rb
47
+ - lib/metz_scan/analyzers/implicit_context_pressure/thread_current_collector.rb
48
+ - lib/metz_scan/analyzers/implicit_context_pressure/triage.rb
49
+ - lib/metz_scan/analyzers/inheritance_descendants.rb
50
+ - lib/metz_scan/analyzers/inheritance_descendants/finding.rb
51
+ - lib/metz_scan/analyzers/inheritance_descendants/metadata.rb
52
+ - lib/metz_scan/analyzers/inheritance_descendants/root_kind.rb
53
+ - lib/metz_scan/analyzers/inheritance_descendants/triage.rb
54
+ - lib/metz_scan/analyzers/namespace_leak_pressure.rb
55
+ - lib/metz_scan/analyzers/namespace_leak_pressure/finding.rb
56
+ - lib/metz_scan/analyzers/namespace_leak_pressure/metadata.rb
57
+ - lib/metz_scan/analyzers/namespace_leak_pressure/namespace.rb
58
+ - lib/metz_scan/analyzers/namespace_leak_pressure/reference_collector.rb
59
+ - lib/metz_scan/analyzers/namespace_leak_pressure/reference_set.rb
60
+ - lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb
61
+ - lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage/exception_declaration.rb
62
+ - lib/metz_scan/analyzers/occurrence.rb
63
+ - lib/metz_scan/analyzers/package_dependency_pressure.rb
64
+ - lib/metz_scan/analyzers/package_dependency_pressure/finding.rb
65
+ - lib/metz_scan/analyzers/package_dependency_pressure/metadata.rb
66
+ - lib/metz_scan/analyzers/package_dependency_pressure/package_map.rb
67
+ - lib/metz_scan/analyzers/package_dependency_pressure/reference_collector.rb
68
+ - lib/metz_scan/analyzers/package_dependency_pressure/reference_set.rb
69
+ - lib/metz_scan/analyzers/package_dependency_pressure/shared_dependency_triage.rb
70
+ - lib/metz_scan/analyzers/package_map.rb
71
+ - lib/metz_scan/analyzers/project_analyzer_triage.rb
72
+ - lib/metz_scan/analyzers/repeated_branching.rb
73
+ - lib/metz_scan/analyzers/repeated_branching/branch_site_collector.rb
74
+ - lib/metz_scan/analyzers/repeated_branching/branch_value.rb
75
+ - lib/metz_scan/analyzers/repeated_branching/contextual_node_walker.rb
76
+ - lib/metz_scan/analyzers/repeated_branching/decision_subject.rb
77
+ - lib/metz_scan/analyzers/repeated_branching/predicate_chain.rb
78
+ - lib/metz_scan/analyzers/repeated_branching/triage.rb
79
+ - lib/metz_scan/analyzers/repeated_query_criteria.rb
80
+ - lib/metz_scan/analyzers/repeated_query_criteria/triage.rb
81
+ - lib/metz_scan/analyzers/ruby_file_enumerator.rb
82
+ - lib/metz_scan/analyzers/service_soup.rb
83
+ - lib/metz_scan/analyzers/service_soup/service_call_pattern.rb
84
+ - lib/metz_scan/analyzers/service_soup/setup_workflow_triage.rb
85
+ - lib/metz_scan/analyzers/service_soup/workflow_collector.rb
86
+ - lib/metz_scan/analyzers/subclass_override_pressure.rb
87
+ - lib/metz_scan/analyzers/subclass_override_pressure/family_builder.rb
88
+ - lib/metz_scan/analyzers/subclass_override_pressure/finding.rb
89
+ - lib/metz_scan/analyzers/subclass_override_pressure/metadata.rb
90
+ - lib/metz_scan/analyzers/subclass_override_pressure/method_body_facts.rb
91
+ - lib/metz_scan/analyzers/subclass_override_pressure/triage.rb
92
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner.rb
93
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/artifact_writer.rb
94
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/baseline_delta.rb
95
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/collaborators.rb
96
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/markdown_renderer.rb
97
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/readiness_catalog.rb
98
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/summary.rb
99
+ - lib/metz_scan/calibration/project_analyzer_evidence_runner/target_set.rb
100
+ - lib/metz_scan/calibration/rubydex_drift_formatter.rb
101
+ - lib/metz_scan/cli.rb
102
+ - lib/metz_scan/commands/explain.rb
103
+ - lib/metz_scan/commands/project_analyzers.rb
104
+ - lib/metz_scan/commands/report.rb
105
+ - lib/metz_scan/commands/rules.rb
106
+ - lib/metz_scan/commands/scan.rb
107
+ - lib/metz_scan/commands/scan/auto_fix.rb
108
+ - lib/metz_scan/commands/scan/compliance_scorecard.rb
109
+ - lib/metz_scan/commands/scan/github_annotations_renderer.rb
110
+ - lib/metz_scan/commands/scan/offense_extractor.rb
111
+ - lib/metz_scan/commands/scan/project_analyzer_breakdown.rb
112
+ - lib/metz_scan/commands/scan/project_analyzer_metadata.rb
113
+ - lib/metz_scan/commands/scan/project_analyzer_offenses.rb
114
+ - lib/metz_scan/commands/scan/project_analyzer_runner.rb
115
+ - lib/metz_scan/commands/scan/project_analyzer_summary_aggregate_formatter.rb
116
+ - lib/metz_scan/commands/scan/project_analyzer_summary_breakdown_formatter.rb
117
+ - lib/metz_scan/commands/scan/project_analyzer_triage_formatter.rb
118
+ - lib/metz_scan/commands/scan/project_analyzer_triage_priority.rb
119
+ - lib/metz_scan/commands/scan/project_config_scope.rb
120
+ - lib/metz_scan/commands/scan/runner.rb
121
+ - lib/metz_scan/commands/scan/sarif_renderer.rb
122
+ - lib/metz_scan/commands/scan/sarif_rule_descriptors.rb
123
+ - lib/metz_scan/commands/scan/sarif_severity.rb
124
+ - lib/metz_scan/commands/scan/target_ruby_version.rb
125
+ - lib/metz_scan/commands/scan/text_renderer.rb
126
+ - lib/metz_scan/project_index.rb
127
+ - lib/metz_scan/project_index/null_backend.rb
128
+ - lib/metz_scan/project_index/rubydex_backend.rb
129
+ - lib/metz_scan/project_index/rubydex_backend/file_discovery.rb
130
+ - lib/metz_scan/project_index/rubydex_backend/location_formatting.rb
131
+ - lib/metz_scan/project_index/rubydex_backend/method_declarations.rb
132
+ - lib/metz_scan/version.rb
133
+ - metz-scan.gemspec
134
+ homepage: https://github.com/fuentesjr/metz-scan
135
+ licenses:
136
+ - MIT
137
+ metadata:
138
+ source_code_uri: https://github.com/fuentesjr/metz-scan
139
+ changelog_uri: https://github.com/fuentesjr/metz-scan/releases
140
+ bug_tracker_uri: https://github.com/fuentesjr/metz-scan/issues
141
+ github_repo: ssh://github.com/fuentesjr/metz-scan
142
+ github_package_uri: https://github.com/users/fuentesjr/packages/rubygems/package/metz-scan
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '3.3'
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ requirements: []
157
+ rubygems_version: 4.0.8
158
+ specification_version: 4
159
+ summary: Sandi-Metz-inspired CLI wrapper around RuboCop.
160
+ test_files: []