@nielspeter/sonarlint-mcp-server 0.4.0 → 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 (72) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/errors.d.ts.map +1 -1
  3. package/dist/errors.js +10 -4
  4. package/dist/errors.js.map +1 -1
  5. package/dist/index.js +68 -49
  6. package/dist/index.js.map +1 -1
  7. package/dist/resources/session.d.ts +1 -1
  8. package/dist/resources/session.d.ts.map +1 -1
  9. package/dist/resources/session.js +22 -18
  10. package/dist/resources/session.js.map +1 -1
  11. package/dist/sloop-bridge.d.ts +14 -0
  12. package/dist/sloop-bridge.d.ts.map +1 -1
  13. package/dist/sloop-bridge.js +103 -89
  14. package/dist/sloop-bridge.js.map +1 -1
  15. package/dist/state.d.ts +2 -3
  16. package/dist/state.d.ts.map +1 -1
  17. package/dist/state.js +2 -2
  18. package/dist/state.js.map +1 -1
  19. package/dist/tools/analyze-content.d.ts.map +1 -1
  20. package/dist/tools/analyze-content.js +17 -17
  21. package/dist/tools/analyze-content.js.map +1 -1
  22. package/dist/tools/analyze-file.d.ts.map +1 -1
  23. package/dist/tools/analyze-file.js +16 -18
  24. package/dist/tools/analyze-file.js.map +1 -1
  25. package/dist/tools/analyze-files.d.ts.map +1 -1
  26. package/dist/tools/analyze-files.js +71 -96
  27. package/dist/tools/analyze-files.js.map +1 -1
  28. package/dist/tools/apply-all-quick-fixes.d.ts.map +1 -1
  29. package/dist/tools/apply-all-quick-fixes.js +71 -141
  30. package/dist/tools/apply-all-quick-fixes.js.map +1 -1
  31. package/dist/tools/apply-quick-fix.d.ts.map +1 -1
  32. package/dist/tools/apply-quick-fix.js +13 -84
  33. package/dist/tools/apply-quick-fix.js.map +1 -1
  34. package/dist/tools/health-check.d.ts.map +1 -1
  35. package/dist/tools/health-check.js +30 -22
  36. package/dist/tools/health-check.js.map +1 -1
  37. package/dist/tools/list-active-rules.d.ts.map +1 -1
  38. package/dist/tools/list-active-rules.js +25 -15
  39. package/dist/tools/list-active-rules.js.map +1 -1
  40. package/dist/types.d.ts +1 -1
  41. package/dist/utils/config.d.ts +32 -0
  42. package/dist/utils/config.d.ts.map +1 -0
  43. package/dist/utils/config.js +54 -0
  44. package/dist/utils/config.js.map +1 -0
  45. package/dist/utils/file-registration.d.ts.map +1 -1
  46. package/dist/utils/file-registration.js +2 -2
  47. package/dist/utils/file-registration.js.map +1 -1
  48. package/dist/utils/filesystem.js +8 -8
  49. package/dist/utils/filesystem.js.map +1 -1
  50. package/dist/utils/formatting.d.ts +1 -1
  51. package/dist/utils/formatting.d.ts.map +1 -1
  52. package/dist/utils/formatting.js +2 -4
  53. package/dist/utils/formatting.js.map +1 -1
  54. package/dist/utils/language.js +11 -11
  55. package/dist/utils/language.js.map +1 -1
  56. package/dist/utils/quick-fix.d.ts +14 -0
  57. package/dist/utils/quick-fix.d.ts.map +1 -0
  58. package/dist/utils/quick-fix.js +48 -0
  59. package/dist/utils/quick-fix.js.map +1 -0
  60. package/dist/utils/scope.d.ts +4 -0
  61. package/dist/utils/scope.d.ts.map +1 -1
  62. package/dist/utils/scope.js +8 -7
  63. package/dist/utils/scope.js.map +1 -1
  64. package/dist/utils/sloop.d.ts +4 -3
  65. package/dist/utils/sloop.d.ts.map +1 -1
  66. package/dist/utils/sloop.js +22 -13
  67. package/dist/utils/sloop.js.map +1 -1
  68. package/dist/utils/transforms.d.ts +1 -1
  69. package/dist/utils/transforms.d.ts.map +1 -1
  70. package/dist/utils/transforms.js.map +1 -1
  71. package/package.json +12 -2
  72. package/scripts/generate-rules-doc.mjs +86 -0
@@ -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`;
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Language detection and mapping utilities
3
3
  */
4
- import { extname } from "path";
4
+ import { extname } from 'path';
5
5
  /**
6
6
  * Detect language from file extension
7
7
  */
@@ -28,16 +28,16 @@ export function detectLanguage(filePath) {
28
28
  */
29
29
  export function languageToEnum(language) {
30
30
  const enumMap = {
31
- 'javascript': 'JS',
32
- 'typescript': 'TS',
33
- 'python': 'PYTHON',
34
- 'java': 'JAVA',
35
- 'go': 'GO',
36
- 'php': 'PHP',
37
- 'ruby': 'RUBY',
38
- 'html': 'HTML',
39
- 'css': 'CSS',
40
- 'xml': 'XML',
31
+ javascript: 'JS',
32
+ typescript: 'TS',
33
+ python: 'PYTHON',
34
+ java: 'JAVA',
35
+ go: 'GO',
36
+ php: 'PHP',
37
+ ruby: 'RUBY',
38
+ html: 'HTML',
39
+ css: 'CSS',
40
+ xml: 'XML',
41
41
  };
42
42
  return enumMap[language] || language.toUpperCase();
43
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/utils/language.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,WAAW,GAA2B;QAC1C,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;KACd,CAAC;IACF,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAA2B;QACtC,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,KAAK;KACb,CAAC;IACF,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/utils/language.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,WAAW,GAA2B;QAC1C,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;KACd,CAAC;IACF,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAA2B;QACtC,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,KAAK;KACX,CAAC;IACF,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared logic for applying SLOOP quick-fix text edits to file content.
3
+ */
4
+ /**
5
+ * Apply a SLOOP quick fix's text edits to an array of lines (mutates in place).
6
+ */
7
+ export declare function applyTextEdits(lines: string[], quickFix: any): void;
8
+ /**
9
+ * Filter issues by minimum severity level.
10
+ */
11
+ export declare function filterBySeverity<T extends {
12
+ severity: string;
13
+ }>(issues: T[], minSeverity: string): T[];
14
+ //# sourceMappingURL=quick-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-fix.d.ts","sourceRoot":"","sources":["../../src/utils/quick-fix.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,CA2BnE;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE,CAGtG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Shared logic for applying SLOOP quick-fix text edits to file content.
3
+ */
4
+ /**
5
+ * Apply a SLOOP quick fix's text edits to an array of lines (mutates in place).
6
+ */
7
+ export function applyTextEdits(lines, quickFix) {
8
+ const fileEdits = quickFix.inputFileEdits || quickFix.fileEdits || [];
9
+ for (const fileEdit of fileEdits) {
10
+ if (!fileEdit.textEdits)
11
+ continue;
12
+ // Sort edits in reverse order to maintain line numbers
13
+ const sortedEdits = [...fileEdit.textEdits].sort((a, b) => {
14
+ return (b.range?.startLine || 0) - (a.range?.startLine || 0);
15
+ });
16
+ for (const edit of sortedEdits) {
17
+ const startLine = (edit.range?.startLine || 1) - 1;
18
+ const startCol = edit.range?.startLineOffset || 0;
19
+ const endLine = (edit.range?.endLine || startLine + 1) - 1;
20
+ const endCol = edit.range?.endLineOffset || lines[endLine]?.length || 0;
21
+ const newText = edit.newText || '';
22
+ if (startLine === endLine) {
23
+ const line = lines[startLine];
24
+ lines[startLine] = line.substring(0, startCol) + newText + line.substring(endCol);
25
+ }
26
+ else {
27
+ const firstLine = lines[startLine].substring(0, startCol) + newText;
28
+ const lastLine = lines[endLine].substring(endCol);
29
+ lines.splice(startLine, endLine - startLine + 1, firstLine + lastLine);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ const SEVERITY_ORDER = {
35
+ INFO: 0,
36
+ MINOR: 1,
37
+ MAJOR: 2,
38
+ CRITICAL: 3,
39
+ BLOCKER: 4,
40
+ };
41
+ /**
42
+ * Filter issues by minimum severity level.
43
+ */
44
+ export function filterBySeverity(issues, minSeverity) {
45
+ const minLevel = SEVERITY_ORDER[minSeverity] ?? 0;
46
+ return issues.filter((issue) => (SEVERITY_ORDER[issue.severity] ?? 0) >= minLevel);
47
+ }
48
+ //# sourceMappingURL=quick-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-fix.js","sourceRoot":"","sources":["../../src/utils/quick-fix.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,QAAa;IAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;IACtE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,SAAS;QAElC,uDAAuD;QACvD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE;YAClE,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,eAAe,IAAI,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAEnC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9B,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC;gBACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClD,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAA2B;IAC7C,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAiC,MAAW,EAAE,WAAmB;IAC/F,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;AACrF,CAAC"}
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * Configuration scope management utilities
3
3
  */
4
+ /**
5
+ * Find the project root by walking up to find package.json, .git, etc.
6
+ */
7
+ export declare function findProjectRoot(startPath: string): string;
4
8
  /**
5
9
  * Get or create a SLOOP configuration scope for a project.
6
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/utils/scope.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C9F"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/utils/scope.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C9F"}
@@ -1,18 +1,19 @@
1
1
  /**
2
2
  * Configuration scope management utilities
3
3
  */
4
- import { dirname, join } from "path";
5
- import { existsSync } from "fs";
6
- import { createHash } from "crypto";
7
- import { scopeMap, scopeToProjectRoot, scopeFiles, getSloopBridge } from "../state.js";
8
- import { buildClientFileDtos } from "./file-registration.js";
4
+ import { dirname, join } from 'path';
5
+ import { existsSync } from 'fs';
6
+ import { createHash } from 'crypto';
7
+ import { scopeMap, scopeToProjectRoot, scopeFiles, getSloopBridge } from '../state.js';
8
+ import { buildClientFileDtos } from './file-registration.js';
9
9
  /**
10
10
  * Find the project root by walking up to find package.json, .git, etc.
11
11
  */
12
- function findProjectRoot(startPath) {
12
+ export function findProjectRoot(startPath) {
13
13
  let dir = startPath;
14
14
  const markers = ['package.json', '.git', 'pom.xml', 'build.gradle', 'pyproject.toml', 'go.mod'];
15
- while (dir !== dirname(dir)) { // stop at filesystem root
15
+ while (dir !== dirname(dir)) {
16
+ // stop at filesystem root
16
17
  for (const marker of markers) {
17
18
  if (existsSync(join(dir, marker))) {
18
19
  return dir;
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/utils/scope.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;GAEG;AACH,SAAS,eAAe,CAAC,SAAiB;IACxC,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAEhG,OAAO,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,0BAA0B;QACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,uCAAuC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,SAAoB;IAC3E,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACZ,kEAAkE;QAClE,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/C,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,SAAS,IAAI,EAAE,CAAC;IAEnC,OAAO,CAAC,KAAK,CAAC,2CAA2C,UAAU,QAAQ,WAAW,EAAE,CAAC,CAAC;IAE1F,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEtC,oDAAoD;IACpD,+EAA+E;IAC/E,2EAA2E;IAC3E,6BAA6B;IAC7B,MAAM,eAAe,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,mBAAmB,CAAC,eAAe,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3E,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAEjC,gDAAgD;IAChD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC/D,WAAW,CAAC,qBAAqB,CAAC,UAAU,EAAE;YAC5C,IAAI,EAAE,YAAY,WAAW,EAAE;SAChC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,2BAA2B,UAAU,qBAAqB,CAAC,CAAC;QAC1E,MAAM,YAAY,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,eAAe,UAAU,wBAAwB,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/utils/scope.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * SLOOP bridge initialization and management
3
3
  */
4
- import { SloopBridge } from "../sloop-bridge.js";
4
+ import { SloopBridge } from '../sloop-bridge.js';
5
5
  export declare const PACKAGE_ROOT: string;
6
6
  /**
7
- * Ensure SLOOP bridge is initialized
7
+ * Ensure SLOOP bridge is initialized.
8
+ * Pass a filePath so the bridge can load rule config from the project's sonarlint.json on first init.
8
9
  */
9
- export declare function ensureSloopBridge(): Promise<SloopBridge>;
10
+ export declare function ensureSloopBridge(filePath?: string): Promise<SloopBridge>;
10
11
  //# sourceMappingURL=sloop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sloop.d.ts","sourceRoot":"","sources":["../../src/utils/sloop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,eAAO,MAAM,YAAY,QAA2B,CAAC;AAErD;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CAoC9D"}
1
+ {"version":3,"file":"sloop.d.ts","sourceRoot":"","sources":["../../src/utils/sloop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,eAAO,MAAM,YAAY,QAA2B,CAAC;AAErD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2C/E"}
@@ -1,35 +1,44 @@
1
1
  /**
2
2
  * SLOOP bridge initialization and management
3
3
  */
4
- import { join, dirname } from "path";
5
- import { existsSync } from "fs";
6
- import { fileURLToPath } from "url";
7
- import { SloopBridge } from "../sloop-bridge.js";
8
- import { setSloopBridge, getSloopBridge } from "../state.js";
9
- import { SloopError } from "../errors.js";
4
+ import { join, dirname } from 'path';
5
+ import { existsSync } from 'fs';
6
+ import { fileURLToPath } from 'url';
7
+ import { SloopBridge } from '../sloop-bridge.js';
8
+ import { setSloopBridge, getSloopBridge } from '../state.js';
9
+ import { SloopError } from '../errors.js';
10
+ import { findProjectRoot } from './scope.js';
11
+ import { loadRuleConfig } from './config.js';
10
12
  // Get package root directory (where sonarlint-backend is installed)
11
13
  const __filename = fileURLToPath(import.meta.url);
12
14
  const __dirname = dirname(__filename);
13
15
  export const PACKAGE_ROOT = join(__dirname, '../..'); // Go up from dist/utils/ to package root
14
16
  /**
15
- * Ensure SLOOP bridge is initialized
17
+ * Ensure SLOOP bridge is initialized.
18
+ * Pass a filePath so the bridge can load rule config from the project's sonarlint.json on first init.
16
19
  */
17
- export async function ensureSloopBridge() {
20
+ export async function ensureSloopBridge(filePath) {
18
21
  const existing = getSloopBridge();
19
22
  if (existing) {
20
23
  return existing;
21
24
  }
22
25
  const t0 = Date.now();
23
26
  const elapsed = () => `${((Date.now() - t0) / 1000).toFixed(1)}s`;
24
- console.error("[MCP] Initializing SLOOP bridge...");
27
+ console.error('[MCP] Initializing SLOOP bridge...');
25
28
  // Check if plugins are downloaded
26
- const pluginsDir = join(PACKAGE_ROOT, "sonarlint-backend", "plugins");
29
+ const pluginsDir = join(PACKAGE_ROOT, 'sonarlint-backend', 'plugins');
27
30
  if (!existsSync(pluginsDir)) {
28
- throw new SloopError("Backend not found", "SonarLint backend not installed. The postinstall script may have failed. Try reinstalling: npm install -g @nielspeter/sonarlint-mcp-server", false);
31
+ throw new SloopError('Backend not found', 'SonarLint backend not installed. The postinstall script may have failed. Try reinstalling: npm install -g @nielspeter/sonarlint-mcp-server', false);
32
+ }
33
+ // Load rule config from project root if a file path is available
34
+ let standaloneRuleConfig;
35
+ if (filePath) {
36
+ const projectRoot = findProjectRoot(dirname(filePath));
37
+ standaloneRuleConfig = loadRuleConfig(projectRoot);
29
38
  }
30
39
  try {
31
40
  console.error(`[MCP] +${elapsed()} Creating bridge...`);
32
- const bridge = new SloopBridge(PACKAGE_ROOT);
41
+ const bridge = new SloopBridge(PACKAGE_ROOT, { standaloneRuleConfig });
33
42
  console.error(`[MCP] +${elapsed()} Connecting (starts Java + sends initialize)...`);
34
43
  await bridge.connect();
35
44
  setSloopBridge(bridge);
@@ -37,7 +46,7 @@ export async function ensureSloopBridge() {
37
46
  return bridge;
38
47
  }
39
48
  catch (error) {
40
- throw new SloopError(`Failed to initialize SLOOP: ${error}`, "Failed to start SonarLint backend. Please check that Java is installed and try again.", true);
49
+ throw new SloopError(`Failed to initialize SLOOP: ${error}`, 'Failed to start SonarLint backend. Please check that Java is installed and try again.', true);
41
50
  }
42
51
  }
43
52
  //# sourceMappingURL=sloop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sloop.js","sourceRoot":"","sources":["../../src/utils/sloop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,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,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAE,yCAAyC;AAEhG;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAElE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAEpD,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAClB,mBAAmB,EACnB,4IAA4I,EAC5I,KAAK,CACN,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,iDAAiD,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,wCAAwC,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAClB,+BAA+B,KAAK,EAAE,EACtC,uFAAuF,EACvF,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sloop.js","sourceRoot":"","sources":["../../src/utils/sloop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,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,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,yCAAyC;AAE/F;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAiB;IACvD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAElE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAEpD,kCAAkC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAClB,mBAAmB,EACnB,4IAA4I,EAC5I,KAAK,CACN,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,oBAAgH,CAAC;IACrH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,oBAAoB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,iDAAiD,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,wCAAwC,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAClB,+BAA+B,KAAK,EAAE,EACtC,uFAAuF,EACvF,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Data transformation utilities
3
3
  */
4
- import type { AnalysisIssue } from "../types.js";
4
+ import type { AnalysisIssue } from '../types.js';
5
5
  /**
6
6
  * Transform raw SLOOP issues to simplified format
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAsCtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,MAAM;;;;;;;;;;EAqB1E"}
1
+ {"version":3,"file":"transforms.d.ts","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAuCtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,MAAM;;;;;;;;;;EAqB1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../src/utils/transforms.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nielspeter/sonarlint-mcp-server",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "MCP server providing SonarLint code analysis for Claude Desktop and other MCP clients",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -29,7 +29,12 @@
29
29
  "release": "standard-version",
30
30
  "release:minor": "standard-version --release-as minor",
31
31
  "release:major": "standard-version --release-as major",
32
- "release:patch": "standard-version --release-as patch"
32
+ "release:patch": "standard-version --release-as patch",
33
+ "lint": "eslint src/ tests/",
34
+ "lint:fix": "eslint src/ tests/ --fix",
35
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
36
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
37
+ "docs:rules": "node scripts/generate-rules-doc.mjs"
33
38
  },
34
39
  "bin": {
35
40
  "sonarlint-mcp": "./dist/index.js",
@@ -61,12 +66,17 @@
61
66
  "zod": "^3.25.76"
62
67
  },
63
68
  "devDependencies": {
69
+ "@eslint/js": "^10.0.1",
64
70
  "@modelcontextprotocol/inspector": "^0.16.6",
65
71
  "@types/node": "^20.10.0",
66
72
  "@vitest/ui": "^4.0.8",
73
+ "eslint": "^10.1.0",
74
+ "eslint-config-prettier": "^10.1.8",
75
+ "prettier": "^3.8.1",
67
76
  "standard-version": "^9.5.0",
68
77
  "tsx": "^4.6.0",
69
78
  "typescript": "^5.3.0",
79
+ "typescript-eslint": "^8.58.0",
70
80
  "vitest": "^4.0.8"
71
81
  }
72
82
  }
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Generates docs/configurable-rules.md from the SLOOP backend.
5
+ * Usage: npm run docs:rules
6
+ */
7
+
8
+ import { SloopBridge } from '../dist/sloop-bridge.js';
9
+ import { writeFileSync } from 'fs';
10
+ import { join, dirname } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const __dirname = dirname(fileURLToPath(import.meta.url));
14
+ const OUTPUT = join(__dirname, '..', 'docs', 'configurable-rules.md');
15
+
16
+ const bridge = new SloopBridge();
17
+ await bridge.connect();
18
+
19
+ const result = await bridge.listAllStandaloneRulesDefinitions();
20
+ const rulesByKey = result.rulesByKey || {};
21
+
22
+ // Group configurable rules by language
23
+ const byLang = new Map();
24
+ for (const [key, rule] of Object.entries(rulesByKey)) {
25
+ if (!rule.paramsByKey || Object.keys(rule.paramsByKey).length === 0) continue;
26
+ const lang = rule.language || 'UNKNOWN';
27
+ if (!byLang.has(lang)) byLang.set(lang, []);
28
+ byLang.get(lang).push({ key, ...rule });
29
+ }
30
+
31
+ let total = 0;
32
+ const sortedLangs = [...byLang.keys()].sort();
33
+
34
+ let md = '# Configurable SonarLint Rules\n\n';
35
+
36
+ // Placeholder for total count (replaced below)
37
+ const totalPlaceholder = '{{TOTAL}}';
38
+ md += totalPlaceholder + '\n\n';
39
+
40
+ md += '> Auto-generated from SLOOP backend. Regenerate with `npm run docs:rules`.\n';
41
+ md += '>\n';
42
+ md += "> Configure these rules in your project's `sonarlint.json`:\n";
43
+ md += '>\n';
44
+ md += '> ```json\n';
45
+ md += '> {\n';
46
+ md += '> "rules": {\n';
47
+ md += '> "javascript:S3776": {\n';
48
+ md += '> "level": "on",\n';
49
+ md += '> "parameters": { "threshold": "20" }\n';
50
+ md += '> }\n';
51
+ md += '> }\n';
52
+ md += '> }\n';
53
+ md += '> ```\n\n';
54
+
55
+ for (const lang of sortedLangs) {
56
+ const rules = byLang.get(lang);
57
+ rules.sort((a, b) => a.key.localeCompare(b.key));
58
+ total += rules.length;
59
+
60
+ md += `## ${lang} (${rules.length} rules)\n\n`;
61
+ md += '| Rule | Name | Parameter | Default | Type |\n';
62
+ md += '|------|------|-----------|---------|------|\n';
63
+
64
+ for (const rule of rules) {
65
+ const params = Object.values(rule.paramsByKey);
66
+ for (let i = 0; i < params.length; i++) {
67
+ const p = params[i];
68
+ const ruleCol = i === 0 ? `\`${rule.key}\`` : '';
69
+ const nameCol = i === 0 ? rule.name : '';
70
+ const defVal = p.defaultValue === null ? '—' : `\`${p.defaultValue}\``;
71
+ md += `| ${ruleCol} | ${nameCol} | \`${p.key}\` | ${defVal} | ${p.type} |\n`;
72
+ }
73
+ }
74
+ md += '\n';
75
+ }
76
+
77
+ md = md.replace(
78
+ totalPlaceholder,
79
+ `**${total} configurable rules** across ${sortedLangs.length} languages.`,
80
+ );
81
+
82
+ writeFileSync(OUTPUT, md);
83
+ console.log(`Wrote ${total} configurable rules to ${OUTPUT}`);
84
+
85
+ await bridge.disconnect();
86
+ process.exit(0);