From 9ec4fbddd559d93b3d6b072dc8f56d2a572585bd Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 13 Oct 2026 06:02:56 +0000 Subject: feat(plugin): color bracket pairs and mark unmatched brackets red Co-Authored-By: Claude Fable 5.1 --- plugin/src/brackets.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 plugin/src/brackets.js (limited to 'plugin/src/brackets.js') diff --git a/plugin/src/brackets.js b/plugin/src/brackets.js new file mode 100644 index 0000000..ad79ea5 --- /dev/null +++ b/plugin/src/brackets.js @@ -0,0 +1,25 @@ +'use strict'; + +const { codeOnly } = require('./lexical'); +const pairs = { ')': '(', ']': '[' }; + +function unmatchedBrackets(text) { + const code = codeOnly(text); + const stack = []; + const unmatched = []; + for (let offset = 0; offset < code.length; offset++) { + const char = code[offset]; + if (char === '(' || char === '[') { + stack.push({ char, offset }); + } else if (pairs[char]) { + const opening = stack.pop(); + if (!opening || opening.char !== pairs[char]) { + if (opening) unmatched.push(opening.offset); + unmatched.push(offset); + } + } + } + return unmatched.concat(stack.map(opening => opening.offset)).sort((a, b) => a - b); +} + +module.exports = { unmatchedBrackets }; -- cgit v1.3.1-4-g156e