jiebi/CodeConvo huggingface dataset:
Change:
Type if ( expected =closing ) actual =nothing
Fixed by me, reviewed by Alex, see ,

Discussion:
<ins> { "comments": { "lineComment": "//", "blockComment": ["/*", "*/"] }, "brackets": [ ["{", "}"], ["[", "]"], ["(", ")"] ] } </ins>  No newline at end of file

"languages": [{ "id": "csharp", "extensions": [ ".cs", ".csx" ], <del> "aliases": [ "C#", "csharp" ] </del> <ins> "aliases": [ "C#", "csharp" ], "configuration": "./csharp.configuration.json" </ins> }], "grammars": [{ "language": "csharp",

{ "comments": { "lineComment": "#", <del> "blockComment": [ "''", "''" ] </del> <ins> "blockComment": [ "'''", "'''" ] </ins> }, "brackets": [ ["{", "}"],
Change:
When using the block comment feature, only 2 single quotes are put in, instead of three.
Python block comments are triple quotes, not double. Check if that works.
It does! Thanks the bug is then that only 2 quotes are put in.
Fixed, see , reviewed by Alex

Discussion:
<ins> { "comments": { "lineComment": "//", "blockComment": ["/*", "*/"] }, "brackets": [ ["{", "}"], ["[", "]"], ["(", ")"] ] } </ins>  No newline at end of file

"languages": [{ "id": "csharp", "extensions": [ ".cs", ".csx" ], <del> "aliases": [ "C#", "csharp" ] </del> <ins> "aliases": [ "C#", "csharp" ], "configuration": "./csharp.configuration.json" </ins> }], "grammars": [{ "language": "csharp",

{ "comments": { "lineComment": "#", <del> "blockComment": [ "''", "''" ] </del> <ins> "blockComment": [ "'''", "'''" ] </ins> }, "brackets": [ ["{", "}"],
Change:
open a markdown file with bold markup, e.g. abc text xyz try to select the line with the mouse starting at 'abc' and slowly extending to 'xyz' Observe: if you reach the second '', the selection of 'text**' disappears. In the end you have two disconnected selection ranges. in addition I see lots of flashing selection changes while dragging the mouse

Discussion:
if (beforeEndVisibleRanges && beforeEndVisibleRanges.length > 0 && endVisibleRanges && endVisibleRanges.length > 0) { var beforeEndVisibleRange = beforeEndVisibleRanges[0]; var endVisibleRange = endVisibleRanges[0]; <del> var isLTR = true; if (beforeEndVisibleRange.top === endVisibleRange.top) { isLTR = (beforeEndVisibleRange.left <= endVisibleRange.left); } </del> <ins> var isLTR = (beforeEndVisibleRange.left <= endVisibleRange.left); </ins> var lastRange = output[output.length - 1]; <del> if (isLTR && lastRange.top === endVisibleRange.top && lastRange.left < endVisibleRange.left) { </del> <ins> if (isLTR && lastRange.left < endVisibleRange.left) { </ins> // Trim down the width of the last visible range to not go after the last column's position lastRange.width = endVisibleRange.left - lastRange.left; <del> } else if (lastRange.top > endVisibleRange.top) { // WebKit went over to next line with its expanded range output.splice(output.length - 1, 1); </del> } }

} function compareVisibleRanges(a: EditorBrowser.IVisibleRange, b: EditorBrowser.IVisibleRange): number { <del> if (a.top === b.top) { return a.left - b.left; } return a.top - b.top; </del> <ins> return a.left - b.left; </ins> } function findIndexInArrayWithMax(lineParts:ILineParts, desiredIndex: number, maxResult:number): number {

result.partsCount = partsCount; return result; <del> } </del>  No newline at end of file <ins> } </ins>
Change:
The auto-complete lacks MS Edge info. Presumably it needs to be at the line above. I can make the PR request myself if needed, but I'm not sure if it needs plumbed in in other locations too?
Needs to be to browserEntry too

Discussion:
}; export var units : { [unitName:string]:string[] } = { <del> 'length': ['em', 'rem', 'ex', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vw', 'vh', 'vmin', 'vmax'], </del> <ins> 'length': ['em', 'rem', 'ex', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'vw', 'vh', 'vmin', 'vmax'], </ins> 'angle': ['deg', 'rad', 'grad', 'turn'], 'time': ['ms', 's'], 'frequency': ['Hz', 'kHz'],

} export interface Browsers { <ins> E:string; </ins> FF:string; IE:string; O:string;

} function evalBrowserEntry(browsers: string) { <del> var browserEntry : Browsers = { all: false, FF: '', S: '', C: '', IE: '', O: '', count: 0}; </del> <ins> var browserEntry : Browsers = { all: false, E: '', FF: '', S: '', C: '', IE: '', O: '', count: 0}; </ins> var count = 0; if (browsers) { browsers.split(',').forEach(

} export var browserNames = { <ins> E : 'Edge', </ins> FF : 'Firefox', S : 'Safari', C : 'Chrome',
Change:
Repro: vscode with no folder open over the git icon, observe the cursor becomes the text selection cursor !

Discussion:
background-repeat: no-repeat; background-position: 4px 50%; background-size: 17px; <ins> cursor: default; </ins> padding: 0 5px 0 22px; }

.monaco-shell .git-statusbar-item.headless { font-style: italic; <del> } </del>  No newline at end of file <ins> } </ins>
Change:
shows frequencies are recommended to have a capital H but in CSS's  this isn't so.

Discussion:
'length': ['em', 'rem', 'ex', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'cc'], 'angle': ['deg', 'rad', 'grad'], 'time': ['ms', 's'], <del> 'frequency': ['hz', 'khz'], </del> <ins> 'frequency': ['Hz', 'kHz'], </ins> 'resolution': ['dpi', 'dpcm'], 'percentage': ['%'] };
Change:
Hey everyone, 2015 is almost over, but we still need an editor configuration file to edit what is currently "JavaScript as supported by browsers". I'd like to avoid . That would also solve issues like . I'll make a PR to pressure y'all even more :stuckouttonguewinking_eye:
:+1:
yes
:+1: :+1: :+1:
Closing for now:
We are save to make this change for Dec because going forward with project salsa the default will be the latest for JS files (#Microsoft/TypeScript/6017)

Discussion:
MonacoEditorSchemas['http://opentools.azurewebsites.net/jsconfig'] = { 'title': nls.localize('jsconfig.json.title', "JSON schema for the JavaScript configuration file"), 'type': 'object', <del> 'default': { 'compilerOptions': { 'target': 'ES5' } }, </del> <ins> 'default': { 'compilerOptions': { 'target': 'ES6' } }, </ins> 'properties': { 'compilerOptions': { 'type': 'object',

this._compilerOptions = options || ts.getDefaultCompilerOptions(); this._compilerOptions.allowNonTsExtensions = true; // because of JS* and mirror model we need this this._compilerOptions.module = ts.ModuleKind.CommonJS; // because of JS* <ins> this._compilerOptions.target = options && options.target !== undefined ? options.target : ts.ScriptTarget.Latest; // because of JS* </ins> } getCompilationSettings(): ts.CompilerOptions {
Change:
This will let the Setup installer not go ahead and perform an update/install if Code is running.
We already have a native app mutex node module which we could use for this.

Discussion:
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" } } <ins> }, "windows-mutex": { "version": "0.1.3", "from": "windows-mutex@0.1.3", "dependencies": { "bindings": { "version": "1.2.1", "from": "bindings@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" }, "nan": { "version": "2.1.0", "from": "nan@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.1.0.tgz" } } </ins> } } }

}, "scripts": { "test": "node node_modules/mocha/bin/_mocha", <del> "preinstall": "node build/npm/preinstall.js", </del> <ins> "preinstall": "node build/npm/preinstall.js", </ins> "postinstall": "npm --prefix extensions/csharp-o/ install extensions/csharp-o/ && npm --prefix extensions/vscode-api-tests/ install extensions/vscode-api-tests/" }, "dependencies": {

"ghooks": { "pre-commit": "node build/gulpfile.hygiene.js" } <ins> }, "optionalDependencies": { "windows-mutex": "^0.1.3" </ins> } }

<ins> /*--------------------------------------------------------------------------------------------- *  Copyright (c) Microsoft Corporation. All rights reserved. *  Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ declare module 'windows-mutex' { export class Mutex { constructor(name: string); isActive(): boolean; release(): void; } } </ins>  No newline at end of file

import fs = require('fs'); import dialog = require('dialog'); import shell = require('shell'); import nls = require('vs/nls'); import {assign} from 'vs/base/common/objects'; import platform = require('vs/base/common/platform');

return setup(true); } <ins> function setupMutex() { try { var Mutex = (<any> require.__$__nodeRequire('windows-mutex')).Mutex; new Mutex('vscode'); } catch (e) { // noop } } </ins> // On some platforms we need to manually read from the global environment variables // and assign them to the process environment (e.g. when doubleclick app on Mac) getUserEnvironment()

return timebomb() .then(setupIPC) <ins> .then(ipcServer => { setupMutex(); return ipcServer; }) </ins> .then(ipcServer => main(ipcServer, userEnv)); }) .done(null, quit);
Change:
In Markdown preview, inline formats in single backticks (`) seems small sized in heading. Headings of different sizes have this problem in common. !
fyi
Yes, this collides with our font-size rule for the code block which is not ideal. I am happy to accept PRs for making markdown CSS better. The CSS is defined in
Still happens with our new markdown extension: !

Discussion:
font-weight: normal; } <ins> h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { font-size: inherit; line-height: auto; } </ins> a:hover { color: #4080D0; text-decoration: underline;
Change:
In the latest update (Version 0.10.3 (0.10.3) on Mac ), typing a number with a decimal autocompletes suggestions for other libraries in Example attached shows attempt to type "0.1" and "1.1" "Power0" autocompletes with ease from tweenMax Seems to be no way past this without removing quickSuggestions. TSD has : !
Yes, this is quite bad. Duplicate of

Discussion:
export interface ThemableDecorationRenderOptions { /** * Background color of the decoration. Use rgba() and define transparent background colors to play well with other decorations. <del> * Alternativly a color from the color registry an be [referenced](#ColorIdentifier). </del> <ins> * Alternatively a color from the color registry can be [referenced](#ThemeColor). </ins> */ backgroundColor?: string | ThemeColor;
Change:
Steps: extension that registers a document and a document range formatting provider open a test workspace that activates the extension and trigger a range format. You get:

Discussion:
renderedWordCount: wordCountResult.actualWordCount, lastRenderTime: Date.now(), isFullyRendered: wordCountResult.isFullString, <ins> originalMarkdown: part.content, </ins> }; wordCountResults[index] = wordCountResult; }

renderedWordCount: wordCountResult.actualWordCount, lastRenderTime: Date.now(), isFullyRendered: wordCountResult.isFullString, <ins> originalMarkdown: part.content, </ins> }; wordCountResults[index] = wordCountResult; } else if (!renderedPart.isFullyRendered && !wordCountResult) {

// Avoid doing progressive rendering for multiple markdown parts simultaneously else if (!hasRenderedOneMarkdownBlock && wordCountResults[index]) { const { value } = wordCountResults[index]; <del> result = this.renderMarkdown(new MarkdownString(value), element, templateData, true); </del> <ins> const part = partsToRender[index]; const originalMarkdown = 'originalMarkdown' in part ? part.originalMarkdown : undefined; const markdownToRender = new MarkdownString(value, originalMarkdown); result = this.renderMarkdown(markdownToRender, element, templateData, true); </ins> hasRenderedOneMarkdownBlock = true; }

import { IChatCommandButton, IChatContentReference, IChatFollowup, IChatProgressMessage, IChatResponseErrorDetails, IChatResponseProgressFileTreeData, IChatUsedContext, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; import { countWords } from 'vs/workbench/contrib/chat/common/chatWordCounter'; import { CodeBlockModelCollection } from './codeBlockModelCollection'; <ins> import { IMarkdownString } from 'vs/base/common/htmlContent'; </ins> export function isRequestVM(item: unknown): item is IChatRequestViewModel { return !!item && typeof item === 'object' && 'message' in item;

renderedWordCount: number; lastRenderTime: number; isFullyRendered: boolean; <ins> originalMarkdown: IMarkdownString; </ins> } export interface IChatProgressMessageRenderData {
Change:
A gradient snippet was recently to the CSS snippets. This has an incorrect syntax for the unprefixed version. When it was standardised the angles were changed so that the old "top" keyword (as used in the snippet) maps to "to bottom" in the standard syntax. "left" becomes to right, and so on. The current code will create a gradient that is flipped for browsers that use the unprefixed version.
duplicate of

Discussion:
"gradient": { "prefix": "gradient", "body": [ <del> "background-image: -moz-linear-gradient(top, ${start-color}, ${end-color});", </del> "background-image: -webkit-gradient(linear, left top, left bottom, from(${start-color}), to(${end-color}));", "background-image: -webkit-linear-gradient(top, ${start-color}, ${end-color});", <del> "background-image: linear-gradient(top, ${start-color}, ${end-color});" </del> <ins> "background-image: -moz-linear-gradient(top, ${start-color}, ${end-color});", "background-image: linear-gradient(to bottom, ${start-color}, ${end-color});" </ins> ], "description": "Set the 'background-image' property to a linear gradient" }
Change:
Some Markdown dialects support specifying the language when using triple backticks (c# using System; public class Program { private static DateTime Today = DateTime.Now; } Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam eget ante dapibus, egestas leo nec, convallis ligula. Proin tempor augue fermentum ex rhoncus, eget faucibus purus vehicula. Suspendisse cursus auctor quam, non tristique odio lacinia vel. Pellentesque cursus neque posuere vestibulum aliquam. Nam lacus odio, suscipit vel consequat sagittis, auctor nec nisl. Maecenas ac justo nunc. Aenean efficitur aliquam odio, sit amet consequat nisi congue at. Suspendisse pellentesque enim non tortor bibendum, ac posuere justo iaculis. Nullam vulputate diam non justo tempus aliquet vitae non turpis. </preThis is displayed as follows: ! One can clearly see that the parsing breaks down after handling the code section.
Hm, I suspect the issue here is the trailing # for C#, does it work when you pick "csharp" instead?
Yes, that's it. Changing it to "csharp" fixes the problem. edit: PR is a bit over my head at the moment :)

Discussion:
[/^(t|[ ]{4})[^ ].*$/, markdownTokenTypes.TOKEN_BLOCK], // code block (3 tilde) <del> [/^s*~{3}s*((?:w|[/-])+)?s*$/, { token: markdownTokenTypes.TOKEN_BLOCK, next: '@codeblock' }], </del> <ins> [/^s*~{3}s*((?:w|[/-#])+)?s*$/, { token: markdownTokenTypes.TOKEN_BLOCK, next: '@codeblock' }], </ins> // github style code blocks (with backticks and language) <del> [/^s*```s*((?:w|[/-])+)s*$/, { token: markdownTokenTypes.TOKEN_BLOCK, next: '@codeblockgh', nextEmbedded: '$1' }], </del> <ins> [/^s*```s*((?:w|[/-#])+)s*$/, { token: markdownTokenTypes.TOKEN_BLOCK, next: '@codeblockgh', nextEmbedded: '$1' }], </ins> // github style code blocks (with backticks but no language) [/^s*`{3}s*$/, { token: markdownTokenTypes.TOKEN_BLOCK, next: '@codeblock' }],
Change:
Issue was closed with commit . The commit the requested option to add an option for toggling visibility of the main menu, but restricted it to be shown only when running the Windows version. I can see why toggling the menu bar probably would either not work or just not make sense on OS X. Users running Linux window managers that have a menu bar per window would benefit from the setting as much as users of the Windows version though.

Discussion:
workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseMessagesAction, CloseMessagesAction.ID, CloseMessagesAction.LABEL, { primary: KeyCode.Escape }, [{ key: WorkbenchMessageService.GLOBAL_MESSAGES_SHOWING_CONTEXT }])); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseEditorAction, CloseEditorAction.ID, CloseEditorAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_W, win: { primary: KeyMod.CtrlCmd | KeyCode.F4, secondary: [KeyMod.CtrlCmd | KeyCode.KEY_W] } }), viewCategory); workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleFullScreenAction, ToggleFullScreenAction.ID, ToggleFullScreenAction.LABEL, { primary: KeyCode.F11, mac: { primary: KeyMod.CtrlCmd | KeyMod.WinCtrl | KeyCode.KEY_F } }), viewCategory); <del> if (platform.isWindows) { </del> <ins> if (platform.isWindows || platform.isLinux) { </ins> workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleMenuBarAction, ToggleMenuBarAction.ID, ToggleMenuBarAction.LABEL), viewCategory); }

output, __separator__(), fullscreen, <del> platform.isWindows ? toggleMenuBar : void 0, </del> <ins> platform.isWindows || platform.isLinux ? toggleMenuBar : void 0, </ins> __separator__(), splitEditor, toggleSidebar,

this.win.setFullScreen(willBeFullScreen); <del> // Windows: Hide the menu bar but still allow to bring it up by pressing the Alt key if (platform.isWindows) { </del> <ins> // Windows & Linux: Hide the menu bar but still allow to bring it up by pressing the Alt key if (platform.isWindows || platform.isLinux) { </ins> if (willBeFullScreen) { this.setMenuBarVisibility(false); } else {
Change:
Before Dec update: ! After: ! As you can see, while the property names are highlighted, the values are the same whether it is valid or not. The data is in the file, it is just not getting read, or the colour is no longer set, for whatever reason.
We changed the default themes to be more consistent with Visual studio where css attribute values are white (or red for string values) regardless if valid or not.
I think the validation if a value is correct or not should be done in a validator. Having this also in the tokenizer will make the tokenizer more complex and we will have to update on every spec change.
Marked as verified, which basically means it reverted to the previous behavior as the change was rejected.
The change was not rejected. It just needed extra changes in for SASS.
oh, I guess I wasn't seeing it because I was on the VS theme. I don't see CSS consistency with Sass on latest alpha: CSS ! Sass ! Less ! CSS ! Sass ! Less !
Looks like there's still an issue with functions then. Please open a new issue.
Adding back verified as the new issue is captured in

Discussion:
<string>#9CDCFE</string> </dict> </dict> <ins> <dict> <key>name</key> <string>CSS property value</string> <key>scope</key> <string>css.support.property-value, css.constant.rgb-value</string> <key>settings</key> <dict> <key>foreground</key> <string>#CE9178</string> </dict> </dict> </ins> </array> </dict> </plist>
Change:
Right now, this sort of ruins the feeling of an input with options -- it becomes more like an input followed by some toggles ! -- if you have the time
! there you go
I made you a reviewer
Nice solution. Merged.

Discussion:
import * as Bal from 'vs/base/browser/browser'; import * as dom from 'vs/base/browser/dom'; import * as browser from 'vs/base/browser/browserService'; <ins> import {IDisposable, disposeAll} from 'vs/base/common/lifecycle'; </ins> import {IHTMLContentElement} from 'vs/base/common/htmlContent'; import {renderHtml} from 'vs/base/browser/htmlContentRenderer'; import {IAction} from 'vs/base/common/actions';

private showValidationMessage: boolean; private state = 'idle'; private cachedHeight: number; <ins> private disposables: IDisposable[] = []; </ins> private _onDidChange = this._register(new Emitter<string>()); public onDidChange: Event<string> = this._onDidChange.event;

this.input.setAttribute('autocorrect', 'off'); this.input.setAttribute('autocapitalize', 'off'); this.input.setAttribute('spellcheck', 'false'); <ins> this.disposables.push( dom.addDisposableListener(this.input, dom.EventType.FOCUS, () => dom.addClass(this.element, 'synthetic-focus')), dom.addDisposableListener(this.input, dom.EventType.BLUR, () => dom.removeClass(this.element, 'synthetic-focus'))); </ins> if (this.options.flexibleHeight) { this.mirror = dom.append(wrapper, $('div.mirror'));

public dispose(): void { this._hideMessage(); <ins> this.disposables = disposeAll(this.disposables); </ins> this.element = null; this.input = null;

/* START Keyboard Focus Indication Styles */ .monaco-shell.vs [tabindex="0"]:focus, <del> .monaco-shell.vs select:focus, </del> <ins> .monaco-shell.vs .synthetic-focus, </ins> .monaco-shell.vs input[type="button"]:focus, .monaco-shell.vs input[type="submit"]:focus, .monaco-shell.vs input[type="text"]:focus, .monaco-shell.vs textarea:focus,

} .monaco-shell.vs-dark [tabindex="0"]:focus, <ins> .monaco-shell.vs-dark .synthetic-focus, </ins> .monaco-shell.vs-dark select:focus, .monaco-shell.vs-dark input[type="button"]:focus, .monaco-shell.vs-dark input[type="submit"]:focus,

} .monaco-shell.hc-black [tabindex="0"]:focus, <ins> .monaco-shell.hc-black .synthetic-focus, </ins> .monaco-shell.hc-black select:focus, .monaco-shell.hc-black input[type="button"]:focus, .monaco-shell.hc-black input[type="submit"]:focus,

outline-offset: -2px; } <ins> .monaco-shell .synthetic-focus :focus { outline: 0 !important; /* elements within widgets that draw synthetic-focus should never show focus */ } </ins> .monaco-shell .monaco-inputbox.info input[type="text"]:focus, .monaco-shell .monaco-inputbox.warning input[type="text"]:focus, .monaco-shell .monaco-inputbox.error input[type="text"]:focus {
Change:
Users that don't want automatic updates should still be given the opportunity to stay in the same version. ping

Discussion:
'description': nls.localize('zoomLevel', "Adjust the zoom level of the window. The original size is 0 and each increment above or below represents zooming 20% larger or smaller.") } } <ins> }); // Configuration: Update configurationRegistry.registerConfiguration({ 'id': 'update', 'order': 10, 'title': nls.localize('updateConfigurationTitle', "Update configuration"), 'type': 'object', 'properties': { 'update.channel': { 'type': 'string', 'enum': ['none', 'default'], 'default': 'default', 'description': nls.localize('updateChannel', "Configure the update channel to receive updates from. Requires a restart after change.") } } </ins> });  No newline at end of file

import electron = require('electron'); import platform = require('vs/base/common/platform'); import env = require('vs/workbench/electron-main/env'); <del> import storage = require('vs/workbench/electron-main/storage'); </del> import settings = require('vs/workbench/electron-main/settings'); import {Win32AutoUpdaterImpl} from 'vs/workbench/electron-main/win32/auto-updater.win32'; import {manager as Lifecycle} from 'vs/workbench/electron-main/lifecycle';

export class UpdateManager extends events.EventEmitter { <del> private static DEFAULT_UPDATE_CHANNEL = 'stable'; </del> private _state: State; private explicitState: ExplicitState; private _availableUpdate: IUpdate;

return; // already initialized } <del> const quality = env.quality || 'stable'; let feedUrl = UpdateManager.getUpdateFeedUrl(quality); </del> <ins> const channel = UpdateManager.getUpdateChannel(); const feedUrl = UpdateManager.getUpdateFeedUrl(channel); </ins> if (!feedUrl) { return; // updates not available } <del> this._channel = quality; </del> <ins> this._channel = channel; </ins> this._feedUrl = feedUrl; this.raw.setFeedURL(feedUrl);

this.emit('change'); } <ins> private static getUpdateChannel(): string { const channel = settings.manager.getValue('update.channel') || 'default'; return channel === 'none' ? null : env.quality; } </ins> private static getUpdateFeedUrl(channel: string): string { <ins> if (!channel) { return null; } </ins> if (platform.isLinux) { return null; }
Change:
Empty alt text on images is valid markdown, however it doesn't get highlighted correctly: !

Discussion:
// links [/{[^}]+}/, 'string.target'], <del> [/(!?[)((?:[^]]|@escapes)+)(]([^)]+))/, ['string.link', '', 'string.link']], [/(!?[)((?:[^]]|@escapes)+)(])/, 'string.link'], </del> <ins> [/(!?[)((?:[^]]|@escapes)*)(]([^)]+))/, ['string.link', '', 'string.link']], [/(!?[)((?:[^]]|@escapes)*)(])/, 'string.link'], </ins> // or html { include: 'html' },