Packages
metastatic
0.7.3
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
metastatic
CHANGELOG.md
CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- M1 Metadata Preservation - Full context threading for Ragex integration:
- Expanded location type with optional M1 context fields: `:language`, `:module`, `:function`, `:arity`, `:container`, `:visibility`, `:file`, `:m1_meta`
- Added AST helper functions: `with_context/2`, `extract_metadata/2`, `node_module/1`, `node_function/1`, `node_arity/1`, `node_file/1`, `node_container/1`, `node_visibility/1`
- Elixir adapter now attaches module and function context to structural nodes (container, function_def)
- Runner properly handles location-aware nodes (both with and without metadata) in `update_contexts/2` and `extract_children/2`
- Analyzer.issue/1 helper automatically extracts location metadata from nodes
- Updated TelemetryInRecursiveFunction analyzer to handle both 6-tuple and 7-tuple function_def patterns
- All 1,431 tests passing (202 doctests + 1,229 tests including 14 new metadata tests)
- Enables Ragex to access function names, arities, modules, and locations from business logic analyzers
- Business Logic Analyzers - 20 language-agnostic analyzers ported from oeditus_credo:
- **Tier 1 (Pure MetaAST, 9 analyzers)**: CallbackHell, MissingErrorHandling, SilentErrorCase, SwallowingException, HardcodedValue, NPlusOneQuery, InefficientFilter, UnmanagedTask, TelemetryInRecursiveFunction
- **Tier 2 (Function Name Heuristics, 4 analyzers)**: MissingTelemetryForExternalHttp, SyncOverAsync, DirectStructUpdate, MissingHandleAsync
- **Tier 3 (Naming Conventions, 4 analyzers)**: BlockingInPlug, MissingTelemetryInAuthPlug, MissingTelemetryInLiveviewMount, MissingTelemetryInObanWorker
- **Tier 4 (Content Analysis, 3 analyzers)**: MissingPreload, InlineJavascript, MissingThrottle
- Each analyzer includes comprehensive cross-language examples (Python, JavaScript, Elixir, C#, Go, Java, Ruby, Rust)
- Total: ~4,800 lines across 20 analyzer modules
- All 1,282 tests passing (142 doctests + 1,140 tests)
- Demonstrates that business logic analysis is fundamentally language-agnostic
- M2.1 Core Layer enhancements:
- `list` type for list/array literals (moved from literal collection to first-class core type)
- `map` type for map/dictionary/object literals (moved from literal collection to first-class core type)
- Updated all language adapters (Python, Elixir) to use new list/map types
- Updated all analysis modules to traverse list elements and map key-value pairs
- Updated validator to classify list/map as core layer
- Updated CLI tools (inspector, formatter) to handle list/map display
- Added 12 new tests for list/map functionality (1,356 total tests passing: 131 doctests + 1,225 tests)
- M2.2s Structural/Organizational Layer - New meta-model layer for cross-language structural constructs
- `container` type for modules/classes/namespaces with visibility-aware member tracking
- `function_def` type for function/method definitions with guards, visibility, and pattern parameters
- `attribute_access` type for field/property access on objects
- `augmented_assignment` type for compound assignment operators (+=, -=, etc.)
- `property` type for property declarations with getters/setters
- Full support for M2.2s types across all analysis modules:
- Duplication fingerprinting (Type I/II clone detection)
- Cyclomatic complexity analysis
- Cognitive complexity analysis
- Nesting depth tracking
- Halstead metrics (operators/operands)
- Function metrics (statements, returns)
- Lines of code (LoC) counting
- Comprehensive test coverage: 143 new tests for structural types (1,149 total tests passing)
- Helper functions: `container_name/1`, `function_name/1`, `function_visibility/1`, `has_state?/1`
### Documentation
- Added `STRUCTURAL_LAYER_RESEARCH.md` - Theory and cross-language analysis of structural constructs
- Added `STRUCTURAL_LAYER_DESIGN.md` - Implementation design decisions and rationale
- Updated `README.md` with M2.2s layer description
- Enhanced `@typedoc` for all structural types with M1 instances and examples
## [0.1.0] - 2026-01-21
MVP
## Notes
This project follows a rigorous theoretical foundation based on:
- OMG Meta Object Facility (MOF) Specification
- Eclipse Modeling Framework (EMF)
- Formal meta-modeling theory
See `THEORETICAL_FOUNDATIONS.md` for the complete formal treatment with proofs.