MetaCredo. Analysis. Duplication
(MetaCredo v0.3.2)
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)
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, raising on error.
Detects duplicates across multiple documents.
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).
Types
Functions
@spec detect(Metastatic.Document.t(), Metastatic.Document.t(), detect_opts()) :: {:ok, MetaCredo.Analysis.Duplication.Result.t()}
Detects duplication between two documents.
@spec detect!(Metastatic.Document.t(), Metastatic.Document.t(), detect_opts()) :: MetaCredo.Analysis.Duplication.Result.t()
Detects duplication between two documents, raising on error.
@spec detect_in_list([Metastatic.Document.t()], detect_opts()) :: {:ok, [map()]}
Detects duplicates across multiple documents.
@spec detect_in_list!([Metastatic.Document.t()], detect_opts()) :: [map()]
Detects duplicates across multiple documents, raising on error.
@spec fingerprint(Metastatic.AST.meta_ast()) :: String.t()
Generates a structural fingerprint for an AST.
@spec similarity(Metastatic.AST.meta_ast(), Metastatic.AST.meta_ast()) :: float()
Calculates similarity score between two ASTs (0.0 to 1.0).