pi-lens 2.0.7 → 2.0.8

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 (34) hide show
  1. package/clients/ast-grep-client.test.ts +146 -116
  2. package/clients/ast-grep-client.ts +645 -551
  3. package/clients/biome-client.test.ts +154 -137
  4. package/clients/biome-client.ts +397 -337
  5. package/clients/complexity-client.test.ts +188 -200
  6. package/clients/complexity-client.ts +815 -667
  7. package/clients/dependency-checker.test.ts +55 -55
  8. package/clients/dependency-checker.ts +358 -333
  9. package/clients/go-client.test.ts +121 -111
  10. package/clients/go-client.ts +218 -216
  11. package/clients/jscpd-client.test.ts +132 -132
  12. package/clients/jscpd-client.ts +155 -118
  13. package/clients/knip-client.test.ts +123 -133
  14. package/clients/knip-client.ts +231 -218
  15. package/clients/metrics-client.test.ts +171 -167
  16. package/clients/metrics-client.ts +283 -252
  17. package/clients/ruff-client.test.ts +128 -117
  18. package/clients/ruff-client.ts +300 -269
  19. package/clients/rust-client.test.ts +104 -85
  20. package/clients/rust-client.ts +241 -234
  21. package/clients/subprocess-client.ts +1 -1
  22. package/clients/test-runner-client.test.ts +248 -215
  23. package/clients/test-runner-client.ts +728 -608
  24. package/clients/test-utils.ts +10 -3
  25. package/clients/todo-scanner.test.ts +288 -202
  26. package/clients/todo-scanner.ts +225 -187
  27. package/clients/type-coverage-client.test.ts +119 -119
  28. package/clients/type-coverage-client.ts +142 -115
  29. package/clients/types.ts +28 -28
  30. package/clients/typescript-client.test.ts +99 -93
  31. package/clients/typescript-client.ts +527 -502
  32. package/index.ts +662 -212
  33. package/package.json +1 -1
  34. package/tsconfig.json +12 -12
@@ -1,142 +1,153 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
2
  import { RuffClient } from "./ruff-client.js";
3
3
  import { createTempFile, setupTestEnvironment } from "./test-utils.js";
4
4
 
5
5
  describe("RuffClient", () => {
6
- let client: RuffClient;
7
- let tmpDir: string;
8
- let cleanup: () => void;
9
-
10
- beforeEach(() => {
11
- client = new RuffClient();
12
- ({ tmpDir, cleanup } = setupTestEnvironment("pi-lens-ruff-test-"));
13
- });
14
-
15
- afterEach(() => {
16
- cleanup();
17
- });
18
-
19
- afterEach(() => {
20
- cleanup();
21
- });
22
-
23
- describe("isPythonFile", () => {
24
- it("should recognize Python files", () => {
25
- expect(client.isPythonFile("test.py")).toBe(true);
26
- expect(client.isPythonFile("module.py")).toBe(true);
27
- });
28
-
29
- it("should not recognize non-Python files", () => {
30
- expect(client.isPythonFile("test.ts")).toBe(false);
31
- expect(client.isPythonFile("test.js")).toBe(false);
32
- expect(client.isPythonFile("test.txt")).toBe(false);
33
- });
34
- });
35
-
36
- describe("isAvailable", () => {
37
- it("should check ruff availability", () => {
38
- const available = client.isAvailable();
39
- expect(typeof available).toBe("boolean");
40
- });
41
- });
42
-
43
- describe("checkFile", () => {
44
- it("should return empty array for non-existent files", () => {
45
- if (!client.isAvailable()) return;
46
- const result = client.checkFile("/nonexistent/file.py");
47
- expect(result).toEqual([]);
48
- });
49
-
50
- it("should detect lint issues in Python code", () => {
51
- if (!client.isAvailable()) return;
52
-
53
- const content = `
6
+ let client: RuffClient;
7
+ let tmpDir: string;
8
+ let cleanup: () => void;
9
+
10
+ beforeEach(() => {
11
+ client = new RuffClient();
12
+ ({ tmpDir, cleanup } = setupTestEnvironment("pi-lens-ruff-test-"));
13
+ });
14
+
15
+ afterEach(() => {
16
+ cleanup();
17
+ });
18
+
19
+ afterEach(() => {
20
+ cleanup();
21
+ });
22
+
23
+ describe("isPythonFile", () => {
24
+ it("should recognize Python files", () => {
25
+ expect(client.isPythonFile("test.py")).toBe(true);
26
+ expect(client.isPythonFile("module.py")).toBe(true);
27
+ });
28
+
29
+ it("should not recognize non-Python files", () => {
30
+ expect(client.isPythonFile("test.ts")).toBe(false);
31
+ expect(client.isPythonFile("test.js")).toBe(false);
32
+ expect(client.isPythonFile("test.txt")).toBe(false);
33
+ });
34
+ });
35
+
36
+ describe("isAvailable", () => {
37
+ it("should check ruff availability", () => {
38
+ const available = client.isAvailable();
39
+ expect(typeof available).toBe("boolean");
40
+ });
41
+ });
42
+
43
+ describe("checkFile", () => {
44
+ it("should return empty array for non-existent files", () => {
45
+ if (!client.isAvailable()) return;
46
+ const result = client.checkFile("/nonexistent/file.py");
47
+ expect(result).toEqual([]);
48
+ });
49
+
50
+ it("should detect lint issues in Python code", () => {
51
+ if (!client.isAvailable()) return;
52
+
53
+ const content = `
54
54
  import os
55
55
  import sys
56
56
 
57
57
  x = 1
58
58
  `;
59
- const filePath = createTempFile(tmpDir, "test.py", content);
60
- const result = client.checkFile(filePath);
59
+ const filePath = createTempFile(tmpDir, "test.py", content);
60
+ const result = client.checkFile(filePath);
61
61
 
62
- // Should detect unused imports
63
- expect(result.some(d => d.rule === "F401" || d.message.includes("unused"))).toBe(true);
64
- });
62
+ // Should detect unused imports
63
+ expect(
64
+ result.some((d) => d.rule === "F401" || d.message.includes("unused")),
65
+ ).toBe(true);
66
+ });
65
67
 
66
- it("should return array of diagnostics", () => {
67
- if (!client.isAvailable()) return;
68
+ it("should return array of diagnostics", () => {
69
+ if (!client.isAvailable()) return;
68
70
 
69
- const content = `
71
+ const content = `
70
72
  def foo():
71
73
  x = undefined_variable
72
74
  return x
73
75
  `;
74
- const filePath = createTempFile(tmpDir, "test.py", content);
75
- const result = client.checkFile(filePath);
76
-
77
- // Should return an array
78
- expect(Array.isArray(result)).toBe(true);
79
- });
80
- });
81
-
82
- describe("formatDiagnostics", () => {
83
- it("should format diagnostics for display", () => {
84
- const diags = [
85
- {
86
- line: 1, column: 0, endLine: 1, endColumn: 10,
87
- severity: "error" as const,
88
- message: "Undefined name 'x'",
89
- rule: "F821",
90
- file: "test.py",
91
- fixable: false,
92
- },
93
- ];
94
-
95
- const formatted = client.formatDiagnostics(diags);
96
- expect(formatted).toContain("Ruff");
97
- expect(formatted).toContain("F821");
98
- expect(formatted).toContain("Undefined name");
99
- });
100
-
101
- it("should show fixable count", () => {
102
- const diags = [
103
- {
104
- line: 1, column: 0, endLine: 1, endColumn: 10,
105
- severity: "warning" as const, message: "Unused import",
106
- rule: "F401", file: "test.py", fixable: true,
107
- },
108
- ];
109
-
110
- const formatted = client.formatDiagnostics(diags);
111
- expect(formatted).toContain("fixable");
112
- });
113
- });
114
-
115
- describe("checkFormatting", () => {
116
- it("should detect formatting issues", () => {
117
- if (!client.isAvailable()) return;
118
-
119
- const content = `x=1
76
+ const filePath = createTempFile(tmpDir, "test.py", content);
77
+ const result = client.checkFile(filePath);
78
+
79
+ // Should return an array
80
+ expect(Array.isArray(result)).toBe(true);
81
+ });
82
+ });
83
+
84
+ describe("formatDiagnostics", () => {
85
+ it("should format diagnostics for display", () => {
86
+ const diags = [
87
+ {
88
+ line: 1,
89
+ column: 0,
90
+ endLine: 1,
91
+ endColumn: 10,
92
+ severity: "error" as const,
93
+ message: "Undefined name 'x'",
94
+ rule: "F821",
95
+ file: "test.py",
96
+ fixable: false,
97
+ },
98
+ ];
99
+
100
+ const formatted = client.formatDiagnostics(diags);
101
+ expect(formatted).toContain("Ruff");
102
+ expect(formatted).toContain("F821");
103
+ expect(formatted).toContain("Undefined name");
104
+ });
105
+
106
+ it("should show fixable count", () => {
107
+ const diags = [
108
+ {
109
+ line: 1,
110
+ column: 0,
111
+ endLine: 1,
112
+ endColumn: 10,
113
+ severity: "warning" as const,
114
+ message: "Unused import",
115
+ rule: "F401",
116
+ file: "test.py",
117
+ fixable: true,
118
+ },
119
+ ];
120
+
121
+ const formatted = client.formatDiagnostics(diags);
122
+ expect(formatted).toContain("fixable");
123
+ });
124
+ });
125
+
126
+ describe("checkFormatting", () => {
127
+ it("should detect formatting issues", () => {
128
+ if (!client.isAvailable()) return;
129
+
130
+ const content = `x=1
120
131
  y=2
121
132
  `;
122
- const filePath = createTempFile(tmpDir, "test.py", content);
123
- const result = client.checkFormatting(filePath);
133
+ const filePath = createTempFile(tmpDir, "test.py", content);
134
+ const result = client.checkFormatting(filePath);
124
135
 
125
- // Should suggest formatting (missing spaces around =)
126
- expect(typeof result).toBe("string");
127
- });
136
+ // Should suggest formatting (missing spaces around =)
137
+ expect(typeof result).toBe("string");
138
+ });
128
139
 
129
- it("should return empty string for well-formatted code", () => {
130
- if (!client.isAvailable()) return;
140
+ it("should return empty string for well-formatted code", () => {
141
+ if (!client.isAvailable()) return;
131
142
 
132
- const content = `x = 1
143
+ const content = `x = 1
133
144
  y = 2
134
145
  `;
135
- const filePath = createTempFile(tmpDir, "test.py", content);
136
- const result = client.checkFormatting(filePath);
146
+ const filePath = createTempFile(tmpDir, "test.py", content);
147
+ const result = client.checkFormatting(filePath);
137
148
 
138
- // Well-formatted code should return empty or minimal output
139
- expect(result).toBe("");
140
- });
141
- });
149
+ // Well-formatted code should return empty or minimal output
150
+ expect(result).toBe("");
151
+ });
152
+ });
142
153
  });