Skip to content

Commit 9d516ac

Browse files
committed
fix(sonar): clear 2.3.1 static analysis findings
1 parent 7b4351b commit 9d516ac

4 files changed

Lines changed: 29 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ direkt zu einer versionierten Release-Sektion.
2222
- Nutzerwirkung: Keine sichtbare Änderung im Userscript; die Agent-/Skill-Anweisungen für Wartung und Release sind klarer getrennt und werden beim lokalen Check robuster validiert.
2323
Technik: Deprecated Skill-Dateien wurden durch fokussierte Analyse-, Changelog-, Release- und Validierungs-Skills ersetzt; `scripts/check-agent-instructions.mjs` prüft referenzierte Skill-Dateien mit, und `check:agents` ist als npm-Script verdrahtet.
2424

25+
- Nutzerwirkung: Keine sichtbare Änderung; die SonarQube-Nachprüfung für die 2.3.1-Änderungen ist jetzt ohne neue Reliability-Issues und ohne neue unreviewed Security Hotspots sauber.
26+
Technik: `x01-player-surface-adapter` vermeidet den direkten `.map(...)`-Callback auf `toPlayerEntry`, und `check-agent-instructions` ersetzt die beanstandeten Regex-/Replace-Pfade durch stringbasierte Normalisierung, Quote-Trimming und deterministisches Regex-Escaping ohne globalen Hotspot-Parser.
27+
2528
## [2.3.0] - 2026-04-21
2629

2730
### Changed

dist/autodarts-xconfig.user.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5335,7 +5335,7 @@
53355335
return {
53365336
playerDisplayRoot,
53375337
playerCards,
5338-
players: playerCards.map(toPlayerEntry),
5338+
players: playerCards.map((node, index) => toPlayerEntry(node, index)),
53395339
source: X01_PLAYER_SURFACE_SOURCE_TOOLS
53405340
};
53415341
}

scripts/check-agent-instructions.mjs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function parseFrontmatter(text, label) {
2525
return {};
2626
}
2727

28-
const normalized = text.replace(/\r\n/g, '\n');
28+
const normalized = text.replaceAll('\r\n', '\n');
2929
const end = normalized.indexOf('\n---\n', 4);
3030
if (end === -1) {
3131
fail(`${label}: unterminated YAML frontmatter`);
@@ -34,14 +34,30 @@ function parseFrontmatter(text, label) {
3434

3535
const fields = {};
3636
for (const line of normalized.slice(4, end).split('\n')) {
37-
const match = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
38-
if (match) {
39-
fields[match[1]] = match[2].trim().replace(/^['"]|['"]$/g, '');
37+
const separatorIndex = line.indexOf(':');
38+
if (separatorIndex > 0) {
39+
const key = line.slice(0, separatorIndex).trim();
40+
if (!/^[A-Za-z0-9_-]+$/.test(key)) {
41+
continue;
42+
}
43+
fields[key] = stripWrappingQuotes(line.slice(separatorIndex + 1).trim());
4044
}
4145
}
4246
return fields;
4347
}
4448

49+
function stripWrappingQuotes(value) {
50+
if (value.length < 2) {
51+
return value;
52+
}
53+
54+
const first = value.at(0);
55+
const last = value.at(-1);
56+
return (first === '"' && last === '"') || (first === "'" && last === "'")
57+
? value.slice(1, -1)
58+
: value;
59+
}
60+
4561
function collectInstructionFiles(skillDirs) {
4662
const files = [agentsPath];
4763
for (const dir of skillDirs) {
@@ -55,7 +71,10 @@ function reportMatches(text, regex) {
5571
}
5672

5773
function escapeRegExp(value) {
58-
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
74+
const specialCharacters = new Set(['.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', '[', ']', '\\']);
75+
return Array.from(value, (character) =>
76+
specialCharacters.has(character) ? `\\${character}` : character
77+
).join('');
5978
}
6079

6180
if (!exists(agentsPath)) {

src/features/shared/x01-player-surface-adapter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ export function getX01PlayerSurfaceSnapshot(documentRef) {
146146
return {
147147
playerDisplayRoot,
148148
playerCards,
149-
players: playerCards.map(toPlayerEntry),
149+
players: playerCards.map((node, index) => toPlayerEntry(node, index)),
150150
source: X01_PLAYER_SURFACE_SOURCE_TOOLS,
151151
};
152152
}

0 commit comments

Comments
 (0)