Search documentation of Metastatic

# Metastatic.Analysis.Complexity.Nesting (Metastatic v0.13.2)

View Source

Maximum nesting depth calculation.

Nesting depth measures how many levels deep the code is nested, which affects readability and maintainability. Deeply nested code is harder to understand and reason about.

## 3-Tuple Format

All MetaAST nodes use the uniform 3-tuple structure: `{type_atom, keyword_meta, children_or_value}`

## What Increases Nesting

- `conditional` branches
- `loop` bodies
- `lambda` bodies
- `exception_handling` blocks
- Nested `block` structures (when inside above)

## Thresholds

- 0-2: Good, easy to understand
- 3-4: Moderate, acceptable
- 5+: High, should be refactored

## Examples

    # No nesting: depth = 0
    iex> ast = {:literal, [subtype: :integer], 42}
    iex> Metastatic.Analysis.Complexity.Nesting.calculate(ast)
    0

    # Single conditional: depth = 1
    iex> ast = {:conditional, [], [{:variable, [], "x"}, {:literal, [subtype: :integer], 1}, {:literal, [subtype: :integer], 2}]}
    iex> Metastatic.Analysis.Complexity.Nesting.calculate(ast)
    1

    # Nested conditional: depth = 2
    iex> ast = {:conditional, [], [
    ...>   {:variable, [], "x"},
    ...>   {:conditional, [], [{:variable, [], "y"}, {:literal, [subtype: :integer], 1}, {:literal, [subtype: :integer], 2}]},
    ...>   {:literal, [subtype: :integer], 3}]}
    iex> Metastatic.Analysis.Complexity.Nesting.calculate(ast)
    2

## Summary

### Functions

calculate(ast)

Calculates maximum nesting depth for a MetaAST node.

## Functions

# calculate(ast)

    @spec calculate(Metastatic.AST.meta_ast()) :: non_neg_integer()

Calculates maximum nesting depth for a MetaAST node.

Returns the depth as a non-negative integer (minimum 0).

## Examples

    iex> ast = {:binary_op, [category: :arithmetic, operator: :+], [{:variable, [], "x"}, {:literal, [subtype: :integer], 5}]}
    iex> Metastatic.Analysis.Complexity.Nesting.calculate(ast)
    0

    iex> ast = {:loop, [loop_type: :while], [{:variable, [], "condition"}, {:literal, [subtype: :integer], 1}]}
    iex> Metastatic.Analysis.Complexity.Nesting.calculate(ast)
    1