From e81ebbc45be224f6cc9cf4620350b426bd03b4e6 Mon Sep 17 00:00:00 2001 From: mARTin-B78 Date: Tue, 6 Oct 2026 11:59:52 +0200 Subject: [PATCH] fix(sonar): extract assignments from expressions (javascript:S1121) Co-Authored-By: Claude Sonnet 5.5 --- static/js/audiobook-spans.js | 6 +++++- static/js/audiobook.js | 9 ++++++--- static/js/library-characters.js | 3 ++- static/js/rehearser-voice-design.js | 3 ++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/static/js/audiobook-spans.js b/static/js/audiobook-spans.js index 5025941..6c0cfa4 100644 --- a/static/js/audiobook-spans.js +++ b/static/js/audiobook-spans.js @@ -41,7 +41,11 @@ function sentenceRanges(text, a, b) { const re = /[^.!?…]*[.!?…]+[»«“”"’)\]]*\s*|[^.!?…]+$/g; const slice = text.slice(a, b); let m; - while ((m = re.exec(slice)) && m[0].length) out.push([a + m.index, a + m.index + m[0].length]); + while (true) { + m = re.exec(slice); + if (!m || !m[0].length) break; + out.push([a + m.index, a + m.index + m[0].length]); + } return out; } diff --git a/static/js/audiobook.js b/static/js/audiobook.js index 5265729..ebf280f 100644 --- a/static/js/audiobook.js +++ b/static/js/audiobook.js @@ -759,11 +759,14 @@ function audiobookGuessSpeaker(after, before) { // NOTE: no 'i' flag — names must be genuinely capitalized; German speech verbs // after a quote are lowercase, so this rejects pronouns like "sagte er". // after the quote: ", sagte Riskan" / "sagte Riskan" (verb → name) - if ((m = new RegExp('^[\\s,;–-]*' + AB_SPEECH_VERBS + '\\s+(?:der|die|das|ein|eine)?\\s*' + _AB_NAME).exec(after || ''))) { const r = ok(m[1]); if (r) return r; } + m = new RegExp('^[\\s,;–-]*' + AB_SPEECH_VERBS + '\\s+(?:der|die|das|ein|eine)?\\s*' + _AB_NAME).exec(after || ''); + if (m) { const r = ok(m[1]); if (r) return r; } // after the quote: ", Riskan sagte" (name → verb) - if ((m = new RegExp('^[\\s,;–-]*' + _AB_NAME + '\\s+' + AB_SPEECH_VERBS).exec(after || ''))) { const r = ok(m[1]); if (r) return r; } + m = new RegExp('^[\\s,;–-]*' + _AB_NAME + '\\s+' + AB_SPEECH_VERBS).exec(after || ''); + if (m) { const r = ok(m[1]); if (r) return r; } // before the quote: "Riskan sagte:" / "Riskan fragte" - if ((m = new RegExp(_AB_NAME + '\\s+' + AB_SPEECH_VERBS + '[\\s:,–-]*$').exec(before || ''))) { const r = ok(m[1]); if (r) return r; } + m = new RegExp(_AB_NAME + '\\s+' + AB_SPEECH_VERBS + '[\\s:,–-]*$').exec(before || ''); + if (m) { const r = ok(m[1]); if (r) return r; } return null; } diff --git a/static/js/library-characters.js b/static/js/library-characters.js index ada04c9..38d02f7 100644 --- a/static/js/library-characters.js +++ b/static/js/library-characters.js @@ -1635,7 +1635,8 @@ async function _charDetailPage(rec, allChars, opts) { sourcesList.forEach(function (s, idx) { const key = _libStr(s.line_hint || s.hint || '').trim().toLowerCase(); if (!key) return; - (sourcesByField[key] = sourcesByField[key] || []).push(idx); + sourcesByField[key] = sourcesByField[key] || []; + sourcesByField[key].push(idx); }); const sourcesHtml = sourcesList.length ? ( '
' diff --git a/static/js/rehearser-voice-design.js b/static/js/rehearser-voice-design.js index 510e1f0..7b33f5c 100644 --- a/static/js/rehearser-voice-design.js +++ b/static/js/rehearser-voice-design.js @@ -55,7 +55,8 @@ async function refreshRehBackends() { _checkToneStyleSupport(); } -(window._ttsRefreshHooks = window._ttsRefreshHooks || []).push(() => { +window._ttsRefreshHooks = window._ttsRefreshHooks || []; +window._ttsRefreshHooks.push(() => { const sel = $('reh-backend-select'); if (!sel) return; const backends = typeof availableTtsBackends === 'function' ? availableTtsBackends() : []; if (!backends.length) return;