AST similarity caliculator by APTED / Tree Edit Distance
Dependencies
git clone https://github.com/mizchi/similarity.mbt
cd similarity.mbt
make install # Installs to ~/.local/bin/similarity-mbt{
"deps": {
"mizchi/similarity": "0.1.0"
}
}# Scan all .mbt files in current directory
similarity-mbt
# Scan specific files
similarity-mbt src/*.mbt
# Adjust threshold (default: 0.88)
similarity-mbt -t 0.95 *.mbt
# Exclude test files
similarity-mbt --no-tests
# Show help
similarity-mbt -hlet source =
#|fn add(a : Int, b : Int) -> Int { a + b }
#|fn sum(x : Int, y : Int) -> Int { x + y }
let options = @similarity.DetectorOptions::default()
let results = @similarity.detect_similarities(source, options)
for result in results {
println(result) // add <-> sum (similarity: 95%, score: 2.8)
}///|
let options : @similarity.DetectorOptions = {
threshold: 0.80, // Minimum similarity (0.0-1.0)
min_lines: 3, // Minimum lines per function
size_penalty: true, // Penalize size differences
}let files = [
("file1.mbt", source1),
("file2.mbt", source2),
]
let results = @similarity.detect_cross_file_similarities(files, options)
for result in results {
let (file1, file2, sim) = result
println("\{file1}:\{sim.func1.name} <-> \{file2}:\{sim.func2.name}")
}///|
let functions = @similarity.extract_functions(source)
///|
let tsed_options = @similarity.TSEDOptions::default()
///|
let similarity = @similarity.calculate_tsed(
functions[0].tree,
functions[1].tree,
tsed_options,
)pub(all) struct APTEDOptions {
rename_cost : Double
delete_cost : Double
insert_cost : Double
compare_values : Bool
}pub(all) struct DetectorOptions {
threshold : Double
min_lines : Int
size_penalty : Bool
}pub(all) struct SimilarityResult {
func1 : FunctionInfo
func2 : FunctionInfo
similarity : Double
score : Double
}impl Show for SimilarityResultpub(all) struct TSEDOptions {
apted_options : APTEDOptions
min_lines : Int
min_tokens : Int?
size_penalty : Bool
}fn detect_cross_file_similarities(sources : Array[(String, String)], options : DetectorOptions) -> Array[(String, String, SimilarityResult)]AST similarity caliculator by APTED / Tree Edit Distance
Dependencies