Files

787 lines
57 KiB
Markdown
Raw Permalink Normal View History

# jscpd v5 (Rust Engine)
jscpd v5 is a Rust engine shipped as a self-contained binary: no runtime required, same CLI flags, reporters and `.jscpd.json` config as the earlier Node.js versions.
It is distributed under three names:
| Package | Installs commands | Notes |
|---------|-------------------|-------|
| [`jscpd`](https://www.npmjs.com/package/jscpd) | `jscpd` | Default install; installs the `jscpd` command |
| [`cpd`](https://www.npmjs.com/package/cpd) | `cpd` | Lighter package, shorter command only |
docs(readme): fix jscpd@5 bin claim and refresh npm README The jscpd@5 npm package only installs the Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 42.279ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd command (bin field declares only jscpd). The Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 22.771ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd command comes from the separate Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 23.314ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd npm package or from . Corrected this false claim across all docs and rewrote rust/jscpd/README.md (the README npm publishes as jscpd@5): added badges, supported-formats summary, CI snippet, links section, and v4 differences table.
2026-06-22 18:35:46 +02:00
| [`jscpd` (crates.io)](https://crates.io/crates/jscpd) | `jscpd` **and** `cpd` | Rust-native install; both binaries |
docs(readme): fix jscpd@5 bin claim and refresh npm README The jscpd@5 npm package only installs the Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 42.279ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd command (bin field declares only jscpd). The Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 22.771ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd command comes from the separate Clone found (actionscript) - actionscript/file1.as [1:1 - 30:10] (30 lines, 127 tokens) actionscript/file2.as [1:1 - 30:10] Clone found (ada) - ada/file1.ada [1:1 - 21:12] (21 lines, 103 tokens) ada/file2.ada [1:1 - 21:12] Clone found (antlr4) - antlr4/file1.g4 [1:1 - 21:27] (21 lines, 82 tokens) antlr4/file2.g4 [1:1 - 21:27] Clone found (apex) - apex/file1.cls [1:29 - 24:18] (24 lines, 115 tokens) apex/file2.cls [1:29 - 24:18] Clone found (apl) - apl/file1.apl [1:1 - 20:54] (20 lines, 252 tokens) apl/file2.apl [1:1 - 20:54] Clone found (css) - astro/component1.astro:css [76:3 - 161:4] (86 lines, 364 tokens) astro/component2.astro:css [76:3 - 161:4] Clone found (css) - astro/component1.astro:css [79:23 - 124:12] (46 lines, 194 tokens) svelte/component1.svelte:css [116:28 - 161:12] Clone found (html) - astro/component1.astro:html [1:1 - 162:9] (162 lines, 246 tokens) astro/component2.astro:html [1:1 - 162:9] Clone found (html) - astro/component1.astro:html [27:1 - 33:8] (7 lines, 67 tokens) svelte/component1.svelte:html [64:1 - 70:8] Clone found (javascript) - astro/component1.astro:javascript [58:3 - 72:4] (15 lines, 111 tokens) astro/component2.astro:javascript [58:3 - 72:4] Clone found (typescript) - astro/component1.astro:typescript [2:1 - 24:4] (23 lines, 153 tokens) astro/component2.astro:typescript [2:1 - 24:4] Clone found (awk) - awk/file1.awk [1:1 - 23:33] (23 lines, 75 tokens) awk/file2.awk [1:1 - 23:33] Clone found (basic) - basic/file1.bas [1:1 - 18:4] (18 lines, 100 tokens) basic/file2.bas [1:1 - 18:4] Clone found (bicep) - bicep/file1.bicep [1:1 - 27:9] (27 lines, 78 tokens) bicep/file2.bicep [1:1 - 27:9] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 26:77] (26 lines, 268 tokens) brainfuck/file1.bf [1:1 - 26:77] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.b [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [1:1 - 41:59] (41 lines, 439 tokens) brainfuck/file2.bf [1:1 - 41:59] Clone found (brainfuck) - brainfuck/file1.b [33:1 - 41:59] (9 lines, 143 tokens) brainfuck/file1.bf [28:1 - 36:59] Clone found (cfml) - cfml/file1.cfm [4:20 - 21:2] (18 lines, 85 tokens) cfml/file2.cfm [4:18 - 21:2] Clone found (cfscript) - cfscript/file1.cfc [1:1 - 28:11] (28 lines, 161 tokens) cfscript/file2.cfc [1:1 - 28:11] Clone found (c) - clike/file1.c [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.c [1:1 - 17:4] Clone found (c) - clike/file1.c [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.c [18:3 - 29:2] Clone found (cpp) - clike/file1.cpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.cpp [1:1 - 88:7] Clone found (cpp) - clike/file1.cpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.cpp [45:5 - 64:51] Clone found (csharp) - clike/file1.cs [1:1 - 91:19] (91 lines, 235 tokens) clike/file2.cs [1:1 - 91:19] Clone found (csharp) - clike/file1.cs [103:9 - 185:2] (83 lines, 302 tokens) clike/file2.cs [93:9 - 175:2] Clone found (c-header) - clike/file1.h [1:1 - 17:4] (17 lines, 258 tokens) clike/file2.h [1:1 - 17:4] Clone found (c-header) - clike/file1.h [8:3 - 19:2] (12 lines, 81 tokens) clike/file2.h [18:3 - 29:2] Clone found (cpp-header) - clike/file1.hpp [1:1 - 88:7] (88 lines, 757 tokens) clike/file2.hpp [1:1 - 88:7] Clone found (cpp-header) - clike/file1.hpp [24:5 - 43:51] (20 lines, 208 tokens) clike/file1.hpp [45:5 - 64:51] Clone found (java) - clike/file1.java [1:1 - 186:6] (186 lines, 6601 tokens) clike/file2.java [1:1 - 186:6] Clone found (java) - clike/file1.java [182:51 - 221:2] (40 lines, 786 tokens) clike/file2.java [194:52 - 233:2] Clone found (kotlin) - clike/file1.kt [1:1 - 33:6] (33 lines, 186 tokens) clike/file2.kt [1:1 - 33:6] Clone found (kotlin) - clike/file1.kt [38:5 - 53:2] (16 lines, 64 tokens) clike/file2.kt [38:5 - 53:2] Clone found (scala) - clike/file1.scala [1:1 - 29:2] (29 lines, 848 tokens) clike/file2.scala [1:1 - 29:2] Clone found (clojure) - clojure/file1.clj [2:3 - 20:23] (19 lines, 139 tokens) clojure/file2.clj [2:3 - 20:23] Clone found (cmake) - cmake/file1.cmake [1:1 - 21:14] (21 lines, 128 tokens) cmake/file2.cmake [1:1 - 21:14] Clone found (coffeescript) - coffeescript/file1.coffee [1:1 - 13:22] (13 lines, 75 tokens) coffeescript/file2.coffee [3:1 - 15:22] Clone found (coffeescript) - coffeescript/file1.coffee [16:1 - 44:21] (29 lines, 144 tokens) coffeescript/file1.coffee [46:1 - 74:21] Clone found (lisp) - commonlisp/file1.el [1:1 - 50:23] (50 lines, 289 tokens) commonlisp/file2.el [1:1 - 50:23] Clone found (crystal) - crystal/file1.cr [1:1 - 29:4] (29 lines, 97 tokens) crystal/file2.cr [1:1 - 29:4] Clone found (css) - css/file1.css [1:1 - 25:2] (25 lines, 237 tokens) css/file10.css [1:1 - 25:2] Clone found (css) - css/file1.css [1:1 - 19:36] (19 lines, 192 tokens) css/file2.css [1:1 - 19:36] Clone found (less) - css/file1.less [1:1 - 19:36] (19 lines, 192 tokens) css/file2.less [1:1 - 19:36] Clone found (less) - css/file1.less [14:35 - 25:2] (12 lines, 90 tokens) css/file1.less [24:5 - 36:2] Clone found (scss) - css/file1.scss [1:1 - 53:2] (53 lines, 324 tokens) css/file2.scss [1:1 - 53:2] Clone found (csv) - csv/file1.csv [1:1 - 9:56] (9 lines, 163 tokens) csv/file2.csv [1:1 - 9:56] Clone found (d) - d/file1.d [1:1 - 169:6] (169 lines, 1135 tokens) d/file2.d [1:1 - 169:6] Clone found (dart) - dart/file1.dart [1:1 - 89:4] (89 lines, 403 tokens) dart/file2.dart [1:1 - 89:4] Clone found (dart) - dart/file1.dart [118:15 - 148:2] (31 lines, 119 tokens) dart/file2.dart [88:6 - 118:2] Clone found (diff) - diff/file1.diff [1:1 - 62:7] (62 lines, 435 tokens) diff/file2.diff [1:1 - 62:7] Clone found (dot) - dot/file1.dot [1:1 - 18:21] (18 lines, 91 tokens) dot/file2.dot [1:1 - 18:21] Clone found (eiffel) - eiffel/file1.e [1:1 - 46:11] (46 lines, 130 tokens) eiffel/file2.e [1:1 - 46:11] Clone found (elm) - elm/file1.elm [1:1 - 47:23] (47 lines, 155 tokens) elm/file2.elm [1:1 - 47:23] Clone found (erlang) - erlang/file1.erl [1:1 - 121:7] (121 lines, 837 tokens) erlang/file2.erl [1:1 - 121:7] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.cjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.js [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_1.mjs [4:1 - 55:3] Clone found (javascript) - folder1/file_1.js [4:1 - 55:3] (52 lines, 339 tokens) javascript/file_3.js [1:1 - 52:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [1:1 - 28:3] Clone found (javascript) - folder1/file_1.js [28:1 - 55:3] (28 lines, 169 tokens) folder2/file_2.js [29:1 - 56:3] Clone found (fortran) - fortran/file1.f [1:7 - 37:21] (37 lines, 182 tokens) fortran/file2.f [1:7 - 37:21] Clone found (gdscript) - gdscript/file1.gd [22:1 - 46:18] (25 lines, 135 tokens) gdscript/file2.gd [22:1 - 46:18] Clone found (gettext) - gettext/file1.po [13:1 - 64:7] (52 lines, 82 tokens) gettext/file2.po [13:1 - 64:7] Clone found (gherkin) - gherkin/file1.feature [1:1 - 16:26] (16 lines, 83 tokens) gherkin/file2.feature [1:1 - 16:26] Clone found (ignore) - gitignore/file1.gitignore [1:1 - 84:16] (84 lines, 234 tokens) gitignore/file2.gitignore [1:1 - 84:16] Clone found (go) - go/file1.go [1:1 - 30:5] (30 lines, 134 tokens) go/file2.go [1:1 - 31:5] Clone found (graphql) - graphql/file1.graphql [1:1 - 25:5] (25 lines, 143 tokens) graphql/file2.graphql [1:1 - 25:5] Clone found (groovy) - groovy/file1.groovy [1:1 - 41:6] (41 lines, 188 tokens) groovy/file2.groovy [1:1 - 41:6] Clone found (haml) - haml/file1.haml [1:1 - 23:18] (23 lines, 118 tokens) haml/file2.haml [1:1 - 23:18] Clone found (handlebars) - handlebars/file1.hbs [1:1 - 28:27] (28 lines, 218 tokens) handlebars/file2.hbs [1:1 - 28:27] Clone found (haskell) - haskell-literate/file1.lhs [1:1 - 31:2] (31 lines, 182 tokens) haskell-literate/file2.lhs [1:1 - 31:2] Clone found (haskell) - haskell/file1.hs [1:1 - 173:34] (173 lines, 902 tokens) haskell/file2.hs [1:1 - 173:34] Clone found (haskell) - haskell/file1.hs [190:1 - 204:33] (15 lines, 99 tokens) haskell/file2.hs [175:1 - 189:33] Clone found (haxe) - haxe/file1.hx [1:1 - 62:76] (62 lines, 334 tokens) haxe/file2.hx [1:1 - 62:2] Clone found (haxe) - haxe/file1.hx [6:3 - 47:9] (42 lines, 244 tokens) haxe/file1.hx [47:3 - 88:9] Clone found (haxe) - haxe/file1.hxml [3:1 - 14:10] (12 lines, 56 tokens) haxe/file2.hxml [1:1 - 12:10] Clone found (hcl) - hcl/file1.tf [1:1 - 37:9] (37 lines, 85 tokens) hcl/file2.tf [1:1 - 37:9] Clone found (aspnet) - htmlembedded/file1.aspx [7:18 - 16:35] (10 lines, 67 tokens) htmlembedded/file2.aspx [7:21 - 16:35] Clone found (aspnet) - htmlembedded/file1.aspx [18:53 - 36:30] (19 lines, 173 tokens) htmlembedded/file2.aspx [18:60 - 36:30] Clone found (aspnet) - htmlembedded/file1.aspx [37:95 - 47:8] (11 lines, 56 tokens) htmlembedded/file2.aspx [44:98 - 54:8] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) htmlmixed/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.htm [1:1 - 24:7] (24 lines, 191 tokens) ignore/file2.htm [1:1 - 24:7] Clone found (markup) - htmlmixed/file1.html [1:1 - 16:2] (16 lines, 91 tokens) htmlmixed/file2.html [1:1 - 16:2] Clone found (prolog) - idl/file1.pro [1:1 - 28:22] (28 lines, 176 tokens) idl/file2.pro [1:1 - 28:22] Clone found (idris) - idris/file1.idr [1:1 - 35:3] (35 lines, 208 tokens) idris/file2.idr [1:1 - 35:3] Clone found (txt) - ignore-case/file2.txt [1:1 - 12:55] (12 lines, 85 tokens) text/file1.txt [1:1 - 12:55] Clone found (txt) - ignore-case/file2.txt [1:1 - 61:63] (61 lines, 350 tokens) text/file2.txt [1:1 - 61:63] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.mts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 263:4] (263 lines, 1318 tokens) javascript/file1.ts [1:1 - 263:4] Clone found (typescript) - javascript/file1.cts [1:1 - 66:24] (66 lines, 531 tokens) javascript/file2.cts [48:1 - 113:24] Clone found (typescript) - javascript/file1.cts [74:1 - 263:4] (190 lines, 787 tokens) javascript/file2.cts [187:1 - 376:4] Clone found (javascript) - javascript/file1.js [5:1 - 24:2] (20 lines, 94 tokens) javascript/file2.js [5:1 - 27:2] Clone found (json) - javascript/file1.json [4:53 - 21:22] (18 lines, 64 tokens) javascript/file2.json [4:70 - 21:22] Clone found (json) - javascript/file1.json [22:22 - 43:2] (22 lines, 70 tokens) javascript/file2.json [22:22 - 43:2] Clone found (typescript) - javascript/file2.cts [109:38 - 209:24] (101 lines, 297 tokens) javascript/file2.mts [109:38 - 209:24] Clone found (javascript) - javascript/file_4.js [15:2 - 42:43] (28 lines, 98 tokens) javascript/file_4.js [56:74 - 83:43] Clone found (json5) - json5/file1.json5 [1:1 - 31:5] (31 lines, 93 tokens) json5/file2.json5 [1:1 - 31:5] Clone found (jsx) - jsx/file1.jsx [1:1 - 21:46] (21 lines, 99 tokens) jsx/file2.jsx [1:1 - 21:46] Clone found (tsx) - jsx/file1.tsx [1:1 - 35:2] (35 lines, 143 tokens) jsx/file2.tsx [1:1 - 35:2] Clone found (julia) - julia/file1.jl [1:1 - 30:4] (30 lines, 194 tokens) julia/file2.jl [1:1 - 30:4] Clone found (latex) - latex/file1.tex [1:1 - 26:13] (26 lines, 149 tokens) latex/file2.tex [1:1 - 26:13] Clone found (lilypond) - lilypond/file1.ly [1:1 - 19:10] (19 lines, 63 tokens) lilypond/file2.ly [1:1 - 19:10] Clone found (linker-script) - linker-script/file1.ld [1:1 - 47:4] (47 lines, 256 tokens) linker-script/file2.ld [1:1 - 47:4] Clone found (livescript) - livescript/file1.ls [1:1 - 31:24] (31 lines, 145 tokens) livescript/file2.ls [1:1 - 31:24] Clone found (llvm) - llvm/file1.ll [1:1 - 35:2] (35 lines, 215 tokens) llvm/file2.ll [1:1 - 35:2] Clone found (log) - log/file1.log [1:1 - 13:11] (13 lines, 262 tokens) log/file2.log [1:1 - 13:11] Clone found (lua) - lua/file1.lua [1:1 - 46:4] (46 lines, 193 tokens) lua/file2.lua [1:1 - 46:4] Clone found (markdown) - markdown/file1.md:markdown [2:1 - 176:3] (175 lines, 1238 tokens) markdown/file2.md:markdown [7:1 - 181:3] Clone found (markdown) - markdown/file1.md:markdown [176:1 - 193:86] (18 lines, 100 tokens) markdown/file2.md:markdown [196:1 - 213:86] Clone found (text) - markdown/file1.md:text [156:1 - 166:11] (11 lines, 69 tokens) markdown/file2.md:text [161:1 - 171:11] Clone found (yaml) - markdown/file1.md:yaml [53:1 - 81:10] (29 lines, 60 tokens) markdown/file2.md:yaml [58:1 - 86:10] Clone found (markdown) - markdown/file3.md:markdown [27:85 - 98:66] (72 lines, 69 tokens) markdown/file4.md:markdown [27:89 - 98:66] Clone found (python) - markdown/file3.md:python [72:1 - 91:6] (20 lines, 137 tokens) markdown/file4.md:python [72:1 - 91:6] Clone found (typescript) - markdown/file3.md:typescript [34:1 - 64:2] (31 lines, 156 tokens) markdown/file4.md:typescript [34:1 - 64:2] Clone found (wolfram) - mathematica/file1.wl [1:1 - 17:3] (17 lines, 127 tokens) mathematica/file2.wl [1:1 - 17:3] Clone found (fsharp) - mllike/file1.fs [1:1 - 35:6] (35 lines, 193 tokens) mllike/file2.fs [1:1 - 35:6] Clone found (ocaml) - mllike/file1.ml [1:1 - 30:18] (30 lines, 150 tokens) mllike/file2.ml [1:1 - 30:18] Clone found (ocaml) - mllike/file1.mli [1:1 - 29:20] (29 lines, 186 tokens) mllike/file2.mli [1:1 - 29:20] Clone found (ocaml) - mllike/file1.mll [1:1 - 24:20] (24 lines, 104 tokens) mllike/file2.mll [1:1 - 24:20] Clone found (nsis) - nsis/file1.nsi [1:1 - 29:25] (29 lines, 71 tokens) nsis/file2.nsi [1:1 - 29:25] Clone found (c-header) - objective-c/file_1.h [1:1 - 33:2] (33 lines, 385 tokens) objective-c/file_2.h [1:1 - 33:2] Clone found (objectivec) - objective-c/file_1.m [1:1 - 12:35] (12 lines, 311 tokens) objective-c/file_2.m [1:1 - 12:35] Clone found (objectivec) - objective-c/file_1.m [14:1 - 64:5] (51 lines, 216 tokens) objective-c/file_2.m [38:1 - 88:5] Clone found (javascript) - one-file/one-file.js [1:1 - 28:6] (28 lines, 165 tokens) one-file/one-file.js [32:1 - 59:6] Clone found (openqasm) - openqasm/file1.qasm [5:1 - 23:7] (19 lines, 92 tokens) openqasm/file2.qasm [23:1 - 41:7] Clone found (oz) - oz/file1.oz [1:1 - 37:20] (37 lines, 141 tokens) oz/file2.oz [1:1 - 37:20] Clone found (pascal) - pascal/file1.pas [1:1 - 37:5] (37 lines, 203 tokens) pascal/file2.pas [1:1 - 37:5] Clone found (perl) - perl/file1.pl [1:1 - 121:31] (121 lines, 331 tokens) perl/file2.pl [1:1 - 121:31] Clone found (perl) - perl/file1.pm [1:1 - 143:4] (143 lines, 586 tokens) perl/file2.pm [1:1 - 143:4] Clone found (perl) - perl/file1.pm [143:3 - 155:3] (13 lines, 54 tokens) perl/file2.pm [176:3 - 188:3] Clone found (php) - php/file1.php [1:1 - 51:20] (51 lines, 295 tokens) php/file2.php [1:1 - 51:20] Clone found (plant-uml) - plant-uml/file1.puml [1:1 - 52:40] (52 lines, 181 tokens) plant-uml/file2.puml [1:1 - 52:40] Clone found (plsql) - plsql/file1.plsql [1:1 - 56:12] (56 lines, 191 tokens) plsql/file2.plsql [1:1 - 56:12] Clone found (plsql) - plsql/file1.plsql [70:20 - 85:2] (16 lines, 53 tokens) plsql/file2.plsql [71:25 - 86:2] Clone found (powerquery) - powerquery/file1.pq [1:1 - 41:7] (41 lines, 210 tokens) powerquery/file2.pq [1:1 - 41:7] Clone found (powershell) - powershell/file1.ps1 [1:1 - 41:2] (41 lines, 168 tokens) powershell/file2.ps1 [1:1 - 41:2] Clone found (ini) - properties/file1.ini [1:1 - 27:7] (27 lines, 79 tokens) properties/file2.ini [1:1 - 27:7] Clone found (properties) - properties/file1.properties [1:1 - 22:11] (22 lines, 114 tokens) properties/file2.properties [1:1 - 22:11] Clone found (protobuf) - protobuf/file1.proto [1:1 - 40:8] (40 lines, 115 tokens) protobuf/file2.proto [1:1 - 40:8] Clone found (pug) - pug/file1.pug [1:1 - 234:21] (234 lines, 1037 tokens) pug/file2.pug [1:1 - 234:21] Clone found (pug) - pug/file1.pug [239:36 - 291:67] (53 lines, 212 tokens) pug/file2.pug [231:30 - 283:67] Clone found (puppet) - puppet/file1.pp [1:1 - 39:4] (39 lines, 131 tokens) puppet/file2.pp [1:1 - 39:4] Clone found (puppet) - puppet/file1.pp [44:32 - 64:2] (21 lines, 83 tokens) puppet/file2.pp [38:38 - 58:2] Clone found (purescript) - purescript/file1.purs [1:1 - 44:7] (44 lines, 265 tokens) purescript/file2.purs [1:1 - 44:7] Clone found (purescript) - purescript/file1.purs [47:41 - 53:44] (7 lines, 50 tokens) purescript/file2.purs [47:40 - 53:44] Clone found (python) - python/file1.py [1:1 - 24:13] (24 lines, 67 tokens) python/file2.py [1:1 - 24:13] Clone found (q) - q/file1.q [1:1 - 30:2] (30 lines, 378 tokens) q/file2.q [1:1 - 30:2] Clone found (qsharp) - qsharp/file1.qs [2:32 - 11:6] (10 lines, 50 tokens) qsharp/file2.qs [2:29 - 11:6] Clone found (r) - r/file1.r [1:1 - 64:9] (64 lines, 427 tokens) r/file2.r [1:1 - 64:9] Clone found (racket) - racket/file1.rkt [1:1 - 38:3] (38 lines, 286 tokens) racket/file2.rkt [1:1 - 38:3] Clone found (rescript) - rescript/file1.res [1:1 - 38:2] (38 lines, 200 tokens) rescript/file2.res [1:1 - 38:2] Clone found (robotframework) - robotframework/file1.robot [1:1 - 27:45] (27 lines, 143 tokens) robotframework/file2.robot [1:1 - 27:45] Clone found (robotframework) - robotframework/file1.robot [45:1 - 62:23] (18 lines, 80 tokens) robotframework/file2.robot [51:1 - 68:23] Clone found (ruby) - ruby/file1.rb [1:1 - 40:4] (40 lines, 96 tokens) ruby/file2.rb [1:1 - 40:4] Clone found (rust) - rust/file1.rs [1:1 - 131:3] (131 lines, 857 tokens) rust/file2.rs [1:1 - 132:3] Clone found (rust) - rust/file1.rs [199:50 - 204:2] (6 lines, 51 tokens) rust/file1.rs [255:53 - 260:2] Clone found (rust) - rust/file1.rs [232:93 - 239:64] (8 lines, 58 tokens) rust/file1.rs [247:47 - 254:64] Clone found (rust) - rust/file1.rs [239:57 - 416:2] (178 lines, 1285 tokens) rust/file2.rs [123:52 - 301:2] Clone found (rust) - rust/file1.rs [263:28 - 273:12] (11 lines, 80 tokens) rust/file1.rs [335:21 - 345:12] Clone found (rust) - rust/file1.rs [319:60 - 332:2] (14 lines, 114 tokens) rust/file1.rs [371:96 - 384:2] Clone found (sas) - sas/file1.sas [1:1 - 59:4] (59 lines, 444 tokens) sas/file2.sas [1:1 - 59:4] Clone found (sass) - sass/file1.sass [1:1 - 19:17] (19 lines, 89 tokens) sass/file2.sass [1:1 - 19:17] Clone found (sass) - sass/file1.sass [3:1 - 17:43] (15 lines, 82 tokens) sass/file1.sass [19:1 - 33:43] Clone found (sass) - sass/file1.sass [5:1 - 24:45] (20 lines, 102 tokens) sass/file2.sass [24:1 - 48:33] Clone found (scheme) - scheme/file1.scm [1:1 - 33:23] (33 lines, 225 tokens) scheme/file2.scm [1:1 - 33:23] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shebang/deploy [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file1.sh [1:1 - 32:2] Clone found (bash) - shebang/build [1:1 - 32:2] (32 lines, 86 tokens) shell/file2.sh [1:1 - 32:2] Clone found (python) - shebang/process [1:1 - 32:4] (32 lines, 159 tokens) shebang/transform [1:1 - 32:4] Clone found (smalltalk) - smalltalk/file1.st [1:1 - 45:2] (45 lines, 146 tokens) smalltalk/file2.st [1:1 - 45:2] Clone found (smarty) - smarty/file1.tpl [1:1 - 43:18] (43 lines, 286 tokens) smarty/file2.tpl [1:1 - 43:18] Clone found (solidity) - solidity/file1.sol [25:61 - 55:13] (31 lines, 168 tokens) solidity/file2.sol [29:54 - 59:13] Clone found (soy) - soy/file1.soy [1:1 - 49:27] (49 lines, 346 tokens) soy/file2.soy [1:1 - 49:27] Clone found (sparql) - sparql/file1.rq [1:1 - 11:9] (11 lines, 65 tokens) sparql/file2.rq [1:1 - 11:9] Clone found (sql) - sql/file1.sql [3:1 - 41:46] (39 lines, 214 tokens) sql/file2.sql [3:1 - 41:46] Clone found (stylus) - stylus/file1.styl [1:1 - 53:20] (53 lines, 201 tokens) stylus/file2.styl [1:1 - 53:20] Clone found (css) - svelte/component1.svelte:css [112:3 - 230:4] (119 lines, 507 tokens) svelte/component2.svelte:css [112:3 - 230:4] Clone found (html) - svelte/component1.svelte:html [1:1 - 231:9] (231 lines, 350 tokens) svelte/component2.svelte:html [1:1 - 231:9] Clone found (javascript) - svelte/component1.svelte:javascript [2:3 - 61:6] (60 lines, 286 tokens) svelte/component2.svelte:javascript [2:3 - 61:6] Clone found (swift) - swift/file1.swift [9:1 - 29:6] (21 lines, 73 tokens) swift/file2.swift [2:1 - 22:6] Clone found (tap) - tap/file1.tap [1:1 - 35:8] (35 lines, 202 tokens) tap/file2.tap [1:1 - 35:8] Clone found (tcl) - tcl/file1.tcl [1:1 - 45:2] (45 lines, 263 tokens) tcl/file2.tcl [1:1 - 45:2] Clone found (textile) - textile/file1.textile [1:1 - 51:4] (51 lines, 236 tokens) textile/file2.textile [1:1 - 51:4] Clone found (toml) - toml/file1.toml [1:1 - 39:19] (39 lines, 100 tokens) toml/file2.toml [1:1 - 39:19] Clone found (tt2) - tt2/file1.tt2 [1:1 - 38:14] (38 lines, 299 tokens) tt2/file2.tt2 [1:1 - 38:14] Clone found (tt2) - tt2/file1.tt2 [42:21 - 52:25] (11 lines, 54 tokens) tt2/file2.tt2 [42:86 - 52:25] Clone found (turtle) - turtle/file1.ttl [1:1 - 36:17] (36 lines, 212 tokens) turtle/file2.ttl [1:1 - 36:17] Clone found (twig) - twig/file_1.twig [1:1 - 23:3] (23 lines, 167 tokens) twig/file_2.twig [1:1 - 23:3] Clone found (twig) - twig/file_1.twig [13:20 - 25:9] (13 lines, 65 tokens) twig/file_1.twig [16:8 - 28:9] Clone found (twig) - twig/file_1.twig [19:8 - 29:15] (11 lines, 54 tokens) twig/file_2.twig [22:8 - 32:15] Clone found (unrealscript) - unrealscript/file1.uc [1:1 - 56:6] (56 lines, 161 tokens) unrealscript/file2.uc [1:1 - 56:6] Clone found (vbnet) - vb/file1.vb [1:1 - 29:17] (29 lines, 163 tokens) vb/file2.vb [1:1 - 29:17] Clone found (velocity) - velocity/file1.vtl [1:1 - 41:25] (41 lines, 264 tokens) velocity/file2.vtl [1:1 - 41:25] Clone found (verilog) - verilog/file1.v [1:1 - 40:10] (40 lines, 163 tokens) verilog/file2.v [1:1 - 40:10] Clone found (vhdl) - vhdl/file1.vhd [1:1 - 32:18] (32 lines, 179 tokens) vhdl/file2.vhd [1:1 - 32:18] Clone found (typescript) - vue/app1.vue:typescript [5:1 - 33:4] (29 lines, 128 tokens) vue/app2.vue:typescript [5:1 - 33:4] Clone found (javascript) - vue/file.js [1:1 - 28:2] (28 lines, 210 tokens) vue/file1.vue:javascript [125:3 - 152:4] Clone found (html) - vue/file1.vue:html [1:1 - 10:9] (10 lines, 99 tokens) vue/file2.vue:html [1:1 - 10:9] Clone found (javascript) - vue/file1.vue:javascript [120:3 - 261:4] (142 lines, 817 tokens) vue/file2.vue:javascript [99:3 - 240:4] Clone found (scss) - vue/file1.vue:scss [13:3 - 75:6] (63 lines, 402 tokens) vue/file2.vue:scss [13:3 - 75:6] Clone found (scss) - vue/file1.vue:scss [95:5 - 117:4] (23 lines, 149 tokens) vue/file2.vue:scss [74:5 - 96:4] Clone found (wgsl) - wgsl/file1.wgsl [1:1 - 45:3] (45 lines, 274 tokens) wgsl/file2.wgsl [1:1 - 45:3] Clone found (wgsl) - wgsl/file1.wgsl [51:42 - 59:6] (9 lines, 66 tokens) wgsl/file2.wgsl [55:47 - 63:6] Clone found (markup) - xml/file1.svg [1:1 - 88:2] (88 lines, 392 tokens) xml/file2.svg [1:1 - 87:6] Clone found (markup) - xml/file1.xsl [1:1 - 43:6] (43 lines, 316 tokens) xml/file2.xsl [1:1 - 43:2] Clone found (markup) - xml/file1.xsl [20:15 - 35:6] (16 lines, 133 tokens) xml/file1.xsl [32:137 - 47:2] Clone found (xquery) - xquery/file1.xquery [1:1 - 31:22] (31 lines, 222 tokens) xquery/file2.xquery [1:1 - 31:22] Clone found (yaml) - yaml/file1.yml [1:1 - 18:23] (18 lines, 132 tokens) yaml/file2.yml [1:1 - 18:23] Clone found (c) - z80/file1.z80 [1:1 - 14:25] (14 lines, 60 tokens) z80/file2.z80 [1:1 - 14:25] Clone found (zig) - zig/file1.zig [1:1 - 43:10] (43 lines, 259 tokens) zig/file2.zig [1:1 - 43:10] Clone found (zig) - zig/file1.zig [42:45 - 52:23] (11 lines, 52 tokens) zig/file2.zig [47:45 - 57:23] ┌────────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐ │ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ actionscript │ 2 │ 75 │ 302 │ 1 │ 29 (38.67%) │ 127 (42.05%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ada │ 2 │ 74 │ 408 │ 1 │ 20 (27.03%) │ 103 (25.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ antlr4 │ 2 │ 48 │ 216 │ 1 │ 20 (41.67%) │ 82 (37.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apex │ 2 │ 84 │ 451 │ 1 │ 23 (27.38%) │ 115 (25.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ apl │ 2 │ 47 │ 554 │ 1 │ 19 (40.43%) │ 252 (45.49%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ aspnet │ 2 │ 101 │ 854 │ 3 │ 37 (36.63%) │ 296 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ astro │ 2 │ 324 │ 950 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ awk │ 2 │ 62 │ 205 │ 1 │ 22 (35.48%) │ 75 (36.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bash │ 4 │ 158 │ 418 │ 3 │ 93 (58.86%) │ 258 (61.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ basic │ 2 │ 47 │ 331 │ 1 │ 17 (36.17%) │ 100 (30.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ bicep │ 2 │ 81 │ 251 │ 1 │ 26 (32.10%) │ 78 (31.08%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ brainfuck │ 4 │ 159 │ 1728 │ 4 │ 113 (71.07%) │ 1289 (74.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c │ 5 │ 105 │ 1060 │ 3 │ 40 (38.10%) │ 399 (37.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ c-header │ 4 │ 149 │ 2091 │ 3 │ 59 (39.60%) │ 724 (34.62%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfml │ 2 │ 107 │ 671 │ 1 │ 17 (15.89%) │ 85 (12.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cfscript │ 2 │ 69 │ 437 │ 1 │ 27 (39.13%) │ 161 (36.84%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ clojure │ 2 │ 46 │ 374 │ 1 │ 18 (39.13%) │ 139 (37.17%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cmake │ 2 │ 52 │ 311 │ 1 │ 20 (38.46%) │ 128 (41.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ coffeescript │ 2 │ 92 │ 447 │ 2 │ 40 (43.48%) │ 219 (48.99%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ cpp-header │ 2 │ 176 │ 1514 │ 2 │ 106 (60.23%) │ 965 (63.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ crystal │ 2 │ 70 │ 222 │ 1 │ 28 (40.00%) │ 97 (43.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csharp │ 2 │ 360 │ 1099 │ 2 │ 172 (47.78%) │ 537 (48.86%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ css │ 8 │ 875 │ 2536 │ 5 │ 290 (33.14%) │ 1494 (58.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ csv │ 2 │ 22 │ 400 │ 1 │ 8 (36.36%) │ 163 (40.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ d │ 2 │ 338 │ 2270 │ 1 │ 168 (49.70%) │ 1135 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dart │ 2 │ 266 │ 1178 │ 2 │ 118 (44.36%) │ 522 (44.31%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ diff │ 2 │ 146 │ 1082 │ 1 │ 61 (41.78%) │ 435 (40.20%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ dot │ 2 │ 46 │ 243 │ 1 │ 17 (36.96%) │ 91 (37.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ eiffel │ 2 │ 126 │ 380 │ 1 │ 45 (35.71%) │ 130 (34.21%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ elm │ 2 │ 110 │ 411 │ 1 │ 46 (41.82%) │ 155 (37.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ erlang │ 2 │ 242 │ 1674 │ 1 │ 120 (49.59%) │ 837 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fortran │ 2 │ 93 │ 469 │ 1 │ 36 (38.71%) │ 182 (38.81%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ fsharp │ 2 │ 82 │ 462 │ 1 │ 34 (41.46%) │ 193 (41.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gdscript │ 2 │ 96 │ 458 │ 1 │ 24 (25.00%) │ 135 (29.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gettext │ 2 │ 220 │ 356 │ 1 │ 51 (23.18%) │ 82 (23.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ gherkin │ 2 │ 75 │ 434 │ 1 │ 15 (20.00%) │ 83 (19.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ go │ 2 │ 65 │ 305 │ 1 │ 29 (44.62%) │ 134 (43.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ graphql │ 2 │ 134 │ 499 │ 1 │ 24 (17.91%) │ 143 (28.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ groovy │ 2 │ 96 │ 422 │ 1 │ 40 (41.67%) │ 188 (44.55%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haml │ 2 │ 52 │ 276 │ 1 │ 22 (42.31%) │ 118 (42.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ handlebars │ 2 │ 72 │ 555 │ 1 │ 27 (37.50%) │ 218 (39.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haskell │ 4 │ 459 │ 2536 │ 3 │ 216 (47.06%) │ 1183 (46.65%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ haxe │ 4 │ 191 │ 1035 │ 3 │ 113 (59.16%) │ 634 (61.26%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ hcl │ 2 │ 119 │ 313 │ 1 │ 36 (30.25%) │ 85 (27.16%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ html │ 6 │ 1289 │ 1390 │ 4 │ 406 (31.50%) │ 762 (54.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ idris │ 2 │ 88 │ 581 │ 1 │ 34 (38.64%) │ 208 (35.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ignore │ 2 │ 191 │ 523 │ 1 │ 83 (43.46%) │ 234 (44.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ini │ 2 │ 58 │ 172 │ 1 │ 26 (44.83%) │ 79 (45.93%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ java │ 2 │ 454 │ 15064 │ 2 │ 224 (49.34%) │ 7387 (49.04%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ javascript │ 23 │ 1580 │ 6985 │ 13 │ 572 (36.20%) │ 3475 (49.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json │ 4 │ 134 │ 460 │ 2 │ 38 (28.36%) │ 134 (29.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ json5 │ 2 │ 104 │ 307 │ 1 │ 30 (28.85%) │ 93 (30.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ jsx │ 2 │ 73 │ 296 │ 1 │ 20 (27.40%) │ 99 (33.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ julia │ 2 │ 76 │ 557 │ 1 │ 29 (38.16%) │ 194 (34.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ kotlin │ 2 │ 106 │ 550 │ 2 │ 47 (44.34%) │ 250 (45.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ latex │ 2 │ 88 │ 557 │ 1 │ 25 (28.41%) │ 149 (26.75%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ less │ 2 │ 56 │ 518 │ 2 │ 29 (51.79%) │ 282 (54.44%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lilypond │ 2 │ 100 │ 307 │ 1 │ 18 (18.00%) │ 63 (20.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ linker-script │ 2 │ 133 │ 683 │ 1 │ 46 (34.59%) │ 256 (37.48%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lisp │ 2 │ 106 │ 608 │ 1 │ 49 (46.23%) │ 289 (47.53%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ livescript │ 2 │ 68 │ 344 │ 1 │ 30 (44.12%) │ 145 (42.15%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ llvm │ 2 │ 132 │ 850 │ 1 │ 34 (25.76%) │ 215 (25.29%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ log │ 2 │ 30 │ 666 │ 1 │ 12 (40.00%) │ 262 (39.34%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ lua │ 2 │ 106 │ 450 │ 1 │ 45 (42.45%) │ 193 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markdown │ 4 │ 536 │ 929 │ 3 │ 262 (48.88%) │ 1407 (151.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ markup │ 11 │ 478 │ 2795 │ 6 │ 205 (42.89%) │ 1314 (47.01%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ nsis │ 2 │ 68 │ 172 │ 1 │ 28 (41.18%) │ 71 (41.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ objectivec │ 2 │ 152 │ 1463 │ 2 │ 61 (40.13%) │ 527 (36.02%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ocaml │ 6 │ 186 │ 1052 │ 3 │ 80 (43.01%) │ 440 (41.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ openqasm │ 2 │ 87 │ 346 │ 1 │ 18 (20.69%) │ 92 (26.59%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ oz │ 2 │ 94 │ 357 │ 1 │ 36 (38.30%) │ 141 (39.50%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pascal │ 2 │ 106 │ 561 │ 1 │ 36 (33.96%) │ 203 (36.19%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ perl │ 4 │ 609 │ 2272 │ 3 │ 274 (44.99%) │ 971 (42.74%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ php │ 2 │ 143 │ 785 │ 1 │ 50 (34.97%) │ 295 (37.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plant-uml │ 2 │ 120 │ 422 │ 1 │ 51 (42.50%) │ 181 (42.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ plsql │ 2 │ 171 │ 598 │ 2 │ 70 (40.94%) │ 244 (40.80%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powerquery │ 2 │ 112 │ 538 │ 1 │ 40 (35.71%) │ 210 (39.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ powershell │ 2 │ 98 │ 404 │ 1 │ 40 (40.82%) │ 168 (41.58%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ prolog │ 2 │ 64 │ 429 │ 1 │ 27 (42.19%) │ 176 (41.03%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ properties │ 2 │ 48 │ 250 │ 1 │ 21 (43.75%) │ 114 (45.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ protobuf │ 2 │ 205 │ 680 │ 1 │ 39 (19.02%) │ 115 (16.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ pug │ 2 │ 574 │ 2512 │ 2 │ 285 (49.65%) │ 1249 (49.72%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ puppet │ 2 │ 122 │ 446 │ 2 │ 58 (47.54%) │ 214 (47.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ purescript │ 2 │ 115 │ 797 │ 2 │ 49 (42.61%) │ 315 (39.52%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ python │ 6 │ 323 │ 911 │ 3 │ 73 (22.60%) │ 363 (39.85%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ q │ 2 │ 78 │ 997 │ 1 │ 29 (37.18%) │ 378 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ qsharp │ 2 │ 102 │ 408 │ 1 │ 9 (8.82%) │ 50 (12.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ r │ 2 │ 128 │ 854 │ 1 │ 63 (49.22%) │ 427 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ racket │ 2 │ 100 │ 760 │ 1 │ 37 (37.00%) │ 286 (37.63%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rescript │ 2 │ 115 │ 776 │ 1 │ 37 (32.17%) │ 200 (25.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ robotframework │ 2 │ 130 │ 630 │ 2 │ 43 (33.08%) │ 223 (35.40%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ ruby │ 2 │ 80 │ 192 │ 1 │ 39 (48.75%) │ 96 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ rust │ 2 │ 717 │ 5128 │ 6 │ 342 (47.70%) │ 2445 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sas │ 2 │ 152 │ 1174 │ 1 │ 58 (38.16%) │ 444 (37.82%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sass │ 2 │ 93 │ 383 │ 3 │ 51 (54.84%) │ 273 (71.28%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scala │ 2 │ 58 │ 1696 │ 1 │ 28 (48.28%) │ 848 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scheme │ 2 │ 70 │ 498 │ 1 │ 32 (45.71%) │ 225 (45.18%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ scss │ 4 │ 360 │ 2065 │ 3 │ 136 (37.78%) │ 875 (42.37%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smalltalk │ 2 │ 102 │ 351 │ 1 │ 44 (43.14%) │ 146 (41.60%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ smarty │ 2 │ 92 │ 652 │ 1 │ 42 (45.65%) │ 286 (43.87%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ solidity │ 2 │ 155 │ 939 │ 1 │ 30 (19.35%) │ 168 (17.89%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ soy │ 2 │ 106 │ 841 │ 1 │ 48 (45.28%) │ 346 (41.14%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sparql │ 2 │ 54 │ 296 │ 1 │ 10 (18.52%) │ 65 (21.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ sql │ 2 │ 102 │ 525 │ 1 │ 38 (37.25%) │ 214 (40.76%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ stylus │ 2 │ 129 │ 494 │ 1 │ 52 (40.31%) │ 201 (40.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ svelte │ 2 │ 462 │ 1586 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ swift │ 2 │ 58 │ 175 │ 1 │ 20 (34.48%) │ 73 (41.71%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tap │ 2 │ 98 │ 562 │ 1 │ 34 (34.69%) │ 202 (35.94%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tcl │ 2 │ 106 │ 600 │ 1 │ 44 (41.51%) │ 263 (43.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ text │ 2 │ 354 │ 143 │ 1 │ 10 (2.82%) │ 69 (48.25%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ textile │ 2 │ 106 │ 495 │ 1 │ 50 (47.17%) │ 236 (47.68%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ toml │ 2 │ 91 │ 229 │ 1 │ 38 (41.76%) │ 100 (43.67%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tsx │ 2 │ 76 │ 310 │ 1 │ 34 (44.74%) │ 143 (46.13%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ tt2 │ 2 │ 104 │ 803 │ 2 │ 47 (45.19%) │ 353 (43.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ turtle │ 2 │ 90 │ 520 │ 1 │ 35 (38.89%) │ 212 (40.77%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ twig │ 2 │ 61 │ 424 │ 3 │ 44 (72.13%) │ 286 (67.45%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ txt │ 4 │ 146 │ 870 │ 2 │ 71 (48.63%) │ 435 (50.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ typescript │ 12 │ 2159 │ 9379 │ 8 │ 958 (44.37%) │ 4688 (49.98%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ unrealscript │ 2 │ 166 │ 520 │ 1 │ 55 (33.13%) │ 161 (30.96%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vbnet │ 2 │ 72 │ 378 │ 1 │ 28 (38.89%) │ 163 (43.12%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ velocity │ 2 │ 88 │ 576 │ 1 │ 40 (45.45%) │ 264 (45.83%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ verilog │ 2 │ 104 │ 430 │ 1 │ 39 (37.50%) │ 163 (37.91%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vhdl │ 2 │ 98 │ 546 │ 1 │ 31 (31.63%) │ 179 (32.78%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ vue │ 4 │ 587 │ 3333 │ 0 │ 0 (0.00%) │ 0 (0.00%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wgsl │ 2 │ 127 │ 928 │ 2 │ 52 (40.94%) │ 340 (36.64%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ wolfram │ 2 │ 85 │ 697 │ 1 │ 16 (18.82%) │ 127 (18.22%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ xquery │ 2 │ 80 │ 640 │ 1 │ 30 (37.50%) │ 222 (34.69%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ yaml │ 6 │ 262 │ 554 │ 2 │ 45 (17.18%) │ 192 (34.66%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ zig │ 2 │ 130 │ 827 │ 2 │ 52 (40.00%) │ 311 (37.61%) │ ├────────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤ │ Total: │ 347 │ 24603 │ 130473 │ 212 │ 9133 (37.12%) │ 56491 (43.30%) │ └────────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘ Found 212 clones. time: 23.314ms 💡 Auto-refactor with AI: npx skills add https://github.com/kucherenko/jscpd --skill dry-refactoring 🎩 New: Gangsta Agents — discipline your AI coding → gangsta.page 💖 Support jscpd project → https://opencollective.com/jscpd npm package or from . Corrected this false claim across all docs and rewrote rust/jscpd/README.md (the README npm publishes as jscpd@5): added badges, supported-formats summary, CI snippet, links section, and v4 differences table.
2026-06-22 18:35:46 +02:00
All three install the identical Rust binary and accept the same CLI options. Only the crates.io install exposes both command names from a single package.
## Performance
A comparison against other copy/paste detectors (jscpd-rs, Duplo, Fallow, Simian, PMD CPD) on the repository's `fixtures/` corpus — timing, detection counts, cross-format detection and AI-token efficiency — is in [benchmark/BENCHMARK.md](../benchmark/BENCHMARK.md).
## Installation
```bash
# npm — installs the jscpd command
npm install -g jscpd
jscpd /path/to/code
# npm — installs only the cpd command (lighter)
npm install -g cpd
cpd /path/to/code
# crates.io — Rust-native install (exposes both jscpd and cpd commands)
cargo install jscpd
jscpd /path/to/code
cpd /path/to/code
# Nix — run without installing
nix run github:kucherenko/jscpd -- /path/to/code
# Nix — install permanently
nix profile install github:kucherenko/jscpd
# Homebrew (macOS/Linux)
brew install jscpd
feat(release): publish jscpd platform wheels to PyPI Closes #1037. Adds rust/scripts/build-pypi-wheels.py, which repacks the eight jscpd-<platform>.tar.gz release tarballs into platform wheels: the same binary under <pkg>.data/scripts/ as both `jscpd` and `cpd`, one wheel per target, stdlib only, no maturin and no recompilation. glibc wheels take their manylinux floor from the GLIBC_x.y symbols in the binary (manylinux_2_34 today), musl builds are static so they tag as musllinux_1_2, macOS and Windows use the Rust minimums. Semver pre-releases map to PEP 440 (5.3.0-beta.1 -> 5.3.0b1); other labels fail rather than guess. release.yml gains a rust-publish-pypi job after the npm publish: it takes the binary artifacts from this run, refills any missing target from the published npm platform package (resumed releases, or a version already on npm), builds the wheels, pip-installs the matching one and checks `jscpd --version` and `cpd --version`, then uploads with PyPI trusted publishing (environment `pypi`, no token, skip-existing). The detect job treats a version missing from PyPI as pending, so the wheels for the current release publish on the next push to master without a new release commit. The GitHub release lists the PyPI package and waits on the upload the same way it waits on crates.io and npm. Docs: PyPI in the README install table and packages table, rust/README and docs/rust.md install sections, and a `language: python` pre-commit option in docs/ci-and-hooks.md so the hook no longer needs Node.js. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-10 13:56:08 +02:00
# PyPI — platform wheels with the same binary (pip, pipx, uv)
pip install jscpd
uvx jscpd /path/to/code
```
The npm packages ship prebuilt binaries for 8 platforms — no Node.js runtime is required, the binary is self-contained:
| Platform | npm package | Rust target |
|----------|-------------|-------------|
| macOS arm64 | `jscpd-darwin-arm64` | `aarch64-apple-darwin` |
| macOS x64 | `jscpd-darwin-x64` | `x86_64-apple-darwin` |
| Linux arm64 (glibc) | `jscpd-linux-arm64-gnu` | `aarch64-unknown-linux-gnu` |
| Linux arm64 (musl) | `jscpd-linux-arm64-musl` | `aarch64-unknown-linux-musl` |
| Linux x64 (glibc) | `jscpd-linux-x64-gnu` | `x86_64-unknown-linux-gnu` |
| Linux x64 (musl) | `jscpd-linux-x64-musl` | `x86_64-unknown-linux-musl` |
| Windows arm64 | `jscpd-windows-arm64-msvc` | `aarch64-pc-windows-msvc` |
| Windows x64 | `jscpd-windows-x64-msvc` | `x86_64-pc-windows-msvc` |
The same binaries are attached to every [GitHub Release](https://github.com/kucherenko/jscpd/releases) as `jscpd-<platform>.tar.gz` with a `checksums.txt` and SLSA provenance, and packaged as a multi-arch Docker image at `ghcr.io/kucherenko/jscpd` (see [CI docs](ci-and-hooks.md#docker)).
## CLI Usage
The `jscpd` command is available after installing `jscpd` from npm; the `cpd` command is available after installing either `cpd` (npm) or `jscpd` (crates.io). Both commands accept the same options and are identical:
```bash
jscpd [OPTIONS] [PATH]...
jscpd [OPTIONS] [PATH]...
```
### Options
| Option | Short | Description | Default |
|--------|-------|-------------|---------|
| `--min-tokens` | `-k` | Minimum tokens in a clone | 50 |
| `--min-lines` | `-l` | Minimum lines in a clone | 5 |
| `--max-lines` | `-x` | Maximum source file lines | — |
| `--max-size` | `-z` | Skip files larger than SIZE (e.g. `1kb`, `1mb`, `100kb`) | no limit |
| `--mode` | `-m` | Detection mode: `mild`, `weak`, `strict` | `mild` |
| `--ignore-pattern` | | Comma-separated regular expressions; source text matched by a pattern is excluded from clone detection. See [Ignoring source regions](#ignoring-source-regions) | — |
| `--workers` | | Number of worker threads for parallel tokenization/detection | auto (all CPU cores) |
| `--no-colors` | | Disable ANSI color output | off |
| `--absolute` | `-a` | Use absolute paths in reports | off |
| `--follow-symlinks` | | Follow symbolic links while walking. A file reached through a link is reported by the path it was found at (relative to the scan root, like any other file), and a file reachable through several paths is scanned once. v4 followed links by default | off |
| `--ignore-case` | | Ignore case of symbols in code (experimental) | off |
feat: Type-2 clone detection (--ignore-identifiers, --ignore-literals, --ignore-annotations) Closes #998. Three opt-in flags (config keys ignoreIdentifiers, ignoreLiterals, ignoreAnnotations) normalize token classes before hashing so that blocks which differ only in names, values or annotations are detected: - identifiers hash as `$id`; keywords are kept (the JS/TS tokenizer classifies them, other languages use a built-in common-keyword list) - string literals hash as `$str`, numeric literals as `$num` - `@Name`, `@a.b.Name` and `@Name(...)` runs are dropped in Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript and TypeScript Each clone now carries `kind: exact | renamed`. DetectionToken gains a raw_hash (equal to hash unless normalization rewrote the token); the PreparedSource materializes raw hashes only when a token was normalized, and the detector compares raw hashes over the matched run to classify a pair. A dropped annotation salts the raw hash of the token before it, so a pair differing only in annotations inside the matched run is `renamed`. Reporters: console prints `Clone found (fmt, renamed)`, ai appends `(renamed)`, json adds "kind", sarif uses rule jscpd/similar-code (declared only when referenced), codeclimate the same check_name. Default runs are unchanged apart from the additive "kind": "exact" JSON field. Also: GitHub Action inputs, docs section, fixtures/type2-demo with a README of runnable commands, unit tests in tokenizer/core/reporter, CLI flag tests, and a binary-level integration test.
2026-09-05 11:06:23 +02:00
| `--ignore-identifiers` | | Treat all identifiers as equal, so clones that differ only in variable, function or type names are found. See [Type-2 clones](#type-2-clones-renamed-identifiers-literals-and-annotations) | off |
| `--ignore-literals` | | Treat all string literals as equal and all numeric literals as equal | off |
| `--ignore-annotations` | | Skip annotations and decorators (`@Name`, `@Name(...)`) before detection | off |
| `--max-gap-lines` | | Merge clones of one file pair separated by at most N unmatched lines in both files into one near-miss clone reported as `similar`. See [Type-3 clones](#type-3-clones-near-miss-merging-with---max-gap-lines) | 0 (off) |
| `--similarity` | | Report JavaScript/TypeScript function pairs whose syntax-tree similarity reaches RATIO, a number in `(0, 1]`, as `similar` clones; `1` means exact matches only. See [function similarity](#function-level-similarity-with---similarity) | 1 (off) |
| `--kind` | | Report only clones of these kinds, comma-separated: `exact`, `renamed`, `similar`, `gap`, `ast`. See [Filtering by kind](#filtering-by-kind-with---kind) | all |
| `--formats-exts` | | Custom format-to-extension mapping (e.g. `javascript:es,es6;dart:dt`) | — |
| `--formats-names` | | Custom format-to-filename mapping | — |
feat(rust): add --cross-formats for cross-format clone detection (#810) Detect duplicates across related formats via format equivalence groups sharing one comparison pool, e.g. --cross-formats "javascript,typescript" or the js-ts preset (javascript,jsx,typescript,tsx). When a group mixes TypeScript with JavaScript, TS files are compared with erasable type-only syntax stripped from the detection token stream (type annotations, generics, interface/type declarations, as/satisfies, ?/! markers, access modifiers, implements clauses, type-only imports/exports, overload signatures, declare statements) so that `function f(a: number): void` matches `function f(a)`. Stripping is AST-driven (oxc_ast_visit over the already-parsed program) and only drops tokens, so reported clone positions always reference the original source. - cpd-tokenizer: new ts_strip module, tokenize_js_stripped, TokenizeOptions.strip_types_formats (empty by default) - cpd-finder: RunConfig.cross_formats, build_pools() pool grouping, strip-set computation for TS-family formats grouped with JS - cpd: --cross-formats flag, crossFormats config field (string, array-of-strings, or array-of-arrays), js-ts preset, overlap merging, unknown-format warnings, --debug output - docs: rust.md option + Cross-Format Groups section, CHANGELOG entry - tests: tokenizer strip tests, pool unit tests, cross-pool core test, cpd-finder integration tests, CLI parse/config tests, e2e binary tests with fixtures; default behavior unchanged (golden parity intact) Non-erasable TS syntax with runtime semantics (enum, non-declare namespace, parameter properties, import =, export =) is left intact and will not cross-match. Cross-format clones are attributed to one member format in per-format statistics. Closes #810 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:44:08 +02:00
| `--cross-formats` | | Detect clones across formats: `;`-separated groups of `,`-separated formats (e.g. `javascript,typescript`). Preset `js-ts` = `javascript,jsx,typescript,tsx` | — |
| `--list` | | List all supported formats and exit | — |
| `--skip-local` | | Skip clones where both fragments are in the same directory | off |
| `--skip-isolated` | | Skip clones between different folders of the same isolation group: `,`-separated groups of `\|`-separated folders (e.g. `packages/a\|packages/b`). Useful in monorepos where teams own separate packages | — |
| `--baseline` | | Clone baseline file (e.g. `.jscpd-baseline.json`): clones whose fingerprint is absent from it are reported as new. See [Baseline](#baseline) | — |
| `--update-baseline` | | Rewrite the baseline file from the current run, creating it if missing (requires `--baseline`) | off |
| `--fail-on-new-clones` | | Exit 1 when more than N new clones are found (`--fail-on-new-clones` alone means N=0; requires `--baseline` or `--baseline-from-ref`) | — |
feat(cli): non-zero exit for unknown format, missing path, failed reporter; add --fail-on-empty Closes #1047. Four situations used to write an empty report and exit 0, so a CI job that checks only the exit code saw a green run: - `--format` naming a format that is not supported (a warning since #964) is now `Error: --format: 'x' is not a supported format`, exit 1. Names introduced through --formats-exts or --formats-names stay accepted. - A scan path that does not exist is `Error: path does not exist: <p>`, exit 1, before anything runs. - A reporter that fails to write its output still prints the existing `Reporter '<name>' error: ...` line; the run now ends with `ERROR: a reporter failed to write its output` and exit 1, after the other reporters have run. - A scan that analyzes no files (paths exist, but nothing matched the --format/--ignore/--pattern filters or every file was below --min-tokens) prints `Warning: jscpd analyzed no files` and still exits 0, so an intentionally empty tree passes. The new `--fail-on-empty` flag (config key `failOnEmpty`, action input `fail-on-empty`) makes it exit 1. Reports are written before the check. Docs: an "Exit codes" section in docs/rust.md, option rows in docs/rust.md and docs/ci-and-hooks.md, a README feature bullet. Fixtures: fixtures/fail-on-empty-demo with a `code/` clone pair, a `nothing/` comment-only file, and a README quoting every command's output and exit code. Tests: the #964 warning test becomes an error test, plus integration tests for each new exit path and for the config key; 531 tests pass, clippy clean. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-11 08:45:09 +02:00
| `--fail-on-empty` | | Exit 1 when the scan analyzes no files: the paths exist but nothing matched the `--format`, `--ignore` and `--pattern` filters, or every file was below `--min-tokens`. See [Exit codes](#exit-codes) | off |
| `--baseline-from-ref` | | Compare against an ephemeral baseline built from a git ref's tree (e.g. `origin/main`). Conflicts with `--baseline` | — |
| `--sarif-error-tokens` | | Report SARIF results as `error` for clones with at least this many tokens (smaller clones stay `warning`). When overall duplication exceeds `--threshold`, all SARIF results become `error` regardless of size. | — (all `warning`) |
| `--min-duplicated-lines` | | Minimum percentage of duplication to report (0-100) | 0 |
feat(rust): MCP server over stdio transport (--mcp) Closes the gap reported in #891: the HTTP-only jscpd-server cannot be used by MCP clients that spawn and manage a stdio process themselves (Claude Desktop/Code, Cursor, APM, ...). The Rust binary now serves the Model Context Protocol directly: cpd --mcp /path/to/project Transport & protocol: - newline-delimited JSON-RPC 2.0 on stdin/stdout; stdout carries protocol messages only, logging goes to stderr; exits 0 on stdin EOF - protocol revision 2025-06-18, accepting 2025-03-26 and 2024-11-05 clients via version negotiation; ping, tools/list, tools/call; notifications ignored; parse errors reported (-32700) without killing the session Tools (mirroring the HTTP jscpd-server): - check_duplication(code, format) — checks a snippet against the scanned project; results are compact JSON in a text content block with file/snippet line ranges; unknown formats and sub-threshold snippets produce informative results - get_statistics() — files, clones, full Statistics of the last scan - check_current_directory() — re-scan the configured paths Performance: the project is scanned once at startup and cached as detection-ready token hashes (PreparedSource pools per format / cross-format group), so snippet checks only tokenize the snippet and run one pool detection — milliseconds even on large codebases. All standard detection options (--min-tokens, --format, --cross-formats, --ignore, ...) apply to the scan and to snippet checks. Supporting refactor in cpd-finder: orchestrate::run() split into build_thread_pool() + prepare_scan_in() (walk + tokenize, returning PreparedScan) so the MCP server can keep prepared sources around; run() behavior is unchanged and detect_prepared is untouched. strip_types_formats made pub for snippet tokenization parity; PreparedSource now derives Clone. hyperfine A/B vs a master-built baseline shows no regression on the normal CLI path (39.0ms vs 41.2ms, within noise). Tests: 12 unit tests for the protocol handler and tools, plus 2 end-to-end tests that spawn the real binary and drive a full stdio session (initialize → tools/list → tools/call → EOF), asserting stdout is protocol-only. Full workspace suite green. Docs: docs/ai-ready.md MCP section restructured into stdio (Rust v5) and Streamable HTTP (Node v4) transports with client config examples; docs/rust.md options table; root README; rust/CHANGELOG.md 5.0.16. The jscpd-server (Node) stdio subcommand asked for literally in #891 can follow separately; this provides the stdio transport via the v5 binary that ships with jscpd@5. Refs #891
2026-08-14 19:56:52 +02:00
| `--mcp` | | Serve the [Model Context Protocol over stdio](ai-ready.md#stdio-transport-rust-v5): scan PATHs once, then expose `check_duplication` / `get_statistics` / `check_current_directory` tools to MCP clients | off |
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
| `--summary` | | Print a codebase summary: top files and folders by tokens, lines, size, and a complexity estimate. See [Summary](#summary) | off |
| `--summary-top` | | Number of entries in each summary top list | 10 |
| `--summary-by` | | Summary sort metric: `tokens`, `lines`, `size`, `complexity` | `tokens` |
| `--complexity` | | Print the summary tables ranked by complexity without running clone detection. See [Complexity only](#complexity-only) | off |
| `--dashboard` | | Print one screen with the health score, project size, duplication, complexity and dead code. See [Dashboard](#dashboard) | off |
| `--health` | | Print only the project health badge: one 0-100 score with a grade. See [Health score](#health-score) | off |
| `--health-input` | | JSON file with metrics from other tools (coverage, tests, security) to include in the health score | — |
feat(cli): --history, duplication trend over git history Closes #1002 (the --history half; --ratchet is deliberately not implemented, the report shows the headroom instead). `jscpd src --history v5.0.0..HEAD` (or `--history-since 2026-01-01`) lists the commits with `git log`, checks each one out into a temporary detached worktree (the --baseline-from-ref machinery, now shared through baseline_ref::map_scan_paths), scans it with the run's own configuration and keeps the totals; the current run is the series' last point. `--history-every N` keeps every Nth commit counted from the newest, `--history-limit N` (default 30) samples a long series evenly keeping both ends. Nothing runs unless one of the flags is given. Output: the console reporter appends a sparkline of the duplication percentage, a table (commit, date, files, lines, clones, dup lines, dup%, change, subject) with the change column red when duplication rose and green when it fell, the overall trend line, and, when --threshold is set and the latest value is under it, the headroom with the value the threshold could be tightened to. The json reporter adds a `history` object; the ai reporter prints one compact line per point. Other reporters are unchanged. New cpd_core::history (model, sparkline, change/headroom helpers with unit tests), cpd::history (git log parsing, sampling, worktree scans), cpd_reporter::history_render. Config keys history / historySince / historyEvery / historyLimit; action input `history`. Integration tests build a four-commit repo with fixed dates and check the JSON series, the console block, every/limit thinning and the error paths. 969 workspace tests pass, clippy clean. Docs: History section and option rows in docs/rust.md, README bullet, action input row, fixtures/history-demo/README.md with a script that builds the demo repository and the expected output. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 07:50:18 +02:00
| `--history` | | Duplication trend over git history: scan every commit in RANGE (e.g. `v5.0.0..HEAD`) with the same configuration and print a sparkline and a table. See [History](#history) | — |
| `--history-since` | | Select commits since DATE (e.g. `2026-01-01`); alone it walks `HEAD`, with `--history` it bounds the range | — |
| `--history-every` | | Keep every Nth commit of the series, counted from the newest | 1 |
| `--history-limit` | | Maximum number of commits in the series, sampled evenly with both ends kept | 30 |
| `--silent` | `-s` | Suppress console output | off |
| `--no-tips` | | Suppress tips and promotional messages. Tips are also skipped automatically when stdout is not a terminal (a pipe, a file, a CI log) or when `CI` or `JSCPD_NO_TIPS` is set; `NO_COLOR` only removes the colours | off |
| `--version` | `-V` | Print version | — |
| `--help` | `-h` | Print help | — |
### Reporters
15 built-in reporters:
| Reporter | Output |
|----------|--------|
| `console` | Clone list + statistics table (default) |
| `console-full` | Clone list with source snippets; with `--blame` shows side-by-side author comparison |
| `json` | `report/jscpd-report.json` |
| `xml` | `report/jscpd-report.xml` |
| `csv` | `report/jscpd-report.csv` |
| `html` | `report/jscpd-report.html` |
| `markdown` | `report/jscpd-report.md` |
| `badge` | `report/jscpd-badge.svg` + `report/jscpd-lines-badge.svg` |
| `sarif` | `report/jscpd-report.sarif` (GitHub Code Scanning) |
| `codeclimate` (alias `gitlab`) | `report/gl-code-quality-report.json` — CodeClimate issue format, ready for GitLab `artifacts:reports:codequality` |
| `openmetrics` | `report/jscpd-metrics.txt` — OpenMetrics text format, ready for GitLab `artifacts:reports:metrics` |
| `ai` | Token-efficient output for LLM pipelines |
| `xcode` | Xcode-compatible warnings |
| `threshold` | Exit 1 if duplication percentage exceeds `--threshold` |
| `silent` | No console output |
The `xml` report is always well-formed XML 1.0: a `]]>` inside a snippet is split across two CDATA sections, and characters XML cannot represent at all (NUL, ANSI escapes, form feeds and other control bytes, U+FFFE/U+FFFF) are replaced with U+FFFD in snippets and file paths, so `xmllint` and XML parsers accept reports built from files that contain them. See [`fixtures/xml-report-demo`](../fixtures/xml-report-demo/README.md).
File reporters write into the `--output` directory (default `report/`) using the `jscpd-report.*` prefix (e.g. `jscpd-report.json`, `jscpd-report.sarif`).
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
### Summary
`--summary` appends a codebase summary to the run output — the statistics jscpd already collects while scanning, aggregated to answer "where should I refactor first":
```
Summary (by tokens; 321 files, 129 folders analyzed)
Top files:
TOKENS LINES SIZE CX DUP% PATH
2052 363 11.4K 80 0.0 files.ts
...
Top folders:
FILES TOKENS LINES SIZE CX PATH
8 5264 843 26.5K 15 src/core
...
```
- **Top files** lists the top `--summary-top` files ranked by the `--summary-by` metric. Every row carries all metrics, so re-ranking by another lens is a `--summary-by size` (or `lines`, `complexity`) away.
- **Top folders** aggregates files into their direct parent directory (each file counted exactly once; no cumulative ancestor totals).
feat(summary): count complexity per function, the way each language branches The CX column was one path per file plus every branch keyword the token stream showed, and on the generic tokenizer that list was partly unreachable: it splits punctuation into single characters, so the && and || entries never matched outside JavaScript and ?? counted twice. Measured against lizard on ten GitHub-trending projects in nine languages, CX ranked files with a median Spearman correlation of 0.83 and put their size at 0.75 of lizard's. - Adjacent punctuation is joined before matching, so short-circuit operators count in every language. - Per-language rules: Rust match arms count by their =>, less one per match since N arms are N paths; Swift adds guard and Go select. Where ? also marks an optional (TypeScript, JavaScript, Swift, Kotlin, Groovy, C#) it counts only as a ternary, told apart from String? and x?.y by being written in the open; ?: is Elvis only in Kotlin and Groovy. - One path per function: by declaring keyword (def, fn, func, function, fun, and => for arrow functions), and in C, C++, Java, Objective-C and C# by the head(args) { shape told apart from if (...) {. Languages with neither keep the per-file baseline. - The body of a """ or ''' string no longer counts. The line-based tokenizer leaves its quotes in adjacent literals, and an odd number of triple quotes in such a run opens or closes the string, which handles the PEP 257 opener """Summary. that a pair-of-tokens check read backwards. This is limited to languages where """ is a delimiter: where a doubled quote is an escape (C#, VB.NET, SQL, Pascal) it swallowed a 413-branch C# file. - A keyword-shaped word the file binds as a name - case = 3, x.case, f(case, when) - is not a branch in that file. On the same ten projects the median correlation rose to 0.92 and the ratio to 1.00, and every project improved. Where CX and lizard still differ they differ on purpose: lizard counts a match once whatever its arms, and does not count ??. Detection, tokenization and clone output are untouched: the fixtures corpus reports the same 248 clones. fixtures/summary-demo has one file per language whose complexity can be counted by hand, and every CX value matches it.
2026-09-17 12:36:55 +02:00
- **CX** is a cyclomatic-complexity estimate computed from the token stream, without parsing: one path per function plus one per branch. For folders it is the per-file mean.
- *Branches* are the decision-point tokens `if`, `elif`/`elsif`/`elseif`, `unless`, `for`, `foreach`, `while`, `until`, `case`, `cond`, `when`, `catch`, `rescue`, `except`, `and`, `or`, `andalso`, `orelse`, `&&`, `||`, `?` and `??`, matched case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Some languages add their own: each Rust `match` arm (every `=>`, less one per `match`, since three arms are three paths), Swift's `guard`, Go's `select`. Where `?` also marks an optional — TypeScript, JavaScript, Swift, Kotlin, Groovy, C# — it counts only when it opens a ternary, not in `String?` or `x?.y`.
- *Functions* are counted by their declaring keyword (`def`, `fn`, `func`, `function`, `fun`, and `=>` for JavaScript arrow functions) and, in C, C++, Java, Objective-C and C#, by the `head(args) {` shape told apart from an `if (…) {`. A language with neither keeps a baseline of one path per file.
- *Not counted:* the body of a `"""` or `'''` string in the languages that have one (Python, Kotlin, Scala, Groovy, Swift, Java, Julia, Elixir, Dart), so a docstring saying "if the value is big" is not three branches; and a keyword-shaped word the file itself binds as a name — `case = 3`, `x.case`, `f(case, when)`.
Languages that branch without such tokens (Smalltalk `ifTrue:` messages, Prolog clauses) still read low, so treat CX as a ranking signal first. See [`fixtures/summary-demo`](../fixtures/summary-demo/README.md) for one file per language whose complexity can be counted by hand.
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
- **DUP%** is the share of the file's lines covered by detected clone fragments (both fragments of a clone count toward their files; display is capped at 100%).
The summary is fully opt-in and computed after detection from data already in memory, so runs without `--summary` are unaffected. It integrates with:
- `console` / `console-full` — the block shown above
- `ai` — a compact, LLM-token-efficient variant (one line per file/folder)
- `json` — an additive `summary` key in `jscpd-report.json` (absent when the flag is off, so the schema is unchanged for existing consumers)
Config file equivalents: `"summary": true`, `"summaryTop": 10`, `"summaryBy": "tokens"`.
```bash
# Refactoring hotspots: biggest files by tokens plus duplication share
jscpd ./src --summary
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
# Agent-friendly: compact clone list + compact summary
jscpd ./src --summary --reporters ai --no-tips
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
# Focus on the most complex files, top 5 lists, machine-readable
jscpd ./src --summary --summary-by complexity --summary-top 5 --reporters json
feat(rust): opt-in --summary codebase report — top files/folders by tokens, lines, size, complexity Adds a refactoring-hotspot summary computed from data the detector already holds in memory, appended to the run output when requested: - --summary enable the summary block (also `summary` in .jscpd.json) - --summary-top <n> entries per list (default 10, `summaryTop`) - --summary-by <m> ranking metric: tokens|lines|size|complexity (`summaryBy`) Output: top-N files (tokens, lines, size, complexity estimate, dup%) strictly ranked by the chosen metric — every row carries all metrics — plus a top-N folder rollup (direct-parent aggregation, each file counted once). totalFiles/totalFolders always report pre-truncation counts. Complexity is a language-agnostic cyclomatic estimate: 1 + decision-point tokens (if/elif/elsif/elseif/unless/for/foreach/while/until/case/cond/ when/catch/rescue/except/andalso/orelse/&&/||/and/or/?/??), matched ASCII-case-insensitively so uppercase-keyword languages (SQL, PL/SQL, Fortran, COBOL, BASIC) count too. Verified across all 157 fixture languages. Reporter integration: - console / console-full: aligned tables after the normal output - ai: compact one-line-per-entry block (LLM-token-efficient) - json: additive `summary` key, absent when the flag is off — schema unchanged for existing consumers Performance: the only unconditional change is capturing the file's byte size from the existing mmap; all summary work runs post-detection and only when --summary is set. hyperfine A/B vs master baseline shows identical times without the flag (39.8ms vs 40.2ms) and ~2ms summary cost when enabled. New: cpd-core/src/summary.rs (model + computation, 14 unit tests), cpd-reporter/src/summary_render.rs. ReportContext gains an optional summary reference (ReportContext::new is unchanged; with_summary added). SourceFile gains a serde-defaulted `bytes` field. 6 new CLI integration tests; full workspace suite green. Follow-ups tracked in #934: HTML report section, TypeScript parity port. Refs #934
2026-08-14 17:13:45 +02:00
```
### Complexity only
`--complexity` answers the complexity half of the summary without the clone run: files are walked and tokenized with the same filters, complexity is counted, and detection never starts (about 2.5 times faster than a clone run on a 565 MB `node_modules`). The tables are the ones above, ranked by complexity unless `--summary-by` or the `summaryBy` config key names another metric, and without the `DUP%` column. Reporters: `console`, `ai` (compact) and `json`, which writes `jscpd-complexity.json` with the same `summary` object as the clone report. It cannot be combined with `--dead-code` or `--dashboard`.
```bash
jscpd ./src --complexity --summary-top 20
jscpd ./src --complexity --reporters ai --no-tips
```
Prose and data files (markdown, reStructuredText, AsciiDoc, text, logs, CSV, JSON, YAML, TOML, INI, properties) have complexity `0` in both `--complexity` and `--summary`: an "if" in a README is a word and `||` in a lock file is a version range.
### Dashboard
`--dashboard` prints the whole picture of a project on one screen, under its [health badge](#health-score): its size and largest formats, duplication with the clone count per kind and a breakdown by format, total and mean complexity with the most complex files, and, for JavaScript, TypeScript and Python, dead code by category with the largest findings. `--summary-top N` sets the rows per list (default 5). Detection options (`--min-tokens`, `--ignore-identifiers`, `--kind`, `--ignore`, …) apply as in a normal run, and the dead-code options (`--entry`, `--dead-code-categories`, `--min-confidence`) apply to its dead-code section. Reporters: `console` (the default), `json`, which writes every section of the screen to `jscpd-dashboard.json`, `badge`, which writes `jscpd-health-badge.svg`, and `markdown`/`html`, which write the same sections to `jscpd-dashboard.md`/`jscpd-dashboard.html`.
```
── Duplication ─────────────────────────────────────────────
1.78% duplicated lines · 1 clone (1 exact)
By format:
DUP% LINES CLONES FORMAT
45.5 5 1 typescript
```
The format breakdown leaves out prose/data formats (markdown, JSON, YAML, …) and markup formats (HTML, CSS, templates, …): neither counts toward the health score's duplication share, so a row for them here would describe a number the score does not have.
The dashboard runs a clone scan and a dead-code scan side by side, so it takes about as long as the slower of the two on a small project and close to their sum on a very large one. `--workers N` is a budget for the whole run: the two scans get half of it each, and `--workers 1` runs them one after the other.
The exit gates of a clone run apply: `--threshold` compares the duplication percentage as usual, `--exit-code` is returned when clones were found, and `--fail-on-empty` fails a scan that analyzed nothing. The baseline family does not: `--baseline`, `--baseline-from-ref` and `--update-baseline` need a clone report the dashboard does not write, so they warn and are ignored, and `--fail-on-new-clones` is refused rather than passing silently. Bad dead-code options (`--dead-code-categories`, `--min-confidence`) are refused exactly as in `--dead-code`. See [`fixtures/dashboard-demo`](../fixtures/dashboard-demo/README.md) for a runnable example.
### Health score
`--health` prints one number for the state of a codebase, and `--dashboard` shows it on top:
```
Health B 74/100 █████████████████▊░░░░░░ 93 lines of code (XS)
duplication 75 █████████░░░ 5.4% in typescript (no text)
dead code 72 ████████▋░░░ 14.0%
complexity 76 █████████▏░░ 0.0% in complex files
```
How it is calculated:
1. **Three shares of the code lines.** *Duplication* is jscpd's duplication percentage over code files, and does not count a duplicated markup, stylesheet or template block (HTML, CSS, Handlebars, …): a repeating template or style rule is not the maintenance problem repeating programming logic is. Component/script languages such as Vue, Svelte, Astro and GraphQL still count in full — the exclusion follows the clone's own format, not the file it lives in, so a `.svelte` or `.vue` file's style or template block is left out of the duplication share even though the component itself counts. The console line names what it actually measured (`5.4% in typescript`) and, only when the project has files in that category, what it left out (`(no text)`, `(no markup/data)`, …) rather than a fixed disclaimer. *Dead code* is the share of lines nothing runs (JavaScript, TypeScript, Python). *Complexity* is the share of code lines that sit in complex files, those with a complexity of 50 or more — complexity hurts when it piles up, and a mean would hide that. Prose and data files (markdown, JSON, YAML, …) are not the project's code and are left out entirely, so a folder of copied JSON snapshots does not lower the score. Because every dimension is a share, a project is not penalized for being large.
2. **A sub-score per dimension** on a half-life curve, `100 · 2^(share / halfLife)`: 100 at zero, 50 at one half-life, 25 at two, with no cliff and no dead zone. The half-lives — 8.5% duplication, 7.5% dead code, 50% in complex files — are calibrated on 42 open-source projects so that the median project scores 75 in each dimension.
3. **Size** enters once more: in a small project one finding is a large share, so each share is mixed with 2000 lines of "typical project" before it is scored. At 300 lines that prior dominates; at 50,000 it no longer matters. The report shows both the measured `value` and the `adjusted` one.
4. **One score**: the weighted geometric mean of the sub-scores, so a project that is 40% dead code is not rescued by its low duplication. Grades: `A` from 85, `B` from 70, `C` from 55, `D` from 40, then `E`.
A dimension that cannot be measured is left out and named (`dead code n/a`) rather than scored as perfect: dead code is skipped when JavaScript, TypeScript and Python are under 5% of the code, and weighs as much as the share of the code it could read otherwise. Two scores are comparable only when they are built from the same dimensions.
**Other tools.** `--health-input FILE` (config key `healthInput`) adds metrics from coverage, test or security tools. A metric is either a ready 0-100 `score`, or a `value` with the `halfLife` that turns it into one; `"direction": "higher"` scores the distance to `max` (default 100):
```json
{
"metrics": [
{ "id": "coverage", "value": 81, "direction": "higher", "halfLife": 40 },
{ "id": "security", "score": 100, "weight": 2 }
]
}
```
The same object can live under `health` in `.jscpd.json`, together with the tuning of the built-in dimensions: `"health": { "duplication": { "halfLife": 5, "weight": 2 }, "deadCode": { "weight": 0 }, "complexFile": 80 }`. A weight of `0` leaves a dimension out. A metric that cannot be scored, or an unknown key, is an error.
Reporters: `console` (the badge), `ai` (one line: `health 74 B (duplication 75, dead-code 72, complexity 76; 93 code lines)`), `json` (`jscpd-health.json`: score, grade, size, and for each dimension its value, adjusted value, lines, half-life, weight and score), `badge` (`jscpd-health-badge.svg`), and `markdown`/`html` (`jscpd-health.md`/`jscpd-health.html`, the same score and dimension table). The exit gates of a clone run apply as they do to the dashboard. See [`fixtures/dashboard-demo`](../fixtures/dashboard-demo/README.md#health) for a runnable example.
feat(cli): --history, duplication trend over git history Closes #1002 (the --history half; --ratchet is deliberately not implemented, the report shows the headroom instead). `jscpd src --history v5.0.0..HEAD` (or `--history-since 2026-01-01`) lists the commits with `git log`, checks each one out into a temporary detached worktree (the --baseline-from-ref machinery, now shared through baseline_ref::map_scan_paths), scans it with the run's own configuration and keeps the totals; the current run is the series' last point. `--history-every N` keeps every Nth commit counted from the newest, `--history-limit N` (default 30) samples a long series evenly keeping both ends. Nothing runs unless one of the flags is given. Output: the console reporter appends a sparkline of the duplication percentage, a table (commit, date, files, lines, clones, dup lines, dup%, change, subject) with the change column red when duplication rose and green when it fell, the overall trend line, and, when --threshold is set and the latest value is under it, the headroom with the value the threshold could be tightened to. The json reporter adds a `history` object; the ai reporter prints one compact line per point. Other reporters are unchanged. New cpd_core::history (model, sparkline, change/headroom helpers with unit tests), cpd::history (git log parsing, sampling, worktree scans), cpd_reporter::history_render. Config keys history / historySince / historyEvery / historyLimit; action input `history`. Integration tests build a four-commit repo with fixed dates and check the JSON series, the console block, every/limit thinning and the error paths. 969 workspace tests pass, clippy clean. Docs: History section and option rows in docs/rust.md, README bullet, action input row, fixtures/history-demo/README.md with a script that builds the demo repository and the expected output. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 07:50:18 +02:00
### History
`--history <range>` answers "is duplication going up or down?" without a hosted dashboard. Every commit `git log` yields for the range is checked out into a temporary detached worktree (the same machinery as `--baseline-from-ref`), scanned with the run's own configuration, and its totals become one point of a series; the current run is the last point. Commits are scanned one after another, since each scan is already parallel across files.
```bash
jscpd src --history v5.0.0..HEAD # every commit in the range
jscpd src --history-since 2026-01-01 # every commit since a date, up to HEAD
jscpd src --history main --history-since 2026-06-01 --history-every 5 --history-limit 12
```
The `console` and `console-full` reporters append a block with a bar chart of the duplication percentage (its y-axis spans the series' own min and max, so small drifts stay visible), the table, the change from the previous point (red when duplication rose, green when it fell), the overall trend, and, when `--threshold` is set and the latest value sits below it, the headroom:
feat(cli): --history, duplication trend over git history Closes #1002 (the --history half; --ratchet is deliberately not implemented, the report shows the headroom instead). `jscpd src --history v5.0.0..HEAD` (or `--history-since 2026-01-01`) lists the commits with `git log`, checks each one out into a temporary detached worktree (the --baseline-from-ref machinery, now shared through baseline_ref::map_scan_paths), scans it with the run's own configuration and keeps the totals; the current run is the series' last point. `--history-every N` keeps every Nth commit counted from the newest, `--history-limit N` (default 30) samples a long series evenly keeping both ends. Nothing runs unless one of the flags is given. Output: the console reporter appends a sparkline of the duplication percentage, a table (commit, date, files, lines, clones, dup lines, dup%, change, subject) with the change column red when duplication rose and green when it fell, the overall trend line, and, when --threshold is set and the latest value is under it, the headroom with the value the threshold could be tightened to. The json reporter adds a `history` object; the ai reporter prints one compact line per point. Other reporters are unchanged. New cpd_core::history (model, sparkline, change/headroom helpers with unit tests), cpd::history (git log parsing, sampling, worktree scans), cpd_reporter::history_render. Config keys history / historySince / historyEvery / historyLimit; action input `history`. Integration tests build a four-commit repo with fixed dates and check the JSON series, the console block, every/limit thinning and the error paths. 969 workspace tests pass, clippy clean. Docs: History section and option rows in docs/rust.md, README bullet, action input row, fixtures/history-demo/README.md with a script that builds the demo repository and the expected output. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 07:50:18 +02:00
```
History (since 2026-01-01: 4 commits + working tree)
duplicated lines, % of all lines: min 0.0% max 58.1% now 42.9%
58.1% ┤ ██
│ ██
│ ▇▇ ██ ▇▇ ▇▇
29.0% ┤ ██ ██ ██ ██
│ ██ ██ ██ ██
│ ██ ██ ██ ██
│ ██ ██ ██ ██
0.0% ┤ ▁▁ ██ ██ ██ ██
└────────────────
1 2 3 4 5
# COMMIT DATE FILES LINES CLONES DUP LINES DUP% CHANGE SUBJECT
1 0a3e3d5 2026-08-01 1 11 0 0 0.0% initial helpers
2 6728f91 2026-08-08 2 21 1 9 42.9% +42.9 copy total() into b.js
3 aff51e5 2026-08-15 3 31 2 18 58.1% +15.2 and again into c.js
4 817b39d 2026-08-22 2 21 1 9 42.9% -15.2 b.js imports total() instead
5 working 2026-09-12 2 21 1 9 42.9% = (uncommitted changes)
feat(cli): --history, duplication trend over git history Closes #1002 (the --history half; --ratchet is deliberately not implemented, the report shows the headroom instead). `jscpd src --history v5.0.0..HEAD` (or `--history-since 2026-01-01`) lists the commits with `git log`, checks each one out into a temporary detached worktree (the --baseline-from-ref machinery, now shared through baseline_ref::map_scan_paths), scans it with the run's own configuration and keeps the totals; the current run is the series' last point. `--history-every N` keeps every Nth commit counted from the newest, `--history-limit N` (default 30) samples a long series evenly keeping both ends. Nothing runs unless one of the flags is given. Output: the console reporter appends a sparkline of the duplication percentage, a table (commit, date, files, lines, clones, dup lines, dup%, change, subject) with the change column red when duplication rose and green when it fell, the overall trend line, and, when --threshold is set and the latest value is under it, the headroom with the value the threshold could be tightened to. The json reporter adds a `history` object; the ai reporter prints one compact line per point. Other reporters are unchanged. New cpd_core::history (model, sparkline, change/headroom helpers with unit tests), cpd::history (git log parsing, sampling, worktree scans), cpd_reporter::history_render. Config keys history / historySince / historyEvery / historyLimit; action input `history`. Integration tests build a four-commit repo with fixed dates and check the JSON series, the console block, every/limit thinning and the error paths. 969 workspace tests pass, clippy clean. Docs: History section and option rows in docs/rust.md, README bullet, action input row, fixtures/history-demo/README.md with a script that builds the demo repository and the expected output. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 07:50:18 +02:00
Trend: +42.9 points since 0a3e3d5 (2026-08-01)
Threshold 50.0% has 7.1 points of headroom: the series never needed it, tighten it with --threshold 42.9
```
That last line is the manual form of a ratchet: jscpd reports how far the threshold could be tightened and leaves the change to you. The `json` reporter adds a `history` object (`range`, `threshold`, `points[]` with `commit`, `short`, `date`, `subject`, `sources`, `lines`, `tokens`, `clones`, `duplicatedLines`, `percentage`), and the `ai` reporter prints one compact line per point. Other reporters are unchanged.
`--history-every N` keeps every Nth commit counted back from the newest, `--history-limit N` (default 30) samples a longer series evenly while keeping both ends. Paths that did not exist at a commit count as zero. The range needs the commits locally: in a shallow CI checkout fetch them first (`fetch-depth: 0`). Config keys: `history`, `historySince`, `historyEvery`, `historyLimit`. See [`fixtures/history-demo`](../fixtures/history-demo/README.md) for a runnable example.
### Baseline
Gate CI on *new* duplication only, tolerating clones that already exist. A baseline file records a content-hash fingerprint per accepted clone (the same hash the SARIF reporter emits as `partialFingerprints["jscpdCloneHash/v1"]`); clones absent from it are reported as new.
```bash
# Create or refresh the committed baseline
jscpd --baseline .jscpd-baseline.json --update-baseline .
# Fail when new clones appear (independent of --threshold)
jscpd --baseline .jscpd-baseline.json --fail-on-new-clones .
# Allow up to 3 new clones
jscpd --baseline .jscpd-baseline.json --fail-on-new-clones 3 .
# Stateless variant for PR gates: compare against a git ref instead of a file
jscpd --baseline-from-ref origin/main --fail-on-new-clones .
```
`--baseline-from-ref` checks the base ref's tree out into a temporary detached worktree, scans it with the same configuration, and compares fingerprints in memory. It costs a second scan of the corpus; the committed file needs only one. In CI, fetch the ref first (`fetch-depth: 0` or `git fetch origin main`).
New-clone information flows through the reporters: `[NEW]` markers in `console`/`console-full`, per-clone `isNew` plus `newClones` / `newDuplicatedLines` statistics in `json`, level `error` in `sarif`, severity `major` in `codeclimate`, and `jscpd_new_clones` / `jscpd_new_duplicated_lines` gauges in `openmetrics`.
Config file keys: `baseline`, `baselineFromRef`, `failOnNewClones`.
### Blame Output
With `--blame --reporters console-full`, clones are displayed with a side-by-side author comparison:
```
176 │ Andrii Kucherenko │ <= │ 196 │ Josh Soref │ ## TODO
177 │ Andrii Kucherenko │ <= │ 197 │ Josh Soref │
180 │ Andrii Kucherenko │ == │ 200 │ Andrii Kucherenko │ ## License
```
`==` means both lines were written by the same author; `<=` means different authors (potential copy).
feat(cli): non-zero exit for unknown format, missing path, failed reporter; add --fail-on-empty Closes #1047. Four situations used to write an empty report and exit 0, so a CI job that checks only the exit code saw a green run: - `--format` naming a format that is not supported (a warning since #964) is now `Error: --format: 'x' is not a supported format`, exit 1. Names introduced through --formats-exts or --formats-names stay accepted. - A scan path that does not exist is `Error: path does not exist: <p>`, exit 1, before anything runs. - A reporter that fails to write its output still prints the existing `Reporter '<name>' error: ...` line; the run now ends with `ERROR: a reporter failed to write its output` and exit 1, after the other reporters have run. - A scan that analyzes no files (paths exist, but nothing matched the --format/--ignore/--pattern filters or every file was below --min-tokens) prints `Warning: jscpd analyzed no files` and still exits 0, so an intentionally empty tree passes. The new `--fail-on-empty` flag (config key `failOnEmpty`, action input `fail-on-empty`) makes it exit 1. Reports are written before the check. Docs: an "Exit codes" section in docs/rust.md, option rows in docs/rust.md and docs/ci-and-hooks.md, a README feature bullet. Fixtures: fixtures/fail-on-empty-demo with a `code/` clone pair, a `nothing/` comment-only file, and a README quoting every command's output and exit code. Tests: the #964 warning test becomes an error test, plus integration tests for each new exit path and for the config key; 531 tests pass, clippy clean. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-11 08:45:09 +02:00
### Exit codes
| Code | When |
|------|------|
| 0 | The scan ran and no gate fired; clones may still have been found and reported |
| 1 | `--threshold` exceeded; `--fail-on-new-clones` exceeded; `--fail-on-empty` and no file was analyzed; a reporter failed to write its output; a scan path does not exist; `--format` names a format that is not supported; an invalid flag combination or an unreadable `--config` file |
| N | `--exit-code N` (default 1) when at least one clone was found |
| 2 | Command-line parse errors: an unknown flag or a missing value |
A scan that analyzes no files, because the paths exist but nothing matched the `--format`, `--ignore` and `--pattern` filters or every file was below `--min-tokens`, prints `Warning: jscpd analyzed no files` and still exits 0, so an intentionally empty tree does not break a pipeline. `--fail-on-empty` (config key `failOnEmpty`) turns that into an error for CI jobs where an empty result means a misconfigured scan. Reports are written before the check, so the empty report is still there to inspect. Unknown reporter names remain a warning. See [`fixtures/fail-on-empty-demo`](../fixtures/fail-on-empty-demo/README.md) for a runnable example.
### Examples
```bash
# Scan a directory
jscpd /path/to/source
# or
jscpd /path/to/source
# Tune sensitivity and pick reporters
jscpd /path/to/source --min-tokens 30 --min-lines 3 --reporters console,json,html
# Git blame with side-by-side author comparison
jscpd /path/to/source --blame --reporters console-full
# List supported formats
jscpd --list
# Use multiple reporters with custom output
jscpd ./src -r console,json,sarif -o ./reports
# Skip clones within the same directory
jscpd --skip-local /path/to/source
# Monorepo: don't compare team-owned packages with each other
jscpd . --skip-isolated "packages/team-a|packages/team-b"
```
### Config File
Options can also come from a `.jscpd.json` config file (camelCase keys; existing v4 config files work unchanged):
```json
{
"path": ["./src"],
"reporters": ["console", "json"],
"minLines": 5,
"minTokens": 50,
"threshold": 0,
"format": ["javascript", "typescript"],
"ignore": ["**/node_modules/**"],
"ignorePattern": ["generated by .*"],
feat: Type-2 clone detection (--ignore-identifiers, --ignore-literals, --ignore-annotations) Closes #998. Three opt-in flags (config keys ignoreIdentifiers, ignoreLiterals, ignoreAnnotations) normalize token classes before hashing so that blocks which differ only in names, values or annotations are detected: - identifiers hash as `$id`; keywords are kept (the JS/TS tokenizer classifies them, other languages use a built-in common-keyword list) - string literals hash as `$str`, numeric literals as `$num` - `@Name`, `@a.b.Name` and `@Name(...)` runs are dropped in Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript and TypeScript Each clone now carries `kind: exact | renamed`. DetectionToken gains a raw_hash (equal to hash unless normalization rewrote the token); the PreparedSource materializes raw hashes only when a token was normalized, and the detector compares raw hashes over the matched run to classify a pair. A dropped annotation salts the raw hash of the token before it, so a pair differing only in annotations inside the matched run is `renamed`. Reporters: console prints `Clone found (fmt, renamed)`, ai appends `(renamed)`, json adds "kind", sarif uses rule jscpd/similar-code (declared only when referenced), codeclimate the same check_name. Default runs are unchanged apart from the additive "kind": "exact" JSON field. Also: GitHub Action inputs, docs section, fixtures/type2-demo with a README of runnable commands, unit tests in tokenizer/core/reporter, CLI flag tests, and a binary-level integration test.
2026-09-05 11:06:23 +02:00
"ignoreIdentifiers": false,
"ignoreLiterals": false,
"ignoreAnnotations": false,
"maxGapLines": 0,
"gitignore": true,
"mode": "mild"
}
```
Isolation groups use the nested-array form in the config file: `"skipIsolated": [["packages/a", "packages/b"]]`.
Config discovery order: `--config <path>``.jscpd.json``.config/jscpd.json` (the [dot-config convention](https://dot-config.github.io/), also accepts `.config/.jscpd.json`) → the `jscpd` key in `package.json`.
### Ignoring source regions
Use `--ignore-pattern` (or `ignorePattern` in `.jscpd.json`) when only part of a file should be excluded. Each regular expression is matched against the raw source text before tokenization, and tokens that overlap a match are omitted from clone detection. This matches the v4 behavior; v5 uses [Rust regex syntax](https://docs.rs/regex/latest/regex/#syntax), which does not support look-around or backreferences. A pattern that fails to compile is skipped with a warning.
The CLI flag splits its value on commas, so a regular expression that itself contains a comma (a `{1,3}` repetition, a character class such as `[,;]`) must be set in the config file instead.
For a one-off region, place `jscpd:ignore-start` and `jscpd:ignore-end` in comments that are valid for the source language:
```javascript
// jscpd:ignore-start
const generatedLookup = {
alpha: 1,
beta: 2,
};
// jscpd:ignore-end
```
All source between the markers is excluded during tokenization. This works in every detection mode.
License headers are a common use case in languages whose comments are tokenized: C#, Java, Go, Python and every other format handled by the generic tokenizer. JavaScript and TypeScript comments never produce tokens, so a header in those files is never part of a clone and needs no exception. Mark a header explicitly when only a few files need it:
```csharp
// jscpd:ignore-start
/*
* Copyright 2026 Example Authors
* Licensed under the Example License
*/
// jscpd:ignore-end
```
For the same block-comment header across many files, configure one anchored, dot-all regular expression instead:
```json
{
"ignorePattern": ["(?s)\\A/\\*.*?\\*/"]
}
```
The JSON escaping above produces the Rust regular expression `(?s)\A/\*.*?\*/`, which matches the first block comment only when it starts at the beginning of the file. Adjust the expression to the comment style and exact license text used by the project.
`--mode weak` is a blunter alternative: it drops every comment from detection in every language, so duplicated comments elsewhere in the code are ignored too.
feat: Type-2 clone detection (--ignore-identifiers, --ignore-literals, --ignore-annotations) Closes #998. Three opt-in flags (config keys ignoreIdentifiers, ignoreLiterals, ignoreAnnotations) normalize token classes before hashing so that blocks which differ only in names, values or annotations are detected: - identifiers hash as `$id`; keywords are kept (the JS/TS tokenizer classifies them, other languages use a built-in common-keyword list) - string literals hash as `$str`, numeric literals as `$num` - `@Name`, `@a.b.Name` and `@Name(...)` runs are dropped in Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript and TypeScript Each clone now carries `kind: exact | renamed`. DetectionToken gains a raw_hash (equal to hash unless normalization rewrote the token); the PreparedSource materializes raw hashes only when a token was normalized, and the detector compares raw hashes over the matched run to classify a pair. A dropped annotation salts the raw hash of the token before it, so a pair differing only in annotations inside the matched run is `renamed`. Reporters: console prints `Clone found (fmt, renamed)`, ai appends `(renamed)`, json adds "kind", sarif uses rule jscpd/similar-code (declared only when referenced), codeclimate the same check_name. Default runs are unchanged apart from the additive "kind": "exact" JSON field. Also: GitHub Action inputs, docs section, fixtures/type2-demo with a README of runnable commands, unit tests in tokenizer/core/reporter, CLI flag tests, and a binary-level integration test.
2026-09-05 11:06:23 +02:00
### Type-2 clones: renamed identifiers, literals and annotations
By default two blocks are a clone only when their tokens are identical. Three opt-in flags normalize token classes before hashing so that blocks which differ only in names or values match as well (Type-2 clones, the same idea as PMD CPD's `--ignore-identifiers` / `--ignore-literals` / `--ignore-annotations`):
| Flag | Config key | What is normalized |
|------|------------|--------------------|
| `--ignore-identifiers` | `ignoreIdentifiers` | Every identifier hashes as `$id`. Keywords are kept, so `if` never matches `while`: the JavaScript/TypeScript tokenizer classifies keywords itself, other languages use a built-in list of common keywords |
| `--ignore-literals` | `ignoreLiterals` | String literals hash as `$str`, numeric literals as `$num`; `true`, `null` and regex literals keep their value |
| `--ignore-annotations` | `ignoreAnnotations` | `@Name`, `@a.b.Name` and `@Name(...)` runs are dropped in Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript and TypeScript. Formats where `@` prefixes a variable or directive (Ruby, Perl, Razor, T-SQL, CSS) are untouched |
Positions in reports still point at the original source. Each clone carries a `kind`: `exact` when the raw tokens of both fragments are identical, `renamed` when they match only after normalization. The console prints `Clone found (javascript, renamed)`, the `ai` reporter appends `(renamed)`, the JSON report adds `"kind": "renamed"` to each duplicate, SARIF reports renamed clones under the rule `jscpd/renamed-code` (exact ones stay `jscpd/duplicate-code`), and Code Climate uses the same two `check_name` values. A run without these flags reports only `exact` clones and its output is unchanged. When `--max-gap-lines` merges two renamed halves, the result is `similar`: a merged clone is no longer identical even after normalization, so `similar` takes precedence over `renamed`.
feat: Type-2 clone detection (--ignore-identifiers, --ignore-literals, --ignore-annotations) Closes #998. Three opt-in flags (config keys ignoreIdentifiers, ignoreLiterals, ignoreAnnotations) normalize token classes before hashing so that blocks which differ only in names, values or annotations are detected: - identifiers hash as `$id`; keywords are kept (the JS/TS tokenizer classifies them, other languages use a built-in common-keyword list) - string literals hash as `$str`, numeric literals as `$num` - `@Name`, `@a.b.Name` and `@Name(...)` runs are dropped in Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript and TypeScript Each clone now carries `kind: exact | renamed`. DetectionToken gains a raw_hash (equal to hash unless normalization rewrote the token); the PreparedSource materializes raw hashes only when a token was normalized, and the detector compares raw hashes over the matched run to classify a pair. A dropped annotation salts the raw hash of the token before it, so a pair differing only in annotations inside the matched run is `renamed`. Reporters: console prints `Clone found (fmt, renamed)`, ai appends `(renamed)`, json adds "kind", sarif uses rule jscpd/similar-code (declared only when referenced), codeclimate the same check_name. Default runs are unchanged apart from the additive "kind": "exact" JSON field. Also: GitHub Action inputs, docs section, fixtures/type2-demo with a README of runnable commands, unit tests in tokenizer/core/reporter, CLI flag tests, and a binary-level integration test.
2026-09-05 11:06:23 +02:00
```bash
jscpd --ignore-identifiers src/ # function a(x) {…} matches function b(y) {…}
jscpd --ignore-identifiers --ignore-literals src/ # …and 10 matches 25, 'dev' matches 'prod'
jscpd --ignore-annotations src/main/java/ # @Override / @Deprecated no longer split a clone
```
Normalized runs find more and longer clones than exact runs, so their snippet fingerprints (`jscpdCloneHash/v1`) differ from an exact run's. Keep a separate `--baseline` file per configuration. See [`fixtures/type2-demo`](../fixtures/type2-demo/README.md) for a runnable example of each flag.
### Type-3 clones: near-miss merging with `--max-gap-lines`
A copy with a line inserted, removed or changed in the middle shows up as two shorter exact clones with a gap between them, each of which must clear `--min-tokens` and `--min-lines` on its own. `--max-gap-lines N` (config key `maxGapLines`) merges clones of the same file pair whose fragments follow each other in *both* files with at most `N` unmatched lines in between, and reports the result as one clone of kind `similar`:
```bash
jscpd src/ # a.js 1-4 ↔ b.js 1-4, a.js 4-9 ↔ b.js 5-10: two exact clones
jscpd --max-gap-lines 1 src/ # Clone found (javascript, similar (gap) ~0.85): a.js 1-9 ↔ b.js 1-10
```
A merged clone's `tokens` is the number of matched tokens and `similarity` is that number divided by the tokens of the longer merged span, so a single inserted line in a 60-token block gives roughly `0.9`. Chains of matches merge transitively, and the merge is applied after every other filter (`--min-lines`, `--skip-local`, `--skip-isolated`). Because merging only ever joins clones the exact run already reported, it cannot introduce a match that was not there; it removes fragmentation. It applies to every language.
Reporting: the console prints `Clone found (javascript, similar (gap) ~0.85)`, the `ai` reporter appends `[~0.85 gap]`, the JSON report adds `"kind": "similar"`, a `"similarity"` value and `"method": "gap"`, SARIF files merged clones under `jscpd/similar-code` with `similarity` and `similarity_method` properties, and Code Climate uses the same `check_name`. The method is shown because the two near-miss mechanisms score on different scales: `gap` is matched tokens over the merged span, `ast` (from `--similarity`, below) is structural overlap of whole functions. A merge is refused when its similarity would fall below `0.5`, that is when the gap holds more tokens than the halves match (one very long inserted line, say); the halves are then reported separately as before. Duplicated-line statistics count only the matched lines of a merged clone, so enabling the merge does not move `--threshold`. With the default `0` the merge pass is skipped entirely and output is identical to earlier releases. See [`fixtures/type3-demo`](../fixtures/type3-demo/README.md) for a runnable example.
### Filtering by kind with `--kind`
`--kind` (config key `kind`) keeps only the clones of the kinds it lists: `exact`, `renamed`, `similar`, or one of the two mechanisms behind `similar`, `gap` (`--max-gap-lines`) and `ast` (`--similarity`). Statistics, `--threshold` and every reporter see the filtered list. The filter never switches a detector on: `--kind ast` without `--similarity` warns that no such clones can be found, and an unknown kind is an error, so a typo cannot turn a scan silently clean.
```bash
jscpd --ignore-identifiers --kind renamed src/ # only the renamed copies
jscpd --max-gap-lines 2 --similarity 0.8 --kind gap,ast src/ # only near-miss clones
```
See [`fixtures/type3-demo`](../fixtures/type3-demo/README.md#keeping-one-kind---kind) for a runnable example.
### Function-level similarity with `--similarity`
Edits spread through a function rather than concentrated in one gap still escape a token window. `--similarity RATIO` (config key `similarity`, a number in `(0, 1]`; the default `1` means exact matches only, so the pass never runs until you set a lower value) compares whole functions instead: every function declaration, function expression, method and arrow function in a JavaScript, TypeScript, JSX or TSX file is summarized by the bag of 4-grams over the pre-order sequence of its syntax-tree node *types*, and two functions are reported as one `similar` clone when the weighted Jaccard index of their bags reaches `RATIO`. Names and literal values are not part of the summary, so a renamed copy scores `1.0`; one inserted line scores about `0.9`; two inserted statements plus renames score about `0.75`. Candidates come from a MinHash index, so the search stays close to linear in the number of functions.
```bash
jscpd --similarity 0.85 src/ # near-identical structure: renames, literal changes, a one-line edit
jscpd --similarity 0.7 src/ # looser: a couple of added or removed statements
```
Functions must clear `--min-tokens` and `--min-lines` on their own, nested functions are never paired with their parent, and a pair that an exact, renamed or merged clone already covers is not reported again. Reporting is the same as for merged clones except for the method: the console prints `Clone found (javascript, similar (ast) ~0.75)`, the `ai` reporter `[~0.75 ast]`, JSON carries `"method": "ast"` and SARIF `similarity_method`; `tokens` is the smaller function's token count and the fragments span the whole functions. Values outside `(0, 1]` print a warning and fall back to `1`.
Scoring needs a syntax tree, and today only JavaScript/TypeScript have one (oxc). Each language plugs in through the `FunctionExtractor` trait in `cpd-tokenizer` (`functions.rs`): a grammar id, the formats it serves, and a walk that opens a function at every function-like node and records the node-type sequence inside it. Signatures carry their grammar id and are only compared within one grammar, so a tree-sitter-backed extractor for another language is a self-contained addition; the scoring, CLI, MCP tool and reporters need no change. Formats without an extractor are a silent no-op. The MCP `check_duplication` tool accepts the same `similarity` argument and returns the structurally similar project functions for each function in the snippet.
## How detection works
jscpd is a token-based detector, but the tokens come from each language's own syntax rather than from splitting text on whitespace. A scan goes through these stages:
1. **Format detection.** The file extension (or a name such as `Makefile` / `Dockerfile`, see `--formats-names`) selects one of the 224 formats, and the format selects the tokenizer.
2. **Tokenization.** Every format has its comment style (`//` and `/* */`, `#`, `--`, Lua's `--[[ ]]`, `;`, Visual Basic's `'`, none for Markdown) and string-literal rules, so a comment marker inside a string, or a `/*` in Markdown prose, does not swallow the rest of the file. Each token is classified as identifier, literal, punctuation, comment or whitespace.
- **JavaScript, TypeScript, JSX, TSX** are tokenized by the [oxc](https://oxc.rs) parser: template literals, regular expressions, JSX and decorators come out as the tokens the language defines, and a recoverable parse error does not change the stream. With `--cross-formats`, erasable TypeScript-only syntax (type annotations, interfaces, type aliases, generics, access modifiers) is removed via the syntax tree so the remaining tokens match the equivalent JavaScript; constructs with runtime meaning (`enum`, non-declare `namespace`, parameter properties) are kept.
- **Vue, Svelte, Astro** files are split into `<template>`, `<script>` and `<style>` blocks, and each block is tokenized as the language its `lang` attribute names. **Markdown** fences are tokenized as the language of the fence. **Razor** views separate C# from HTML. Clones are reported with the line range of the block, and a `<script lang="ts">` block matches `.ts` files.
3. **What counts.** `--mode mild` (default) drops whitespace tokens, `--mode weak` also drops comments, `--mode strict` keeps every token. `jscpd:ignore-start` / `jscpd:ignore-end` comments exclude a region and `--ignore-pattern` regular expressions exclude whatever they match; skipped tokens leave the stream without shifting the positions reported for the rest.
4. **Normalization (opt-in).** `--ignore-identifiers` hashes every identifier as the same placeholder but leaves keywords alone (the oxc token kinds for JS/TS, a shared keyword table for other languages); `--ignore-literals` does the same for strings and numbers; `--ignore-annotations` drops `@Name` and `@Name(...)` sequences only in the languages where `@` means an annotation or decorator (Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JavaScript, TypeScript), never in Ruby, Perl, T-SQL, Razor or CSS, where it means something else.
5. **Matching.** A rolling [Rabin-Karp](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm) hash over the token stream finds every repeated window of at least `--min-tokens` tokens and `--min-lines` lines, within a format and across the formats that share a pool.
6. **Near-miss passes (opt-in).** `--max-gap-lines` merges clone pieces separated by a few edited lines into one `similar` clone; `--similarity` extracts JavaScript/TypeScript functions from the syntax tree and compares their node-type sequences, so two functions with the same structure match regardless of names, literals or scattered edits.
What jscpd does not do is semantic analysis: two functions that compute the same result with different code (Type-4 clones) are out of scope, as they are for every token-based detector. See [Types of Code Clones](https://jscpd.dev/guides/clone-types) for where the line sits.
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
## Dead code detection (`--dead-code`)
jscpd answers two questions about a codebase. `jscpd .` asks what is written
twice; `jscpd --dead-code .` asks what is never run. The second is a separate
engine — **basta** — that ships inside the same binary and also stands alone
as a `basta` command.
```bash
# Anything nothing runs, in the current project
jscpd --dead-code .
# `--basta` is the same flag
jscpd --basta src
# Or the standalone binary, with no duplication half
basta src
```
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
It supports **JavaScript, TypeScript, JSX, TSX, Vue, Svelte, Astro and Python** — ESM and
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
CommonJS alike: `require('./x')`, `const { a } = require('./x')`,
`module.exports = { a, b }`, `exports.a = …` and a literal `import('./x')`
are all edges in the graph, not just `import` and `export`. A run walks with
the same filters as a duplication run — `--ignore`, `--format`, `.gitignore`
handling, `--max-size`, `--follow-symlinks` — and reports through the same
reporter names, so `-r sarif -o report` means the same thing in both modes.
### What it reports
| Category | What it means |
| ---------------- | ----------------------------------------------------------------- |
| `unused-file` | No entry point reaches the file through the import graph |
| `unused-export` | An exported name no reachable module imports |
| `unused-symbol` | A module-private declaration nothing reaches |
| `unused-import` | An import binding with no references |
| `unused-member` | A class or enum member whose name is never read (opt-in) |
Pick a subset with `--dead-code-categories`, or ask for everything:
```bash
jscpd --dead-code src --dead-code-categories unused-export,unused-import
jscpd --dead-code src --dead-code-categories all
```
`unused-member` is off by default: without type information, `x.render()`
could be a call to any `render` in the project, so the rule is the least
certain of the five.
### How it decides
Everything rests on the entry points, because every finding is the answer to
*nothing reaches this*. They come from three places, in decreasing order of
authority:
1. **Manifests.** `package.json`'s `main`, `module`, `bin`, `exports`,
`files` and `scripts`; `pyproject.toml`'s `[project.scripts]` and
entry-point tables. A manifest that names a built file (`./dist/index.js`)
is mapped back to the source it was built from, since that is what the
repository holds. A source file listed under `files` ships to every
consumer, so it is a public surface whether or not the package's own entry
imports it.
2. **Conventions.** `src/index.ts`, `__main__.py`, `manage.py`, a framework's
`pages/` and `app/` routes, `*.config.ts`, a `.d.ts` ambient declaration, a
file with a shebang, a Python `if __name__ == "__main__"` guard, and a
package's `__init__.py`.
3. **Scripts.** A shell script, a CI workflow, a Makefile or a Dockerfile in
the tree that names a source file by path runs it, copies it or ships it.
Those files are not JavaScript or Python, so nothing imports *from* them —
but `publish.sh` requiring `./platform-map.js` is as real a use as any
`import`, and the file it names is an entry point.
4. **You.** `--entry <glob>`, repeatable, which adds entry points and never
removes one.
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
Import paths are then read the way the project's own build reads them, since
that is where a real project keeps half its graph:
- **Aliases** from `tsconfig.json`/`jsconfig.json` `paths`, from
`vite.config.*` `resolve.alias`, and from `svelte.config.*` `kit.alias`.
SvelteKit's `$lib` needs no config: the `.svelte-kit/tsconfig.json` that
declares it is generated at build time and never committed.
- **Globs.** ``import(`./pages/${name}.vue`)`` and
fix(dead-code): address review on globs, aliases and component markup Copilot's review of #1062 raised seven points; each checked out and each is fixed with a test that fails without it. - A glob keeps its pattern. `import.meta.glob('./locales/*.js')` and import(`./pages/${name}.vue`) used to keep every file under the directory alive; they now reach what the pattern matches, `*` staying within one segment as it does for the bundler. On Firefly an image glob, '../../**/*.{png,jpg}', had been keeping all of src/ alive. - Every pattern of an `import.meta.glob([...])` array is kept, not the first. - A declared alias is not second-guessed: when `@` points at src/ and the file is missing there, the `@/` project-root fallback no longer finds a different file. A catch-all `*` path claims no prefix and does not count. - Astro client <script> blocks are read as the modules Astro bundles them into, so what they import is used. A script with any attribute but `src` is left to the browser, as Astro leaves it. - import('./x') in markup is found only inside expressions, not in comments or plain text. - A quoted attribute value is an expression only on a directive (`:prop`, `@click`, `#slot`, `v-*`); elsewhere only its `{...}` interpolations are, so `class="card"` no longer credits a declaration named `card`. - An object key in markup, `{ label: value }`, is not a read. Re-measuring on the thirty trending projects also exposed `?raw` imports, as in `import script from './panzoom.js?raw'`: a bundler query now is stripped before resolving. On one snapshot of those projects the previous release reports 1093 unused files and this branch 481, with the share some import names falling from 83% to 62%; the CHANGELOG now quotes those numbers instead of ones measured against a development baseline. Components used only from .mdx content are still reported, and the docs say so.
2026-09-17 13:49:55 +02:00
`import.meta.glob('./locales/*.js')` reach every file their pattern matches,
as a bundler expands them: `pages/*.vue` includes `pages/home.vue` but not
`pages/archive/old.vue`.
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
- **Workspace packages.** In a monorepo, `@acme/ui/date` resolves through
that package's own `package.json``exports` subpath by subpath, preferring
source conditions over `./dist` — wherever in the workspace it is imported
from.
- **Markup.** A `.vue`, `.svelte` or `.astro` file is read whole: `<Foo />`,
fix(dead-code): address review on globs, aliases and component markup Copilot's review of #1062 raised seven points; each checked out and each is fixed with a test that fails without it. - A glob keeps its pattern. `import.meta.glob('./locales/*.js')` and import(`./pages/${name}.vue`) used to keep every file under the directory alive; they now reach what the pattern matches, `*` staying within one segment as it does for the bundler. On Firefly an image glob, '../../**/*.{png,jpg}', had been keeping all of src/ alive. - Every pattern of an `import.meta.glob([...])` array is kept, not the first. - A declared alias is not second-guessed: when `@` points at src/ and the file is missing there, the `@/` project-root fallback no longer finds a different file. A catch-all `*` path claims no prefix and does not count. - Astro client <script> blocks are read as the modules Astro bundles them into, so what they import is used. A script with any attribute but `src` is left to the browser, as Astro leaves it. - import('./x') in markup is found only inside expressions, not in comments or plain text. - A quoted attribute value is an expression only on a directive (`:prop`, `@click`, `#slot`, `v-*`); elsewhere only its `{...}` interpolations are, so `class="card"` no longer credits a declaration named `card`. - An object key in markup, `{ label: value }`, is not a read. Re-measuring on the thirty trending projects also exposed `?raw` imports, as in `import script from './panzoom.js?raw'`: a bundler query now is stripped before resolving. On one snapshot of those projects the previous release reports 1093 unused files and this branch 481, with the share some import names falling from 83% to 62%; the CHANGELOG now quotes those numbers instead of ones measured against a development baseline. Components used only from .mdx content are still reported, and the docs say so.
2026-09-17 13:49:55 +02:00
`{{ … }}`, directive and `{…}` attribute expressions and
`{#await import('./x.svelte')}` are uses too, and an Astro client `<script>`
is read as the module Astro bundles it into.
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
From there it is two breadth-first walks: over import edges to decide which
files run, and over reference edges to decide which declarations run. Because
it is a traversal and not a reference count, dead code cascades — a helper
whose only caller is dead is reported too.
Test files are always entry points, so a test file is never "unused". Dead
code *inside* one is off by default; `--include-tests` turns it on. An export
only the test suite imports is reported separately, and says so.
### Confidence
Static analysis of JavaScript and Python cannot be certain, so basta does not
pretend. Every finding carries a score from 0 to 100 and, below 100, the
reasons it might be wrong:
```
Unused exports (1)
- function src/registry.ts:12:17 registerPlugin medium 60% 14 lines
↳ carries an unrecognised decorator; the name appears in a string literal
```
The score starts from a base set by how much inference the rule needs — an
unreferenced import binding is a fact, an unused class member is a guess —
and loses points for each piece of contrary evidence: a file that calls
`eval` or `getattr`, a decorator the analyzer does not recognise, a wildcard
re-export, a name that appears in a string, a file in the scan that did not
parse.
`--min-confidence` sets the floor; the default is 60.
```bash
# Only what basta is sure of
jscpd --dead-code src --min-confidence 90
# Everything, including the guesses, with their reasons
jscpd --dead-code src --min-confidence 0
```
Raising the floor is the first thing to try on a codebase that does something
unusual, and `--entry` is the second.
A file that fails to parse lowers the confidence of every finding in the run,
because its references are unknown. The console trailer names such files (up
to ten; the JSON report carries the full list under
`statistics.unparsedFiles`), so a broken test fixture can be told apart from
a real gap in the parser.
### In CI
```bash
# Fail when dead code exceeds 2% of the codebase
jscpd --dead-code src --threshold 2
# Fail on any finding at all
jscpd --dead-code src --exit-code 1
# Publish to GitHub code scanning
jscpd --dead-code src -r sarif -o report
```
See [`fixtures/dead-code-demo`](../fixtures/dead-code-demo/README.md) for a
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
runnable example of every category in TypeScript, Python and single-file
components, plus a Vite project and a pnpm workspace whose imports only their
build can resolve.
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
### What it does not do
- **No type inference.** A member access matches members by name across the
whole project, which is why `unused-member` is opt-in.
feat(dead-code): read components, bundler aliases, globs and workspaces basta reported most of a real Vue, Svelte or Astro project as dead: on thirty GitHub-trending projects in those three ecosystems it flagged 1572 unused files, and some import in the tree contradicted 78% of them. The misses were almost never in the analysis itself; they were imports only the project's own build knows how to resolve. This reads them the way the build does. - Single-file components are read whole. The script of a .vue, .svelte or .astro file is masked in place so positions stay real, and the markup is scanned for the names it reads: <Foo />, kebab-case spellings, {{ }} interpolations, Svelte actions, attribute expressions, and a literal import() written in markup. - Aliases come from vite.config.* resolve.alias and svelte.config.* kit.alias as well as tsconfig paths, and SvelteKit's $lib is known without the generated .svelte-kit/tsconfig.json no repository commits. The project's own declaration now wins over the ~/ @/ project-root fallback. - A computed import whose static head names a directory, import(`./pages/${name}.vue`), and import.meta.glob('./locales/*.js') are expanded into one namespace edge per file there, the way a bundler hands back whole module objects. Such an import no longer marks its module as dynamic access, so the module's own findings keep their confidence. - In a monorepo a package name resolves through that package's package.json, exports subpath by subpath with source conditions preferred over ./dist, anywhere in the workspace pnpm-workspace.yaml, lerna.json, turbo.json or a workspaces field marks out. - A path literal in a build config resolves against the project root, and Nitro's api/, routes/ and middleware/ are file-system routes. On the same thirty projects reported unused files fell from 1572 to 468. fixtures/dead-code-demo gains components/, bundler/ and monorepo/. On master the bundler demo reports five files as certainly dead, four of them wrongly; the monorepo demo reports badge.ts, which the app imports by package name. Both now report only what is dead. The quote-aware byte scanning the markup and config readers share lives in one place, lang::Quotes and lang::outside_strings, so rust/crates keeps master's 25 clones.
2026-09-17 12:36:34 +02:00
- **No runtime resolution.** `getattr(obj, name)`, an `import(expr)` with no
static directory to expand over, and a module object passed as a parameter
are recorded as uncertainty, not resolved.
fix(dead-code): address review on globs, aliases and component markup Copilot's review of #1062 raised seven points; each checked out and each is fixed with a test that fails without it. - A glob keeps its pattern. `import.meta.glob('./locales/*.js')` and import(`./pages/${name}.vue`) used to keep every file under the directory alive; they now reach what the pattern matches, `*` staying within one segment as it does for the bundler. On Firefly an image glob, '../../**/*.{png,jpg}', had been keeping all of src/ alive. - Every pattern of an `import.meta.glob([...])` array is kept, not the first. - A declared alias is not second-guessed: when `@` points at src/ and the file is missing there, the `@/` project-root fallback no longer finds a different file. A catch-all `*` path claims no prefix and does not count. - Astro client <script> blocks are read as the modules Astro bundles them into, so what they import is used. A script with any attribute but `src` is left to the browser, as Astro leaves it. - import('./x') in markup is found only inside expressions, not in comments or plain text. - A quoted attribute value is an expression only on a directive (`:prop`, `@click`, `#slot`, `v-*`); elsewhere only its `{...}` interpolations are, so `class="card"` no longer credits a declaration named `card`. - An object key in markup, `{ label: value }`, is not a read. Re-measuring on the thirty trending projects also exposed `?raw` imports, as in `import script from './panzoom.js?raw'`: a bundler query now is stripped before resolving. On one snapshot of those projects the previous release reports 1093 unused files and this branch 481, with the share some import names falling from 83% to 62%; the CHANGELOG now quotes those numbers instead of ones measured against a development baseline. Components used only from .mdx content are still reported, and the docs say so.
2026-09-17 13:49:55 +02:00
- **No Markdown or MDX.** An `import` written in an `.mdx` page is not an
edge, so a component used only from content reads as unused; `--entry`
says otherwise.
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
- **An export used only inside its own file is not reported.** The `export`
keyword is then unnecessary, but the code is not dead, and the two are
different conversations.
- **Only the five categories above.** Unused dependencies, unused files in
other languages, and unused local variables are out of scope; a linter
already finds the last of those.
## Format Support
JavaScript, TypeScript, JSX and TSX are tokenized by the [oxc](https://oxc.rs) lexer; a parse diagnostic (a redeclaration, a recoverable syntax error) does not change the token stream, so such files still match files that parse cleanly. Only a source the parser gives up on entirely falls back to a word-split tokenizer, and that file then matches only other fallback-tokenized files. See [`fixtures/parse-errors-demo`](../fixtures/parse-errors-demo/README.md).
jscpd supports **224 formats**. Use `jscpd --list` to see the full list, or see [FORMATS.md](../FORMATS.md) for names, file extensions and descriptions.
### Cross-Format Detection
Vue SFC (`.vue`), Svelte (`.svelte`), Astro (`.astro`), and Markdown (`.md`) files are tokenized per-block/per-section, enabling duplicate detection across file types. In a Vue file only the block bodies are scanned; the wrapper tags around `<template>`, `<script>` and `<style>` are left out, so a template clone is reported with the template's own line range. See [`fixtures/sfc-demo`](../fixtures/sfc-demo/README.md) for a runnable example.
feat(rust): add --cross-formats for cross-format clone detection (#810) Detect duplicates across related formats via format equivalence groups sharing one comparison pool, e.g. --cross-formats "javascript,typescript" or the js-ts preset (javascript,jsx,typescript,tsx). When a group mixes TypeScript with JavaScript, TS files are compared with erasable type-only syntax stripped from the detection token stream (type annotations, generics, interface/type declarations, as/satisfies, ?/! markers, access modifiers, implements clauses, type-only imports/exports, overload signatures, declare statements) so that `function f(a: number): void` matches `function f(a)`. Stripping is AST-driven (oxc_ast_visit over the already-parsed program) and only drops tokens, so reported clone positions always reference the original source. - cpd-tokenizer: new ts_strip module, tokenize_js_stripped, TokenizeOptions.strip_types_formats (empty by default) - cpd-finder: RunConfig.cross_formats, build_pools() pool grouping, strip-set computation for TS-family formats grouped with JS - cpd: --cross-formats flag, crossFormats config field (string, array-of-strings, or array-of-arrays), js-ts preset, overlap merging, unknown-format warnings, --debug output - docs: rust.md option + Cross-Format Groups section, CHANGELOG entry - tests: tokenizer strip tests, pool unit tests, cross-pool core test, cpd-finder integration tests, CLI parse/config tests, e2e binary tests with fixtures; default behavior unchanged (golden parity intact) Non-erasable TS syntax with runtime semantics (enum, non-declare namespace, parameter properties, import =, export =) is left intact and will not cross-match. Cross-format clones are attributed to one member format in per-format statistics. Closes #810 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:44:08 +02:00
### Cross-Format Groups (`--cross-formats`)
By default every format is compared in its own isolated pool, so a TypeScript file never matches a near-identical JavaScript file. `--cross-formats` declares format equivalence groups that share one comparison pool — useful for finding leftover `.js` copies during a TypeScript migration:
```bash
jscpd --cross-formats "javascript,typescript" ./src
jscpd --cross-formats js-ts ./src # preset: javascript,jsx,typescript,tsx
jscpd --cross-formats "js-ts;css,scss" ./src # multiple groups
feat(rust): add --cross-formats for cross-format clone detection (#810) Detect duplicates across related formats via format equivalence groups sharing one comparison pool, e.g. --cross-formats "javascript,typescript" or the js-ts preset (javascript,jsx,typescript,tsx). When a group mixes TypeScript with JavaScript, TS files are compared with erasable type-only syntax stripped from the detection token stream (type annotations, generics, interface/type declarations, as/satisfies, ?/! markers, access modifiers, implements clauses, type-only imports/exports, overload signatures, declare statements) so that `function f(a: number): void` matches `function f(a)`. Stripping is AST-driven (oxc_ast_visit over the already-parsed program) and only drops tokens, so reported clone positions always reference the original source. - cpd-tokenizer: new ts_strip module, tokenize_js_stripped, TokenizeOptions.strip_types_formats (empty by default) - cpd-finder: RunConfig.cross_formats, build_pools() pool grouping, strip-set computation for TS-family formats grouped with JS - cpd: --cross-formats flag, crossFormats config field (string, array-of-strings, or array-of-arrays), js-ts preset, overlap merging, unknown-format warnings, --debug output - docs: rust.md option + Cross-Format Groups section, CHANGELOG entry - tests: tokenizer strip tests, pool unit tests, cross-pool core test, cpd-finder integration tests, CLI parse/config tests, e2e binary tests with fixtures; default behavior unchanged (golden parity intact) Non-erasable TS syntax with runtime semantics (enum, non-declare namespace, parameter properties, import =, export =) is left intact and will not cross-match. Cross-format clones are attributed to one member format in per-format statistics. Closes #810 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:44:08 +02:00
```
When a group mixes TypeScript (`typescript`/`tsx`) with JavaScript (`javascript`/`jsx`), TypeScript files are compared with erasable type syntax stripped from the detection token stream — type annotations, generics, `interface`/`type` declarations, `as`/`satisfies`, `?`/`!` markers, access modifiers, `implements` clauses, type-only imports/exports, overload signatures, and `declare` statements. Reported clone positions always reference the original sources.
Config file equivalents (all three shapes are accepted):
```json
{ "crossFormats": "javascript,typescript;css,scss" }
{ "crossFormats": ["javascript,typescript", "css,scss"] }
{ "crossFormats": [["javascript", "typescript"], ["css", "scss"]] }
```
Notes:
- TypeScript syntax with runtime semantics is not erased and will not cross-match: `enum`, non-declare `namespace`, parameter properties (`constructor(private x)`), `import x = require()`, `export =`.
- A cross-format clone is attributed to one member format in the per-format statistics.
- Overlapping groups are merged; groups with fewer than two formats are ignored.
## Migrating from jscpd v4
jscpd v4 (TypeScript engine) is maintained on the [`master-v4`](https://github.com/kucherenko/jscpd/tree/master-v4) branch and published as `jscpd@4`. Moving to v5 needs no changes to flags or config in most projects; the differences:
| Feature | jscpd v4 (Node.js) | jscpd v5 (Rust) |
|---------|--------------------|-----------------|
| `--blame` | Calls `git` CLI for each file | Same output (`==`/`<=` markers), calls `git blame --porcelain` per file |
| `--store` (LevelDB/Redis) | Persistent store for large repos | Not supported; the flag is ignored with a warning. Available on the `master-v4` line. |
| `--formats-exts` | Custom format-to-extension mapping | Same flag name, same behavior |
| `--formats-names` | Custom format-to-filename mapping | Same flag name, same behavior |
| Programming API | `jscpd()` Promise API, `detectClones()` | Rust API via `cpd-finder` crate; no Node.js API |
| Config file | `.jscpd.json` with camelCase keys | Same — `.jscpd.json` with camelCase keys |
| Cross-format detection | Vue SFC, Svelte, Astro, Markdown | Same — per-block tokenization |
| Token counts | Varies by tokenizer | May differ by 1-2% due to Rust tokenizer; clone detection matches |
| `--reporters` | All v4 reporters | All v4 reporters except `full` (use `console-full`) |
| `--no-gitignore` | Default respects `.gitignore` | Same behavior, same flag name |
| Symbolic links | Followed by default; `--noSymlinks` to skip them | Skipped by default; `--follow-symlinks` (config `followSymlinks: true`) to follow them. A v4 config with `noSymlinks: false` still maps to following |
| `--workers` | Not available | Available — control parallelism for file tokenization/detection |
| Output filenames | `jscpd-report.json`, `html/` directory | `jscpd-report.json`, `jscpd-report.html`, `jscpd-report.sarif`, `jscpd-report.csv`, `jscpd-report.md`, `jscpd-badge.svg`, `jscpd-lines-badge.svg` |
## Rust API
For integration in Rust applications:
```rust
use cpd_finder::orchestrate::{RunConfig, run};
let config = RunConfig {
paths: vec!["./src".into()],
min_tokens: 50,
..Default::default()
};
let result = run(&config).unwrap();
println!("Found {} clones", result.clones.len());
println!("Analyzed {} files", result.statistics.total.sources);
```
## Architecture
```
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
cpd / jscpd (CLI binary) basta (CLI binary)
├── cpd-core — Detection algorithm (Rabin-Karp rolling hash), report models
├── cpd-tokenizer — Language tokenization (224 formats)
├── cpd-finder — File walking, orchestration, git blame
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
├── cpd-reporter — Output formatting (15 reporters, for both modes)
└── basta — Dead code: per-language analyzers, module graph, reachability
2026-08-26 16:47:39 +02:00
```
feat(dead-code): find code nothing runs, via the new basta engine Adds a second question about the same tree: not "what is duplicated" but "what does nothing reach". A new `basta` crate builds the import graph from the project's entry points and walks it, reporting unused files, unused exports, unused module-private declarations, unused imports and — opt-in — unused class members, across JavaScript, TypeScript, JSX, TSX and Python. It ships two ways: `jscpd --dead-code` inside the existing binary, and a standalone `basta` command. Both reuse the walker, the filters, all fifteen reporters and the `--threshold` / `--exit-code` gates, so nothing new has to be learned to run it. Because it is a graph traversal rather than a reference count, dead code cascades: a helper whose only caller is itself dead is reported too. Every finding carries a confidence score and, below 100, the reasons it might be wrong — `eval`, an unrecognised decorator, a wildcard re-export, a name seen only in a string, a file in the scan that did not parse. `--min-confidence` sets the floor at 60. Entry points come from `package.json`, `pyproject.toml`, framework and file-name conventions, and anything a shell script, CI workflow, Makefile or Dockerfile names by path. CommonJS is read alongside ESM. A project that renames its own import paths is read on its own terms: `paths` and `baseUrl` from `tsconfig.json` and `jsconfig.json` are resolved, through a relative `extends` chain and per package in a monorepo. A file named only by a path string — a worker spawned through `new URL`, a build entry, a vitest setup file — counts as used. Languages plug in through one trait, `basta::lang::Analyzer`, which owns parsing, specifier resolution, entry-point conventions, manifests, alias configs and path traits. Nothing outside `lang/` is language-specific; `docs/basta-extending.md` walks through adding one. Validated against knip, fallow, vulture, skylos, fossil-mcp and repowise on trending repositories. On a corpus of ten of them — 11k files, 3.3M lines — every one of basta's 1,806 findings was checked against an import graph rebuilt independently of it: no unused-file, unused-import or unused-symbol claim survived as wrong. Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-16 09:23:13 +02:00
Both binaries walk with `cpd-finder` and report through `cpd-reporter`; the
finding types live in `cpd-core` beside the clone models, so a reporter can
render a dead-code run without linking the analyzer that produced it.
Inside `basta`, one file per language under `src/lang/` implements the
`Analyzer` trait: it turns a source file into declarations, imports and
references, resolves the language's import specifiers against the index of
scanned modules, and declares the language's entry-point conventions,
manifests and path traits. Nothing outside `lang/` knows a language.
`graph.rs` merges every file's facts into one address space and runs the two
reachability passes, `confidence.rs` scores what is left, and `classify.rs`
decides what is worth saying. Adding a language is a new file under `lang/`
plus an entry in the `ANALYZERS` registry — see
[`docs/basta-extending.md`](basta-extending.md).