Module: MetzScan::Analyzers::NamespaceLeakPressure::SharedNamespaceTriage
- Defined in:
- lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb,
lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage/exception_declaration.rb
Defined Under Namespace
Classes: ExceptionDeclaration
Constant Summary
collapse
- CATEGORY =
"shared_namespace"
- CONFIDENCE =
"low"
- TRIAGE_SEVERITY =
"shared namespace"
- TRIAGE_SUMMARY =
"Shared namespace signal; review public constants and extension points only when " \
"they make app code depend on namespace internals."
- WHY =
"Public constants, error families, and framework extension namespaces are often intentional APIs."
- SUGGESTED_NEXT_MOVES =
[
"Leave stable public constants alone when the namespace is the intended API.",
"Introduce a narrower public object only when callers repeat namespace-specific knowledge."
].freeze
Class Method Summary
collapse
Class Method Details
.attributes(status) ⇒ Object
36
37
38
39
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 36
def attributes(status)
{ project_analyzer_status: status, confidence: CONFIDENCE,
triage_severity: TRIAGE_SEVERITY, triage_summary: TRIAGE_SUMMARY }
end
|
.constant_like_tail?(segment) ⇒ Boolean
55
56
57
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 55
def constant_like_tail?(segment)
segment.to_s.match?(/\A[A-Z][A-Z0-9_]*\z/)
end
|
.error_like_tail?(segment) ⇒ Boolean
59
60
61
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 59
def error_like_tail?(segment)
segment.to_s.match?(ERROR_SUFFIX_PATTERN)
end
|
.exception_family_segment?(segment) ⇒ Boolean
63
64
65
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 63
def exception_family_segment?(segment)
segment.to_s.match?(EXCEPTION_FAMILY_SEGMENT_PATTERN)
end
|
.framework_namespace?(name) ⇒ Boolean
47
48
49
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 47
def framework_namespace?(name)
name.to_s.match?(FRAMEWORK_NAMESPACE_PATTERN)
end
|
.shared?(declaration) ⇒ Boolean
30
31
32
33
34
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 30
def shared?(declaration)
shared_name?(declaration.name) ||
ExceptionDeclaration.exception?(declaration) ||
framework_namespace?(declaration.name)
end
|
.shared_name?(name) ⇒ Boolean
41
42
43
44
45
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 41
def shared_name?(name)
segments = name.to_s.split("::")
segments.any? { |segment| shared_segment?(segment) } ||
constant_like_tail?(segments.last) || error_like_tail?(segments.last)
end
|
.shared_segment?(segment) ⇒ Boolean
51
52
53
|
# File 'lib/metz_scan/analyzers/namespace_leak_pressure/shared_namespace_triage.rb', line 51
def shared_segment?(segment)
segment.to_s.match?(SHARED_SEGMENT_PATTERN) || exception_family_segment?(segment)
end
|