Packages
metastatic
0.9.2
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.3
0.20.2
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Cross-language code meta-model library using unified MetaAST representation. Parse, transform, and translate code across Python, Elixir, Ruby, Erlang, Haskell, and more via a shared three-tuple AST format.
Current section
Files
Jump to
Current section
Files
lib/metastatic/analysis/encapsulation/formatter.ex
defmodule Metastatic.Analysis.Encapsulation.Formatter do
@moduledoc """
Formatters for encapsulation analysis results.
Supports `:text`, `:json`, and `:detailed` output formats.
"""
alias Metastatic.Analysis.Encapsulation.Result
@spec format(Result.t(), :text | :json | :detailed) :: String.t()
def format(result, :text), do: format_text(result)
def format(result, :json), do: format_json(result)
def format(result, :detailed), do: format_detailed(result)
defp format_text(result) do
"#{result.container_name}: #{format_assessment(result.assessment)} encapsulation (Score: #{result.score}/100, #{length(result.violations)} violations)"
end
defp format_json(result) do
Jason.encode!(%{
container_name: result.container_name,
container_type: result.container_type,
score: result.score,
assessment: result.assessment,
violations: result.violations,
public_methods: result.public_methods,
private_methods: result.private_methods,
accessor_count: result.accessor_count,
state_variables: result.state_variables,
recommendations: result.recommendations
})
end
defp format_detailed(result) do
lines = [
"Encapsulation Analysis: #{result.container_name} (#{result.container_type})",
"",
"Score: #{result.score}/100 - #{format_assessment(result.assessment)}",
"",
"Metrics:",
" Public Methods: #{result.public_methods}",
" Private Methods: #{result.private_methods}",
" Accessors: #{result.accessor_count}",
" State Variables: #{length(result.state_variables)}",
""
]
lines =
if Enum.empty?(result.violations) do
lines ++ ["No violations detected"]
else
lines ++
["Violations (#{length(result.violations)}):"] ++
Enum.map(result.violations, fn v ->
" [#{String.upcase(to_string(v.severity))}] #{v.message}" <>
if v.suggestion, do: "\n → #{v.suggestion}", else: ""
end)
end
lines =
lines ++
[
"",
"Recommendations:"
] ++ Enum.map(result.recommendations, fn r -> " - #{r}" end)
Enum.join(lines, "\n")
end
defp format_assessment(assessment) do
case assessment do
:excellent -> "Excellent"
:good -> "Good"
:fair -> "Fair"
:poor -> "Poor"
:very_poor -> "Very Poor"
end
end
end