code-gauge 4.7.0 → 4.8.0

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 (78) hide show
  1. package/README.md +1 -1
  2. package/THIRD-PARTY-NOTICES.txt +595 -29
  3. package/dist/cli.cjs +1 -1
  4. package/dist/cli.cjs.map +1 -1
  5. package/dist/cli.js +1 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/cliConfig.cjs +1 -1
  8. package/dist/cliConfig.cjs.map +1 -1
  9. package/dist/cliConfig.js +1 -1
  10. package/dist/cliConfig.js.map +1 -1
  11. package/dist/crossFileDuplication.cjs +1 -1
  12. package/dist/crossFileDuplication.cjs.map +1 -1
  13. package/dist/crossFileDuplication.js +1 -1
  14. package/dist/crossFileDuplication.js.map +1 -1
  15. package/dist/crossFileNearMiss.cjs +1 -1
  16. package/dist/crossFileNearMiss.cjs.map +1 -1
  17. package/dist/crossFileNearMiss.js +1 -1
  18. package/dist/crossFileNearMiss.js.map +1 -1
  19. package/dist/diffCommand.cjs +3 -3
  20. package/dist/diffCommand.cjs.map +1 -1
  21. package/dist/diffCommand.js +3 -3
  22. package/dist/diffCommand.js.map +1 -1
  23. package/dist/duplicateSelection.cjs +1 -1
  24. package/dist/duplicateSelection.cjs.map +1 -1
  25. package/dist/duplicateSelection.js +1 -1
  26. package/dist/duplicateSelection.js.map +1 -1
  27. package/dist/duplication.cjs +1 -1
  28. package/dist/duplication.cjs.map +1 -1
  29. package/dist/duplication.js +1 -1
  30. package/dist/duplication.js.map +1 -1
  31. package/dist/git.cjs +1 -1
  32. package/dist/git.cjs.map +1 -1
  33. package/dist/git.js +1 -1
  34. package/dist/git.js.map +1 -1
  35. package/dist/languages.cjs +1 -1
  36. package/dist/languages.cjs.map +1 -1
  37. package/dist/languages.js +1 -1
  38. package/dist/languages.js.map +1 -1
  39. package/dist/metrics.cjs +1 -1
  40. package/dist/metrics.cjs.map +1 -1
  41. package/dist/metrics.d.ts +8 -3
  42. package/dist/metrics.js +1 -1
  43. package/dist/metrics.js.map +1 -1
  44. package/dist/nativeMetrics.cjs +3 -3
  45. package/dist/nativeMetrics.cjs.map +1 -1
  46. package/dist/nativeMetrics.d.ts +19 -3
  47. package/dist/nativeMetrics.js +3 -3
  48. package/dist/nativeMetrics.js.map +1 -1
  49. package/dist/regressionGate.cjs +1 -1
  50. package/dist/regressionGate.cjs.map +1 -1
  51. package/dist/regressionGate.js +1 -1
  52. package/dist/regressionGate.js.map +1 -1
  53. package/dist/scan.cjs +1 -1
  54. package/dist/scan.cjs.map +1 -1
  55. package/dist/scan.d.ts +2 -2
  56. package/dist/scan.js +1 -1
  57. package/dist/scan.js.map +1 -1
  58. package/dist/wasmBinding.cjs +1 -1
  59. package/dist/wasmBinding.cjs.map +1 -1
  60. package/dist/wasmBinding.js +1 -1
  61. package/dist/wasmBinding.js.map +1 -1
  62. package/native/Cargo.lock +48 -15
  63. package/native/Cargo.toml +11 -10
  64. package/native/code-gauge.wasm +0 -0
  65. package/native/src/complexity.rs +152 -255
  66. package/native/src/dep_degree.rs +79 -65
  67. package/native/src/duplication.rs +114 -97
  68. package/native/src/functions.rs +181 -206
  69. package/native/src/languages.rs +48 -7
  70. package/native/src/lib.rs +10 -5
  71. package/native/src/measure.rs +125 -150
  72. package/native/src/napi.rs +61 -2
  73. package/native/src/ncss.rs +108 -104
  74. package/native/src/near_miss.rs +7 -7
  75. package/native/src/tree_index.rs +119 -0
  76. package/native/src/util.rs +15 -55
  77. package/native/src/worker_pool.rs +53 -0
  78. package/package.json +10 -10
@@ -0,0 +1,53 @@
1
+ use std::num::NonZeroUsize;
2
+ use std::sync::{mpsc, Arc, Mutex, OnceLock};
3
+ use std::thread;
4
+
5
+ type Job = Box<dyn FnOnce() + Send>;
6
+
7
+ /// The metric passes recurse per tree level (TreeIndex refuses trees deeper than 5,000), so workers
8
+ /// get the stack size of a typical main thread instead of Rust's 2 MiB default.
9
+ const STACK_SIZE: usize = 8 * 1024 * 1024;
10
+
11
+ /// Runs the job on a process-wide pool with one thread per available core. A dedicated pool rather
12
+ /// than libuv's (4 threads by default) lets measurements use every core without the embedding
13
+ /// process having to raise UV_THREADPOOL_SIZE before its first I/O. The pool keeps however many
14
+ /// workers the OS allows (a thread or PID limit may refuse some); with none, the job runs on the
15
+ /// calling thread instead.
16
+ pub fn spawn(job: impl FnOnce() + Send + 'static) {
17
+ static SENDER: OnceLock<Option<mpsc::Sender<Job>>> = OnceLock::new();
18
+ let sender = SENDER.get_or_init(|| {
19
+ let (sender, receiver) = mpsc::channel::<Job>();
20
+ let receiver = Arc::new(Mutex::new(receiver));
21
+ let mut started = 0;
22
+ for _ in 0..thread::available_parallelism().map_or(1, NonZeroUsize::get) {
23
+ let receiver = Arc::clone(&receiver);
24
+ let spawned = thread::Builder::new()
25
+ .name("code-gauge-worker".to_string())
26
+ .stack_size(STACK_SIZE)
27
+ .spawn(move || loop {
28
+ let job = receiver
29
+ .lock()
30
+ .expect("jobs run after the lock is released, so it is never poisoned")
31
+ .recv();
32
+ match job {
33
+ Ok(job) => job(),
34
+ Err(_) => return,
35
+ }
36
+ });
37
+ if spawned.is_err() {
38
+ break;
39
+ }
40
+ started += 1;
41
+ }
42
+ (started > 0).then_some(sender)
43
+ });
44
+ let job: Job = Box::new(job);
45
+ match sender {
46
+ Some(sender) => {
47
+ if let Err(mpsc::SendError(job)) = sender.send(job) {
48
+ job();
49
+ }
50
+ }
51
+ None => job(),
52
+ }
53
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-gauge",
3
- "version": "4.7.0",
3
+ "version": "4.8.0",
4
4
  "description": "Measure code metrics with tree-sitter.",
5
5
  "keywords": [
6
6
  "cli",
@@ -73,8 +73,8 @@
73
73
  "@types/node": "25.9.4",
74
74
  "@willbooster/oxfmt-config": "1.2.2",
75
75
  "@willbooster/oxlint-config": "1.4.8",
76
- "@willbooster/wb": "22.7.1",
77
- "build-ts": "21.0.16",
76
+ "@willbooster/wb": "22.8.0",
77
+ "build-ts": "21.0.19",
78
78
  "conventional-changelog-conventionalcommits": "9.3.1",
79
79
  "lefthook": "2.1.14",
80
80
  "oxfmt": "0.68.0",
@@ -94,12 +94,12 @@
94
94
  "registry": "https://registry.npmjs.org/"
95
95
  },
96
96
  "optionalDependencies": {
97
- "code-gauge-linux-x64-gnu": "4.7.0",
98
- "code-gauge-linux-arm64-gnu": "4.7.0",
99
- "code-gauge-linux-x64-musl": "4.7.0",
100
- "code-gauge-linux-arm64-musl": "4.7.0",
101
- "code-gauge-darwin-x64": "4.7.0",
102
- "code-gauge-darwin-arm64": "4.7.0",
103
- "code-gauge-win32-x64-msvc": "4.7.0"
97
+ "code-gauge-linux-x64-gnu": "4.8.0",
98
+ "code-gauge-linux-arm64-gnu": "4.8.0",
99
+ "code-gauge-linux-x64-musl": "4.8.0",
100
+ "code-gauge-linux-arm64-musl": "4.8.0",
101
+ "code-gauge-darwin-x64": "4.8.0",
102
+ "code-gauge-darwin-arm64": "4.8.0",
103
+ "code-gauge-win32-x64-msvc": "4.8.0"
104
104
  }
105
105
  }