@nielspeter/sonarlint-mcp-server 0.4.1 → 0.5.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 (63) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/errors.js +3 -3
  3. package/dist/index.js +67 -49
  4. package/dist/index.js.map +1 -1
  5. package/dist/resources/session.d.ts +1 -1
  6. package/dist/resources/session.d.ts.map +1 -1
  7. package/dist/resources/session.js +22 -18
  8. package/dist/resources/session.js.map +1 -1
  9. package/dist/sloop-bridge.d.ts +9 -0
  10. package/dist/sloop-bridge.d.ts.map +1 -1
  11. package/dist/sloop-bridge.js +38 -36
  12. package/dist/sloop-bridge.js.map +1 -1
  13. package/dist/state.d.ts +2 -2
  14. package/dist/tools/analyze-content.d.ts.map +1 -1
  15. package/dist/tools/analyze-content.js +17 -17
  16. package/dist/tools/analyze-content.js.map +1 -1
  17. package/dist/tools/analyze-file.js +14 -14
  18. package/dist/tools/analyze-file.js.map +1 -1
  19. package/dist/tools/analyze-files.d.ts.map +1 -1
  20. package/dist/tools/analyze-files.js +22 -22
  21. package/dist/tools/analyze-files.js.map +1 -1
  22. package/dist/tools/apply-all-quick-fixes.d.ts.map +1 -1
  23. package/dist/tools/apply-all-quick-fixes.js +23 -19
  24. package/dist/tools/apply-all-quick-fixes.js.map +1 -1
  25. package/dist/tools/apply-quick-fix.js +10 -10
  26. package/dist/tools/apply-quick-fix.js.map +1 -1
  27. package/dist/tools/health-check.js +26 -26
  28. package/dist/tools/health-check.js.map +1 -1
  29. package/dist/tools/list-active-rules.d.ts.map +1 -1
  30. package/dist/tools/list-active-rules.js +22 -13
  31. package/dist/tools/list-active-rules.js.map +1 -1
  32. package/dist/types.d.ts +1 -1
  33. package/dist/utils/config.d.ts +32 -0
  34. package/dist/utils/config.d.ts.map +1 -0
  35. package/dist/utils/config.js +54 -0
  36. package/dist/utils/config.js.map +1 -0
  37. package/dist/utils/file-registration.d.ts.map +1 -1
  38. package/dist/utils/file-registration.js +1 -1
  39. package/dist/utils/file-registration.js.map +1 -1
  40. package/dist/utils/filesystem.js +8 -8
  41. package/dist/utils/filesystem.js.map +1 -1
  42. package/dist/utils/formatting.d.ts +1 -1
  43. package/dist/utils/formatting.d.ts.map +1 -1
  44. package/dist/utils/formatting.js +2 -4
  45. package/dist/utils/formatting.js.map +1 -1
  46. package/dist/utils/language.js +11 -11
  47. package/dist/utils/language.js.map +1 -1
  48. package/dist/utils/quick-fix.d.ts.map +1 -1
  49. package/dist/utils/quick-fix.js +6 -2
  50. package/dist/utils/quick-fix.js.map +1 -1
  51. package/dist/utils/scope.d.ts +4 -0
  52. package/dist/utils/scope.d.ts.map +1 -1
  53. package/dist/utils/scope.js +8 -7
  54. package/dist/utils/scope.js.map +1 -1
  55. package/dist/utils/sloop.d.ts +4 -3
  56. package/dist/utils/sloop.d.ts.map +1 -1
  57. package/dist/utils/sloop.js +22 -13
  58. package/dist/utils/sloop.js.map +1 -1
  59. package/dist/utils/transforms.d.ts +1 -1
  60. package/dist/utils/transforms.d.ts.map +1 -1
  61. package/dist/utils/transforms.js.map +1 -1
  62. package/package.json +12 -2
  63. package/scripts/generate-rules-doc.mjs +86 -0
@@ -1,10 +1,10 @@
1
- import { existsSync, readFileSync, writeFileSync } from "fs";
2
- import { SloopError } from "../errors.js";
3
- import { ensureSloopBridge } from "../utils/sloop.js";
4
- import { getOrCreateScope } from "../utils/scope.js";
5
- import { notifyFileSystemChanged } from "../utils/filesystem.js";
6
- import { transformSloopIssues } from "../utils/transforms.js";
7
- import { applyTextEdits } from "../utils/quick-fix.js";
1
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
2
+ import { SloopError } from '../errors.js';
3
+ import { ensureSloopBridge } from '../utils/sloop.js';
4
+ import { getOrCreateScope } from '../utils/scope.js';
5
+ import { notifyFileSystemChanged } from '../utils/filesystem.js';
6
+ import { transformSloopIssues } from '../utils/transforms.js';
7
+ import { applyTextEdits } from '../utils/quick-fix.js';
8
8
  function applyFixesToFile(filePath, issues) {
9
9
  const applied = [];
10
10
  const failed = [];
@@ -31,7 +31,7 @@ function applyFixesToFile(filePath, issues) {
31
31
  function formatFixList(label, items) {
32
32
  if (items.length === 0)
33
33
  return '';
34
- const lines = items.map(i => `- Line ${i.line}: ${i.rule} - ${i.message || i.error}`);
34
+ const lines = items.map((i) => `- Line ${i.line}: ${i.rule} - ${i.message || i.error}`);
35
35
  return `**${label}:**\n${lines.join('\n')}\n\n`;
36
36
  }
37
37
  function formatRemainingIssues(remaining) {
@@ -39,7 +39,7 @@ function formatRemainingIssues(remaining) {
39
39
  return `🎉 All issues resolved! The file has no remaining code quality issues.\n`;
40
40
  let out = `**Remaining Issues (require manual fixing):**\n`;
41
41
  for (const severity of ['BLOCKER', 'CRITICAL', 'MAJOR', 'MINOR', 'INFO']) {
42
- const issues = remaining.filter(i => i.severity === severity);
42
+ const issues = remaining.filter((i) => i.severity === severity);
43
43
  if (issues.length === 0)
44
44
  continue;
45
45
  out += `\n${severity} (${issues.length}):\n`;
@@ -63,30 +63,34 @@ export async function handleApplyAllQuickFixes(args) {
63
63
  if (!existsSync(filePath)) {
64
64
  throw new SloopError(`File not found: ${filePath}`, `The file ${filePath} does not exist. Please check the path and try again.`, false);
65
65
  }
66
- const bridge = await ensureSloopBridge();
66
+ const bridge = await ensureSloopBridge(filePath);
67
67
  const scopeId = await getOrCreateScope(filePath);
68
68
  const rawResult = await bridge.analyzeFilesAndTrack(scopeId, [filePath]);
69
- const rawIssues = rawResult.raisedIssues?.length ? rawResult.raisedIssues : (rawResult.rawIssues || []);
69
+ const rawIssues = rawResult.raisedIssues?.length ? rawResult.raisedIssues : rawResult.rawIssues || [];
70
70
  const fixableIssues = rawIssues.filter((issue) => issue.quickFixes?.length > 0);
71
71
  if (fixableIssues.length === 0) {
72
72
  return {
73
- content: [{
74
- type: "text",
73
+ content: [
74
+ {
75
+ type: 'text',
75
76
  text: `ℹ️ **No quick fixes available**\n\nFile: ${filePath}\nTotal issues: ${rawIssues.length}\n\nNone of the issues in this file have automated quick fixes available. All issues must be fixed manually.`,
76
- }],
77
+ },
78
+ ],
77
79
  };
78
80
  }
79
81
  const { applied, failed } = applyFixesToFile(filePath, fixableIssues);
80
82
  await notifyFileSystemChanged(filePath, scopeId);
81
- await new Promise(resolve => setTimeout(resolve, 500));
83
+ await new Promise((resolve) => setTimeout(resolve, 500));
82
84
  const finalResult = await bridge.analyzeFilesAndTrack(scopeId, [filePath]);
83
- const remainingRaw = finalResult.raisedIssues?.length ? finalResult.raisedIssues : (finalResult.rawIssues || []);
85
+ const remainingRaw = finalResult.raisedIssues?.length ? finalResult.raisedIssues : finalResult.rawIssues || [];
84
86
  const remaining = transformSloopIssues(remainingRaw);
85
87
  return {
86
- content: [{
87
- type: "text",
88
+ content: [
89
+ {
90
+ type: 'text',
88
91
  text: formatSummary(filePath, applied, failed, remaining),
89
- }],
92
+ },
93
+ ],
90
94
  };
91
95
  }
92
96
  //# sourceMappingURL=apply-all-quick-fixes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-all-quick-fixes.js","sourceRoot":"","sources":["../../src/tools/apply-all-quick-fixes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-all-quick-fixes.js","sourceRoot":"","sources":["../../src/tools/apply-all-quick-fixes.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,19 @@
1
- import { existsSync, readFileSync, writeFileSync } from "fs";
2
- import { SloopError } from "../errors.js";
3
- import { ensureSloopBridge } from "../utils/sloop.js";
4
- import { getOrCreateScope } from "../utils/scope.js";
5
- import { notifyFileSystemChanged } from "../utils/filesystem.js";
6
- import { applyTextEdits } from "../utils/quick-fix.js";
1
+ import { existsSync, readFileSync, writeFileSync } from 'fs';
2
+ import { SloopError } from '../errors.js';
3
+ import { ensureSloopBridge } from '../utils/sloop.js';
4
+ import { getOrCreateScope } from '../utils/scope.js';
5
+ import { notifyFileSystemChanged } from '../utils/filesystem.js';
6
+ import { applyTextEdits } from '../utils/quick-fix.js';
7
7
  export async function handleApplyQuickFix(args) {
8
8
  const { filePath, line, rule } = args;
9
9
  console.error(`[MCP] Applying quick fix for ${rule} at ${filePath}:${line}`);
10
10
  if (!existsSync(filePath)) {
11
11
  throw new SloopError(`File not found: ${filePath}`, `The file ${filePath} does not exist. Please check the path and try again.`, false);
12
12
  }
13
- const bridge = await ensureSloopBridge();
13
+ const bridge = await ensureSloopBridge(filePath);
14
14
  const scopeId = await getOrCreateScope(filePath);
15
15
  const rawResult = await bridge.analyzeFilesAndTrack(scopeId, [filePath]);
16
- const rawIssues = rawResult.raisedIssues?.length ? rawResult.raisedIssues : (rawResult.rawIssues || []);
16
+ const rawIssues = rawResult.raisedIssues?.length ? rawResult.raisedIssues : rawResult.rawIssues || [];
17
17
  const targetIssue = rawIssues.find((issue) => {
18
18
  const issueLine = issue.textRange?.startLine || issue.startLine || 0;
19
19
  return issueLine === line && issue.ruleKey === rule;
@@ -29,11 +29,11 @@ export async function handleApplyQuickFix(args) {
29
29
  applyTextEdits(lines, quickFix);
30
30
  writeFileSync(filePath, lines.join('\n'), 'utf-8');
31
31
  await notifyFileSystemChanged(filePath, scopeId);
32
- await new Promise(resolve => setTimeout(resolve, 500));
32
+ await new Promise((resolve) => setTimeout(resolve, 500));
33
33
  return {
34
34
  content: [
35
35
  {
36
- type: "text",
36
+ type: 'text',
37
37
  text: `✅ **Quick fix applied successfully**\n\nFile: ${filePath}\nLine: ${line}\nRule: ${rule}\nFix: ${quickFix.message || 'Applied automated fix'}\n\nThe file has been modified. You may want to re-analyze it to confirm the issue is resolved.`,
38
38
  },
39
39
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"apply-quick-fix.js","sourceRoot":"","sources":["../../src/tools/apply-quick-fix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-quick-fix.js","sourceRoot":"","sources":["../../src/tools/apply-quick-fix.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,24 @@
1
- import { existsSync, readdirSync, readFileSync } from "fs";
2
- import { join, dirname } from "path";
3
- import { fileURLToPath } from "url";
4
- import { sessionResults, batchResults, getSloopBridge, serverStartTime } from "../state.js";
1
+ import { existsSync, readdirSync, readFileSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { sessionResults, batchResults, getSloopBridge, serverStartTime } from '../state.js';
5
5
  // Get package root directory (where sonarlint-backend is installed)
6
6
  const __filename = fileURLToPath(import.meta.url);
7
7
  const __dirname = dirname(__filename);
8
8
  const PACKAGE_ROOT = join(__dirname, '..', '..'); // Go up from dist/tools/ to package root
9
9
  function getHealthStatus(pluginsExist) {
10
10
  if (!pluginsExist)
11
- return "degraded";
12
- return getSloopBridge() ? "healthy" : "ready";
11
+ return 'degraded';
12
+ return getSloopBridge() ? 'healthy' : 'ready';
13
13
  }
14
14
  // Read version from package.json
15
15
  function getPackageVersion() {
16
16
  try {
17
- const packageJson = JSON.parse(readFileSync(join(PACKAGE_ROOT, "package.json"), "utf-8"));
17
+ const packageJson = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf-8'));
18
18
  return packageJson.version;
19
19
  }
20
20
  catch {
21
- return "unknown";
21
+ return 'unknown';
22
22
  }
23
23
  }
24
24
  export async function handleHealthCheck() {
@@ -30,14 +30,14 @@ export async function handleHealthCheck() {
30
30
  const memoryUsage = process.memoryUsage();
31
31
  const memoryMB = Math.round(memoryUsage.heapUsed / 1024 / 1024);
32
32
  // Check SLOOP status - reflect actual backend state
33
- const sloopStatus = getSloopBridge() ? "running" : "not started (starts on first analysis)";
33
+ const sloopStatus = getSloopBridge() ? 'running' : 'not started (starts on first analysis)';
34
34
  // Get plugin information
35
- const pluginsDir = join(PACKAGE_ROOT, "sonarlint-backend", "plugins");
35
+ const pluginsDir = join(PACKAGE_ROOT, 'sonarlint-backend', 'plugins');
36
36
  const pluginsExist = existsSync(pluginsDir);
37
- let plugins = [];
37
+ const plugins = [];
38
38
  if (pluginsExist) {
39
39
  const files = readdirSync(pluginsDir);
40
- const jarFiles = files.filter(f => f.endsWith('.jar'));
40
+ const jarFiles = files.filter((f) => f.endsWith('.jar'));
41
41
  for (const jarFile of jarFiles) {
42
42
  // Parse plugin name and version from filename
43
43
  const match = jarFile.match(/sonar-(\w+)-plugin-([\d.]+)\.jar/);
@@ -45,7 +45,7 @@ export async function handleHealthCheck() {
45
45
  plugins.push({
46
46
  name: match[1].charAt(0).toUpperCase() + match[1].slice(1),
47
47
  version: match[2],
48
- status: "active",
48
+ status: 'active',
49
49
  });
50
50
  }
51
51
  }
@@ -67,7 +67,7 @@ export async function handleHealthCheck() {
67
67
  },
68
68
  backend: {
69
69
  status: sloopStatus,
70
- pluginsDirectory: pluginsExist ? "found" : "missing",
70
+ pluginsDirectory: pluginsExist ? 'found' : 'missing',
71
71
  },
72
72
  plugins,
73
73
  memory: {
@@ -76,21 +76,21 @@ export async function handleHealthCheck() {
76
76
  rss: `${Math.round(memoryUsage.rss / 1024 / 1024)}MB`,
77
77
  },
78
78
  cache: cacheStats,
79
- tools: ["check_quality", "check_files", "check_code", "list_rules", "fix_issue", "fix_all_issues", "health_check"],
79
+ tools: ['check_quality', 'check_files', 'check_code', 'list_rules', 'fix_issue', 'fix_all_issues', 'health_check'],
80
80
  features: [
81
- "Session storage for multi-turn conversations",
82
- "Batch analysis",
83
- "Content analysis (unsaved files)",
84
- "MCP resources",
85
- "Quick fixes support",
81
+ 'Session storage for multi-turn conversations',
82
+ 'Batch analysis',
83
+ 'Content analysis (unsaved files)',
84
+ 'MCP resources',
85
+ 'Quick fixes support',
86
86
  ],
87
87
  };
88
88
  let output = `# SonarLint MCP Server Health Check\n\n`;
89
- let statusEmoji = "⚠️ Degraded";
90
- if (healthStatus.status === "healthy")
91
- statusEmoji = "✅ Healthy";
92
- else if (healthStatus.status === "ready")
93
- statusEmoji = "🟡 Ready";
89
+ let statusEmoji = '⚠️ Degraded';
90
+ if (healthStatus.status === 'healthy')
91
+ statusEmoji = '✅ Healthy';
92
+ else if (healthStatus.status === 'ready')
93
+ statusEmoji = '🟡 Ready';
94
94
  output += `**Status**: ${statusEmoji}\n`;
95
95
  output += `**Version**: ${healthStatus.version}\n`;
96
96
  output += `**Uptime**: ${healthStatus.uptime.formatted}\n\n`;
@@ -123,7 +123,7 @@ export async function handleHealthCheck() {
123
123
  return {
124
124
  content: [
125
125
  {
126
- type: "text",
126
+ type: 'text',
127
127
  text: output,
128
128
  },
129
129
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../src/tools/health-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE5F,oEAAoE;AACpE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,yCAAyC;AAE3F,SAAS,eAAe,CAAC,YAAqB;IAC5C,IAAI,CAAC,YAAY;QAAE,OAAO,UAAU,CAAC;IACrC,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAChD,CAAC;AAED,iCAAiC;AACjC,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1F,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAEhE,oDAAoD;IACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wCAAwC,CAAC;IAE5F,yBAAyB;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,8CAA8C;YAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;oBACjB,MAAM,EAAE,QAAQ;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG;QACjB,cAAc,EAAE,cAAc,CAAC,IAAI;QACnC,YAAY,EAAE,YAAY,CAAC,IAAI;KAChC,CAAC;IAEF,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,eAAe,CAAC,YAAY,CAAC;QACrC,OAAO,EAAE,iBAAiB,EAAE;QAC5B,MAAM,EAAE;YACN,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,aAAa;YACtB,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,GAAG,WAAW,KAAK,aAAa,GAAG,EAAE,KAAK,aAAa,GAAG,EAAE,GAAG;SAC3E;QACD,OAAO,EAAE;YACP,MAAM,EAAE,WAAW;YACnB,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SACrD;QACD,OAAO;QACP,MAAM,EAAE;YACN,QAAQ,EAAE,GAAG,QAAQ,IAAI;YACzB,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI;YACjE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI;SACtD;QACD,KAAK,EAAE,UAAU;QACjB,KAAK,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,CAAC;QAClH,QAAQ,EAAE;YACR,8CAA8C;YAC9C,gBAAgB;YAChB,kCAAkC;YAClC,eAAe;YACf,qBAAqB;SACtB;KACF,CAAC;IAEF,IAAI,MAAM,GAAG,yCAAyC,CAAC;IACvD,IAAI,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS;QAAE,WAAW,GAAG,WAAW,CAAC;SAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO;QAAE,WAAW,GAAG,UAAU,CAAC;IACnE,MAAM,IAAI,eAAe,WAAW,IAAI,CAAC;IACzC,MAAM,IAAI,gBAAgB,YAAY,CAAC,OAAO,IAAI,CAAC;IACnD,MAAM,IAAI,eAAe,YAAY,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC;IAE7D,MAAM,IAAI,uBAAuB,CAAC;IAClC,MAAM,IAAI,wBAAwB,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;IAClE,MAAM,IAAI,4BAA4B,YAAY,CAAC,OAAO,CAAC,gBAAgB,MAAM,CAAC;IAElF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,uBAAuB,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,KAAK,CAAC;QAC5E,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,qBAAqB,CAAC;IAChC,MAAM,IAAI,oBAAoB,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC;IAC/D,MAAM,IAAI,qBAAqB,YAAY,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;IACjE,MAAM,IAAI,cAAc,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAEtD,MAAM,IAAI,yBAAyB,CAAC;IACpC,MAAM,IAAI,0BAA0B,YAAY,CAAC,KAAK,CAAC,cAAc,WAAW,CAAC;IACjF,MAAM,IAAI,wBAAwB,YAAY,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC;IAE/E,MAAM,IAAI,wBAAwB,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,IAAI,IAAI,CAAC;IAEf,MAAM,IAAI,iBAAiB,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,MAAM;aACb;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-active-rules.d.ts","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"AAEA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;GA4EpD"}
1
+ {"version":3,"file":"list-active-rules.d.ts","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"AASA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;GA4EpD"}
@@ -1,4 +1,12 @@
1
- import { ensureSloopBridge } from "../utils/sloop.js";
1
+ import { ensureSloopBridge } from '../utils/sloop.js';
2
+ function formatParams(paramsByKey) {
3
+ if (!paramsByKey)
4
+ return '';
5
+ const entries = Object.values(paramsByKey);
6
+ if (entries.length === 0)
7
+ return '';
8
+ return entries.map((p) => `${p.key}=${p.defaultValue} (${p.type})`).join(', ');
9
+ }
2
10
  export async function handleListActiveRules(args) {
3
11
  const { language } = args;
4
12
  const langSuffix = language ? ` for ${language}` : '';
@@ -11,7 +19,6 @@ export async function handleListActiveRules(args) {
11
19
  const rulesByLanguage = new Map();
12
20
  for (const [key, rule] of Object.entries(rulesByKey)) {
13
21
  const ruleDef = rule;
14
- // Filter by language if specified
15
22
  const ruleLang = ruleDef.language?.toLowerCase();
16
23
  if (language && ruleLang !== language.toLowerCase()) {
17
24
  continue;
@@ -26,38 +33,40 @@ export async function handleListActiveRules(args) {
26
33
  }
27
34
  let output = `# Active SonarLint Rules\n\n`;
28
35
  let totalRules = 0;
29
- // Sort languages alphabetically
36
+ let configurableCount = 0;
30
37
  const sortedLangs = [...rulesByLanguage.keys()].sort((a, b) => a.localeCompare(b));
31
38
  for (const lang of sortedLangs) {
32
39
  const rules = rulesByLanguage.get(lang);
33
40
  totalRules += rules.length;
34
41
  output += `## ${lang} (${rules.length} rules)\n\n`;
35
- output += `| Rule | Name | Clean Code | Impacts |\n`;
42
+ output += `| Rule | Name | Parameters | Impacts |\n`;
36
43
  output += `|------|------|------------|----------|\n`;
37
- // Sort by rule key
38
44
  rules.sort((a, b) => a.key.localeCompare(b.key));
39
45
  for (const rule of rules) {
40
46
  const impacts = (rule.softwareImpacts || [])
41
47
  .map((i) => `${i.softwareQuality}:${i.impactSeverity}`)
42
48
  .join(', ');
43
- const cleanCode = rule.cleanCodeAttribute || '';
44
- output += `| \`${rule.key}\` | ${rule.name} | ${cleanCode} | ${impacts} |\n`;
49
+ const params = formatParams(rule.paramsByKey);
50
+ if (params)
51
+ configurableCount++;
52
+ output += `| \`${rule.key}\` | ${rule.name} | ${params} | ${impacts} |\n`;
45
53
  }
46
54
  output += `\n`;
47
55
  }
48
- output = output.replace('# Active SonarLint Rules\n\n', `# Active SonarLint Rules\n\n**Total Active Rules**: ${totalRules}\n\n`);
56
+ output = output.replace('# Active SonarLint Rules\n\n', `# Active SonarLint Rules\n\n**Total Active Rules**: ${totalRules} (${configurableCount} configurable)\n\n`);
49
57
  return {
50
- content: [{ type: "text", text: output }],
58
+ content: [{ type: 'text', text: output }],
51
59
  };
52
60
  }
53
61
  catch (error) {
54
62
  console.error('[MCP] Failed to list rules from SLOOP:', error);
55
- // Fallback: return basic info if SLOOP RPC fails
56
63
  return {
57
- content: [{
58
- type: "text",
64
+ content: [
65
+ {
66
+ type: 'text',
59
67
  text: `# Active SonarLint Rules\n\nFailed to retrieve rules from SLOOP backend. Ensure the server is running and try again.\n\nError: ${error}\n`,
60
- }],
68
+ },
69
+ ],
61
70
  };
62
71
  }
63
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-active-rules.js","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-active-rules.js","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -6,7 +6,7 @@ export interface AnalysisIssue {
6
6
  column: number;
7
7
  endLine: number;
8
8
  endColumn: number;
9
- severity: "INFO" | "MINOR" | "MAJOR" | "CRITICAL" | "BLOCKER";
9
+ severity: 'INFO' | 'MINOR' | 'MAJOR' | 'CRITICAL' | 'BLOCKER';
10
10
  rule: string;
11
11
  ruleDescription: string;
12
12
  message: string;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Load and parse sonarlint.json rule configuration
3
+ */
4
+ /** User-facing format in sonarlint.json */
5
+ interface SonarlintRuleEntry {
6
+ level?: 'on' | 'off';
7
+ parameters?: Record<string, string>;
8
+ }
9
+ interface SonarlintConfig {
10
+ rules?: Record<string, SonarlintRuleEntry>;
11
+ }
12
+ /** SLOOP internal format (matches StandaloneRuleConfigDto) */
13
+ export interface StandaloneRuleConfig {
14
+ isActive: boolean;
15
+ paramValueByKey: Record<string, string>;
16
+ }
17
+ /**
18
+ * Find the config file in a project root.
19
+ * Primary: sonarlint.json, Fallback: .sonarlint/settings.json
20
+ */
21
+ export declare function findConfigFile(projectRoot: string): string | null;
22
+ /**
23
+ * Transform user-facing rule config to SLOOP's standaloneRuleConfigByKey format.
24
+ */
25
+ export declare function transformRuleConfig(config: SonarlintConfig): Record<string, StandaloneRuleConfig>;
26
+ /**
27
+ * Load rule configuration from a project root.
28
+ * Returns empty config if no file found or on parse error (never throws).
29
+ */
30
+ export declare function loadRuleConfig(projectRoot: string): Record<string, StandaloneRuleConfig>;
31
+ export {};
32
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,2CAA2C;AAC3C,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC5C;AAED,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQjE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAajG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAcxF"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Load and parse sonarlint.json rule configuration
3
+ */
4
+ import { existsSync, readFileSync } from 'fs';
5
+ import { join } from 'path';
6
+ /**
7
+ * Find the config file in a project root.
8
+ * Primary: sonarlint.json, Fallback: .sonarlint/settings.json
9
+ */
10
+ export function findConfigFile(projectRoot) {
11
+ const primary = join(projectRoot, 'sonarlint.json');
12
+ if (existsSync(primary))
13
+ return primary;
14
+ const fallback = join(projectRoot, '.sonarlint', 'settings.json');
15
+ if (existsSync(fallback))
16
+ return fallback;
17
+ return null;
18
+ }
19
+ /**
20
+ * Transform user-facing rule config to SLOOP's standaloneRuleConfigByKey format.
21
+ */
22
+ export function transformRuleConfig(config) {
23
+ const result = {};
24
+ if (!config.rules || typeof config.rules !== 'object')
25
+ return result;
26
+ for (const [ruleKey, entry] of Object.entries(config.rules)) {
27
+ result[ruleKey] = {
28
+ isActive: entry.level !== 'off',
29
+ paramValueByKey: entry.parameters ?? {},
30
+ };
31
+ }
32
+ return result;
33
+ }
34
+ /**
35
+ * Load rule configuration from a project root.
36
+ * Returns empty config if no file found or on parse error (never throws).
37
+ */
38
+ export function loadRuleConfig(projectRoot) {
39
+ const configPath = findConfigFile(projectRoot);
40
+ if (!configPath)
41
+ return {};
42
+ try {
43
+ const raw = readFileSync(configPath, 'utf-8');
44
+ const parsed = JSON.parse(raw);
45
+ const ruleConfig = transformRuleConfig(parsed);
46
+ console.error(`[MCP] Loaded rule config from ${configPath} (${Object.keys(ruleConfig).length} rules)`);
47
+ return ruleConfig;
48
+ }
49
+ catch (error) {
50
+ console.error(`[MCP] Warning: failed to parse ${configPath}: ${error}`);
51
+ return {};
52
+ }
53
+ }
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAkB5B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE1C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAuB;IACzD,MAAM,MAAM,GAAyC,EAAE,CAAC;IAExD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAErE,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK;YAC/B,eAAe,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAClD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,iCAAiC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;QACvG,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"file-registration.d.ts","sourceRoot":"","sources":["../../src/utils/file-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,EAAE,CAoBjB"}
1
+ {"version":3,"file":"file-registration.d.ts","sourceRoot":"","sources":["../../src/utils/file-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAoBrH"}
@@ -12,7 +12,7 @@ import { languageToEnum, detectLanguage } from './language.js';
12
12
  */
13
13
  export function buildClientFileDtos(filePaths, configScopeId, projectRoot) {
14
14
  const baseDir = projectRoot || dirname(filePaths[0]);
15
- return filePaths.map(filePath => {
15
+ return filePaths.map((filePath) => {
16
16
  const content = readFileSync(filePath, 'utf-8');
17
17
  const language = detectLanguage(filePath);
18
18
  const sloopLanguage = language !== 'unknown' ? languageToEnum(language) : null;
@@ -1 +1 @@
1
- {"version":3,"file":"file-registration.js","sourceRoot":"","sources":["../../src/utils/file-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc/D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAmB,EACnB,aAAqB,EACrB,WAAoB;IAEpB,MAAM,OAAO,GAAG,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/E,OAAO;YACL,GAAG,EAAE,UAAU,QAAQ,EAAE;YACzB,MAAM,EAAE,QAAQ;YAChB,eAAe,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC5C,aAAa;YACb,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,gBAAgB,EAAE,aAAa;YAC/B,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"file-registration.js","sourceRoot":"","sources":["../../src/utils/file-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc/D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAmB,EAAE,aAAqB,EAAE,WAAoB;IAClG,MAAM,OAAO,GAAG,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/E,OAAO;YACL,GAAG,EAAE,UAAU,QAAQ,EAAE;YACzB,MAAM,EAAE,QAAQ;YAChB,eAAe,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC5C,aAAa;YACb,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,gBAAgB,EAAE,aAAa;YAC/B,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * File system utilities for SLOOP integration
3
3
  */
4
- import { dirname, relative } from "path";
5
- import { readFileSync } from "fs";
6
- import { scopeMap } from "../state.js";
7
- import { detectLanguage, languageToEnum } from "./language.js";
8
- import { ensureSloopBridge } from "./sloop.js";
4
+ import { dirname, relative } from 'path';
5
+ import { readFileSync } from 'fs';
6
+ import { scopeMap } from '../state.js';
7
+ import { detectLanguage, languageToEnum } from './language.js';
8
+ import { ensureSloopBridge } from './sloop.js';
9
9
  /**
10
10
  * Notify SLOOP that file system was updated (proper cache invalidation)
11
11
  */
@@ -33,7 +33,7 @@ export async function notifyFileSystemChanged(filePath, configScopeId) {
33
33
  // Without this, SLOOP ignores changes to "closed" files
34
34
  bridge.sendNotification('file/didOpenFile', {
35
35
  configurationScopeId: configScopeId,
36
- fileUri: uri
36
+ fileUri: uri,
37
37
  });
38
38
  console.error(`[FS] Marked file as open: ${filePath}`);
39
39
  // Read the actual file content to pass to SLOOP
@@ -50,13 +50,13 @@ export async function notifyFileSystemChanged(filePath, configScopeId) {
50
50
  fsPath: filePath, // Provide fsPath for analyzers that need it
51
51
  content: fileContent, // Providing content calls setDirty(), which takes precedence over fsPath
52
52
  detectedLanguage: languageEnum, // e.g., "JS", "TS", "PYTHON"
53
- isUserDefined: true // CRITICAL: Must be true for SLOOP to analyze!
53
+ isUserDefined: true, // CRITICAL: Must be true for SLOOP to analyze!
54
54
  };
55
55
  // Send file/didUpdateFileSystem notification
56
56
  bridge.sendNotification('file/didUpdateFileSystem', {
57
57
  addedFiles: [],
58
58
  changedFiles: [clientFileDto],
59
- removedFiles: []
59
+ removedFiles: [],
60
60
  });
61
61
  console.error(`[FS] Notified file system update:`);
62
62
  console.error(`[FS] URI: ${uri}`);
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/utils/filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/utils/filesystem.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Output formatting utilities
3
3
  */
4
- import type { AnalysisResult, BatchAnalysisResult } from "../types.js";
4
+ import type { AnalysisResult, BatchAnalysisResult } from '../types.js';
5
5
  /**
6
6
  * Format analysis result for display
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAyCnE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAkD7E"}
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAyCnE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAgD7E"}
@@ -11,7 +11,7 @@ export function formatAnalysisResult(result) {
11
11
  output += `**Rules Checked**: ${summary.rulesChecked}\n`;
12
12
  output += `**Total Issues**: ${summary.total}\n\n`;
13
13
  if (summary.total === 0) {
14
- output += "✅ No issues found!\n";
14
+ output += '✅ No issues found!\n';
15
15
  return output;
16
16
  }
17
17
  // Severity breakdown
@@ -71,9 +71,7 @@ export function formatBatchAnalysisResult(result) {
71
71
  }
72
72
  output += `\n`;
73
73
  // Only show files with issues, sorted by issue count descending
74
- const filesWithIssues = files
75
- .filter(f => f.issueCount > 0)
76
- .sort((a, b) => b.issueCount - a.issueCount);
74
+ const filesWithIssues = files.filter((f) => f.issueCount > 0).sort((a, b) => b.issueCount - a.issueCount);
77
75
  for (const file of filesWithIssues) {
78
76
  output += `### ${file.filePath} (${file.issueCount} issue${file.issueCount > 1 ? 's' : ''})\n\n`;
79
77
  output += `| Line | Severity | Rule | Message |\n`;