Packages
metastatic
0.7.7
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/state_management/formatter.ex
defmodule Metastatic.Analysis.StateManagement.Formatter do
@moduledoc """
Formatters for state management analysis results.
"""
alias Metastatic.Analysis.StateManagement.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_pattern(result.pattern)} (#{result.state_count} state vars, #{result.mutation_count} mutations)"
end
defp format_json(result) do
Jason.encode!(%{
container_name: result.container_name,
pattern: result.pattern,
assessment: result.assessment,
state_count: result.state_count,
mutation_count: result.mutation_count,
initialized_state: result.initialized_state,
mutable_state: result.mutable_state,
warnings: result.warnings,
recommendations: result.recommendations
})
end
defp format_detailed(result) do
lines = [
"State Management Analysis: #{result.container_name}",
"",
"Pattern: #{format_pattern(result.pattern)} - #{format_assessment(result.assessment)}",
"",
"Metrics:",
" Total State: #{result.state_count} variables",
" Mutations: #{result.mutation_count}",
" Read-Only: #{length(result.read_only_state)}",
" Mutable: #{length(result.mutable_state)}",
" Initialized: #{length(result.initialized_state)}",
""
]
lines =
if Enum.empty?(result.warnings) do
lines ++ ["No warnings"]
else
lines ++ ["Warnings:"] ++ Enum.map(result.warnings, fn w -> " - #{w}" end)
end
lines =
lines ++
["", "Recommendations:"] ++ Enum.map(result.recommendations, fn r -> " - #{r}" end)
Enum.join(lines, "\n")
end
defp format_pattern(pattern) do
case pattern do
:stateless -> "Stateless"
:immutable_state -> "Immutable State"
:controlled_mutation -> "Controlled Mutation"
:uncontrolled_mutation -> "Uncontrolled Mutation"
:mixed -> "Mixed"
end
end
defp format_assessment(assessment) do
case assessment do
:excellent -> "Excellent"
:good -> "Good"
:fair -> "Fair"
:poor -> "Poor"
end
end
end