duplicatecode 0.1.0__py3-none-win_amd64.whl → 0.3.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- duplicatecode-0.3.0.data/scripts/duplicatecode.exe +0 -0
- {duplicatecode-0.1.0.dist-info → duplicatecode-0.3.0.dist-info}/METADATA +131 -3
- duplicatecode-0.3.0.dist-info/RECORD +5 -0
- {duplicatecode-0.1.0.dist-info → duplicatecode-0.3.0.dist-info}/sboms/duplicatecode.cyclonedx.json +95 -24
- duplicatecode-0.1.0.data/scripts/duplicatecode.exe +0 -0
- duplicatecode-0.1.0.dist-info/RECORD +0 -5
- {duplicatecode-0.1.0.dist-info → duplicatecode-0.3.0.dist-info}/WHEEL +0 -0
|
Binary file
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: duplicatecode
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
|
-
Summary: Static (LLM-free) detection of duplicate/similar code in Python and
|
|
6
|
+
Summary: Static (LLM-free) detection of duplicate/similar code in Python, TypeScript/JavaScript, SQL and C#
|
|
7
7
|
License: MIT
|
|
8
8
|
Requires-Python: >=3.9
|
|
9
9
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
10
10
|
|
|
11
11
|
# duplicatecode
|
|
12
12
|
|
|
13
|
-
Static (LLM-free) detection of duplicate / similar code in Python
|
|
13
|
+
Static (LLM-free) detection of duplicate / similar code in Python, TypeScript/JavaScript (TSX/JSX), SQL and C#,
|
|
14
14
|
aimed at catching an LLM re-implementing something that already exists. Input can be a git diff
|
|
15
15
|
checked against existing source.
|
|
16
16
|
|
|
@@ -42,6 +42,134 @@ duplicatecode scan . --pairs --json # machine-readable pairs in
|
|
|
42
42
|
duplicatecode bench --dataset dataset [--file-level] [--mutations] [--negatives <other repo>]
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
## More ways to look
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
duplicatecode fragments packages/ # copied blocks inside different functions (4+ identical statements)
|
|
49
|
+
duplicatecode scan . --pairs --explain # say what differs: literals, calls, lines (what to parameterize)
|
|
50
|
+
duplicatecode find "retry with exponential backoff" src/ # does something like this already exist? (needs embeddings)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- `fragments` indexes windows of consecutive normalized statements, so a block pasted into another
|
|
54
|
+
function is found even when the surrounding functions differ. On an injection benchmark (renamed
|
|
55
|
+
blocks of real functions pasted into others) it finds 93-97% of blocks of 6+ statements; see
|
|
56
|
+
`eval/REPORT.md`. Tune with `--min-stmts` / `--min-tokens`; constructors and dunders are ignored.
|
|
57
|
+
- `--explain` adds, per pair, the literals and calls only one side has and the source lines with no
|
|
58
|
+
counterpart ("16 of 18/17 statements shared").
|
|
59
|
+
- `find` embeds the query and every unit and ranks by similarity. With MiniLM, 50 task descriptions
|
|
60
|
+
against 168 implementation units rank the right one first 94% of the time; with 1,379 unrelated real
|
|
61
|
+
units mixed in, 82% first and 96% in the top 3 (every query within the top 10).
|
|
62
|
+
- Default thresholds depend on the profile: `copies` keeps its tuned 0.6 (`scan`), 0.4 (`diff`), 0.45
|
|
63
|
+
(`review`); `reimpl` scores live lower, so it defaults to 0.35 / 0.28 / 0.30, which correspond to roughly
|
|
64
|
+
0.1% / 1% false-positive rates on unrelated code in the benchmarks. With `--embed` the `reimpl`
|
|
65
|
+
defaults rise by 0.07 because blended scores of unrelated code rise too.
|
|
66
|
+
|
|
67
|
+
## Embeddings (bring your own key)
|
|
68
|
+
|
|
69
|
+
Two optional signals, both off by default (the detector stays LLM-free unless you ask):
|
|
70
|
+
|
|
71
|
+
- `--embeddings` embeds identifier *names* (cheap) as an extra name-similarity signal.
|
|
72
|
+
- `--embed <preset>` is the short form (`minilm`, `qwen3`, `potion`, `openai`, `cohere`; `qwen3` is about 5x slower than `minilm` on CPU, so use it with a GPU or prefer `minilm`) and implies
|
|
73
|
+
`--embed-code`. Model ids go into the cache key, so vectors of different models never mix.
|
|
74
|
+
- `--embed-code` embeds the *whole text of every unit* (function, class, file, SQL statement) and blends
|
|
75
|
+
the cosine into the score (`--embed-weight`, default 0.35, others scaled by 1 - weight). It finds
|
|
76
|
+
re-implementations that share no tokens. On function-level LLM re-implementations it lifted Python from
|
|
77
|
+
0.70 to 0.89 on a held-out half; see `eval/REPORT.md` for the numbers and caveats. Vectors are cached per
|
|
78
|
+
unit text in `~/.cache/duplicatecode/embeddings.bin`, so a rescan only embeds what changed.
|
|
79
|
+
|
|
80
|
+
Credentials come from the environment:
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
# OpenAI
|
|
84
|
+
export OPENAI_API_KEY=sk-... # optional: OPENAI_EMBEDDING_MODEL (default text-embedding-3-small)
|
|
85
|
+
# Cohere (native /v2/embed)
|
|
86
|
+
export COHERE_API_KEY=... # optional: COHERE_EMBEDDING_MODEL (default embed-v4.0)
|
|
87
|
+
# OpenAI-compatible server (vLLM, Ollama, LiteLLM, ...)
|
|
88
|
+
export OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_API_KEY=anything OPENAI_EMBEDDING_MODEL=nomic-embed-text
|
|
89
|
+
# Azure AI Foundry (key, or `az login` if no key is set)
|
|
90
|
+
export AZURE_AI_FOUNDRY_ENDPOINT=https://<res>.services.ai.azure.com
|
|
91
|
+
export AZURE_AI_FOUNDRY_API_KEY=... AZURE_AI_FOUNDRY_EMBEDDING_DEPLOYMENT=text-embedding-3-small
|
|
92
|
+
# Azure OpenAI: AZURE_OPENAI_ENDPOINT / AZURE_OPENAI_API_KEY / AZURE_OPENAI_EMBEDDING_DEPLOYMENT
|
|
93
|
+
# Fully local, no key: start the server once (CPU; it loads whichever model a request names)
|
|
94
|
+
# uv run --no-project --python 3.12 eval/embed_server.py
|
|
95
|
+
# duplicatecode scan . --embed minilm # or: qwen3, potion (default endpoint 127.0.0.1:8099)
|
|
96
|
+
# Hosted presets: --embed openai (OPENAI_API_KEY), --embed cohere (COHERE_API_KEY)
|
|
97
|
+
|
|
98
|
+
duplicatecode embed-test fetchUser getUser # check credentials
|
|
99
|
+
duplicatecode scan . --embed-code # whole-unit embeddings
|
|
100
|
+
duplicatecode scan . --embeddings # names only
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## API
|
|
104
|
+
|
|
105
|
+
### Command line
|
|
106
|
+
|
|
107
|
+
| command | what it does |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| `scan <paths>` | similar units inside one or more folders; `--pairs`, `--explain`, `--json`, `--fail-on-found` |
|
|
110
|
+
| `diff` | check code added in a git diff (stdin or `--diff`) against the repo (`--repo`) |
|
|
111
|
+
| `review` | ranked candidates for a diff, for a human or an agent to judge |
|
|
112
|
+
| `fragments <paths>` | copied blocks of identical statements inside different functions |
|
|
113
|
+
| `find "<description>" <paths>` | existing units closest to a plain-language description (needs embeddings) |
|
|
114
|
+
| `units <path>` / `show file:10-40` | list extracted units / print a unit's source |
|
|
115
|
+
| `embed-test <names...>` | check the embedding provider and calibrate `--embed-floor` |
|
|
116
|
+
| `eval-groups`, `bench`, `make-mutation-groups` | evaluation (see `eval/README.md`) |
|
|
117
|
+
|
|
118
|
+
Shared options: `--profile copies|reimpl`, `--threshold`, `--min-tokens`, `--min-lines`, `--exclude`, `--skip-tests`,
|
|
119
|
+
`--cross-file`, `--json`. Embedding options (all off by default): `--embed <preset>`, `--embed-code`,
|
|
120
|
+
`--embed-weight`, `--embed-max-chars`, `--embeddings`, `--embed-cache`, `--embed-dims`.
|
|
121
|
+
|
|
122
|
+
```sh
|
|
123
|
+
duplicatecode scan . --profile reimpl --min-name 0 --embed minilm --pairs --explain
|
|
124
|
+
duplicatecode fragments src/ --min-stmts 4 --min-tokens 30 --cross-file --json
|
|
125
|
+
duplicatecode find "retry with exponential backoff" src/ --top 5 --json
|
|
126
|
+
duplicatecode diff --repo . < change.diff --embed openai
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
JSON output:
|
|
130
|
+
|
|
131
|
+
- `find --json`: `[{score, file, name, kind, start_line, end_line}]`
|
|
132
|
+
- `fragments --json`: `[{a, b, statements, tokens}]` with `a`/`b` = `{file, unit, start_line, end_line, coverage}`
|
|
133
|
+
- `scan --pairs --json`: `[{query, candidate, scores}]`; with `--explain`: `[{match, explanation}]`
|
|
134
|
+
- `scan --json` (groups): `[{score, units: [{file, name, kind, start_line, end_line}]}]`
|
|
135
|
+
|
|
136
|
+
`scan --fail-on-found` exits with status 1 when anything is reported, for CI.
|
|
137
|
+
|
|
138
|
+
### Rust library
|
|
139
|
+
|
|
140
|
+
The engine crate `duplicatecode-engine` is what the CLI uses:
|
|
141
|
+
|
|
142
|
+
```rust
|
|
143
|
+
use duplicatecode_engine::embed::{embed_unit_code, EmbedConfig, EmbeddingCache};
|
|
144
|
+
use duplicatecode_engine::explain::explain;
|
|
145
|
+
use duplicatecode_engine::fragments::{find_fragments, FragmentOptions};
|
|
146
|
+
use duplicatecode_engine::index::Weights;
|
|
147
|
+
use duplicatecode_engine::{find_matches, load_units_with, Corpus, MatchOptions};
|
|
148
|
+
|
|
149
|
+
let mut units = load_units_with(Path::new("src/"), &[]);
|
|
150
|
+
|
|
151
|
+
// optional: embed every unit; units without a vector simply skip the embedding term
|
|
152
|
+
let cfg = EmbedConfig::from_env(None).ok_or("no embedding provider configured")?;
|
|
153
|
+
let mut cache = EmbeddingCache::load(&EmbeddingCache::default_path());
|
|
154
|
+
embed_unit_code(&mut units, &cfg, &mut cache, 3000)?;
|
|
155
|
+
|
|
156
|
+
// pairs: queries against a corpus
|
|
157
|
+
let weights = Weights::default().with_embed(0.35); // 0.0 = static only
|
|
158
|
+
let corpus = Corpus::new(units.clone());
|
|
159
|
+
let pairs = find_matches(&units, &corpus, MatchOptions { weights, threshold: 0.42, ..Default::default() });
|
|
160
|
+
|
|
161
|
+
// copied blocks, and what differs inside a pair
|
|
162
|
+
let blocks = find_fragments(&units, FragmentOptions::default());
|
|
163
|
+
println!("{}", explain(&units[0], &units[1]).summary());
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Not built yet
|
|
167
|
+
|
|
168
|
+
Planned, not available today: a `.duplicatecode.toml` with an `[embed]` section; `--embed-optional` (warn and
|
|
169
|
+
fall back to the static score when the provider is unreachable; today an unreachable provider is an error);
|
|
170
|
+
`--allow-upload` (required for the hosted presets, which send source text out); a `duplicatecode[embed]` Python
|
|
171
|
+
extra that starts the local server on demand; an `Embedder` trait so providers can plug in without HTTP.
|
|
172
|
+
|
|
45
173
|
## How it works
|
|
46
174
|
|
|
47
175
|
Units (functions, methods, classes, arrow-function components) are extracted with tree-sitter and
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
duplicatecode-0.3.0.data/scripts/duplicatecode.exe,sha256=21yAmm_HzANC-d5pxUqpwsyxrAxL8PuGrK59ya4sodQ,17500672
|
|
2
|
+
duplicatecode-0.3.0.dist-info/METADATA,sha256=NatafxHYcIf4MIhEVtm-ioWP22fwXvQsBAzpc-SGRvI,19741
|
|
3
|
+
duplicatecode-0.3.0.dist-info/WHEEL,sha256=8Aej0W0a6Cz6apA3IzJrTnxLRVLAt-w0Oh8SA3Con_c,94
|
|
4
|
+
duplicatecode-0.3.0.dist-info/sboms/duplicatecode.cyclonedx.json,sha256=uPjugBPtNH7_f99oGPEDmrjDbAcAcj-bKIOlBsWrRgw,126750
|
|
5
|
+
duplicatecode-0.3.0.dist-info/RECORD,,
|
{duplicatecode-0.1.0.dist-info → duplicatecode-0.3.0.dist-info}/sboms/duplicatecode.cyclonedx.json
RENAMED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.5",
|
|
4
4
|
"version": 1,
|
|
5
|
-
"serialNumber": "urn:uuid:
|
|
5
|
+
"serialNumber": "urn:uuid:ab06876c-110e-4771-94eb-2edeb8b63aea",
|
|
6
6
|
"metadata": {
|
|
7
|
-
"timestamp": "2026-
|
|
7
|
+
"timestamp": "2026-10-07T07:39:59.027661900Z",
|
|
8
8
|
"tools": [
|
|
9
9
|
{
|
|
10
10
|
"vendor": "CycloneDX",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
],
|
|
15
15
|
"component": {
|
|
16
16
|
"type": "application",
|
|
17
|
-
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.
|
|
17
|
+
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.3.0",
|
|
18
18
|
"name": "duplicatecode",
|
|
19
|
-
"version": "0.
|
|
19
|
+
"version": "0.3.0",
|
|
20
20
|
"description": "CLI to detect duplicate/similar code in Python and TypeScript",
|
|
21
21
|
"scope": "required",
|
|
22
22
|
"licenses": [
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
"expression": "MIT"
|
|
25
25
|
}
|
|
26
26
|
],
|
|
27
|
-
"purl": "pkg:cargo/duplicatecode@0.
|
|
27
|
+
"purl": "pkg:cargo/duplicatecode@0.3.0?download_url=file://.",
|
|
28
28
|
"components": [
|
|
29
29
|
{
|
|
30
30
|
"type": "application",
|
|
31
|
-
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.
|
|
31
|
+
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.3.0 bin-target-0",
|
|
32
32
|
"name": "duplicatecode",
|
|
33
|
-
"version": "0.
|
|
34
|
-
"purl": "pkg:cargo/duplicatecode@0.
|
|
33
|
+
"version": "0.3.0",
|
|
34
|
+
"purl": "pkg:cargo/duplicatecode@0.3.0?download_url=file://.#src/main.rs"
|
|
35
35
|
}
|
|
36
36
|
]
|
|
37
37
|
},
|
|
@@ -45,17 +45,17 @@
|
|
|
45
45
|
"components": [
|
|
46
46
|
{
|
|
47
47
|
"type": "library",
|
|
48
|
-
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.
|
|
48
|
+
"bom-ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.3.0",
|
|
49
49
|
"name": "duplicatecode-engine",
|
|
50
|
-
"version": "0.
|
|
51
|
-
"description": "Static duplicate/similar code detection engine for Python and
|
|
50
|
+
"version": "0.3.0",
|
|
51
|
+
"description": "Static duplicate/similar code detection engine for Python, TypeScript/JavaScript, SQL and C#",
|
|
52
52
|
"scope": "required",
|
|
53
53
|
"licenses": [
|
|
54
54
|
{
|
|
55
55
|
"expression": "MIT"
|
|
56
56
|
}
|
|
57
57
|
],
|
|
58
|
-
"purl": "pkg:cargo/duplicatecode-engine@0.
|
|
58
|
+
"purl": "pkg:cargo/duplicatecode-engine@0.3.0?download_url=file://..\\duplicatecode-engine"
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
"type": "library",
|
|
@@ -348,15 +348,16 @@
|
|
|
348
348
|
},
|
|
349
349
|
{
|
|
350
350
|
"type": "library",
|
|
351
|
-
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
351
|
+
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
352
|
+
"author": "Alex Crichton <alex@alexcrichton.com>",
|
|
352
353
|
"name": "cc",
|
|
353
|
-
"version": "1.
|
|
354
|
+
"version": "1.2.67",
|
|
354
355
|
"description": "A build-time dependency for Cargo build scripts to assist in invoking the native C compiler to compile native C code into a static archive to be linked into Rust code. ",
|
|
355
356
|
"scope": "excluded",
|
|
356
357
|
"hashes": [
|
|
357
358
|
{
|
|
358
359
|
"alg": "SHA-256",
|
|
359
|
-
"content": "
|
|
360
|
+
"content": "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38"
|
|
360
361
|
}
|
|
361
362
|
],
|
|
362
363
|
"licenses": [
|
|
@@ -364,7 +365,7 @@
|
|
|
364
365
|
"expression": "MIT OR Apache-2.0"
|
|
365
366
|
}
|
|
366
367
|
],
|
|
367
|
-
"purl": "pkg:cargo/cc@1.
|
|
368
|
+
"purl": "pkg:cargo/cc@1.2.67",
|
|
368
369
|
"externalReferences": [
|
|
369
370
|
{
|
|
370
371
|
"type": "documentation",
|
|
@@ -2454,6 +2455,33 @@
|
|
|
2454
2455
|
}
|
|
2455
2456
|
]
|
|
2456
2457
|
},
|
|
2458
|
+
{
|
|
2459
|
+
"type": "library",
|
|
2460
|
+
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-c-sharp@0.23.5",
|
|
2461
|
+
"author": "Max Brunsfeld <maxbrunsfeld@gmail.com>, Amaan Qureshi <amaanq12@gmail.com>",
|
|
2462
|
+
"name": "tree-sitter-c-sharp",
|
|
2463
|
+
"version": "0.23.5",
|
|
2464
|
+
"description": "C# grammar for tree-sitter",
|
|
2465
|
+
"scope": "required",
|
|
2466
|
+
"hashes": [
|
|
2467
|
+
{
|
|
2468
|
+
"alg": "SHA-256",
|
|
2469
|
+
"content": "c1aac67f1ad71de1d6d39708d34811081c26dfa495658de6c14c34200849357c"
|
|
2470
|
+
}
|
|
2471
|
+
],
|
|
2472
|
+
"licenses": [
|
|
2473
|
+
{
|
|
2474
|
+
"expression": "MIT"
|
|
2475
|
+
}
|
|
2476
|
+
],
|
|
2477
|
+
"purl": "pkg:cargo/tree-sitter-c-sharp@0.23.5",
|
|
2478
|
+
"externalReferences": [
|
|
2479
|
+
{
|
|
2480
|
+
"type": "vcs",
|
|
2481
|
+
"url": "https://github.com/tree-sitter/tree-sitter-c-sharp"
|
|
2482
|
+
}
|
|
2483
|
+
]
|
|
2484
|
+
},
|
|
2457
2485
|
{
|
|
2458
2486
|
"type": "library",
|
|
2459
2487
|
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8",
|
|
@@ -2520,6 +2548,33 @@
|
|
|
2520
2548
|
}
|
|
2521
2549
|
]
|
|
2522
2550
|
},
|
|
2551
|
+
{
|
|
2552
|
+
"type": "library",
|
|
2553
|
+
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-sequel@0.3.11",
|
|
2554
|
+
"author": "derek stride",
|
|
2555
|
+
"name": "tree-sitter-sequel",
|
|
2556
|
+
"version": "0.3.11",
|
|
2557
|
+
"description": "Tree-sitter Grammar for SQL",
|
|
2558
|
+
"scope": "required",
|
|
2559
|
+
"hashes": [
|
|
2560
|
+
{
|
|
2561
|
+
"alg": "SHA-256",
|
|
2562
|
+
"content": "9d198ad3c319c02e43c21efa1ec796b837afcb96ffaef1a40c1978fbdcec7d17"
|
|
2563
|
+
}
|
|
2564
|
+
],
|
|
2565
|
+
"licenses": [
|
|
2566
|
+
{
|
|
2567
|
+
"expression": "MIT"
|
|
2568
|
+
}
|
|
2569
|
+
],
|
|
2570
|
+
"purl": "pkg:cargo/tree-sitter-sequel@0.3.11",
|
|
2571
|
+
"externalReferences": [
|
|
2572
|
+
{
|
|
2573
|
+
"type": "vcs",
|
|
2574
|
+
"url": "https://github.com/derekstride/tree-sitter-sql.git"
|
|
2575
|
+
}
|
|
2576
|
+
]
|
|
2577
|
+
},
|
|
2523
2578
|
{
|
|
2524
2579
|
"type": "library",
|
|
2525
2580
|
"bom-ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-typescript@0.23.2",
|
|
@@ -3269,11 +3324,11 @@
|
|
|
3269
3324
|
],
|
|
3270
3325
|
"dependencies": [
|
|
3271
3326
|
{
|
|
3272
|
-
"ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.
|
|
3327
|
+
"ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-cli#duplicatecode@0.3.0",
|
|
3273
3328
|
"dependsOn": [
|
|
3274
3329
|
"registry+https://github.com/rust-lang/crates.io-index#anyhow@1.0.104",
|
|
3275
3330
|
"registry+https://github.com/rust-lang/crates.io-index#clap@4.6.7",
|
|
3276
|
-
"path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.
|
|
3331
|
+
"path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.3.0",
|
|
3277
3332
|
"registry+https://github.com/rust-lang/crates.io-index#rayon@1.12.0",
|
|
3278
3333
|
"registry+https://github.com/rust-lang/crates.io-index#serde@1.0.229",
|
|
3279
3334
|
"registry+https://github.com/rust-lang/crates.io-index#serde_json@1.0.151",
|
|
@@ -3282,13 +3337,15 @@
|
|
|
3282
3337
|
]
|
|
3283
3338
|
},
|
|
3284
3339
|
{
|
|
3285
|
-
"ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.
|
|
3340
|
+
"ref": "path+file:///D:/a/duplicatecode/duplicatecode/crates/duplicatecode-engine#0.3.0",
|
|
3286
3341
|
"dependsOn": [
|
|
3287
3342
|
"registry+https://github.com/rust-lang/crates.io-index#ignore@0.4.33",
|
|
3288
3343
|
"registry+https://github.com/rust-lang/crates.io-index#serde@1.0.229",
|
|
3289
3344
|
"registry+https://github.com/rust-lang/crates.io-index#serde_json@1.0.151",
|
|
3290
3345
|
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter@0.27.0",
|
|
3346
|
+
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-c-sharp@0.23.5",
|
|
3291
3347
|
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-python@0.25.0",
|
|
3348
|
+
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-sequel@0.3.11",
|
|
3292
3349
|
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-typescript@0.23.2",
|
|
3293
3350
|
"registry+https://github.com/rust-lang/crates.io-index#ureq@2.12.1",
|
|
3294
3351
|
"registry+https://github.com/rust-lang/crates.io-index#walkdir@2.5.0"
|
|
@@ -3352,7 +3409,7 @@
|
|
|
3352
3409
|
]
|
|
3353
3410
|
},
|
|
3354
3411
|
{
|
|
3355
|
-
"ref": "registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
3412
|
+
"ref": "registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3356
3413
|
"dependsOn": [
|
|
3357
3414
|
"registry+https://github.com/rust-lang/crates.io-index#find-msvc-tools@0.1.14",
|
|
3358
3415
|
"registry+https://github.com/rust-lang/crates.io-index#shlex@2.0.1"
|
|
@@ -3650,7 +3707,7 @@
|
|
|
3650
3707
|
{
|
|
3651
3708
|
"ref": "registry+https://github.com/rust-lang/crates.io-index#ring@0.17.14",
|
|
3652
3709
|
"dependsOn": [
|
|
3653
|
-
"registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
3710
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3654
3711
|
"registry+https://github.com/rust-lang/crates.io-index#cfg-if@1.0.5",
|
|
3655
3712
|
"registry+https://github.com/rust-lang/crates.io-index#getrandom@0.2.17",
|
|
3656
3713
|
"registry+https://github.com/rust-lang/crates.io-index#untrusted@0.9.0"
|
|
@@ -3763,27 +3820,41 @@
|
|
|
3763
3820
|
"registry+https://github.com/rust-lang/crates.io-index#zerovec@0.11.8"
|
|
3764
3821
|
]
|
|
3765
3822
|
},
|
|
3823
|
+
{
|
|
3824
|
+
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-c-sharp@0.23.5",
|
|
3825
|
+
"dependsOn": [
|
|
3826
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3827
|
+
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8"
|
|
3828
|
+
]
|
|
3829
|
+
},
|
|
3766
3830
|
{
|
|
3767
3831
|
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8"
|
|
3768
3832
|
},
|
|
3769
3833
|
{
|
|
3770
3834
|
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-python@0.25.0",
|
|
3771
3835
|
"dependsOn": [
|
|
3772
|
-
"registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
3836
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3837
|
+
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8"
|
|
3838
|
+
]
|
|
3839
|
+
},
|
|
3840
|
+
{
|
|
3841
|
+
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-sequel@0.3.11",
|
|
3842
|
+
"dependsOn": [
|
|
3843
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3773
3844
|
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8"
|
|
3774
3845
|
]
|
|
3775
3846
|
},
|
|
3776
3847
|
{
|
|
3777
3848
|
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter-typescript@0.23.2",
|
|
3778
3849
|
"dependsOn": [
|
|
3779
|
-
"registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
3850
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3780
3851
|
"registry+https://github.com/rust-lang/crates.io-index#tree-sitter-language@0.1.8"
|
|
3781
3852
|
]
|
|
3782
3853
|
},
|
|
3783
3854
|
{
|
|
3784
3855
|
"ref": "registry+https://github.com/rust-lang/crates.io-index#tree-sitter@0.27.0",
|
|
3785
3856
|
"dependsOn": [
|
|
3786
|
-
"registry+https://github.com/rust-lang/crates.io-index#cc@1.
|
|
3857
|
+
"registry+https://github.com/rust-lang/crates.io-index#cc@1.2.67",
|
|
3787
3858
|
"registry+https://github.com/rust-lang/crates.io-index#regex@1.13.1",
|
|
3788
3859
|
"registry+https://github.com/rust-lang/crates.io-index#serde_json@1.0.151",
|
|
3789
3860
|
"registry+https://github.com/rust-lang/crates.io-index#streaming-iterator@0.1.9",
|
|
Binary file
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
duplicatecode-0.1.0.data/scripts/duplicatecode.exe,sha256=ae5j0KvI7wnn9O21WQU9v4fkZwnbJP5b7MmSK2ZwLYM,9287680
|
|
2
|
-
duplicatecode-0.1.0.dist-info/METADATA,sha256=AunW0DjtBVVcoOuxBut2GsvoiAnJ6HQQBP9UiF1QC2A,12086
|
|
3
|
-
duplicatecode-0.1.0.dist-info/WHEEL,sha256=8Aej0W0a6Cz6apA3IzJrTnxLRVLAt-w0Oh8SA3Con_c,94
|
|
4
|
-
duplicatecode-0.1.0.dist-info/sboms/duplicatecode.cyclonedx.json,sha256=ZzjUcxnTUeQ1mamP_FHfj4WKiV2MNHH_D2KzCvZeRU4,124289
|
|
5
|
-
duplicatecode-0.1.0.dist-info/RECORD,,
|
|
File without changes
|