Commit Graph

50 Commits

Author SHA1 Message Date
apk 45d70f49b9 feat(cli): beautify health badge, weigh duplication by kind, format reports
- Console health badge: reverse-video grade chip, eighth-block gauges per
  dimension, one row per sub-score with what it was measured from.
- markdown/html reporters for --dashboard and --health, alongside the
  existing console/json/badge; the health SVG badge moves into badge.rs.
- --dashboard's Duplication section lists a breakdown by format instead of
  by file, sourced from the same jscpd statistics as everywhere else.
- Duplication no longer counts markup, stylesheet and template clones
  (HTML, CSS, Handlebars, ...): a repeating style rule is not the
  maintenance problem repeating programming logic is. The exclusion
  follows the clone's own format, not the file it lives in, so a .svelte
  or .vue file's style/template block is left out even though the
  component itself is full weight.
- The duplication line and format-breakdown table now name what they
  actually measured and, only for categories the project has files in,
  what was left out (e.g. "5.4% in typescript (no text)") instead of a
  fixed disclaimer.
2026-09-18 11:48:45 +02:00
apk 88ece028b6 feat(cli): project health score, --health, dashboard JSON
One 0-100 score with an A-E grade, shown on top of --dashboard and alone
with --health.

- Dimensions are shares of the code lines, so size cancels out:
  duplication (jscpd's percentage over code files), dead code, and the
  share of code in complex files (complexity 50+). Prose and data files
  are not counted.
- Each share is scored on a half-life curve (100 at zero, 50 at one
  half-life), calibrated on 42 open-source projects so the median project
  scores 75 per dimension; shares are mixed with a 2000-line prior so one
  finding does not sink a small project.
- Sub-scores combine as a weighted geometric mean. A dimension that
  cannot be measured is left out and named, and dead code weighs as much
  as the share of the code it could read.
- --health-input FILE and the health config object add metrics from
  other tools (a ready score, or a value with a half-life) and tune the
  built-in half-lives and weights.
- Reporters: console badge, ai one-liner, json (jscpd-health.json,
  jscpd-dashboard.json with every dashboard section) and badge
  (jscpd-health-badge.svg). Exit gates apply as in the dashboard.

CpdClone::matched_lines moves to cpd-core so statistics and health count
duplicated lines the same way.
2026-09-18 09:23:58 +02:00
apk 527b0bca30 fix: address Copilot review of #1064
- --dashboard applies the exit gates of a clone run (--threshold,
  --exit-code, --fail-on-empty) instead of always returning 0; the
  baseline family warns and --fail-on-new-clones is refused, since no
  clone report is written.
- A refused dead-code configuration (bad --dead-code-categories, a
  --format no analyzer supports) now exits 1 as in --dead-code, rather
  than printing a dashboard with an empty dead-code section.
- --workers is a budget for the whole dashboard run: the two concurrent
  scans get half each, so neither the thread count nor the 64 MiB
  tokenizer stacks double. --workers 1 runs them sequentially.
- --complexity scans with similarity disabled, so --similarity no longer
  pays for function extraction it cannot use.
- --complexity honours a summaryBy from the config file, not only the
  --summary-by flag (Options::summary_by_set).
- reStructuredText joins the prose formats at complexity 0.
2026-09-18 08:11:44 +02:00
apk 57c911f072 docs: use jscpd, not cpd, in command examples 2026-09-17 18:37:20 +02:00
apk ee873ac555 feat(cli): --dashboard with duplication, complexity and dead code
--dashboard prints one screen: project size and largest formats,
duplication with clones per kind and the most duplicated files, total and
mean complexity with the most complex files, and dead code by category
with the largest findings (JavaScript, TypeScript, Python). The dead-code
scan runs beside clone detection; --summary-top sets the rows per list.

Data formats (JSON, YAML, TOML, CSV, ...) join markdown at complexity 0,
so a lock file's version ranges no longer top the complexity ranking.

Docs for --kind, --complexity and --dashboard; fixtures/dashboard-demo,
plus --kind and --complexity sections in the type3 and summary demos.
2026-09-17 18:15:45 +02:00
apk f516710e28 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
apk 8b75eb7834 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
apk 2baf2890d4 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
apk df7b27c793 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
apk 8200cc452e fix(walk): report symlinked files by their walked path and scan each file once
With `--follow-symlinks` the source id was the canonical path, so a file
reached through a link showed up as an absolute path outside the scan
root, `--ignore` (matched on the walked path) and the report disagreed
about its name, and a file reachable through two paths was two sources
(a file symlink next to its target even became a clone of itself).

The walked path, anchored at the canonical scan root, is now the id:
what reports show, what `--ignore` matches, what `--absolute` prints.
The canonical path travels alongside (`DiscoveredFile::real_path`,
`PreparedSource::real_path`) for reading the file and for the
`--skip-local` / `--skip-isolated` prefix checks. When links are
followed, files whose canonical path was already seen are dropped; the
entry that is the real file wins, else the first walked path.

Docs: `--follow-symlinks` row in the option table, the v4 default in the
migration table and README. Fixture `fixtures/follow-symlinks-demo`.

Closes #1059

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-14 20:35:29 +02:00
apk b6dc11fce0 fix(xml): replace characters XML cannot carry, escape paths once
Closes #375.

A snippet containing a NUL, an ANSI escape, a form feed or any other
control byte made the xml report unparseable: XML 1.0 has no way to
represent those characters, not even inside CDATA, so xmllint stopped at
"PCDATA invalid Char value 27" and every parser refused the file. The
reporter now replaces every character outside XML's Char production
(tab, LF, CR and U+0020 and up, minus U+FFFE/U+FFFF) with U+FFFD in
snippets and in path attributes. The existing "]]>" split is kept.

Path attributes were also escaped twice: quick-xml escapes attribute
values on its own, so the reporter's escape_xml() turned "r&d" into
"r&amp;amp;d". The manual escape is gone and the sanitized path goes in
raw.

Tests parse the generated report to the end with quick-xml and check:
control characters become U+FFFD and none survive, a "]]>" round-trips
through the split sections, a path with & < " > is escaped exactly once
and reads back unchanged, and legal text is left borrowed.

Fixtures: fixtures/xml-report-demo with a clone whose body holds real
escape bytes, a form feed and a "]]>" literal; the README shows the
xmllint and Python checks. Verified the published 5.2.0 fails xmllint
on it and the fixed binary passes.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-13 07:44:22 +02:00
apk 6d94fd3279 docs+test: console-full prints the --history block like console
print_appendices gave console-full the history block it lacked; the
History section now names both console reporters and an integration
test checks console-full renders it.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 09:04:37 +02:00
apk cfac085cf1 feat(reporter): bar chart for --history instead of a sparkline
The one-line sparkline was too small to read a trend from. The console
block now draws an eight-row bar chart: a percentage axis on the left
spanning the series' own min and max (a series moving between 2.0% and
2.4% would be a flat line on a 0-based axis), one column per point built
from eighth-block characters so every point keeps at least a sliver, an
x-axis, and point numbers that match a new `#` column in the table.
Past 20 points the columns narrow to one character so 30 points still
fit an 80-column terminal. The ai reporter keeps the compact sparkline.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-12 08:26:27 +02:00
apk adbf5ecf3d 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
apk bc3ec21f2d 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
apk 5f09d96c69 docs: say that jscpd tokenizes by language syntax, not text
Reviews compare jscpd with detectors that "use language-specific
normalization" as if jscpd matched raw text. It does not: every format
has its own comment and string rules, JS/TS/JSX/TSX go through the oxc
parser (with TypeScript erasure for cross-format pools), Vue/Svelte/
Astro/Markdown/Razor are split into embedded languages, and tokens are
classified so the Type-2 pass keeps keywords while renaming identifiers.

The README intro and a new first Features bullet say so, and docs/rust.md
gains a "How detection works" section walking through format detection,
tokenization, modes and ignores, normalization, Rabin-Karp matching and
the near-miss passes, plus what stays out of scope (Type-4). Every claim
is taken from cpd-tokenizer (generic.rs comment styles, javascript.rs,
ts_strip.rs, sfc.rs, markdown.rs, razor.rs, tokenizer.rs mode filter,
strips_annotations, is_common_keyword).

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-11 08:35:08 +02:00
apk afea9b1cc6 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
apk 98527598e8 Merge remote-tracking branch 'origin/master' into fix/no-tips-non-tty 2026-09-08 09:50:00 +02:00
apk 2b3171e5b1 fix(cli): NO_COLOR keeps the tips, it only removes the colours
NO_COLOR asks for plain output and nothing else, and many people export
it globally while still working in an interactive terminal. Treating it
as a tips switch would hide the tips from them for good. The non-TTY
check at the print site already covers pipes, files and CI logs, so the
environment switches stay CI and JSCPD_NO_TIPS.

Help text, docs and the skill table updated; the options test asserts
that NO_COLOR does not enable no_tips.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-08 09:49:59 +02:00
apk 2671b97521 fix(sfc): keep Vue wrapper tags out of the html stream
Sorting the html tokens (previous commit) restores source order, but the
wrapper tags of a Vue file — <template>, </template>, <script ...>,
</script>, <style ...>, </style> — are identical in every Vue file and
sit at both ends of it. In source order they stretch every template clone
to the last </style>: on fixtures/vue the html clone went from
[1:1 - 10:9] to [1:1 - 262:10] and duplicated lines from 289 to 541,
counting the script and style bodies as duplicated html.

A file with a <template> block keeps all of its markup inside that block,
so the skeleton outside the blocks is only wrapper tags and is now left
out of the html stream. The clone becomes the template body itself:
file1.vue:html [2:3 - 10:9], 75 tokens. Svelte and Astro have no template
wrapper; their top-level markup is the skeleton and is kept, so their
output is unchanged. The sort stays, for custom blocks that map to html.

Fixture: fixtures/sfc-demo/template-range with a README showing the
template-only range; docs/rust.md links it.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-08 08:28:07 +02:00
apk f0c9a41d08 fix(type3): pre-release cleanups for --max-gap-lines (refs #1022)
Public-output items from the #1020 review, done while nothing is released:

- SARIF and Code Climate rule names now match the clone vocabulary:
  renamed -> jscpd/renamed-code, similar -> jscpd/similar-code
  (was jscpd/similar-code for renamed and jscpd/near-miss-code for similar).
  The similar-code rule text covers both the gap and the ast method.
- Duplicated-line statistics and the per-file summary count only the
  matched lines of a merged clone. CpdClone gains a non-serialized
  unmatched_lines field holding each fragment's gap lines, so enabling
  the merge no longer moves --threshold.
- A merge whose similarity would fall below 0.5 (more unmatched than
  matched tokens, e.g. one very long inserted line) is refused and the
  halves stay separate; MIN_GAP_SIMILARITY documents the floor.
- Precedence is decided and documented: merged renamed halves are
  reported as similar.

merge_gapped_clones is restructured around merge_into(); the running
matched-token counter was redundant with last.token_count and is gone.

Fixtures: type3-demo/long-line (refused merge) and type3-demo/renamed-halves
(precedence); README numbers re-measured for the whole directory.

Claude-Session: https://claude.ai/code/session_01WztdFKZAwW9b51iJe9zhtV
2026-09-07 18:51:21 +02:00
7487 61d75c34b3 feat(cli): skip tips when stdout is not a TTY or NO_COLOR/JSCPD_NO_TIPS is set
Print the tips/sponsor lines only when stdout is a terminal, so CI logs,
pipes and agent hooks no longer get them without --no-tips. Also honor
NO_COLOR and JSCPD_NO_TIPS next to the existing CI env check.

Fixes #1008

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 00:25:45 +08:00
apk e286818c92 fix(tokenizer): keep oxc tokens for JS/TS files with recoverable parse errors
A JavaScript/TypeScript file with any parse diagnostic (a redeclaration,
a recoverable syntax error) was handed to the word-split fallback
tokenizer. Its tokens then never matched an oxc-tokenized file, so every
cross-file clone involving it vanished while its self-clones survived —
the symptom reported in #1023, where a second copy of a function in one
file made all a↔b clones disappear.

Tokens come from the lexer, not the parser: only `panicked` (or an empty
token stream) now triggers the fallback. Function extraction for
--similarity uses the partial AST on recoverable errors the same way.

Closes #1023.
2026-09-06 21:12:26 +02:00
apk 19196f5f26 feat(report): show how a similar clone was found — (gap) vs (ast)
`CpdClone.similarity_method` (JSON "method": "gap" | "ast") records which
near-miss mechanism produced a `similar` clone. The two scores are not on
one scale (gap = matched tokens over the merged span, ast = structural
Jaccard of whole functions), so the console prints
`Clone found (javascript, similar (gap) ~0.91)` /
`similar (ast) ~0.75`, the ai reporter `[~0.91 gap]` / `[~0.75 ast]`,
JSON carries "method" and SARIF a `similarity_method` property. Exact and
renamed clones are unchanged.
2026-09-06 18:36:49 +02:00
apk 89f62eb46a feat(similarity): default threshold 1 = exact matches only; the pass runs only below 1 2026-09-06 18:01:38 +02:00
apk 362f00113a refactor(similarity): FunctionExtractor trait + registry; signatures carry their grammar
Function extraction is now a language plug-in: `FunctionExtractor`
(grammar id, served formats, extract) with a static `EXTRACTORS` registry
consulted by `extract_functions` / `supports_functions` /
`supported_function_formats`. `OxcExtractor` is the first entry (JS/TS/
JSX/TSX). Every RawFunction/FunctionSig records its grammar and the scorer
refuses pairs across grammars, so a tree-sitter-backed extractor for
another language is a self-contained addition with no change to scoring,
CLI, MCP or reporters. Module docs describe the two steps; the MCP note
lists supported formats from the registry.
2026-09-06 17:06:20 +02:00
apk 69bb0e36bf fix(mcp): cache the similarity index per scan; document --similarity range as (0, 1] 2026-09-06 16:51:48 +02:00
apk 57036eb75a feat: function-level similarity for JS/TS with --similarity (Type-3, stage 2 of #999)
Off by default. `--similarity RATIO` (config `similarity`, Action input
`similarity`, MCP `check_duplication` argument) summarizes every function,
method and arrow function of a JavaScript/TypeScript/JSX/TSX file by the
bag of 4-grams over the pre-order sequence of its AST node types (oxc),
indexes the bags with MinHash + LSH banding, and reports pairs whose
weighted Jaccard index reaches RATIO as `similar` clones with a
`similarity` value. Names and literal values are not part of the summary:
a renamed copy scores 1.0, one inserted line ~0.9, two inserted statements
plus renames ~0.75.

Functions must clear --min-tokens/--min-lines, nested functions are never
paired with their parent, and pairs already covered by an exact, renamed
or merged clone are skipped. Values outside (0, 1] warn and disable the
option. Reporting reuses the Type-3 vocabulary (console `similar ~0.75`,
JSON kind/similarity, SARIF jscpd/near-miss-code).

New: cpd-core::similarity (FunctionSig, SimilarityIndex, bag_jaccard,
minhash), cpd-tokenizer::functions (oxc visitor extractor), MCP function
index built lazily per scan. fixtures/type3-demo/similar-functions with
README numbers, docs, unit + integration + MCP stdio tests. Also adds the
missing max_gap_lines/similarity fields to the --debug config output.
2026-09-06 12:27:03 +02:00
apk 448eb9526c feat: near-miss clone merging with --max-gap-lines (Type-3, stage 1 of #999)
Off by default (0). When set to N, clones of the same file pair whose
fragments follow each other in both files with at most N unmatched lines
between them are merged into one clone of kind `similar`, with `tokens` =
matched tokens and `similarity` = matched tokens over the tokens of the
longer merged span. Adjacent exact windows that share a boundary token are
counted once; chains merge transitively; overlapping or reordered fragments
never merge. The pass runs after every other filter and returns its input
untouched at 0, so default output is unchanged.

Reporting: console `Clone found (fmt, similar ~0.91)`, ai `[~0.91]`, JSON
"kind"/"similarity" (rounded to three decimals), SARIF rule
jscpd/near-miss-code with a similarity property (declared only when
referenced), Code Climate check_name.

Config key maxGapLines (kebab alias), GitHub Action input max-gap-lines,
docs section, fixtures/type3-demo with a README of runnable commands, unit
tests for the merge pass and reporters, and a binary-level integration test.
2026-09-06 08:55:12 +02:00
apk 9fef600ad1 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
apk 75de98d9f4 docs: comma caveat, warning wording, and C# license-header example for ignore patterns 2026-09-05 09:15:58 +02:00
w3lld1 564d913c15 docs: document v5 source-region ignores 2026-09-04 15:12:29 +02:00
apk d790c6c1d3 chore: make master v5-only
Everything belonging to the v4 TypeScript engine moves to the master-v4
branch: apps/, packages/, build-utils/, changesets, pnpm workspace, turbo,
the Node.js CI workflow and the ts-* release jobs. What remains is the
Rust workspace under rust/, the npm wrapper and platform packages, the
GitHub Action, Docker image, flake, skills, benchmark and fixtures/.

- rust.yml gains a smoke job that runs the release binary against
  fixtures/ (json, sarif, html) and asserts clones and reporters
- release.yml keeps only the Rust jobs; pnpm removed from every workflow;
  audit.yml keeps cargo audit + cargo deny; dependabot drops the root npm entry
- root package.json becomes a thin private package depending on the exact
  jscpd@5 version so the pre-commit hook keeps installing the binary;
  sync-version.mjs keeps it in step
- .pre-commit-hooks.yaml used v4-only flags that the v5 CLI rejects; fixed
- FORMATS.md is now generated from the Rust tokenizer (224 formats)
- README, docs, CONTRIBUTING, SECURITY, package and crate descriptions,
  benchmark and skills rewritten for v5 on its own terms: no v5-vs-v4 speed
  multipliers anywhere, a single "Looking for v4?" pointer to master-v4
2026-09-02 10:15:10 +02:00
apk b0c31a4042 chore: apply audit fixes across repo, crates, npm wrapper and pipelines
Rust / crates.io
- report the invoked binary name in --version/--help (jscpd vs cpd)
- add repository, documentation, keywords, categories to all crates
- exclude tests/ from the jscpd crate package; add cargo-binstall metadata
- expand the crates.io README and render it on docs.rs

npm
- add funding field to jscpd, cpd and jscpd@4 packages
- add jscpd-linux-arm64-musl platform package and clearer unsupported-platform error
- enable provenance for the v4 changeset publish

Pipelines
- rust.yml: windows-latest in the matrix, drop dead schedule guard
- release.yml: cosign-sign release assets, floating v5 tag, LICENSE in tarballs,
  invoke the new docker.yml (GHCR multi-arch image) after each release
- audit.yml: nightly cargo audit, cargo deny and pnpm audit
- Dockerfile: multi-stage image from release binaries (distroless), mcp target for Glama

Docs / community
- README: shields badges, single primary install per OS, GitHub Action snippet,
  link to jscpd.dev, v5.1 features, 15 reporters, 224 formats, 8 platforms
- docs: @v5 action tag, Docker usage, baseline section, current crate versions
- YAML issue forms with engine selector, config.yml, CODEOWNERS
- remove stale .github/CONTRIBUTING.md stub, custom.md, TODO.md; untrack rust/jscpd-report.json
- examples: mark as v4 API, add a Rust cpd-finder example
2026-09-02 09:57:06 +02:00
apk c187237dfb feat(config): discover config in .config/ subfolder (dot-config convention)
Auto-discovery now also checks .config/jscpd.json (and
.config/.jscpd.json) between the root .jscpd.json and the package.json
jscpd key, per https://dot-config.github.io/. Root .jscpd.json keeps
precedence, so the new location is optional and never changes behavior
for existing setups. Paths inside the config still resolve relative to
the working directory, as with other auto-discovered sources.

Closes #979

Claude-Session: https://claude.ai/code/session_01VvWzWfEK6oV4HTe6EoGkff
2026-08-30 11:20:31 +02:00
Marvin Luchs b01910ddc2 feat: add support for Windows on ARM 2026-08-26 16:47:39 +02:00
apk 971d09f817 feat(rust): --skip-isolated folder groups for monorepos (#628)
Port the skipIsolated option from jscpd PR #628 to the Rust engine:
clones spanning two different folders of the same isolation group are
dropped, so team-owned monorepo packages are not compared with each
other while everything still matches against shared code.

- CLI: --skip-isolated / --skipIsolated "packages/a|packages/b,libs/a|libs/b"
- Config file: skipIsolated as nested arrays (jscpd shape)
- Detection: PathFilters bundles skip_local + skip_isolated path checks,
  applied in both the primary and secondary clone passes
- MCP server: isolation groups apply to project scans; snippet checks
  remain unfiltered
2026-08-17 19:37:21 +02:00
apk 390f360c2f Merge remote-tracking branch 'origin/master' into feat/891-mcp-stdio
# Conflicts:
#	README.md
#	docs/rust.md
#	rust/CHANGELOG.md
#	rust/crates/cpd/src/cli.rs
2026-08-15 22:38:19 +02:00
apk ea3599fc0d 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
apk 0da2b779e6 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
apk db2e5d13a9 feat(sarif): escalate all results to error when duplication exceeds --threshold
Refs #908

Extends the size-based severity from 294de6b: when the existing
--threshold option is set and the run's total duplication percentage
exceeds it, every SARIF result is emitted at level "error" instead of
"warning" — the report now reflects the same failure the
ThresholdReporter exits non-zero for.

Uses the identical strictly-greater comparison as the ThresholdReporter
(equal to the threshold does not fail the build, so it does not
escalate severity either). Composes with --sarif-error-tokens: either
condition escalates a result. Default output is unchanged when
--threshold is unset.
2026-08-13 10:19:41 +02:00
apk 294de6b57c feat(sarif): size-based severity via --sarif-error-tokens
Fixes #908

All SARIF results were emitted at level "warning" regardless of clone
size, so large copy-pastes and trivial duplicates looked identical to
SARIF consumers like GitHub code scanning.

Add an opt-in cutoff: clones with token_count >= --sarif-error-tokens
are reported at level "error"; smaller clones (and all clones when the
flag is unset) stay "warning", so default output is unchanged. The
option is also available as sarifErrorTokens / sarif-error-tokens in
.jscpd.json, and the rule's defaultConfiguration remains "warning"
(per-result level overrides it).

No default cutoff is imposed — the issue explicitly asked not to invent
an arbitrary one, so severity escalation is purely opt-in.
2026-08-13 10:06:18 +02:00
apk 030f38aa1b 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
apk f7680355df 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
apk 9f6b8f5986 docs: add Nix and Homebrew install instructions (#818) 2026-06-14 14:38:52 +02:00
apk 061d69e6a0 refactor: move blame to git CLI, update docs to match
- Switch blame implementation from gitoxide to git blame --porcelain
- Move elapsed timer capture after blame enrichment so timing includes blame
- Remove gitoxide blame performance section from docs (no longer applicable)
- Update README and rust.md to reflect git CLI approach
- Clean up comments and trailing newlines
2026-06-13 21:25:49 +02:00
apk 7507f9dae7 fix: use project sizes without .git folders in benchmarks 2026-06-10 15:06:33 +02:00
apk e5645ea15e feat(v5): add .jscpd.json path config support and update performance benchmarks
- Add path field to ConfigFile struct so v5 reads scan directories
  from .jscpd.json like v4 does, resolving relative paths against
  the config file's directory
- Use config path when no CLI paths are provided (Options::from_cli_and_config)
- Fix benchmark methodology: v4 was silently scanning only ./fixtures
  due to .jscpd.json path override; re-ran from /tmp with proper isolation
- Add docs/performance-comparison.md with full benchmark report
- Update performance claims across all READMEs (24-37x, was 10-30x):
  - fixtures (548 files): 34.3x faster
  - svelte (9K files): 36.9x faster
  - CopilotKit (17K files): 24.1x faster
- Un-ignore docs/ folder in .gitignore (was ignoring all docs)
2026-06-08 16:50:23 +02:00
apk 105b961c05 docs: clarify --workers is v5-only, blame uses gitoxide not git CLI 2026-06-08 14:20:05 +02:00
apk d21bb81e0e docs: reorganize documentation into docs/ folder, separate v4/v5 docs
- Split the overloaded README.md into focused docs:
  - docs/typescript.md: v4 (Node.js) CLI, reporters, API, config
  - docs/rust.md: v5 (Rust) CLI, reporters, blame, differences from v4
  - docs/ai-ready.md: AI reporter, agent skills, MCP server
  - docs/api.md: Programming APIs (TypeScript and Rust)
  - docs/packages.md: Monorepo package and crate overview
- Trim README.md to a concise entry point with links to docs/
- Slim down rust/README.md, rust/jscpd/README.md, rust/npm/README.md:
  remove duplicated content, link to docs/rust.md for details
- Fix factual errors verified against actual CLI output:
  - Format count: 223 (v5) and 224 (v4), not '225+'
  - Reporter output filenames: jscpd-report.* not cpd.*
  - --max-size: no default in v5 (not 512KB)
  - --formats-exts: same hyphenated form in both v4 and v5
  - --no-gitignore: same flag name in both v4 and v5
- Update rust/jscpd/package.json: add 'cpd' bin so jscpd@5
  installs both jscpd and cpd commands
- Update crate versions in rust/README.md to match source (0.1.3/0.1.4)
2026-06-08 12:57:38 +02:00