Current section
Files
Jump to
Current section
Files
examples/reach.exs
# Example Reach architecture policy.
# Copy to .reach.exs and adjust layer names/patterns for your project.
[
layers: [
cli: "Mix.Tasks.*",
cli_support: "Reach.CLI.*",
core: "Reach",
frontend: "Reach.Frontend.*",
ir: "Reach.IR.*",
analysis: [
"Reach.ControlFlow",
"Reach.DataDependence",
"Reach.ControlDependence",
"Reach.Dominator",
"Reach.SystemDependence",
"Reach.Effects",
"Reach.HigherOrder"
],
otp: "Reach.OTP.*",
visualization: "Reach.Visualize.*",
plugins: ["Reach.Plugin", "Reach.Plugins.*"]
],
deps: [
forbidden: [
{:ir, :cli},
{:ir, :cli_support},
{:frontend, :cli},
{:frontend, :cli_support},
{:analysis, :cli},
{:analysis, :cli_support},
{:otp, :cli},
{:otp, :cli_support},
{:visualization, :cli},
{:visualization, :cli_support},
{:plugins, :cli},
{:plugins, :cli_support}
]
],
source: [
forbidden_modules: [],
forbidden_files: []
],
calls: [
forbidden: []
],
effects: [
allowed: [
{"Reach.IR.*", [:pure, :unknown]},
{"Reach.ControlFlow", [:pure, :unknown]},
{"Reach.Dominator", [:pure, :unknown]},
{"Reach.DataDependence", [:pure, :unknown]},
{"Reach.ControlDependence", [:pure, :unknown]},
{"Reach.SystemDependence", [:pure, :unknown]},
{"Reach.Effects", [:pure, :unknown]},
{"Reach.CLI.Format", [:pure, :unknown]}
]
],
boundaries: [
public: [],
internal: [],
internal_callers: []
],
risk: [
changed: [
many_direct_callers: 5,
wide_transitive_callers: 10,
branch_heavy: 8,
high_risk_reason_count: 3
]
],
candidates: [
thresholds: [
mixed_effect_count: 2,
branchy_function_branches: 8,
high_risk_direct_callers: 4
],
limits: [
per_kind: 20,
representative_calls: 10,
representative_calls_per_edge: 3
]
],
clone_analysis: [
provider: :ex_dna,
min_mass: 30,
min_similarity: 1.0,
max_clones: 50
],
smells: [
fixed_shape_map: [
min_keys: 3,
min_occurrences: 3,
evidence_limit: 10
],
behaviour_candidate: [
min_modules: 3,
min_callbacks: 3,
module_display_limit: 8,
callback_display_limit: 8
]
],
tests: [
hints: [
{"lib/reach/visualize/**",
["test/reach/visualize/block_quality_test.exs", "test/reach/visualize/visualize_test.exs"]},
{"lib/reach/frontend/**",
["test/reach/ir/frontend_elixir_test.exs", "test/reach/frontend"]},
{"lib/mix/tasks/**", ["test/reach/cli"]},
{"lib/reach/otp/**", ["test/reach/otp/otp_test.exs"]}
]
]
]