diff --git a/package.json b/package.json index c2e945c..8eb5ab8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "publisher": "edwinhuish", "name": "better-comments-next", "displayName": "Better Comments Next", - "version": "3.3.12", + "version": "3.3.13", "description": "Improve your code commenting by annotating with alert, informational, TODOs, and more!", "author": { "name": "Edwin Xu" diff --git a/src/configuration/configuration.ts b/src/configuration/configuration.ts index 522882e..d58c3e3 100644 --- a/src/configuration/configuration.ts +++ b/src/configuration/configuration.ts @@ -57,6 +57,8 @@ export interface ConfigurationFlatten extends Configuration { let config: (Configuration & WorkspaceConfiguration) | undefined; let configFlatten: ConfigurationFlatten | undefined; let tagDecorationTypes: Map | undefined; +let multilineTagsEscaped: string[] | undefined; +let lineTagsEscaped: string[] | undefined; export function refresh() { // if already set tagDecorationTypes, clear decoration for visible editors @@ -72,6 +74,8 @@ export function refresh() { config = undefined; configFlatten = undefined; tagDecorationTypes = undefined; + multilineTagsEscaped = undefined; + lineTagsEscaped = undefined; } /** @@ -182,3 +186,19 @@ function parseDecorationRenderOption(tag: TagFlatten) { return options; } + +export function getMultilineTagsEscaped() { + if (!multilineTagsEscaped) { + multilineTagsEscaped = getConfigurationFlatten().tags.filter(t => t.multiline).map(tag => tag.tagEscaped); + } + + return multilineTagsEscaped; +} + +export function getLineTagsEscaped() { + if (!lineTagsEscaped) { + lineTagsEscaped = getConfigurationFlatten().tags.filter(t => !t.multiline).map(tag => tag.tagEscaped); + } + + return lineTagsEscaped; +} diff --git a/src/handler/langs/common.ts b/src/handler/langs/common.ts index 46fb64c..56c3200 100644 --- a/src/handler/langs/common.ts +++ b/src/handler/langs/common.ts @@ -82,8 +82,6 @@ function logMissingLineComments(languageId: string) { export async function pickLineCommentDecorationOptions({ editor, processed = [] }: PickDecorationOptionsParams) { const decorationOptions = new Map(); - const configs = configuration.getConfigurationFlatten(); - const comments = await definition.getAvailableComments(editor.document.languageId); if (!comments.lineComments || !comments.lineComments.length) { @@ -95,8 +93,8 @@ export async function pickLineCommentDecorationOptions({ editor, processed = [] const blockExp = new RegExp(`(${escapedMarks}).*?(?:\\n[ \\t]*\\1.*?)*(\\n|$)`, 'g'); - const multilineTags = configs.tags.filter(t => t.multiline).map(tag => tag.tagEscaped); - const lineTags = configs.tags.filter(t => !t.multiline).map(tag => tag.tagEscaped); + const multilineTags = configuration.getMultilineTagsEscaped(); + const lineTags = configuration.getLineTagsEscaped(); const text = editor.document.getText(); @@ -203,12 +201,10 @@ export async function pickBlockCommentDecorationOptions({ editor, processed = [] return decorationOptions; } - const configs = configuration.getConfigurationFlatten(); - - const multilineTags = configs.tags.filter(t => t.multiline).map(tag => tag.tagEscaped); + const multilineTags = configuration.getMultilineTagsEscaped(); const m1Exp = new RegExp(`([ \\t])(${multilineTags.join('|')})([\\s\\S]*?)(\\n\\s*\\n|$)`, 'gi'); - const lineTags = configs.tags.filter(t => !t.multiline).map(tag => tag.tagEscaped); + const lineTags = configuration.getLineTagsEscaped(); const lineExp = new RegExp(`(^|[ \\t])(${lineTags.join('|')})([^\\n]*?)(\\n|$)`, 'gi'); for (const marks of comments.blockComments) { @@ -314,18 +310,16 @@ export async function pickDocCommentDecorationOptions({ editor, processed = [] } const end = escapeRegexString(marks[1]); const pre = escapeRegexString(prefix); - const configs = configuration.getConfigurationFlatten(); - const blockExp = new RegExp(`(^|\\s)(${start})(([ \\t]+|[ \\t]*\\n)[\\s\\S]*?)(${end})`, 'g'); - const multilineTags = configs.tags.filter(t => t.multiline).map(tag => tag.tagEscaped); + const multilineTags = configuration.getMultilineTagsEscaped(); const m1Exp = new RegExp( `([ \\t]*(${pre}?)[ \\t])((${multilineTags.join('|')})([\\s\\S]*?))(\\n(\\s*${pre}?\\s*)\\n|$)`, 'gi', ); const m2Exp = new RegExp(`(^|[ \\t]*(${pre}))([^\\n]*?)(\\n|$)`, 'gi'); - const lineTags = configs.tags.filter(t => !t.multiline).map(tag => tag.tagEscaped); + const lineTags = configuration.getLineTagsEscaped(); const lineExp = new RegExp(`(^|[ \\t]*(${pre})[ \\t])(${lineTags.join('|')})([^\\n]*?)(\\n|$)`, 'gi'); const text = editor.document.getText(); diff --git a/src/handler/langs/plaintext.ts b/src/handler/langs/plaintext.ts index 6f1798a..294571b 100644 --- a/src/handler/langs/plaintext.ts +++ b/src/handler/langs/plaintext.ts @@ -42,8 +42,8 @@ async function pickDecorationOptions({ editor }: { editor: vscode.TextEditor }) return decorationOptions; } - const multilineTags = configs.tags.filter(t => t.multiline).map(tag => tag.tagEscaped); - const lineTags = configs.tags.filter(t => !t.multiline).map(tag => tag.tagEscaped); + const multilineTags = configuration.getMultilineTagsEscaped(); + const lineTags = configuration.getLineTagsEscaped(); const lineProcessed: [number, number][] = [];