Skip to content

Commit

Permalink
fix: #32 Unexpected multiline highlight
Browse files Browse the repository at this point in the history
  • Loading branch information
edwinhuish committed Jan 9, 2025
1 parent d9c30fb commit b6f5d19
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 21 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"publisher": "edwinhuish",
"name": "better-comments-next",
"displayName": "Better Comments Next",
"version": "3.3.29",
"version": "3.3.30",
"description": "Improve your code commenting by annotating with alert, informational, TODOs, and more!",
"author": {
"name": "Edwin Xu"
Expand Down
65 changes: 45 additions & 20 deletions src/handler/modules/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ export class CommonHandler extends Handler {
`([ \\t]*(${mark})[ \\t])((${multilineTags.join('|')})([\\s\\S]*?(?=\\n\\s*${mark}[ \\t](${allTags.join('|')})|\\n\\s*${mark}\\s*\\r?\\n|$)))`,
'gi',
);
const m2Exp = new RegExp(`(^|[ \\t]*(${mark}))([^\\n]*?(?=\\r?\\n|$))`, 'gi');
const m2Exp = new RegExp(`(^|[ \\t]*(${mark})([ \\t]*))([^\\n]*?(?=\\r?\\n|$))`, 'gi');

// Find the matched multiline
let m1: RegExpExecArray | null;
Expand All @@ -171,6 +171,11 @@ export class CommonHandler extends Handler {
while ((m2 = m2Exp.exec(m1[3]))) {
this.verifyTaskID(taskID);

const m2Space = m2[3];
if (m2.index !== 0 && m2Space.length <= 1) {
break;
}

const m2StartSince = m1Start + m1[1].length + m2.index;
const m2Start = m2StartSince + m2[1].length;
const m2End = m2StartSince + m2[0].length;
Expand Down Expand Up @@ -235,7 +240,9 @@ export class CommonHandler extends Handler {
const lineTags = configuration.getLineTagsEscaped();
const allTags = configuration.getAllTagsEscaped();

const m1Exp = new RegExp(`(^[ \\t]|\\n[ \\t]*)(${multilineTags.join('|')})([\\s\\S]*?)(?=\\n\\s*(${allTags.join('|')})|\\n\\s*\\n|$)`, 'gi');
const m1Exp = new RegExp(`(^([ \\t])|\\n([ \\t]*))(${multilineTags.join('|')})([\\s\\S]*?)(?=\\n\\s*(${allTags.join('|')})|\\n\\s*\\n|$)`, 'gi');
// eslint-disable-next-line regexp/no-unused-capturing-group, regexp/no-super-linear-backtracking
const m2Exp = /((\n|^)([ \t]*))([^\n]*)(?=\n|$)/g;

const lineExp = new RegExp(`(^[ \\t]|\\n[ \\t]*)(${lineTags.join('|')})([^\\n]*?)(?=\\n|$)`, 'gi');

Expand Down Expand Up @@ -290,20 +297,32 @@ export class CommonHandler extends Handler {
this.verifyTaskID(taskID);

const m1Start = contentStart + m1.index;
const tagName = m1[2].toLowerCase();

const m2Start = m1Start + m1[1].length;
const m2End = m1Start + m1[0].length;
// store processed range
lineProcessed.push([m2Start, m2End]);

const startPos = editor.document.positionAt(m2Start);
const endPos = editor.document.positionAt(m2End);
const range = new vscode.Range(startPos, endPos);

const opt = tagRanges.get(tagName) || [];
opt.push(range);
tagRanges.set(tagName, opt);
const tagName = m1[4].toLowerCase();
const m1Space = m1[2] || m1[3] || '';

// Find decoration range
let m2: RegExpExecArray | null;
while ((m2 = m2Exp.exec(m1[0]))) {
this.verifyTaskID(taskID);
const m2Space = m2[3] || '';
if (m2.index !== 0 && m2Space.length <= m1Space.length) {
break;
}

const m2StartSince = m1Start + m2.index;
const m2Start = m2StartSince + m2[1].length;
const m2End = m2StartSince + m2[0].length;
// store processed range
lineProcessed.push([m2Start, m2End]);

const startPos = editor.document.positionAt(m2Start);
const endPos = editor.document.positionAt(m2End);
const range = new vscode.Range(startPos, endPos);

const opt = tagRanges.get(tagName) || [];
opt.push(range);
tagRanges.set(tagName, opt);
}
}
}

Expand Down Expand Up @@ -373,10 +392,10 @@ export class CommonHandler extends Handler {
*/
const blockExp = new RegExp(`((^|\\n)\\s*(${start}))\\s([\\s\\S]*?)(${end})`, 'g');
const m1Exp = new RegExp(
`(^[ \\t]|([ \\t]*(${pre})[ \\t]))((${multilineTags.join('|')})([\\s\\S]*?))(?=\\n\\s*${pre}[ \\t](${allTags.join('|')})|\\n\\s*${pre}\\s*\\n|$)`,
`(^[ \\t]|([ \\t]*(${pre})([ \\t])))((${multilineTags.join('|')})([\\s\\S]*?))(?=\\n\\s*${pre}[ \\t](${allTags.join('|')})|\\n\\s*${pre}\\s*\\n|$)`,
'gi',
);
const m2Exp = new RegExp(`(^|[ \\t]*(${pre}))([^\\n]*?)(\\n|$)`, 'gi');
const m2Exp = new RegExp(`(^|[ \\t]*(${pre})([ \\t]*))([^\\n]*?)(\\n|$)`, 'gi');
const lineExp = new RegExp(`(^|[ \\t]*(${pre})[ \\t])(${lineTags.join('|')})([^\\n]*?)(\\n|$)`, 'gi');

let block: RegExpExecArray | null;
Expand Down Expand Up @@ -404,13 +423,19 @@ export class CommonHandler extends Handler {
this.verifyTaskID(taskID);

const m1Start = contentStart + m1.index;
const tagName = m1[5].toLowerCase();
const tagName = m1[6].toLowerCase();
const m1Space = m1[4] || '';

// Find decoration range
let m2: RegExpExecArray | null;
while ((m2 = m2Exp.exec(m1[4]))) {
while ((m2 = m2Exp.exec(m1[5]))) {
this.verifyTaskID(taskID);

const m2Space = m2[3] || '';
if (m2.index !== 0 && m2Space.length <= m1Space.length) {
break;
}

const m2StartSince = m1Start + m1[1].length + m2.index;
const m2Start = m2StartSince + m2[1].length;
const m2End = m2StartSince + m2[0].length;
Expand Down

0 comments on commit b6f5d19

Please sign in to comment.