MetaCredo.Analysis.Duplication (MetaCredo v0.2.0)

View Source

Programmatic code duplication detection API.

Detects code clones across the same or different programming languages by operating on the unified MetaAST representation. Supports four types:

  • Type I: Exact clones (identical AST)
  • Type II: Renamed clones (identical structure, different identifiers)
  • Type III: Near-miss clones (similar structure with modifications)
  • Type IV: Semantic clones (different syntax, same behavior)

Delegates to Metastatic.Analysis.Duplication for the actual analysis, giving MetaCredo a stable API surface for downstream consumers.

Usage

alias Metastatic.Document
alias MetaCredo.Analysis.Duplication

doc1 = Document.new(ast1, :elixir)
doc2 = Document.new(ast2, :python)

{:ok, result} = Duplication.detect(doc1, doc2)
result.duplicate?        # => true
result.clone_type        # => :type_i
result.similarity_score  # => 1.0

Summary

Functions

Detects duplication between two documents.

Detects duplication between two documents with options.

Detects duplication between two documents, raising on error.

Detects duplicates across multiple documents.

Detects duplicates across multiple documents with options.

Detects duplicates across multiple documents, raising on error.

Generates a structural fingerprint for an AST.

Calculates similarity score between two ASTs (0.0 to 1.0).

Functions

detect(doc1, doc2)

Detects duplication between two documents.

detect(doc1, doc2, opts)

Detects duplication between two documents with options.

detect!(doc1, doc2)

Detects duplication between two documents, raising on error.

detect_in_list(documents)

Detects duplicates across multiple documents.

detect_in_list(documents, opts)

Detects duplicates across multiple documents with options.

detect_in_list!(documents)

Detects duplicates across multiple documents, raising on error.

fingerprint(ast)

Generates a structural fingerprint for an AST.

similarity(ast1, ast2)

Calculates similarity score between two ASTs (0.0 to 1.0).