code-ranker 1.1.0__tar.gz → 2.0.0__tar.gz

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.
Files changed (106) hide show
  1. {code_ranker-1.1.0 → code_ranker-2.0.0}/Cargo.lock +34 -300
  2. {code_ranker-1.1.0 → code_ranker-2.0.0}/Cargo.toml +13 -10
  3. {code_ranker-1.1.0 → code_ranker-2.0.0}/PKG-INFO +2 -1
  4. {code_ranker-1.1.0 → code_ranker-2.0.0}/README.md +1 -0
  5. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/Cargo.toml +0 -1
  6. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/logger.rs +0 -4
  7. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/pipeline.rs +15 -46
  8. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/plugin/mod.rs +39 -1
  9. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/tests/e2e.rs +109 -10
  10. code_ranker-2.0.0/crates/code-ranker-cli/tests/grammar_single_version.rs +66 -0
  11. code_ranker-2.0.0/crates/code-ranker-ecmascript-core/Cargo.toml +28 -0
  12. code_ranker-2.0.0/crates/code-ranker-ecmascript-core/src/ecmascript_ts.rs +682 -0
  13. {code_ranker-1.1.0/crates/code-ranker-plugin-javascript → code_ranker-2.0.0/crates/code-ranker-ecmascript-core}/src/lib.rs +275 -60
  14. code_ranker-2.0.0/crates/code-ranker-ecmascript-core/src/metrics_tests.rs +183 -0
  15. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/cycles.rs +136 -0
  16. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/hk.rs +1 -1
  17. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/lib.rs +3 -0
  18. code_ranker-2.0.0/crates/code-ranker-graph/src/metrics.rs +370 -0
  19. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/relativize.rs +69 -0
  20. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/level.rs +18 -0
  21. code_ranker-2.0.0/crates/code-ranker-plugin-api/src/plugin.rs +217 -0
  22. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-javascript/Cargo.toml +3 -3
  23. code_ranker-2.0.0/crates/code-ranker-plugin-javascript/src/lib.rs +154 -0
  24. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-python/Cargo.toml +3 -0
  25. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-python/src/lib.rs +145 -11
  26. code_ranker-2.0.0/crates/code-ranker-plugin-python/src/metrics_tests.rs +145 -0
  27. code_ranker-2.0.0/crates/code-ranker-plugin-python/src/python_ts.rs +536 -0
  28. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-rust/Cargo.toml +4 -0
  29. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-rust/src/crate_graph.rs +1 -0
  30. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-rust/src/internal.rs +24 -0
  31. code_ranker-2.0.0/crates/code-ranker-plugin-rust/src/lib.rs +1530 -0
  32. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-rust/src/module_graph.rs +296 -78
  33. code_ranker-2.0.0/crates/code-ranker-plugin-rust/src/rust_ts.rs +589 -0
  34. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-typescript/Cargo.toml +4 -5
  35. code_ranker-2.0.0/crates/code-ranker-plugin-typescript/src/lib.rs +315 -0
  36. code_ranker-2.0.0/crates/code-ranker-test-support/Cargo.toml +15 -0
  37. code_ranker-2.0.0/crates/code-ranker-test-support/src/lib.rs +37 -0
  38. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/layout.js +17 -2
  39. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/node-table.js +8 -3
  40. code_ranker-1.1.0/crates/code-ranker-complexity/Cargo.toml +0 -22
  41. code_ranker-1.1.0/crates/code-ranker-complexity/src/lib.rs +0 -569
  42. code_ranker-1.1.0/crates/code-ranker-plugin-api/src/plugin.rs +0 -102
  43. code_ranker-1.1.0/crates/code-ranker-plugin-rust/src/lib.rs +0 -569
  44. code_ranker-1.1.0/crates/code-ranker-plugin-typescript/src/lib.rs +0 -139
  45. {code_ranker-1.1.0 → code_ranker-2.0.0}/LICENSE +0 -0
  46. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/analyze.rs +0 -0
  47. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/check.rs +0 -0
  48. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/cli.rs +0 -0
  49. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/ignore.rs +0 -0
  50. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/load.rs +0 -0
  51. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/mod.rs +0 -0
  52. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/model.rs +0 -0
  53. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/rules.rs +0 -0
  54. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/config/violations.rs +0 -0
  55. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/git.rs +0 -0
  56. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/main.rs +0 -0
  57. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/presets.rs +0 -0
  58. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/recommend.rs +0 -0
  59. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-cli/src/report.rs +0 -0
  60. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/Cargo.toml +0 -0
  61. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/attrs.rs +0 -0
  62. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/finalize.rs +0 -0
  63. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/level_graph.rs +0 -0
  64. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/serialize.rs +0 -0
  65. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/snapshot.rs +0 -0
  66. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-graph/src/stats.rs +0 -0
  67. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/Cargo.toml +0 -0
  68. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/attrs.rs +0 -0
  69. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/edge.rs +0 -0
  70. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/graph.rs +0 -0
  71. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/lib.rs +0 -0
  72. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/log.rs +0 -0
  73. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-api/src/node.rs +0 -0
  74. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-plugin-rust/src/ids.rs +0 -0
  75. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/Cargo.toml +0 -0
  76. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/app.js +0 -0
  77. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/base.css +0 -0
  78. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/diff.js +0 -0
  79. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/export-popup.js +0 -0
  80. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/export.css +0 -0
  81. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/graphviz.umd.js +0 -0
  82. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/grouping.js +0 -0
  83. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/index.html +0 -0
  84. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/map-interactions.js +0 -0
  85. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/map-render.js +0 -0
  86. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/map-svg.css +0 -0
  87. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/map.css +0 -0
  88. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/modal-content.js +0 -0
  89. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/modal.css +0 -0
  90. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/modal.js +0 -0
  91. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/nav.js +0 -0
  92. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/node-popup.js +0 -0
  93. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/panzoom.js +0 -0
  94. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/schema.js +0 -0
  95. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/snap-controls.js +0 -0
  96. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/snap.css +0 -0
  97. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/snarkdown.umd.js +0 -0
  98. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/source-links.js +0 -0
  99. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/summary.js +0 -0
  100. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/tables.css +0 -0
  101. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/tooltip.js +0 -0
  102. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/ui.js +0 -0
  103. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/utils.js +0 -0
  104. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/assets/view-state.js +0 -0
  105. {code_ranker-1.1.0 → code_ranker-2.0.0}/crates/code-ranker-viewer/src/lib.rs +0 -0
  106. {code_ranker-1.1.0 → code_ranker-2.0.0}/pyproject.toml +0 -0
@@ -76,12 +76,6 @@ version = "1.0.102"
76
76
  source = "registry+https://github.com/rust-lang/crates.io-index"
77
77
  checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
78
78
 
79
- [[package]]
80
- name = "arrayvec"
81
- version = "0.7.6"
82
- source = "registry+https://github.com/rust-lang/crates.io-index"
83
- checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
84
-
85
79
  [[package]]
86
80
  name = "autocfg"
87
81
  version = "1.5.0"
@@ -214,12 +208,11 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
214
208
 
215
209
  [[package]]
216
210
  name = "code-ranker"
217
- version = "1.1.0"
211
+ version = "2.0.0"
218
212
  dependencies = [
219
213
  "anyhow",
220
214
  "chrono",
221
215
  "clap",
222
- "code-ranker-complexity",
223
216
  "code-ranker-graph",
224
217
  "code-ranker-plugin-api",
225
218
  "code-ranker-plugin-javascript",
@@ -237,20 +230,23 @@ dependencies = [
237
230
  ]
238
231
 
239
232
  [[package]]
240
- name = "code-ranker-complexity"
241
- version = "1.1.0"
233
+ name = "code-ranker-ecmascript-core"
234
+ version = "2.0.0"
242
235
  dependencies = [
236
+ "anyhow",
243
237
  "code-ranker-graph",
244
238
  "code-ranker-plugin-api",
245
- "proc-macro2",
246
- "rust-code-analysis-code-split",
247
- "syn",
239
+ "code-ranker-test-support",
248
240
  "tempfile",
241
+ "tree-sitter",
242
+ "tree-sitter-javascript",
243
+ "tree-sitter-typescript",
244
+ "walkdir",
249
245
  ]
250
246
 
251
247
  [[package]]
252
248
  name = "code-ranker-graph"
253
- version = "1.1.0"
249
+ version = "2.0.0"
254
250
  dependencies = [
255
251
  "anyhow",
256
252
  "chrono",
@@ -261,7 +257,7 @@ dependencies = [
261
257
 
262
258
  [[package]]
263
259
  name = "code-ranker-plugin-api"
264
- version = "1.1.0"
260
+ version = "2.0.0"
265
261
  dependencies = [
266
262
  "anyhow",
267
263
  "chrono",
@@ -270,23 +266,24 @@ dependencies = [
270
266
 
271
267
  [[package]]
272
268
  name = "code-ranker-plugin-javascript"
273
- version = "1.1.0"
269
+ version = "2.0.0"
274
270
  dependencies = [
275
271
  "anyhow",
276
- "code-ranker-graph",
272
+ "code-ranker-ecmascript-core",
277
273
  "code-ranker-plugin-api",
274
+ "code-ranker-test-support",
278
275
  "tempfile",
279
- "tree-sitter",
280
276
  "tree-sitter-javascript",
281
- "walkdir",
282
277
  ]
283
278
 
284
279
  [[package]]
285
280
  name = "code-ranker-plugin-python"
286
- version = "1.1.0"
281
+ version = "2.0.0"
287
282
  dependencies = [
288
283
  "anyhow",
284
+ "code-ranker-graph",
289
285
  "code-ranker-plugin-api",
286
+ "code-ranker-test-support",
290
287
  "tempfile",
291
288
  "tree-sitter",
292
289
  "tree-sitter-python",
@@ -295,33 +292,41 @@ dependencies = [
295
292
 
296
293
  [[package]]
297
294
  name = "code-ranker-plugin-rust"
298
- version = "1.1.0"
295
+ version = "2.0.0"
299
296
  dependencies = [
300
297
  "anyhow",
301
298
  "cargo_metadata",
299
+ "code-ranker-graph",
302
300
  "code-ranker-plugin-api",
303
301
  "proc-macro2",
304
302
  "syn",
303
+ "tree-sitter",
304
+ "tree-sitter-rust",
305
305
  "which",
306
306
  ]
307
307
 
308
308
  [[package]]
309
309
  name = "code-ranker-plugin-typescript"
310
- version = "1.1.0"
310
+ version = "2.0.0"
311
311
  dependencies = [
312
312
  "anyhow",
313
- "code-ranker-graph",
313
+ "code-ranker-ecmascript-core",
314
314
  "code-ranker-plugin-api",
315
- "code-ranker-plugin-javascript",
315
+ "code-ranker-test-support",
316
316
  "tempfile",
317
- "tree-sitter",
318
317
  "tree-sitter-typescript",
319
- "walkdir",
318
+ ]
319
+
320
+ [[package]]
321
+ name = "code-ranker-test-support"
322
+ version = "2.0.0"
323
+ dependencies = [
324
+ "code-ranker-plugin-api",
320
325
  ]
321
326
 
322
327
  [[package]]
323
328
  name = "code-ranker-viewer"
324
- version = "1.1.0"
329
+ version = "2.0.0"
325
330
  dependencies = [
326
331
  "anyhow",
327
332
  "code-ranker-graph",
@@ -341,62 +346,6 @@ version = "0.8.7"
341
346
  source = "registry+https://github.com/rust-lang/crates.io-index"
342
347
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
343
348
 
344
- [[package]]
345
- name = "crossbeam"
346
- version = "0.8.4"
347
- source = "registry+https://github.com/rust-lang/crates.io-index"
348
- checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8"
349
- dependencies = [
350
- "crossbeam-channel",
351
- "crossbeam-deque",
352
- "crossbeam-epoch",
353
- "crossbeam-queue",
354
- "crossbeam-utils",
355
- ]
356
-
357
- [[package]]
358
- name = "crossbeam-channel"
359
- version = "0.5.15"
360
- source = "registry+https://github.com/rust-lang/crates.io-index"
361
- checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
362
- dependencies = [
363
- "crossbeam-utils",
364
- ]
365
-
366
- [[package]]
367
- name = "crossbeam-deque"
368
- version = "0.8.6"
369
- source = "registry+https://github.com/rust-lang/crates.io-index"
370
- checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
371
- dependencies = [
372
- "crossbeam-epoch",
373
- "crossbeam-utils",
374
- ]
375
-
376
- [[package]]
377
- name = "crossbeam-epoch"
378
- version = "0.9.18"
379
- source = "registry+https://github.com/rust-lang/crates.io-index"
380
- checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
381
- dependencies = [
382
- "crossbeam-utils",
383
- ]
384
-
385
- [[package]]
386
- name = "crossbeam-queue"
387
- version = "0.3.12"
388
- source = "registry+https://github.com/rust-lang/crates.io-index"
389
- checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
390
- dependencies = [
391
- "crossbeam-utils",
392
- ]
393
-
394
- [[package]]
395
- name = "crossbeam-utils"
396
- version = "0.8.21"
397
- source = "registry+https://github.com/rust-lang/crates.io-index"
398
- checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
399
-
400
349
  [[package]]
401
350
  name = "equivalent"
402
351
  version = "1.0.2"
@@ -425,12 +374,6 @@ version = "0.1.9"
425
374
  source = "registry+https://github.com/rust-lang/crates.io-index"
426
375
  checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
427
376
 
428
- [[package]]
429
- name = "fixedbitset"
430
- version = "0.5.7"
431
- source = "registry+https://github.com/rust-lang/crates.io-index"
432
- checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
433
-
434
377
  [[package]]
435
378
  name = "foldhash"
436
379
  version = "0.1.5"
@@ -604,91 +547,6 @@ version = "2.8.0"
604
547
  source = "registry+https://github.com/rust-lang/crates.io-index"
605
548
  checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
606
549
 
607
- [[package]]
608
- name = "num"
609
- version = "0.4.3"
610
- source = "registry+https://github.com/rust-lang/crates.io-index"
611
- checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
612
- dependencies = [
613
- "num-bigint",
614
- "num-complex",
615
- "num-integer",
616
- "num-iter",
617
- "num-rational",
618
- "num-traits",
619
- ]
620
-
621
- [[package]]
622
- name = "num-bigint"
623
- version = "0.4.6"
624
- source = "registry+https://github.com/rust-lang/crates.io-index"
625
- checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
626
- dependencies = [
627
- "num-integer",
628
- "num-traits",
629
- ]
630
-
631
- [[package]]
632
- name = "num-complex"
633
- version = "0.4.6"
634
- source = "registry+https://github.com/rust-lang/crates.io-index"
635
- checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
636
- dependencies = [
637
- "num-traits",
638
- ]
639
-
640
- [[package]]
641
- name = "num-derive"
642
- version = "0.4.2"
643
- source = "registry+https://github.com/rust-lang/crates.io-index"
644
- checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
645
- dependencies = [
646
- "proc-macro2",
647
- "quote",
648
- "syn",
649
- ]
650
-
651
- [[package]]
652
- name = "num-format"
653
- version = "0.4.4"
654
- source = "registry+https://github.com/rust-lang/crates.io-index"
655
- checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
656
- dependencies = [
657
- "arrayvec",
658
- "itoa",
659
- ]
660
-
661
- [[package]]
662
- name = "num-integer"
663
- version = "0.1.46"
664
- source = "registry+https://github.com/rust-lang/crates.io-index"
665
- checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
666
- dependencies = [
667
- "num-traits",
668
- ]
669
-
670
- [[package]]
671
- name = "num-iter"
672
- version = "0.1.45"
673
- source = "registry+https://github.com/rust-lang/crates.io-index"
674
- checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
675
- dependencies = [
676
- "autocfg",
677
- "num-integer",
678
- "num-traits",
679
- ]
680
-
681
- [[package]]
682
- name = "num-rational"
683
- version = "0.4.2"
684
- source = "registry+https://github.com/rust-lang/crates.io-index"
685
- checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
686
- dependencies = [
687
- "num-bigint",
688
- "num-integer",
689
- "num-traits",
690
- ]
691
-
692
550
  [[package]]
693
551
  name = "num-traits"
694
552
  version = "0.2.19"
@@ -710,18 +568,6 @@ version = "1.70.2"
710
568
  source = "registry+https://github.com/rust-lang/crates.io-index"
711
569
  checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
712
570
 
713
- [[package]]
714
- name = "petgraph"
715
- version = "0.8.3"
716
- source = "registry+https://github.com/rust-lang/crates.io-index"
717
- checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
718
- dependencies = [
719
- "fixedbitset",
720
- "hashbrown 0.15.5",
721
- "indexmap",
722
- "serde",
723
- ]
724
-
725
571
  [[package]]
726
572
  name = "pin-project-lite"
727
573
  version = "0.2.17"
@@ -791,37 +637,6 @@ version = "0.8.10"
791
637
  source = "registry+https://github.com/rust-lang/crates.io-index"
792
638
  checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
793
639
 
794
- [[package]]
795
- name = "rust-code-analysis-code-split"
796
- version = "0.0.26-cs.0"
797
- source = "registry+https://github.com/rust-lang/crates.io-index"
798
- checksum = "a3b9324bd5110e3d03aa2a301ff9615a802ca8169dd01507e2adf1232e57d341"
799
- dependencies = [
800
- "aho-corasick",
801
- "crossbeam",
802
- "globset",
803
- "num",
804
- "num-derive",
805
- "num-format",
806
- "num-traits",
807
- "petgraph",
808
- "regex",
809
- "serde",
810
- "termcolor",
811
- "tree-sitter",
812
- "tree-sitter-ccomment-code-split",
813
- "tree-sitter-java",
814
- "tree-sitter-javascript",
815
- "tree-sitter-kotlin-ng",
816
- "tree-sitter-mozcpp-code-split",
817
- "tree-sitter-mozjs-code-split",
818
- "tree-sitter-preproc-code-split",
819
- "tree-sitter-python",
820
- "tree-sitter-rust",
821
- "tree-sitter-typescript",
822
- "walkdir",
823
- ]
824
-
825
640
  [[package]]
826
641
  name = "rustix"
827
642
  version = "1.1.4"
@@ -961,15 +776,6 @@ dependencies = [
961
776
  "windows-sys",
962
777
  ]
963
778
 
964
- [[package]]
965
- name = "termcolor"
966
- version = "1.4.1"
967
- source = "registry+https://github.com/rust-lang/crates.io-index"
968
- checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
969
- dependencies = [
970
- "winapi-util",
971
- ]
972
-
973
779
  [[package]]
974
780
  name = "thiserror"
975
781
  version = "1.0.69"
@@ -1043,36 +849,6 @@ dependencies = [
1043
849
  "tree-sitter-language",
1044
850
  ]
1045
851
 
1046
- [[package]]
1047
- name = "tree-sitter-ccomment-code-split"
1048
- version = "0.20.3"
1049
- source = "registry+https://github.com/rust-lang/crates.io-index"
1050
- checksum = "83235cd394d3a46206566faf6524b46f2aeb8e8d910ee0d9a1ea5804365c7ca4"
1051
- dependencies = [
1052
- "cc",
1053
- "tree-sitter-language",
1054
- ]
1055
-
1056
- [[package]]
1057
- name = "tree-sitter-cpp"
1058
- version = "0.23.4"
1059
- source = "registry+https://github.com/rust-lang/crates.io-index"
1060
- checksum = "df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743"
1061
- dependencies = [
1062
- "cc",
1063
- "tree-sitter-language",
1064
- ]
1065
-
1066
- [[package]]
1067
- name = "tree-sitter-java"
1068
- version = "0.23.5"
1069
- source = "registry+https://github.com/rust-lang/crates.io-index"
1070
- checksum = "0aa6cbcdc8c679b214e616fd3300da67da0e492e066df01bcf5a5921a71e90d6"
1071
- dependencies = [
1072
- "cc",
1073
- "tree-sitter-language",
1074
- ]
1075
-
1076
852
  [[package]]
1077
853
  name = "tree-sitter-javascript"
1078
854
  version = "0.25.0"
@@ -1083,54 +859,12 @@ dependencies = [
1083
859
  "tree-sitter-language",
1084
860
  ]
1085
861
 
1086
- [[package]]
1087
- name = "tree-sitter-kotlin-ng"
1088
- version = "1.1.0"
1089
- source = "registry+https://github.com/rust-lang/crates.io-index"
1090
- checksum = "e800ebbda938acfbf224f4d2c34947a31994b1295ee6e819b65226c7b51b4450"
1091
- dependencies = [
1092
- "cc",
1093
- "tree-sitter-language",
1094
- ]
1095
-
1096
862
  [[package]]
1097
863
  name = "tree-sitter-language"
1098
864
  version = "0.1.7"
1099
865
  source = "registry+https://github.com/rust-lang/crates.io-index"
1100
866
  checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782"
1101
867
 
1102
- [[package]]
1103
- name = "tree-sitter-mozcpp-code-split"
1104
- version = "0.20.4"
1105
- source = "registry+https://github.com/rust-lang/crates.io-index"
1106
- checksum = "c5bfceb330f0fd6327cb2d9647e46c92c193628962dca4186a3c74ee15e01ddf"
1107
- dependencies = [
1108
- "cc",
1109
- "tree-sitter-cpp",
1110
- "tree-sitter-language",
1111
- ]
1112
-
1113
- [[package]]
1114
- name = "tree-sitter-mozjs-code-split"
1115
- version = "0.20.3"
1116
- source = "registry+https://github.com/rust-lang/crates.io-index"
1117
- checksum = "24f0056e599a6f8a9459a6bf5d83c39c143cb4bec97f3a88ad7dad4b3865d40d"
1118
- dependencies = [
1119
- "cc",
1120
- "tree-sitter-javascript",
1121
- "tree-sitter-language",
1122
- ]
1123
-
1124
- [[package]]
1125
- name = "tree-sitter-preproc-code-split"
1126
- version = "0.20.3"
1127
- source = "registry+https://github.com/rust-lang/crates.io-index"
1128
- checksum = "7e374ddbdf97fd8910995c6b2e4d50bd15d9741aa078b9e70bc195c723767b9e"
1129
- dependencies = [
1130
- "cc",
1131
- "tree-sitter-language",
1132
- ]
1133
-
1134
868
  [[package]]
1135
869
  name = "tree-sitter-python"
1136
870
  version = "0.25.0"
@@ -1143,9 +877,9 @@ dependencies = [
1143
877
 
1144
878
  [[package]]
1145
879
  name = "tree-sitter-rust"
1146
- version = "0.23.2"
880
+ version = "0.24.2"
1147
881
  source = "registry+https://github.com/rust-lang/crates.io-index"
1148
- checksum = "a4d64d449ca63e683c562c7743946a646671ca23947b9c925c0cfbe65051a4af"
882
+ checksum = "439e577dbe07423ec2582ac62c7531120dbfccfa6e5f92406f93dd271a120e45"
1149
883
  dependencies = [
1150
884
  "cc",
1151
885
  "tree-sitter-language",
@@ -3,7 +3,7 @@ members = ["crates/*"]
3
3
  resolver = "3"
4
4
 
5
5
  [workspace.package]
6
- version = "1.1.0"
6
+ version = "2.0.0"
7
7
  edition = "2024"
8
8
  rust-version = "1.88"
9
9
  license = "Apache-2.0"
@@ -12,14 +12,14 @@ keywords = ["dependency-graph", "coupling", "refactoring", "code-quality", "stat
12
12
  categories = ["development-tools", "command-line-utilities"]
13
13
 
14
14
  [workspace.dependencies]
15
- code-ranker-graph = { path = "crates/code-ranker-graph", version = "1.1.0" }
16
- code-ranker-plugin-api = { path = "crates/code-ranker-plugin-api", version = "1.1.0" }
17
- code-ranker-complexity = { path = "crates/code-ranker-complexity", version = "1.1.0" }
18
- code-ranker-plugin-rust = { path = "crates/code-ranker-plugin-rust", version = "1.1.0" }
19
- code-ranker-plugin-python = { path = "crates/code-ranker-plugin-python", version = "1.1.0" }
20
- code-ranker-plugin-javascript = { path = "crates/code-ranker-plugin-javascript", version = "1.1.0" }
21
- code-ranker-plugin-typescript = { path = "crates/code-ranker-plugin-typescript", version = "1.1.0" }
22
- code-ranker-viewer = { path = "crates/code-ranker-viewer", version = "1.1.0" }
15
+ code-ranker-graph = { path = "crates/code-ranker-graph", version = "2.0.0" }
16
+ code-ranker-plugin-api = { path = "crates/code-ranker-plugin-api", version = "2.0.0" }
17
+ code-ranker-ecmascript-core = { path = "crates/code-ranker-ecmascript-core", version = "2.0.0" }
18
+ code-ranker-plugin-rust = { path = "crates/code-ranker-plugin-rust", version = "2.0.0" }
19
+ code-ranker-plugin-python = { path = "crates/code-ranker-plugin-python", version = "2.0.0" }
20
+ code-ranker-plugin-javascript = { path = "crates/code-ranker-plugin-javascript", version = "2.0.0" }
21
+ code-ranker-plugin-typescript = { path = "crates/code-ranker-plugin-typescript", version = "2.0.0" }
22
+ code-ranker-viewer = { path = "crates/code-ranker-viewer", version = "2.0.0" }
23
23
 
24
24
  anyhow = "1.0"
25
25
  globset = "0.4"
@@ -35,11 +35,14 @@ tempfile = "3"
35
35
  thiserror = "1"
36
36
  which = "8"
37
37
 
38
- rust-code-analysis = { package = "rust-code-analysis-code-split", version = "0.0.26-cs.0" }
38
+ # One version of each tree-sitter grammar across the whole workspace (plugins +
39
+ # metric engines), each at its latest. Enforced by the `grammar_single_version`
40
+ # test. Engines resolve node kinds by name, so they are grammar-version-robust.
39
41
  tree-sitter = "0.26.9"
40
42
  tree-sitter-python = "0.25.0"
41
43
  tree-sitter-javascript = "0.25.0"
42
44
  tree-sitter-typescript = "0.23.2"
45
+ tree-sitter-rust = "0.24.2"
43
46
  walkdir = "2"
44
47
 
45
48
  # The profile that 'dist' will build with
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-ranker
3
- Version: 1.1.0
3
+ Version: 2.0.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -161,6 +161,7 @@ Built-in plugins: `rust` (cargo + syn), `python`, `javascript` (also handles Typ
161
161
  - [AI agent skill](docs/ai-skill.md) — a short playbook to attach to an AI agent's context (the ADP/HK fix loop)
162
162
  - [PRD](docs/PRD.md) — product requirements
163
163
  - [DESIGN](docs/DESIGN.md) — technical design
164
+ - [Why structure matters](docs/why-structure-matters.md) — the empirical evidence (studies, books, statistics) behind the signals code-ranker measures
164
165
  - [Principles corpus](principles/) — Rust / Python / TypeScript principle catalogues used by the prompt generator
165
166
 
166
167
  ## Try it now
@@ -138,6 +138,7 @@ Built-in plugins: `rust` (cargo + syn), `python`, `javascript` (also handles Typ
138
138
  - [AI agent skill](docs/ai-skill.md) — a short playbook to attach to an AI agent's context (the ADP/HK fix loop)
139
139
  - [PRD](docs/PRD.md) — product requirements
140
140
  - [DESIGN](docs/DESIGN.md) — technical design
141
+ - [Why structure matters](docs/why-structure-matters.md) — the empirical evidence (studies, books, statistics) behind the signals code-ranker measures
141
142
  - [Principles corpus](principles/) — Rust / Python / TypeScript principle catalogues used by the prompt generator
142
143
 
143
144
  ## Try it now
@@ -15,7 +15,6 @@ path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
17
  code-ranker-graph = { workspace = true }
18
- code-ranker-complexity = { workspace = true }
19
18
  code-ranker-plugin-api = { workspace = true }
20
19
  code-ranker-plugin-rust = { workspace = true }
21
20
  code-ranker-plugin-python = { workspace = true }
@@ -1,10 +1,6 @@
1
1
  use code_ranker_plugin_api::log;
2
2
  use std::time::Instant;
3
3
 
4
- /// Re-export the shared timed sub-command helper so call sites in this crate
5
- /// (git / cargo / rustc shell-outs) log through the one common formatter.
6
- pub use code_ranker_plugin_api::log::timed;
7
-
8
4
  pub fn info(msg: &str) {
9
5
  log::line(msg);
10
6
  }
@@ -77,9 +77,11 @@ pub(crate) fn analyze_directory(
77
77
  detail: format!("{} nodes from {} files", graph.nodes.len(), file_count),
78
78
  });
79
79
 
80
- // 2. Central complexity pass (reads files by their absolute id).
80
+ // 2. Complexity pass: the active plugin annotates its own file nodes with
81
+ // per-language metrics (behind the `LanguagePlugin` trait — no central
82
+ // by-extension dispatcher). Reads files by their absolute id.
81
83
  let t = logger::Timer::start("complexity");
82
- let annotated = code_ranker_complexity::annotate(&mut graph);
84
+ let annotated = plugin::annotate_metrics(&plugin_name, &mut graph);
83
85
  timings.push(code_ranker_graph::snapshot::StageTime {
84
86
  stage: "complexity".into(),
85
87
  ms: t.finish_quiet(),
@@ -87,9 +89,13 @@ pub(crate) fn analyze_directory(
87
89
  });
88
90
 
89
91
  // 3. Canonicalize structure, then relativize ids against detected roots.
92
+ // The active plugin contributes its own language/toolchain roots (e.g. the
93
+ // Rust plugin's cargo/registry/rustup/rust-src); the orchestrator only owns
94
+ // the generic `target` root — no language leaks into this central step.
90
95
  let t = logger::Timer::start("projection");
91
96
  code_ranker_graph::finalize::finalize_graph(&mut graph);
92
- let mut roots = detect_roots();
97
+ let mut roots: BTreeMap<String, String> =
98
+ plugin::roots(&plugin_name, &target).into_iter().collect();
93
99
  roots.insert("target".to_string(), target.display().to_string());
94
100
  code_ranker_graph::relativize::relativize_graph(&mut graph, &target, &roots);
95
101
 
@@ -110,7 +116,7 @@ pub(crate) fn analyze_directory(
110
116
  let edge_count = graph.edges.len();
111
117
  let node_count = graph.nodes.len();
112
118
  let thresholds = plugin::thresholds(&plugin_name);
113
- let level = assemble_level(level_spec, graph, cycles, stats, thresholds);
119
+ let level = assemble_level(level_spec, graph, cycles, stats, thresholds, &plugin_name);
114
120
  prune_unused_roots(&level, &mut roots);
115
121
  timings.push(code_ranker_graph::snapshot::StageTime {
116
122
  stage: "projection".into(),
@@ -192,6 +198,7 @@ fn assemble_level(
192
198
  cycles: Vec<code_ranker_graph::level_graph::CycleGroup>,
193
199
  stats: BTreeMap<String, code_ranker_plugin_api::attrs::AttrValue>,
194
200
  thresholds: BTreeMap<String, code_ranker_plugin_api::level::Thresholds>,
201
+ plugin_name: &str,
195
202
  ) -> LevelGraph {
196
203
  use std::collections::BTreeSet;
197
204
 
@@ -208,7 +215,10 @@ fn assemble_level(
208
215
 
209
216
  // Master node-attribute dictionary = structural (plugin) + computed.
210
217
  let mut node_attributes = spec.node_attributes;
211
- let (metric_specs, metric_groups) = code_ranker_complexity::metric_specs();
218
+ // Language-neutral default metric specs, refined by the active plugin (e.g.
219
+ // Rust adds the `#[cfg(test)]` nuance to the LOC descriptions).
220
+ let (default_metric_specs, metric_groups) = code_ranker_graph::metric_specs();
221
+ let metric_specs = plugin::metric_specs(plugin_name, default_metric_specs);
212
222
  let (coupling_specs, coupling_groups) = code_ranker_graph::coupling_specs();
213
223
  node_attributes.extend(metric_specs);
214
224
  node_attributes.extend(coupling_specs);
@@ -418,47 +428,6 @@ fn resolve_plugin(arg: Option<&str>, cfg: Option<&str>, workspace: &Path) -> Res
418
428
  plugin::detect(workspace, &PluginInput::default())
419
429
  }
420
430
 
421
- fn detect_roots() -> BTreeMap<String, String> {
422
- let mut roots = BTreeMap::new();
423
- let home = std::env::var("HOME").unwrap_or_default();
424
-
425
- let cargo = std::env::var("CARGO_HOME").unwrap_or_else(|_| format!("{home}/.cargo"));
426
- let rustup = std::env::var("RUSTUP_HOME").unwrap_or_else(|_| format!("{home}/.rustup"));
427
-
428
- if !cargo.is_empty() {
429
- // Auto-detect crates.io registry hash dir (e.g. index.crates.io-<hash>).
430
- let registry_src = format!("{cargo}/registry/src");
431
- if let Ok(entries) = std::fs::read_dir(&registry_src) {
432
- for entry in entries.flatten() {
433
- let name = entry.file_name().to_string_lossy().to_string();
434
- if name.starts_with("index.crates.io") {
435
- roots.insert("registry".to_string(), format!("{registry_src}/{name}"));
436
- break;
437
- }
438
- }
439
- }
440
- roots.insert("cargo".to_string(), cargo);
441
- }
442
- if !rustup.is_empty() {
443
- // Add rust-src root: sysroot/lib/rustlib/src/rust/library
444
- // This shortens stdlib paths from {rustup}/toolchains/.../library/... to {rust-src}/...
445
- if let Ok(out) = logger::timed("rustc --print sysroot", || {
446
- std::process::Command::new("rustc")
447
- .args(["--print", "sysroot"])
448
- .output()
449
- }) && out.status.success()
450
- {
451
- let sysroot = String::from_utf8_lossy(&out.stdout).trim().to_string();
452
- let rust_lib = format!("{sysroot}/lib/rustlib/src/rust/library");
453
- if std::path::Path::new(&rust_lib).exists() {
454
- roots.insert("rust-src".to_string(), rust_lib);
455
- }
456
- }
457
- roots.insert("rustup".to_string(), rustup);
458
- }
459
- roots
460
- }
461
-
462
431
  /// Remove named roots whose `{name}` token does not appear in any node id or
463
432
  /// path after relativization. `target` is always kept (it names the analyzed
464
433
  /// project even when every node sits directly under it). This keeps the