@nielspeter/sonarlint-mcp-server 0.5.0 → 0.5.2
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.
- package/CHANGELOG.md +20 -0
- package/dist/tools/analyze-files.d.ts.map +1 -1
- package/dist/tools/analyze-files.js +3 -2
- package/dist/tools/analyze-files.js.map +1 -1
- package/dist/tools/list-active-rules.d.ts.map +1 -1
- package/dist/tools/list-active-rules.js +60 -40
- package/dist/tools/list-active-rules.js.map +1 -1
- package/dist/utils/sloop.d.ts +2 -1
- package/dist/utils/sloop.d.ts.map +1 -1
- package/dist/utils/sloop.js +53 -1
- package/dist/utils/sloop.js.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.5.2](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.5.1...v0.5.2) (2026-04-03)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* apply sonarlint.json config via SLOOP notification ([3b25c28](https://github.com/nielspeter/sonarlint-mcp-server/commit/3b25c2853b456b3cc6b7398408dd5990c6ac22ff))
|
|
11
|
+
* reduce list_rules complexity and remove unnecessary assertions ([be538df](https://github.com/nielspeter/sonarlint-mcp-server/commit/be538df1cf13d557d2fc8a93dc8b0958660746e5))
|
|
12
|
+
|
|
13
|
+
### [0.5.1](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.5.0...v0.5.1) (2026-04-02)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* add .gitattributes to enforce LF on checkout ([19c3497](https://github.com/nielspeter/sonarlint-mcp-server/commit/19c3497b264dccd6de98ce6326373df6952b12f7))
|
|
19
|
+
* map language names to SLOOP codes in list_rules filter ([50af547](https://github.com/nielspeter/sonarlint-mcp-server/commit/50af547aa3955334fc537faa50d5cb751f49ced8))
|
|
20
|
+
* set Prettier endOfLine to lf for Windows CI compatibility ([1882dc2](https://github.com/nielspeter/sonarlint-mcp-server/commit/1882dc2e27dbab5f2581c7f63ee399b626cdc372))
|
|
21
|
+
* skip integration tests on Windows ([e2b6360](https://github.com/nielspeter/sonarlint-mcp-server/commit/e2b6360273c5637cf4edea6ecdc4bea141e27354))
|
|
22
|
+
* update CI to Node 22/24 and add lint/format checks ([c90883d](https://github.com/nielspeter/sonarlint-mcp-server/commit/c90883d03e02cda093826074f995a87f78d3d8d4))
|
|
23
|
+
* use path.join in config tests for Windows compatibility ([2a2748a](https://github.com/nielspeter/sonarlint-mcp-server/commit/2a2748ab4b86a768dd74f2557032ca33b8b8f26a))
|
|
24
|
+
|
|
5
25
|
## [0.5.0](https://github.com/nielspeter/sonarlint-mcp-server/compare/v0.4.1...v0.5.0) (2026-04-02)
|
|
6
26
|
|
|
7
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-files.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze-files.d.ts","sourceRoot":"","sources":["../../src/tools/analyze-files.ts"],"names":[],"mappings":"AAyGA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,GAAG;;;;;GAyDjD"}
|
|
@@ -23,13 +23,14 @@ function expandGlobs(paths, basePath) {
|
|
|
23
23
|
if (isRelative && !basePath) {
|
|
24
24
|
throw new SloopError(`Relative path requires basePath: ${p}`, `Relative paths need a basePath to resolve against. Provide basePath (the project root) or use absolute paths.`, false);
|
|
25
25
|
}
|
|
26
|
+
const resolveBase = basePath ?? process.cwd();
|
|
26
27
|
if (p.includes('*') || p.includes('?')) {
|
|
27
|
-
const cwd = isRelative ?
|
|
28
|
+
const cwd = isRelative ? resolveBase : process.cwd();
|
|
28
29
|
const matches = globSync(p, { cwd });
|
|
29
30
|
result.push(...matches.map((m) => resolve(cwd, m)));
|
|
30
31
|
}
|
|
31
32
|
else {
|
|
32
|
-
result.push(isRelative ? resolve(
|
|
33
|
+
result.push(isRelative ? resolve(resolveBase, p) : p);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
return [...new Set(result)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-files.js","sourceRoot":"","sources":["../../src/tools/analyze-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,0EAA0E;AAC1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAA4E,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAe,EAAE,QAAiB;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,UAAU,CAClB,oCAAoC,CAAC,EAAE,EACvC,+GAA+G,EAC/G,KAAK,CACN,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"analyze-files.js","sourceRoot":"","sources":["../../src/tools/analyze-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-active-rules.d.ts","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-active-rules.d.ts","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"AA4EA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,GAAG;;;;;GA6BpD"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import { ensureSloopBridge } from '../utils/sloop.js';
|
|
2
|
+
const LANGUAGE_ALIASES = {
|
|
3
|
+
javascript: 'js',
|
|
4
|
+
typescript: 'ts',
|
|
5
|
+
python: 'python',
|
|
6
|
+
java: 'java',
|
|
7
|
+
go: 'go',
|
|
8
|
+
php: 'php',
|
|
9
|
+
ruby: 'ruby',
|
|
10
|
+
html: 'html',
|
|
11
|
+
css: 'css',
|
|
12
|
+
};
|
|
2
13
|
function formatParams(paramsByKey) {
|
|
3
14
|
if (!paramsByKey)
|
|
4
15
|
return '';
|
|
@@ -7,6 +18,52 @@ function formatParams(paramsByKey) {
|
|
|
7
18
|
return '';
|
|
8
19
|
return entries.map((p) => `${p.key}=${p.defaultValue} (${p.type})`).join(', ');
|
|
9
20
|
}
|
|
21
|
+
function resolveFilterLang(language) {
|
|
22
|
+
if (!language)
|
|
23
|
+
return undefined;
|
|
24
|
+
return LANGUAGE_ALIASES[language.toLowerCase()] || language.toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
function groupRulesByLanguage(rulesByKey, filterLang) {
|
|
27
|
+
const rulesByLanguage = new Map();
|
|
28
|
+
for (const [key, ruleDef] of Object.entries(rulesByKey)) {
|
|
29
|
+
const ruleLang = ruleDef.language?.toLowerCase();
|
|
30
|
+
if (filterLang && ruleLang !== filterLang)
|
|
31
|
+
continue;
|
|
32
|
+
if (!ruleDef.isActiveByDefault)
|
|
33
|
+
continue;
|
|
34
|
+
const lang = ruleDef.language || 'unknown';
|
|
35
|
+
if (!rulesByLanguage.has(lang)) {
|
|
36
|
+
rulesByLanguage.set(lang, []);
|
|
37
|
+
}
|
|
38
|
+
rulesByLanguage.get(lang).push({ key, ...ruleDef });
|
|
39
|
+
}
|
|
40
|
+
return rulesByLanguage;
|
|
41
|
+
}
|
|
42
|
+
function formatRulesOutput(rulesByLanguage) {
|
|
43
|
+
let output = `# Active SonarLint Rules\n\n`;
|
|
44
|
+
let totalRules = 0;
|
|
45
|
+
let configurableCount = 0;
|
|
46
|
+
const sortedLangs = [...rulesByLanguage.keys()].sort((a, b) => a.localeCompare(b));
|
|
47
|
+
for (const lang of sortedLangs) {
|
|
48
|
+
const rules = rulesByLanguage.get(lang);
|
|
49
|
+
totalRules += rules.length;
|
|
50
|
+
output += `## ${lang} (${rules.length} rules)\n\n`;
|
|
51
|
+
output += `| Rule | Name | Parameters | Impacts |\n`;
|
|
52
|
+
output += `|------|------|------------|----------|\n`;
|
|
53
|
+
rules.sort((a, b) => a.key.localeCompare(b.key));
|
|
54
|
+
for (const rule of rules) {
|
|
55
|
+
const impacts = (rule.softwareImpacts || [])
|
|
56
|
+
.map((i) => `${i.softwareQuality}:${i.impactSeverity}`)
|
|
57
|
+
.join(', ');
|
|
58
|
+
const params = formatParams(rule.paramsByKey);
|
|
59
|
+
if (params)
|
|
60
|
+
configurableCount++;
|
|
61
|
+
output += `| \`${rule.key}\` | ${rule.name} | ${params} | ${impacts} |\n`;
|
|
62
|
+
}
|
|
63
|
+
output += `\n`;
|
|
64
|
+
}
|
|
65
|
+
return output.replace('# Active SonarLint Rules\n\n', `# Active SonarLint Rules\n\n**Total Active Rules**: ${totalRules} (${configurableCount} configurable)\n\n`);
|
|
66
|
+
}
|
|
10
67
|
export async function handleListActiveRules(args) {
|
|
11
68
|
const { language } = args;
|
|
12
69
|
const langSuffix = language ? ` for ${language}` : '';
|
|
@@ -15,47 +72,10 @@ export async function handleListActiveRules(args) {
|
|
|
15
72
|
try {
|
|
16
73
|
const response = await bridge.listAllStandaloneRulesDefinitions();
|
|
17
74
|
const rulesByKey = response.rulesByKey || {};
|
|
18
|
-
|
|
19
|
-
const rulesByLanguage =
|
|
20
|
-
for (const [key, rule] of Object.entries(rulesByKey)) {
|
|
21
|
-
const ruleDef = rule;
|
|
22
|
-
const ruleLang = ruleDef.language?.toLowerCase();
|
|
23
|
-
if (language && ruleLang !== language.toLowerCase()) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (!ruleDef.isActiveByDefault)
|
|
27
|
-
continue;
|
|
28
|
-
const lang = ruleDef.language || 'unknown';
|
|
29
|
-
if (!rulesByLanguage.has(lang)) {
|
|
30
|
-
rulesByLanguage.set(lang, []);
|
|
31
|
-
}
|
|
32
|
-
rulesByLanguage.get(lang).push({ key, ...ruleDef });
|
|
33
|
-
}
|
|
34
|
-
let output = `# Active SonarLint Rules\n\n`;
|
|
35
|
-
let totalRules = 0;
|
|
36
|
-
let configurableCount = 0;
|
|
37
|
-
const sortedLangs = [...rulesByLanguage.keys()].sort((a, b) => a.localeCompare(b));
|
|
38
|
-
for (const lang of sortedLangs) {
|
|
39
|
-
const rules = rulesByLanguage.get(lang);
|
|
40
|
-
totalRules += rules.length;
|
|
41
|
-
output += `## ${lang} (${rules.length} rules)\n\n`;
|
|
42
|
-
output += `| Rule | Name | Parameters | Impacts |\n`;
|
|
43
|
-
output += `|------|------|------------|----------|\n`;
|
|
44
|
-
rules.sort((a, b) => a.key.localeCompare(b.key));
|
|
45
|
-
for (const rule of rules) {
|
|
46
|
-
const impacts = (rule.softwareImpacts || [])
|
|
47
|
-
.map((i) => `${i.softwareQuality}:${i.impactSeverity}`)
|
|
48
|
-
.join(', ');
|
|
49
|
-
const params = formatParams(rule.paramsByKey);
|
|
50
|
-
if (params)
|
|
51
|
-
configurableCount++;
|
|
52
|
-
output += `| \`${rule.key}\` | ${rule.name} | ${params} | ${impacts} |\n`;
|
|
53
|
-
}
|
|
54
|
-
output += `\n`;
|
|
55
|
-
}
|
|
56
|
-
output = output.replace('# Active SonarLint Rules\n\n', `# Active SonarLint Rules\n\n**Total Active Rules**: ${totalRules} (${configurableCount} configurable)\n\n`);
|
|
75
|
+
const filterLang = resolveFilterLang(language);
|
|
76
|
+
const rulesByLanguage = groupRulesByLanguage(rulesByKey, filterLang);
|
|
57
77
|
return {
|
|
58
|
-
content: [{ type: 'text', text:
|
|
78
|
+
content: [{ type: 'text', text: formatRulesOutput(rulesByLanguage) }],
|
|
59
79
|
};
|
|
60
80
|
}
|
|
61
81
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-active-rules.js","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,SAAS,YAAY,CAAC,WAA4C;IAChE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtF,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"list-active-rules.js","sourceRoot":"","sources":["../../src/tools/list-active-rules.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/sloop.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ import { SloopBridge } from '../sloop-bridge.js';
|
|
|
5
5
|
export declare const PACKAGE_ROOT: string;
|
|
6
6
|
/**
|
|
7
7
|
* Ensure SLOOP bridge is initialized.
|
|
8
|
-
* Pass a filePath so the bridge can load rule config from the project's sonarlint.json
|
|
8
|
+
* Pass a filePath so the bridge can load rule config from the project's sonarlint.json.
|
|
9
|
+
* Config is re-applied whenever a file from a different project root is analyzed.
|
|
9
10
|
*/
|
|
10
11
|
export declare function ensureSloopBridge(filePath?: string): Promise<SloopBridge>;
|
|
11
12
|
//# 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;AASjD,eAAO,MAAM,YAAY,QAA2B,CAAC;
|
|
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;AAqCrD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiE/E"}
|
package/dist/utils/sloop.js
CHANGED
|
@@ -13,13 +13,49 @@ import { loadRuleConfig } from './config.js';
|
|
|
13
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
14
14
|
const __dirname = dirname(__filename);
|
|
15
15
|
export const PACKAGE_ROOT = join(__dirname, '../..'); // Go up from dist/utils/ to package root
|
|
16
|
+
/** Track which project root's config is currently applied */
|
|
17
|
+
let activeProjectRoot;
|
|
18
|
+
/** Log rule config entries */
|
|
19
|
+
function logRuleConfig(config) {
|
|
20
|
+
for (const [ruleKey, entry] of Object.entries(config)) {
|
|
21
|
+
const params = Object.entries(entry.paramValueByKey)
|
|
22
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
23
|
+
.join(', ');
|
|
24
|
+
console.error(`[MCP] Rule ${ruleKey}: active=${String(entry.isActive)}${params ? `, ${params}` : ''}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load and apply rule config for a project root.
|
|
29
|
+
* Sends updateStandaloneRulesConfiguration notification if config changed.
|
|
30
|
+
*/
|
|
31
|
+
async function applyProjectConfig(bridge, filePath) {
|
|
32
|
+
const projectRoot = findProjectRoot(dirname(filePath));
|
|
33
|
+
if (projectRoot === activeProjectRoot)
|
|
34
|
+
return;
|
|
35
|
+
activeProjectRoot = projectRoot;
|
|
36
|
+
const config = loadRuleConfig(projectRoot);
|
|
37
|
+
// Always send the update — even empty config resets to defaults
|
|
38
|
+
await bridge.updateStandaloneRulesConfiguration(config);
|
|
39
|
+
if (Object.keys(config).length > 0) {
|
|
40
|
+
console.error(`[MCP] Applied rule config from ${projectRoot} (${Object.keys(config).length} rules)`);
|
|
41
|
+
logRuleConfig(config);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.error(`[MCP] No sonarlint.json in ${projectRoot} — using default rules`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
16
47
|
/**
|
|
17
48
|
* Ensure SLOOP bridge is initialized.
|
|
18
|
-
* Pass a filePath so the bridge can load rule config from the project's sonarlint.json
|
|
49
|
+
* Pass a filePath so the bridge can load rule config from the project's sonarlint.json.
|
|
50
|
+
* Config is re-applied whenever a file from a different project root is analyzed.
|
|
19
51
|
*/
|
|
20
52
|
export async function ensureSloopBridge(filePath) {
|
|
21
53
|
const existing = getSloopBridge();
|
|
22
54
|
if (existing) {
|
|
55
|
+
// Bridge exists — check if we need to apply config for a new project
|
|
56
|
+
if (filePath) {
|
|
57
|
+
await applyProjectConfig(existing, filePath);
|
|
58
|
+
}
|
|
23
59
|
return existing;
|
|
24
60
|
}
|
|
25
61
|
const t0 = Date.now();
|
|
@@ -34,13 +70,29 @@ export async function ensureSloopBridge(filePath) {
|
|
|
34
70
|
let standaloneRuleConfig;
|
|
35
71
|
if (filePath) {
|
|
36
72
|
const projectRoot = findProjectRoot(dirname(filePath));
|
|
73
|
+
activeProjectRoot = projectRoot;
|
|
74
|
+
console.error(`[MCP] +${elapsed()} Project root: ${projectRoot}`);
|
|
37
75
|
standaloneRuleConfig = loadRuleConfig(projectRoot);
|
|
76
|
+
if (standaloneRuleConfig && Object.keys(standaloneRuleConfig).length > 0) {
|
|
77
|
+
logRuleConfig(standaloneRuleConfig);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.error('[MCP] No sonarlint.json config found');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.error(`[MCP] +${elapsed()} No file path provided — skipping config lookup`);
|
|
38
85
|
}
|
|
39
86
|
try {
|
|
40
87
|
console.error(`[MCP] +${elapsed()} Creating bridge...`);
|
|
41
88
|
const bridge = new SloopBridge(PACKAGE_ROOT, { standaloneRuleConfig });
|
|
42
89
|
console.error(`[MCP] +${elapsed()} Connecting (starts Java + sends initialize)...`);
|
|
43
90
|
await bridge.connect();
|
|
91
|
+
// Also send as notification — SLOOP may only honor parameter overrides via this path
|
|
92
|
+
if (standaloneRuleConfig && Object.keys(standaloneRuleConfig).length > 0) {
|
|
93
|
+
await bridge.updateStandaloneRulesConfiguration(standaloneRuleConfig);
|
|
94
|
+
console.error(`[MCP] +${elapsed()} Applied rule config via notification (${Object.keys(standaloneRuleConfig).length} rules)`);
|
|
95
|
+
}
|
|
44
96
|
setSloopBridge(bridge);
|
|
45
97
|
console.error(`[MCP] +${elapsed()} SLOOP bridge initialized successfully`);
|
|
46
98
|
return bridge;
|
package/dist/utils/sloop.js.map
CHANGED
|
@@ -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;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"sloop.js","sourceRoot":"","sources":["../../src/utils/sloop.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.5.
|
|
3
|
+
"version": "0.5.2",
|
|
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",
|
|
@@ -69,6 +69,7 @@
|
|
|
69
69
|
"@eslint/js": "^10.0.1",
|
|
70
70
|
"@modelcontextprotocol/inspector": "^0.16.6",
|
|
71
71
|
"@types/node": "^20.10.0",
|
|
72
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
72
73
|
"@vitest/ui": "^4.0.8",
|
|
73
74
|
"eslint": "^10.1.0",
|
|
74
75
|
"eslint-config-prettier": "^10.1.8",
|