monaco-editor-core 0.54.0-dev-20250930 → 0.54.0-dev-20251001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.54.0-dev-20250930(9242cdfd03eb811e8c480173cc80cceb513fc219)
3
+ * Version: 0.54.0-dev-20251001(9242cdfd03eb811e8c480173cc80cceb513fc219)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -52,6 +52,7 @@ export const basicMarkupHtmlTags = Object.freeze([
52
52
  'rp',
53
53
  'rt',
54
54
  'ruby',
55
+ 's',
55
56
  'samp',
56
57
  'small',
57
58
  'small',
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/domSanitize.ts","vs/base/browser/domSanitize.ts"],"names":[],"mappings":"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","file":"domSanitize.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Schemas } from '../common/network.js';\nimport { reset } from './dom.js';\n// eslint-disable-next-line no-restricted-imports\nimport dompurify from './dompurify/dompurify.js';\n\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n\t'a',\n\t'abbr',\n\t'b',\n\t'bdo',\n\t'blockquote',\n\t'br',\n\t'caption',\n\t'cite',\n\t'code',\n\t'col',\n\t'colgroup',\n\t'dd',\n\t'del',\n\t'details',\n\t'dfn',\n\t'div',\n\t'dl',\n\t'dt',\n\t'em',\n\t'figcaption',\n\t'figure',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'hr',\n\t'i',\n\t'img',\n\t'ins',\n\t'kbd',\n\t'label',\n\t'li',\n\t'mark',\n\t'ol',\n\t'p',\n\t'pre',\n\t'q',\n\t'rp',\n\t'rt',\n\t'ruby',\n\t'samp',\n\t'small',\n\t'small',\n\t'source',\n\t'span',\n\t'strike',\n\t'strong',\n\t'sub',\n\t'summary',\n\t'sup',\n\t'table',\n\t'tbody',\n\t'td',\n\t'tfoot',\n\t'th',\n\t'thead',\n\t'time',\n\t'tr',\n\t'tt',\n\t'u',\n\t'ul',\n\t'var',\n\t'video',\n\t'wbr',\n]);\n\nexport const defaultAllowedAttrs = Object.freeze([\n\t'href',\n\t'target',\n\t'src',\n\t'alt',\n\t'title',\n\t'for',\n\t'name',\n\t'role',\n\t'tabindex',\n\t'x-dispatch',\n\t'required',\n\t'checked',\n\t'placeholder',\n\t'type',\n\t'start',\n\t'width',\n\t'height',\n\t'align',\n]);\n\n\nconst fakeRelativeUrlProtocol = 'vscode-relative-path';\n\ninterface AllowedLinksConfig {\n\treadonly override: readonly string[] | '*';\n\treadonly allowRelativePaths: boolean;\n}\n\nfunction validateLink(value: string, allowedProtocols: AllowedLinksConfig): boolean {\n\tif (allowedProtocols.override === '*') {\n\t\treturn true; // allow all protocols\n\t}\n\n\ttry {\n\t\tconst url = new URL(value, fakeRelativeUrlProtocol + '://');\n\t\tif (allowedProtocols.override.includes(url.protocol.replace(/:$/, ''))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (allowedProtocols.allowRelativePaths\n\t\t\t&& url.protocol === fakeRelativeUrlProtocol + ':'\n\t\t\t&& !value.trim().toLowerCase().startsWith(fakeRelativeUrlProtocol)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nfunction hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {\n\tdompurify.addHook('afterSanitizeAttributes', (node) => {\n\t\t// check all href/src attributes for validity\n\t\tfor (const attr of ['href', 'src']) {\n\t\t\tif (node.hasAttribute(attr)) {\n\t\t\t\tconst attrValue = node.getAttribute(attr) as string;\n\t\t\t\tif (attr === 'href') {\n\t\t\t\t\tif (!attrValue.startsWith('#') && !validateLink(attrValue, allowedLinkProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t} else { // 'src'\n\t\t\t\t\tif (!validateLink(attrValue, allowedMediaProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Predicate that checks if an attribute should be kept or removed.\n *\n * @returns A boolean indicating whether the attribute should be kept or a string with the sanitized value (which implicitly keeps the attribute)\n */\nexport type SanitizeAttributePredicate = (node: Element, data: { readonly attrName: string; readonly attrValue: string }) => boolean | string;\n\nexport interface SanitizeAttributeRule {\n\treadonly attributeName: string;\n\tshouldKeep: SanitizeAttributePredicate;\n}\n\n\nexport interface DomSanitizerConfig {\n\t/**\n\t * Configured the allowed html tags.\n\t */\n\treadonly allowedTags?: {\n\t\treadonly override?: readonly string[];\n\t\treadonly augment?: readonly string[];\n\t};\n\n\t/**\n\t * Configured the allowed html attributes.\n\t */\n\treadonly allowedAttributes?: {\n\t\treadonly override?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t\treadonly augment?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t};\n\n\t/**\n\t * List of allowed protocols for `href` attributes.\n\t */\n\treadonly allowedLinkProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for links.\n\t */\n\treadonly allowRelativeLinkPaths?: boolean;\n\n\t/**\n\t * List of allowed protocols for `src` attributes.\n\t */\n\treadonly allowedMediaProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for media (images, videos, etc).\n\t */\n\treadonly allowRelativeMediaPaths?: boolean;\n\n\t/**\n\t * If set, replaces unsupported tags with their plaintext representation instead of removing them.\n\t *\n\t * For example, <p><bad>\"text\"</bad></p> becomes <p>\"<bad>text</bad>\"</p>.\n\t */\n\treadonly replaceWithPlaintext?: boolean;\n}\n\nconst defaultDomPurifyConfig = Object.freeze({\n\tALLOWED_TAGS: [...basicMarkupHtmlTags],\n\tALLOWED_ATTR: [...defaultAllowedAttrs],\n\t// We sanitize the src/href attributes later if needed\n\tALLOW_UNKNOWN_PROTOCOLS: true,\n} satisfies dompurify.Config);\n\n/**\n * Sanitizes an html string.\n *\n * @param untrusted The HTML string to sanitize.\n * @param config Optional configuration for sanitization. If not provided, defaults to a safe configuration.\n *\n * @returns A sanitized string of html.\n */\nexport function sanitizeHtml(untrusted: string, config?: DomSanitizerConfig): TrustedHTML {\n\treturn doSanitizeHtml(untrusted, config, 'trusted');\n}\n\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom'): DocumentFragment;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'trusted'): TrustedHTML;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom' | 'trusted'): TrustedHTML | DocumentFragment {\n\ttry {\n\t\tconst resolvedConfig: dompurify.Config = { ...defaultDomPurifyConfig };\n\n\t\tif (config?.allowedTags) {\n\t\t\tif (config.allowedTags.override) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...config.allowedTags.override];\n\t\t\t}\n\n\t\t\tif (config.allowedTags.augment) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...(resolvedConfig.ALLOWED_TAGS ?? []), ...config.allowedTags.augment];\n\t\t\t}\n\t\t}\n\n\t\tlet resolvedAttributes: Array<string | SanitizeAttributeRule> = [...defaultAllowedAttrs];\n\t\tif (config?.allowedAttributes) {\n\t\t\tif (config.allowedAttributes.override) {\n\t\t\t\tresolvedAttributes = [...config.allowedAttributes.override];\n\t\t\t}\n\n\t\t\tif (config.allowedAttributes.augment) {\n\t\t\t\tresolvedAttributes = [...resolvedAttributes, ...config.allowedAttributes.augment];\n\t\t\t}\n\t\t}\n\n\t\t// All attr names are lower-case in the sanitizer hooks\n\t\tresolvedAttributes = resolvedAttributes.map((attr): string | SanitizeAttributeRule => {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\treturn attr.toLowerCase();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tattributeName: attr.attributeName.toLowerCase(),\n\t\t\t\tshouldKeep: attr.shouldKeep,\n\t\t\t};\n\t\t});\n\n\t\tconst allowedAttrNames = new Set(resolvedAttributes.map(attr => typeof attr === 'string' ? attr : attr.attributeName));\n\t\tconst allowedAttrPredicates = new Map<string, SanitizeAttributeRule>();\n\t\tfor (const attr of resolvedAttributes) {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\t// New string attribute value clears previously set predicates\n\t\t\t\tallowedAttrPredicates.delete(attr);\n\t\t\t} else {\n\t\t\t\tallowedAttrPredicates.set(attr.attributeName, attr);\n\t\t\t}\n\t\t}\n\n\t\tresolvedConfig.ALLOWED_ATTR = Array.from(allowedAttrNames);\n\n\t\thookDomPurifyHrefAndSrcSanitizer(\n\t\t\t{\n\t\t\t\toverride: config?.allowedLinkProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeLinkPaths ?? false\n\t\t\t},\n\t\t\t{\n\t\t\t\toverride: config?.allowedMediaProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeMediaPaths ?? false\n\t\t\t});\n\n\t\tif (config?.replaceWithPlaintext) {\n\t\t\tdompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);\n\t\t}\n\n\t\tif (allowedAttrPredicates.size) {\n\t\t\tdompurify.addHook('uponSanitizeAttribute', (node, e) => {\n\t\t\t\tconst predicate = allowedAttrPredicates.get(e.attrName);\n\t\t\t\tif (predicate) {\n\t\t\t\t\tconst result = predicate.shouldKeep(node, e);\n\t\t\t\t\tif (typeof result === 'string') {\n\t\t\t\t\t\te.keepAttr = true;\n\t\t\t\t\t\te.attrValue = result;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.keepAttr = result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.keepAttr = allowedAttrNames.has(e.attrName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (outputType === 'dom') {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_DOM_FRAGMENT: true\n\t\t\t});\n\t\t} else {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_TRUSTED_TYPE: true\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdompurify.removeAllHooks();\n\t}\n}\n\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\nfunction replaceWithPlainTextHook(element: Element, data: dompurify.SanitizeElementHookEvent, _config: dompurify.Config) {\n\tif (!data.allowedTags[data.tagName] && data.tagName !== 'body') {\n\t\tconst replacement = convertTagToPlaintext(element);\n\t\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\t\t// Workaround for https://github.com/cure53/DOMPurify/issues/1005\n\t\t\t// The comment will be deleted in the next phase. However if we try to remove it now, it will cause\n\t\t\t// an exception. Instead we insert the text node before the comment.\n\t\t\telement.parentElement?.insertBefore(replacement, element);\n\t\t} else {\n\t\t\telement.parentElement?.replaceChild(replacement, element);\n\t\t}\n\t}\n}\n\nexport function convertTagToPlaintext(element: Element): DocumentFragment {\n\tlet startTagText: string;\n\tlet endTagText: string | undefined;\n\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\tstartTagText = `<!--${element.textContent}-->`;\n\t} else {\n\t\tconst tagName = element.tagName.toLowerCase();\n\t\tconst isSelfClosing = selfClosingTags.includes(tagName);\n\t\tconst attrString = element.attributes.length ?\n\t\t\t' ' + Array.from(element.attributes)\n\t\t\t\t.map(attr => `${attr.name}=\"${attr.value}\"`)\n\t\t\t\t.join(' ')\n\t\t\t: '';\n\t\tstartTagText = `<${tagName}${attrString}>`;\n\t\tif (!isSelfClosing) {\n\t\t\tendTagText = `</${tagName}>`;\n\t\t}\n\t}\n\n\tconst fragment = document.createDocumentFragment();\n\tconst textNode = element.ownerDocument.createTextNode(startTagText);\n\tfragment.appendChild(textNode);\n\twhile (element.firstChild) {\n\t\tfragment.appendChild(element.firstChild);\n\t}\n\n\tconst endTagTextNode = endTagText ? element.ownerDocument.createTextNode(endTagText) : undefined;\n\tif (endTagTextNode) {\n\t\tfragment.appendChild(endTagTextNode);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * Sanitizes the given `value` and reset the given `node` with it.\n */\nexport function safeSetInnerHtml(node: HTMLElement, untrusted: string, config?: DomSanitizerConfig): void {\n\tconst fragment = doSanitizeHtml(untrusted, config, 'dom');\n\treset(node, fragment);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Schemas } from '../common/network.js';\nimport { reset } from './dom.js';\n// eslint-disable-next-line no-restricted-imports\nimport dompurify from './dompurify/dompurify.js';\n\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n\t'a',\n\t'abbr',\n\t'b',\n\t'bdo',\n\t'blockquote',\n\t'br',\n\t'caption',\n\t'cite',\n\t'code',\n\t'col',\n\t'colgroup',\n\t'dd',\n\t'del',\n\t'details',\n\t'dfn',\n\t'div',\n\t'dl',\n\t'dt',\n\t'em',\n\t'figcaption',\n\t'figure',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'hr',\n\t'i',\n\t'img',\n\t'ins',\n\t'kbd',\n\t'label',\n\t'li',\n\t'mark',\n\t'ol',\n\t'p',\n\t'pre',\n\t'q',\n\t'rp',\n\t'rt',\n\t'ruby',\n\t'samp',\n\t'small',\n\t'small',\n\t'source',\n\t'span',\n\t'strike',\n\t'strong',\n\t'sub',\n\t'summary',\n\t'sup',\n\t'table',\n\t'tbody',\n\t'td',\n\t'tfoot',\n\t'th',\n\t'thead',\n\t'time',\n\t'tr',\n\t'tt',\n\t'u',\n\t'ul',\n\t'var',\n\t'video',\n\t'wbr',\n]);\n\nexport const defaultAllowedAttrs = Object.freeze([\n\t'href',\n\t'target',\n\t'src',\n\t'alt',\n\t'title',\n\t'for',\n\t'name',\n\t'role',\n\t'tabindex',\n\t'x-dispatch',\n\t'required',\n\t'checked',\n\t'placeholder',\n\t'type',\n\t'start',\n\t'width',\n\t'height',\n\t'align',\n]);\n\n\nconst fakeRelativeUrlProtocol = 'vscode-relative-path';\n\ninterface AllowedLinksConfig {\n\treadonly override: readonly string[] | '*';\n\treadonly allowRelativePaths: boolean;\n}\n\nfunction validateLink(value: string, allowedProtocols: AllowedLinksConfig): boolean {\n\tif (allowedProtocols.override === '*') {\n\t\treturn true; // allow all protocols\n\t}\n\n\ttry {\n\t\tconst url = new URL(value, fakeRelativeUrlProtocol + '://');\n\t\tif (allowedProtocols.override.includes(url.protocol.replace(/:$/, ''))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (allowedProtocols.allowRelativePaths\n\t\t\t&& url.protocol === fakeRelativeUrlProtocol + ':'\n\t\t\t&& !value.trim().toLowerCase().startsWith(fakeRelativeUrlProtocol)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nfunction hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {\n\tdompurify.addHook('afterSanitizeAttributes', (node) => {\n\t\t// check all href/src attributes for validity\n\t\tfor (const attr of ['href', 'src']) {\n\t\t\tif (node.hasAttribute(attr)) {\n\t\t\t\tconst attrValue = node.getAttribute(attr) as string;\n\t\t\t\tif (attr === 'href') {\n\t\t\t\t\tif (!attrValue.startsWith('#') && !validateLink(attrValue, allowedLinkProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t} else { // 'src'\n\t\t\t\t\tif (!validateLink(attrValue, allowedMediaProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Predicate that checks if an attribute should be kept or removed.\n *\n * @returns A boolean indicating whether the attribute should be kept or a string with the sanitized value (which implicitly keeps the attribute)\n */\nexport type SanitizeAttributePredicate = (node: Element, data: { readonly attrName: string; readonly attrValue: string }) => boolean | string;\n\nexport interface SanitizeAttributeRule {\n\treadonly attributeName: string;\n\tshouldKeep: SanitizeAttributePredicate;\n}\n\n\nexport interface DomSanitizerConfig {\n\t/**\n\t * Configured the allowed html tags.\n\t */\n\treadonly allowedTags?: {\n\t\treadonly override?: readonly string[];\n\t\treadonly augment?: readonly string[];\n\t};\n\n\t/**\n\t * Configured the allowed html attributes.\n\t */\n\treadonly allowedAttributes?: {\n\t\treadonly override?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t\treadonly augment?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t};\n\n\t/**\n\t * List of allowed protocols for `href` attributes.\n\t */\n\treadonly allowedLinkProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for links.\n\t */\n\treadonly allowRelativeLinkPaths?: boolean;\n\n\t/**\n\t * List of allowed protocols for `src` attributes.\n\t */\n\treadonly allowedMediaProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for media (images, videos, etc).\n\t */\n\treadonly allowRelativeMediaPaths?: boolean;\n\n\t/**\n\t * If set, replaces unsupported tags with their plaintext representation instead of removing them.\n\t *\n\t * For example, <p><bad>\"text\"</bad></p> becomes <p>\"<bad>text</bad>\"</p>.\n\t */\n\treadonly replaceWithPlaintext?: boolean;\n}\n\nconst defaultDomPurifyConfig = Object.freeze({\n\tALLOWED_TAGS: [...basicMarkupHtmlTags],\n\tALLOWED_ATTR: [...defaultAllowedAttrs],\n\t// We sanitize the src/href attributes later if needed\n\tALLOW_UNKNOWN_PROTOCOLS: true,\n} satisfies dompurify.Config);\n\n/**\n * Sanitizes an html string.\n *\n * @param untrusted The HTML string to sanitize.\n * @param config Optional configuration for sanitization. If not provided, defaults to a safe configuration.\n *\n * @returns A sanitized string of html.\n */\nexport function sanitizeHtml(untrusted: string, config?: DomSanitizerConfig): TrustedHTML {\n\treturn doSanitizeHtml(untrusted, config, 'trusted');\n}\n\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom'): DocumentFragment;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'trusted'): TrustedHTML;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom' | 'trusted'): TrustedHTML | DocumentFragment {\n\ttry {\n\t\tconst resolvedConfig: dompurify.Config = { ...defaultDomPurifyConfig };\n\n\t\tif (config?.allowedTags) {\n\t\t\tif (config.allowedTags.override) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...config.allowedTags.override];\n\t\t\t}\n\n\t\t\tif (config.allowedTags.augment) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...(resolvedConfig.ALLOWED_TAGS ?? []), ...config.allowedTags.augment];\n\t\t\t}\n\t\t}\n\n\t\tlet resolvedAttributes: Array<string | SanitizeAttributeRule> = [...defaultAllowedAttrs];\n\t\tif (config?.allowedAttributes) {\n\t\t\tif (config.allowedAttributes.override) {\n\t\t\t\tresolvedAttributes = [...config.allowedAttributes.override];\n\t\t\t}\n\n\t\t\tif (config.allowedAttributes.augment) {\n\t\t\t\tresolvedAttributes = [...resolvedAttributes, ...config.allowedAttributes.augment];\n\t\t\t}\n\t\t}\n\n\t\t// All attr names are lower-case in the sanitizer hooks\n\t\tresolvedAttributes = resolvedAttributes.map((attr): string | SanitizeAttributeRule => {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\treturn attr.toLowerCase();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tattributeName: attr.attributeName.toLowerCase(),\n\t\t\t\tshouldKeep: attr.shouldKeep,\n\t\t\t};\n\t\t});\n\n\t\tconst allowedAttrNames = new Set(resolvedAttributes.map(attr => typeof attr === 'string' ? attr : attr.attributeName));\n\t\tconst allowedAttrPredicates = new Map<string, SanitizeAttributeRule>();\n\t\tfor (const attr of resolvedAttributes) {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\t// New string attribute value clears previously set predicates\n\t\t\t\tallowedAttrPredicates.delete(attr);\n\t\t\t} else {\n\t\t\t\tallowedAttrPredicates.set(attr.attributeName, attr);\n\t\t\t}\n\t\t}\n\n\t\tresolvedConfig.ALLOWED_ATTR = Array.from(allowedAttrNames);\n\n\t\thookDomPurifyHrefAndSrcSanitizer(\n\t\t\t{\n\t\t\t\toverride: config?.allowedLinkProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeLinkPaths ?? false\n\t\t\t},\n\t\t\t{\n\t\t\t\toverride: config?.allowedMediaProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeMediaPaths ?? false\n\t\t\t});\n\n\t\tif (config?.replaceWithPlaintext) {\n\t\t\tdompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);\n\t\t}\n\n\t\tif (allowedAttrPredicates.size) {\n\t\t\tdompurify.addHook('uponSanitizeAttribute', (node, e) => {\n\t\t\t\tconst predicate = allowedAttrPredicates.get(e.attrName);\n\t\t\t\tif (predicate) {\n\t\t\t\t\tconst result = predicate.shouldKeep(node, e);\n\t\t\t\t\tif (typeof result === 'string') {\n\t\t\t\t\t\te.keepAttr = true;\n\t\t\t\t\t\te.attrValue = result;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.keepAttr = result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.keepAttr = allowedAttrNames.has(e.attrName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (outputType === 'dom') {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_DOM_FRAGMENT: true\n\t\t\t});\n\t\t} else {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_TRUSTED_TYPE: true\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdompurify.removeAllHooks();\n\t}\n}\n\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\nfunction replaceWithPlainTextHook(element: Element, data: dompurify.SanitizeElementHookEvent, _config: dompurify.Config) {\n\tif (!data.allowedTags[data.tagName] && data.tagName !== 'body') {\n\t\tconst replacement = convertTagToPlaintext(element);\n\t\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\t\t// Workaround for https://github.com/cure53/DOMPurify/issues/1005\n\t\t\t// The comment will be deleted in the next phase. However if we try to remove it now, it will cause\n\t\t\t// an exception. Instead we insert the text node before the comment.\n\t\t\telement.parentElement?.insertBefore(replacement, element);\n\t\t} else {\n\t\t\telement.parentElement?.replaceChild(replacement, element);\n\t\t}\n\t}\n}\n\nexport function convertTagToPlaintext(element: Element): DocumentFragment {\n\tlet startTagText: string;\n\tlet endTagText: string | undefined;\n\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\tstartTagText = `<!--${element.textContent}-->`;\n\t} else {\n\t\tconst tagName = element.tagName.toLowerCase();\n\t\tconst isSelfClosing = selfClosingTags.includes(tagName);\n\t\tconst attrString = element.attributes.length ?\n\t\t\t' ' + Array.from(element.attributes)\n\t\t\t\t.map(attr => `${attr.name}=\"${attr.value}\"`)\n\t\t\t\t.join(' ')\n\t\t\t: '';\n\t\tstartTagText = `<${tagName}${attrString}>`;\n\t\tif (!isSelfClosing) {\n\t\t\tendTagText = `</${tagName}>`;\n\t\t}\n\t}\n\n\tconst fragment = document.createDocumentFragment();\n\tconst textNode = element.ownerDocument.createTextNode(startTagText);\n\tfragment.appendChild(textNode);\n\twhile (element.firstChild) {\n\t\tfragment.appendChild(element.firstChild);\n\t}\n\n\tconst endTagTextNode = endTagText ? element.ownerDocument.createTextNode(endTagText) : undefined;\n\tif (endTagTextNode) {\n\t\tfragment.appendChild(endTagTextNode);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * Sanitizes the given `value` and reset the given `node` with it.\n */\nexport function safeSetInnerHtml(node: HTMLElement, untrusted: string, config?: DomSanitizerConfig): void {\n\tconst fragment = doSanitizeHtml(untrusted, config, 'dom');\n\treset(node, fragment);\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/browser/domSanitize.ts","vs/base/browser/domSanitize.ts"],"names":[],"mappings":"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","file":"domSanitize.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Schemas } from '../common/network.js';\nimport { reset } from './dom.js';\n// eslint-disable-next-line no-restricted-imports\nimport dompurify from './dompurify/dompurify.js';\n\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n\t'a',\n\t'abbr',\n\t'b',\n\t'bdo',\n\t'blockquote',\n\t'br',\n\t'caption',\n\t'cite',\n\t'code',\n\t'col',\n\t'colgroup',\n\t'dd',\n\t'del',\n\t'details',\n\t'dfn',\n\t'div',\n\t'dl',\n\t'dt',\n\t'em',\n\t'figcaption',\n\t'figure',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'hr',\n\t'i',\n\t'img',\n\t'ins',\n\t'kbd',\n\t'label',\n\t'li',\n\t'mark',\n\t'ol',\n\t'p',\n\t'pre',\n\t'q',\n\t'rp',\n\t'rt',\n\t'ruby',\n\t's',\n\t'samp',\n\t'small',\n\t'small',\n\t'source',\n\t'span',\n\t'strike',\n\t'strong',\n\t'sub',\n\t'summary',\n\t'sup',\n\t'table',\n\t'tbody',\n\t'td',\n\t'tfoot',\n\t'th',\n\t'thead',\n\t'time',\n\t'tr',\n\t'tt',\n\t'u',\n\t'ul',\n\t'var',\n\t'video',\n\t'wbr',\n]);\n\nexport const defaultAllowedAttrs = Object.freeze([\n\t'href',\n\t'target',\n\t'src',\n\t'alt',\n\t'title',\n\t'for',\n\t'name',\n\t'role',\n\t'tabindex',\n\t'x-dispatch',\n\t'required',\n\t'checked',\n\t'placeholder',\n\t'type',\n\t'start',\n\t'width',\n\t'height',\n\t'align',\n]);\n\n\nconst fakeRelativeUrlProtocol = 'vscode-relative-path';\n\ninterface AllowedLinksConfig {\n\treadonly override: readonly string[] | '*';\n\treadonly allowRelativePaths: boolean;\n}\n\nfunction validateLink(value: string, allowedProtocols: AllowedLinksConfig): boolean {\n\tif (allowedProtocols.override === '*') {\n\t\treturn true; // allow all protocols\n\t}\n\n\ttry {\n\t\tconst url = new URL(value, fakeRelativeUrlProtocol + '://');\n\t\tif (allowedProtocols.override.includes(url.protocol.replace(/:$/, ''))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (allowedProtocols.allowRelativePaths\n\t\t\t&& url.protocol === fakeRelativeUrlProtocol + ':'\n\t\t\t&& !value.trim().toLowerCase().startsWith(fakeRelativeUrlProtocol)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nfunction hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {\n\tdompurify.addHook('afterSanitizeAttributes', (node) => {\n\t\t// check all href/src attributes for validity\n\t\tfor (const attr of ['href', 'src']) {\n\t\t\tif (node.hasAttribute(attr)) {\n\t\t\t\tconst attrValue = node.getAttribute(attr) as string;\n\t\t\t\tif (attr === 'href') {\n\t\t\t\t\tif (!attrValue.startsWith('#') && !validateLink(attrValue, allowedLinkProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t} else { // 'src'\n\t\t\t\t\tif (!validateLink(attrValue, allowedMediaProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Predicate that checks if an attribute should be kept or removed.\n *\n * @returns A boolean indicating whether the attribute should be kept or a string with the sanitized value (which implicitly keeps the attribute)\n */\nexport type SanitizeAttributePredicate = (node: Element, data: { readonly attrName: string; readonly attrValue: string }) => boolean | string;\n\nexport interface SanitizeAttributeRule {\n\treadonly attributeName: string;\n\tshouldKeep: SanitizeAttributePredicate;\n}\n\n\nexport interface DomSanitizerConfig {\n\t/**\n\t * Configured the allowed html tags.\n\t */\n\treadonly allowedTags?: {\n\t\treadonly override?: readonly string[];\n\t\treadonly augment?: readonly string[];\n\t};\n\n\t/**\n\t * Configured the allowed html attributes.\n\t */\n\treadonly allowedAttributes?: {\n\t\treadonly override?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t\treadonly augment?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t};\n\n\t/**\n\t * List of allowed protocols for `href` attributes.\n\t */\n\treadonly allowedLinkProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for links.\n\t */\n\treadonly allowRelativeLinkPaths?: boolean;\n\n\t/**\n\t * List of allowed protocols for `src` attributes.\n\t */\n\treadonly allowedMediaProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for media (images, videos, etc).\n\t */\n\treadonly allowRelativeMediaPaths?: boolean;\n\n\t/**\n\t * If set, replaces unsupported tags with their plaintext representation instead of removing them.\n\t *\n\t * For example, <p><bad>\"text\"</bad></p> becomes <p>\"<bad>text</bad>\"</p>.\n\t */\n\treadonly replaceWithPlaintext?: boolean;\n}\n\nconst defaultDomPurifyConfig = Object.freeze({\n\tALLOWED_TAGS: [...basicMarkupHtmlTags],\n\tALLOWED_ATTR: [...defaultAllowedAttrs],\n\t// We sanitize the src/href attributes later if needed\n\tALLOW_UNKNOWN_PROTOCOLS: true,\n} satisfies dompurify.Config);\n\n/**\n * Sanitizes an html string.\n *\n * @param untrusted The HTML string to sanitize.\n * @param config Optional configuration for sanitization. If not provided, defaults to a safe configuration.\n *\n * @returns A sanitized string of html.\n */\nexport function sanitizeHtml(untrusted: string, config?: DomSanitizerConfig): TrustedHTML {\n\treturn doSanitizeHtml(untrusted, config, 'trusted');\n}\n\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom'): DocumentFragment;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'trusted'): TrustedHTML;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom' | 'trusted'): TrustedHTML | DocumentFragment {\n\ttry {\n\t\tconst resolvedConfig: dompurify.Config = { ...defaultDomPurifyConfig };\n\n\t\tif (config?.allowedTags) {\n\t\t\tif (config.allowedTags.override) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...config.allowedTags.override];\n\t\t\t}\n\n\t\t\tif (config.allowedTags.augment) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...(resolvedConfig.ALLOWED_TAGS ?? []), ...config.allowedTags.augment];\n\t\t\t}\n\t\t}\n\n\t\tlet resolvedAttributes: Array<string | SanitizeAttributeRule> = [...defaultAllowedAttrs];\n\t\tif (config?.allowedAttributes) {\n\t\t\tif (config.allowedAttributes.override) {\n\t\t\t\tresolvedAttributes = [...config.allowedAttributes.override];\n\t\t\t}\n\n\t\t\tif (config.allowedAttributes.augment) {\n\t\t\t\tresolvedAttributes = [...resolvedAttributes, ...config.allowedAttributes.augment];\n\t\t\t}\n\t\t}\n\n\t\t// All attr names are lower-case in the sanitizer hooks\n\t\tresolvedAttributes = resolvedAttributes.map((attr): string | SanitizeAttributeRule => {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\treturn attr.toLowerCase();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tattributeName: attr.attributeName.toLowerCase(),\n\t\t\t\tshouldKeep: attr.shouldKeep,\n\t\t\t};\n\t\t});\n\n\t\tconst allowedAttrNames = new Set(resolvedAttributes.map(attr => typeof attr === 'string' ? attr : attr.attributeName));\n\t\tconst allowedAttrPredicates = new Map<string, SanitizeAttributeRule>();\n\t\tfor (const attr of resolvedAttributes) {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\t// New string attribute value clears previously set predicates\n\t\t\t\tallowedAttrPredicates.delete(attr);\n\t\t\t} else {\n\t\t\t\tallowedAttrPredicates.set(attr.attributeName, attr);\n\t\t\t}\n\t\t}\n\n\t\tresolvedConfig.ALLOWED_ATTR = Array.from(allowedAttrNames);\n\n\t\thookDomPurifyHrefAndSrcSanitizer(\n\t\t\t{\n\t\t\t\toverride: config?.allowedLinkProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeLinkPaths ?? false\n\t\t\t},\n\t\t\t{\n\t\t\t\toverride: config?.allowedMediaProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeMediaPaths ?? false\n\t\t\t});\n\n\t\tif (config?.replaceWithPlaintext) {\n\t\t\tdompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);\n\t\t}\n\n\t\tif (allowedAttrPredicates.size) {\n\t\t\tdompurify.addHook('uponSanitizeAttribute', (node, e) => {\n\t\t\t\tconst predicate = allowedAttrPredicates.get(e.attrName);\n\t\t\t\tif (predicate) {\n\t\t\t\t\tconst result = predicate.shouldKeep(node, e);\n\t\t\t\t\tif (typeof result === 'string') {\n\t\t\t\t\t\te.keepAttr = true;\n\t\t\t\t\t\te.attrValue = result;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.keepAttr = result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.keepAttr = allowedAttrNames.has(e.attrName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (outputType === 'dom') {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_DOM_FRAGMENT: true\n\t\t\t});\n\t\t} else {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_TRUSTED_TYPE: true\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdompurify.removeAllHooks();\n\t}\n}\n\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\nfunction replaceWithPlainTextHook(element: Element, data: dompurify.SanitizeElementHookEvent, _config: dompurify.Config) {\n\tif (!data.allowedTags[data.tagName] && data.tagName !== 'body') {\n\t\tconst replacement = convertTagToPlaintext(element);\n\t\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\t\t// Workaround for https://github.com/cure53/DOMPurify/issues/1005\n\t\t\t// The comment will be deleted in the next phase. However if we try to remove it now, it will cause\n\t\t\t// an exception. Instead we insert the text node before the comment.\n\t\t\telement.parentElement?.insertBefore(replacement, element);\n\t\t} else {\n\t\t\telement.parentElement?.replaceChild(replacement, element);\n\t\t}\n\t}\n}\n\nexport function convertTagToPlaintext(element: Element): DocumentFragment {\n\tlet startTagText: string;\n\tlet endTagText: string | undefined;\n\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\tstartTagText = `<!--${element.textContent}-->`;\n\t} else {\n\t\tconst tagName = element.tagName.toLowerCase();\n\t\tconst isSelfClosing = selfClosingTags.includes(tagName);\n\t\tconst attrString = element.attributes.length ?\n\t\t\t' ' + Array.from(element.attributes)\n\t\t\t\t.map(attr => `${attr.name}=\"${attr.value}\"`)\n\t\t\t\t.join(' ')\n\t\t\t: '';\n\t\tstartTagText = `<${tagName}${attrString}>`;\n\t\tif (!isSelfClosing) {\n\t\t\tendTagText = `</${tagName}>`;\n\t\t}\n\t}\n\n\tconst fragment = document.createDocumentFragment();\n\tconst textNode = element.ownerDocument.createTextNode(startTagText);\n\tfragment.appendChild(textNode);\n\twhile (element.firstChild) {\n\t\tfragment.appendChild(element.firstChild);\n\t}\n\n\tconst endTagTextNode = endTagText ? element.ownerDocument.createTextNode(endTagText) : undefined;\n\tif (endTagTextNode) {\n\t\tfragment.appendChild(endTagTextNode);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * Sanitizes the given `value` and reset the given `node` with it.\n */\nexport function safeSetInnerHtml(node: HTMLElement, untrusted: string, config?: DomSanitizerConfig): void {\n\tconst fragment = doSanitizeHtml(untrusted, config, 'dom');\n\treset(node, fragment);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Schemas } from '../common/network.js';\nimport { reset } from './dom.js';\n// eslint-disable-next-line no-restricted-imports\nimport dompurify from './dompurify/dompurify.js';\n\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n\t'a',\n\t'abbr',\n\t'b',\n\t'bdo',\n\t'blockquote',\n\t'br',\n\t'caption',\n\t'cite',\n\t'code',\n\t'col',\n\t'colgroup',\n\t'dd',\n\t'del',\n\t'details',\n\t'dfn',\n\t'div',\n\t'dl',\n\t'dt',\n\t'em',\n\t'figcaption',\n\t'figure',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'hr',\n\t'i',\n\t'img',\n\t'ins',\n\t'kbd',\n\t'label',\n\t'li',\n\t'mark',\n\t'ol',\n\t'p',\n\t'pre',\n\t'q',\n\t'rp',\n\t'rt',\n\t'ruby',\n\t's',\n\t'samp',\n\t'small',\n\t'small',\n\t'source',\n\t'span',\n\t'strike',\n\t'strong',\n\t'sub',\n\t'summary',\n\t'sup',\n\t'table',\n\t'tbody',\n\t'td',\n\t'tfoot',\n\t'th',\n\t'thead',\n\t'time',\n\t'tr',\n\t'tt',\n\t'u',\n\t'ul',\n\t'var',\n\t'video',\n\t'wbr',\n]);\n\nexport const defaultAllowedAttrs = Object.freeze([\n\t'href',\n\t'target',\n\t'src',\n\t'alt',\n\t'title',\n\t'for',\n\t'name',\n\t'role',\n\t'tabindex',\n\t'x-dispatch',\n\t'required',\n\t'checked',\n\t'placeholder',\n\t'type',\n\t'start',\n\t'width',\n\t'height',\n\t'align',\n]);\n\n\nconst fakeRelativeUrlProtocol = 'vscode-relative-path';\n\ninterface AllowedLinksConfig {\n\treadonly override: readonly string[] | '*';\n\treadonly allowRelativePaths: boolean;\n}\n\nfunction validateLink(value: string, allowedProtocols: AllowedLinksConfig): boolean {\n\tif (allowedProtocols.override === '*') {\n\t\treturn true; // allow all protocols\n\t}\n\n\ttry {\n\t\tconst url = new URL(value, fakeRelativeUrlProtocol + '://');\n\t\tif (allowedProtocols.override.includes(url.protocol.replace(/:$/, ''))) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (allowedProtocols.allowRelativePaths\n\t\t\t&& url.protocol === fakeRelativeUrlProtocol + ':'\n\t\t\t&& !value.trim().toLowerCase().startsWith(fakeRelativeUrlProtocol)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nfunction hookDomPurifyHrefAndSrcSanitizer(allowedLinkProtocols: AllowedLinksConfig, allowedMediaProtocols: AllowedLinksConfig) {\n\tdompurify.addHook('afterSanitizeAttributes', (node) => {\n\t\t// check all href/src attributes for validity\n\t\tfor (const attr of ['href', 'src']) {\n\t\t\tif (node.hasAttribute(attr)) {\n\t\t\t\tconst attrValue = node.getAttribute(attr) as string;\n\t\t\t\tif (attr === 'href') {\n\t\t\t\t\tif (!attrValue.startsWith('#') && !validateLink(attrValue, allowedLinkProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t} else { // 'src'\n\t\t\t\t\tif (!validateLink(attrValue, allowedMediaProtocols)) {\n\t\t\t\t\t\tnode.removeAttribute(attr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * Predicate that checks if an attribute should be kept or removed.\n *\n * @returns A boolean indicating whether the attribute should be kept or a string with the sanitized value (which implicitly keeps the attribute)\n */\nexport type SanitizeAttributePredicate = (node: Element, data: { readonly attrName: string; readonly attrValue: string }) => boolean | string;\n\nexport interface SanitizeAttributeRule {\n\treadonly attributeName: string;\n\tshouldKeep: SanitizeAttributePredicate;\n}\n\n\nexport interface DomSanitizerConfig {\n\t/**\n\t * Configured the allowed html tags.\n\t */\n\treadonly allowedTags?: {\n\t\treadonly override?: readonly string[];\n\t\treadonly augment?: readonly string[];\n\t};\n\n\t/**\n\t * Configured the allowed html attributes.\n\t */\n\treadonly allowedAttributes?: {\n\t\treadonly override?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t\treadonly augment?: ReadonlyArray<string | SanitizeAttributeRule>;\n\t};\n\n\t/**\n\t * List of allowed protocols for `href` attributes.\n\t */\n\treadonly allowedLinkProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for links.\n\t */\n\treadonly allowRelativeLinkPaths?: boolean;\n\n\t/**\n\t * List of allowed protocols for `src` attributes.\n\t */\n\treadonly allowedMediaProtocols?: {\n\t\treadonly override?: readonly string[] | '*';\n\t};\n\n\t/**\n\t * If set, allows relative paths for media (images, videos, etc).\n\t */\n\treadonly allowRelativeMediaPaths?: boolean;\n\n\t/**\n\t * If set, replaces unsupported tags with their plaintext representation instead of removing them.\n\t *\n\t * For example, <p><bad>\"text\"</bad></p> becomes <p>\"<bad>text</bad>\"</p>.\n\t */\n\treadonly replaceWithPlaintext?: boolean;\n}\n\nconst defaultDomPurifyConfig = Object.freeze({\n\tALLOWED_TAGS: [...basicMarkupHtmlTags],\n\tALLOWED_ATTR: [...defaultAllowedAttrs],\n\t// We sanitize the src/href attributes later if needed\n\tALLOW_UNKNOWN_PROTOCOLS: true,\n} satisfies dompurify.Config);\n\n/**\n * Sanitizes an html string.\n *\n * @param untrusted The HTML string to sanitize.\n * @param config Optional configuration for sanitization. If not provided, defaults to a safe configuration.\n *\n * @returns A sanitized string of html.\n */\nexport function sanitizeHtml(untrusted: string, config?: DomSanitizerConfig): TrustedHTML {\n\treturn doSanitizeHtml(untrusted, config, 'trusted');\n}\n\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom'): DocumentFragment;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'trusted'): TrustedHTML;\nfunction doSanitizeHtml(untrusted: string, config: DomSanitizerConfig | undefined, outputType: 'dom' | 'trusted'): TrustedHTML | DocumentFragment {\n\ttry {\n\t\tconst resolvedConfig: dompurify.Config = { ...defaultDomPurifyConfig };\n\n\t\tif (config?.allowedTags) {\n\t\t\tif (config.allowedTags.override) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...config.allowedTags.override];\n\t\t\t}\n\n\t\t\tif (config.allowedTags.augment) {\n\t\t\t\tresolvedConfig.ALLOWED_TAGS = [...(resolvedConfig.ALLOWED_TAGS ?? []), ...config.allowedTags.augment];\n\t\t\t}\n\t\t}\n\n\t\tlet resolvedAttributes: Array<string | SanitizeAttributeRule> = [...defaultAllowedAttrs];\n\t\tif (config?.allowedAttributes) {\n\t\t\tif (config.allowedAttributes.override) {\n\t\t\t\tresolvedAttributes = [...config.allowedAttributes.override];\n\t\t\t}\n\n\t\t\tif (config.allowedAttributes.augment) {\n\t\t\t\tresolvedAttributes = [...resolvedAttributes, ...config.allowedAttributes.augment];\n\t\t\t}\n\t\t}\n\n\t\t// All attr names are lower-case in the sanitizer hooks\n\t\tresolvedAttributes = resolvedAttributes.map((attr): string | SanitizeAttributeRule => {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\treturn attr.toLowerCase();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tattributeName: attr.attributeName.toLowerCase(),\n\t\t\t\tshouldKeep: attr.shouldKeep,\n\t\t\t};\n\t\t});\n\n\t\tconst allowedAttrNames = new Set(resolvedAttributes.map(attr => typeof attr === 'string' ? attr : attr.attributeName));\n\t\tconst allowedAttrPredicates = new Map<string, SanitizeAttributeRule>();\n\t\tfor (const attr of resolvedAttributes) {\n\t\t\tif (typeof attr === 'string') {\n\t\t\t\t// New string attribute value clears previously set predicates\n\t\t\t\tallowedAttrPredicates.delete(attr);\n\t\t\t} else {\n\t\t\t\tallowedAttrPredicates.set(attr.attributeName, attr);\n\t\t\t}\n\t\t}\n\n\t\tresolvedConfig.ALLOWED_ATTR = Array.from(allowedAttrNames);\n\n\t\thookDomPurifyHrefAndSrcSanitizer(\n\t\t\t{\n\t\t\t\toverride: config?.allowedLinkProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeLinkPaths ?? false\n\t\t\t},\n\t\t\t{\n\t\t\t\toverride: config?.allowedMediaProtocols?.override ?? [Schemas.http, Schemas.https],\n\t\t\t\tallowRelativePaths: config?.allowRelativeMediaPaths ?? false\n\t\t\t});\n\n\t\tif (config?.replaceWithPlaintext) {\n\t\t\tdompurify.addHook('uponSanitizeElement', replaceWithPlainTextHook);\n\t\t}\n\n\t\tif (allowedAttrPredicates.size) {\n\t\t\tdompurify.addHook('uponSanitizeAttribute', (node, e) => {\n\t\t\t\tconst predicate = allowedAttrPredicates.get(e.attrName);\n\t\t\t\tif (predicate) {\n\t\t\t\t\tconst result = predicate.shouldKeep(node, e);\n\t\t\t\t\tif (typeof result === 'string') {\n\t\t\t\t\t\te.keepAttr = true;\n\t\t\t\t\t\te.attrValue = result;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.keepAttr = result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.keepAttr = allowedAttrNames.has(e.attrName);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (outputType === 'dom') {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_DOM_FRAGMENT: true\n\t\t\t});\n\t\t} else {\n\t\t\treturn dompurify.sanitize(untrusted, {\n\t\t\t\t...resolvedConfig,\n\t\t\t\tRETURN_TRUSTED_TYPE: true\n\t\t\t});\n\t\t}\n\t} finally {\n\t\tdompurify.removeAllHooks();\n\t}\n}\n\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\nfunction replaceWithPlainTextHook(element: Element, data: dompurify.SanitizeElementHookEvent, _config: dompurify.Config) {\n\tif (!data.allowedTags[data.tagName] && data.tagName !== 'body') {\n\t\tconst replacement = convertTagToPlaintext(element);\n\t\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\t\t// Workaround for https://github.com/cure53/DOMPurify/issues/1005\n\t\t\t// The comment will be deleted in the next phase. However if we try to remove it now, it will cause\n\t\t\t// an exception. Instead we insert the text node before the comment.\n\t\t\telement.parentElement?.insertBefore(replacement, element);\n\t\t} else {\n\t\t\telement.parentElement?.replaceChild(replacement, element);\n\t\t}\n\t}\n}\n\nexport function convertTagToPlaintext(element: Element): DocumentFragment {\n\tlet startTagText: string;\n\tlet endTagText: string | undefined;\n\tif (element.nodeType === Node.COMMENT_NODE) {\n\t\tstartTagText = `<!--${element.textContent}-->`;\n\t} else {\n\t\tconst tagName = element.tagName.toLowerCase();\n\t\tconst isSelfClosing = selfClosingTags.includes(tagName);\n\t\tconst attrString = element.attributes.length ?\n\t\t\t' ' + Array.from(element.attributes)\n\t\t\t\t.map(attr => `${attr.name}=\"${attr.value}\"`)\n\t\t\t\t.join(' ')\n\t\t\t: '';\n\t\tstartTagText = `<${tagName}${attrString}>`;\n\t\tif (!isSelfClosing) {\n\t\t\tendTagText = `</${tagName}>`;\n\t\t}\n\t}\n\n\tconst fragment = document.createDocumentFragment();\n\tconst textNode = element.ownerDocument.createTextNode(startTagText);\n\tfragment.appendChild(textNode);\n\twhile (element.firstChild) {\n\t\tfragment.appendChild(element.firstChild);\n\t}\n\n\tconst endTagTextNode = endTagText ? element.ownerDocument.createTextNode(endTagText) : undefined;\n\tif (endTagTextNode) {\n\t\tfragment.appendChild(endTagTextNode);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * Sanitizes the given `value` and reset the given `node` with it.\n */\nexport function safeSetInnerHtml(node: HTMLElement, untrusted: string, config?: DomSanitizerConfig): void {\n\tconst fragment = doSanitizeHtml(untrusted, config, 'dom');\n\treset(node, fragment);\n}\n"]}
@@ -162,6 +162,7 @@ let FoldingController = class FoldingController extends Disposable {
162
162
  this.localToDispose.add(this.hiddenRangeModel);
163
163
  this.localToDispose.add(this.hiddenRangeModel.onDidChange(hr => this.onHiddenRangesChanges(hr)));
164
164
  this.updateScheduler = new Delayer(this.updateDebounceInfo.get(model));
165
+ this.localToDispose.add(this.updateScheduler);
165
166
  this.cursorChangedScheduler = new RunOnceScheduler(() => this.revealCursor(), 200);
166
167
  this.localToDispose.add(this.cursorChangedScheduler);
167
168
  this.localToDispose.add(this.languageFeaturesService.foldingRangeProvider.onDidChange(() => this.onFoldingStrategyChanged()));
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/editor/contrib/folding/browser/folding.ts"],"names":[],"mappings":"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","file":"folding.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancelablePromise, createCancelablePromise, Delayer, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { illegalArgument, onUnexpectedError } from '../../../../base/common/errors.js';\nimport { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { escapeRegExpCharacters } from '../../../../base/common/strings.js';\nimport * as types from '../../../../base/common/types.js';\nimport './folding.css';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js';\nimport { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js';\nimport { IPosition } from '../../../common/core/position.js';\nimport { IRange } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { IEditorContribution, ScrollType } from '../../../common/editorCommon.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { IModelContentChangedEvent } from '../../../common/textModelEvents.js';\nimport { FoldingRange, FoldingRangeKind, FoldingRangeProvider } from '../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js';\nimport { CollapseMemento, FoldingModel, getNextFoldLine, getParentFoldLine as getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateForType, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp, toggleCollapseState } from './foldingModel.js';\nimport { HiddenRangeModel } from './hiddenRangeModel.js';\nimport { IndentRangeProvider } from './indentRangeProvider.js';\nimport * as nls from '../../../../nls.js';\nimport { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { FoldingDecorationProvider } from './foldingDecorations.js';\nimport { FoldingRegion, FoldingRegions, FoldRange, FoldSource, ILineRange } from './foldingRanges.js';\nimport { SyntaxRangeProvider } from './syntaxRangeProvider.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IModelService } from '../../../common/services/model.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nconst CONTEXT_FOLDING_ENABLED = new RawContextKey<boolean>('foldingEnabled', false);\n\nexport interface RangeProvider {\n\treadonly id: string;\n\tcompute(cancelationToken: CancellationToken): Promise<FoldingRegions | null>;\n\tdispose(): void;\n}\n\ninterface FoldingStateMemento {\n\tcollapsedRegions?: CollapseMemento;\n\tlineCount?: number;\n\tprovider?: string;\n\tfoldedImports?: boolean;\n}\n\nexport interface FoldingLimitReporter {\n\treadonly limit: number;\n\tupdate(computed: number, limited: number | false): void;\n}\n\nexport type FoldingRangeProviderSelector = (provider: FoldingRangeProvider[], document: ITextModel) => FoldingRangeProvider[] | undefined;\n\nexport class FoldingController extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.folding';\n\n\tpublic static get(editor: ICodeEditor): FoldingController | null {\n\t\treturn editor.getContribution<FoldingController>(FoldingController.ID);\n\t}\n\n\tprivate static _foldingRangeSelector: FoldingRangeProviderSelector | undefined;\n\n\tpublic static getFoldingRangeProviders(languageFeaturesService: ILanguageFeaturesService, model: ITextModel): FoldingRangeProvider[] {\n\t\tconst foldingRangeProviders = languageFeaturesService.foldingRangeProvider.ordered(model);\n\t\treturn (FoldingController._foldingRangeSelector?.(foldingRangeProviders, model)) ?? foldingRangeProviders;\n\t}\n\n\tprivate readonly editor: ICodeEditor;\n\tprivate _isEnabled: boolean;\n\tprivate _useFoldingProviders: boolean;\n\tprivate _unfoldOnClickAfterEndOfLine: boolean;\n\tprivate _restoringViewState: boolean;\n\tprivate _foldingImportsByDefault: boolean;\n\tprivate _currentModelHasFoldedImports: boolean;\n\n\tprivate readonly foldingDecorationProvider: FoldingDecorationProvider;\n\n\tprivate foldingModel: FoldingModel | null;\n\tprivate hiddenRangeModel: HiddenRangeModel | null;\n\n\tprivate rangeProvider: RangeProvider | null;\n\tprivate foldingRegionPromise: CancelablePromise<FoldingRegions | null> | null;\n\n\tprivate foldingModelPromise: Promise<FoldingModel | null> | null;\n\tprivate updateScheduler: Delayer<FoldingModel | null> | null;\n\tprivate readonly updateDebounceInfo: IFeatureDebounceInformation;\n\n\tprivate foldingEnabled: IContextKey<boolean>;\n\tprivate cursorChangedScheduler: RunOnceScheduler | null;\n\n\tprivate readonly localToDispose = this._register(new DisposableStore());\n\tprivate mouseDownInfo: { lineNumber: number; iconClicked: boolean } | null;\n\n\tpublic readonly _foldingLimitReporter: RangesLimitReporter;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextKeyService private readonly contextKeyService: IContextKeyService,\n\t\t@ILanguageConfigurationService private readonly languageConfigurationService: ILanguageConfigurationService,\n\t\t@INotificationService notificationService: INotificationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis.editor = editor;\n\n\t\tthis._foldingLimitReporter = this._register(new RangesLimitReporter(editor));\n\n\t\tconst options = this.editor.getOptions();\n\t\tthis._isEnabled = options.get(EditorOption.folding);\n\t\tthis._useFoldingProviders = options.get(EditorOption.foldingStrategy) !== 'indentation';\n\t\tthis._unfoldOnClickAfterEndOfLine = options.get(EditorOption.unfoldOnClickAfterEndOfLine);\n\t\tthis._restoringViewState = false;\n\t\tthis._currentModelHasFoldedImports = false;\n\t\tthis._foldingImportsByDefault = options.get(EditorOption.foldingImportsByDefault);\n\t\tthis.updateDebounceInfo = languageFeatureDebounceService.for(languageFeaturesService.foldingRangeProvider, 'Folding', { min: 200 });\n\n\t\tthis.foldingModel = null;\n\t\tthis.hiddenRangeModel = null;\n\t\tthis.rangeProvider = null;\n\t\tthis.foldingRegionPromise = null;\n\t\tthis.foldingModelPromise = null;\n\t\tthis.updateScheduler = null;\n\t\tthis.cursorChangedScheduler = null;\n\t\tthis.mouseDownInfo = null;\n\n\t\tthis.foldingDecorationProvider = new FoldingDecorationProvider(editor);\n\t\tthis.foldingDecorationProvider.showFoldingControls = options.get(EditorOption.showFoldingControls);\n\t\tthis.foldingDecorationProvider.showFoldingHighlights = options.get(EditorOption.foldingHighlight);\n\t\tthis.foldingEnabled = CONTEXT_FOLDING_ENABLED.bindTo(this.contextKeyService);\n\t\tthis.foldingEnabled.set(this._isEnabled);\n\n\t\tthis._register(this.editor.onDidChangeModel(() => this.onModelChanged()));\n\n\t\tthis._register(this.editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => {\n\t\t\tif (e.hasChanged(EditorOption.folding)) {\n\t\t\t\tthis._isEnabled = this.editor.getOptions().get(EditorOption.folding);\n\t\t\t\tthis.foldingEnabled.set(this._isEnabled);\n\t\t\t\tthis.onModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingMaximumRegions)) {\n\t\t\t\tthis.onModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.showFoldingControls) || e.hasChanged(EditorOption.foldingHighlight)) {\n\t\t\t\tconst options = this.editor.getOptions();\n\t\t\t\tthis.foldingDecorationProvider.showFoldingControls = options.get(EditorOption.showFoldingControls);\n\t\t\t\tthis.foldingDecorationProvider.showFoldingHighlights = options.get(EditorOption.foldingHighlight);\n\t\t\t\tthis.triggerFoldingModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingStrategy)) {\n\t\t\t\tthis._useFoldingProviders = this.editor.getOptions().get(EditorOption.foldingStrategy) !== 'indentation';\n\t\t\t\tthis.onFoldingStrategyChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.unfoldOnClickAfterEndOfLine)) {\n\t\t\t\tthis._unfoldOnClickAfterEndOfLine = this.editor.getOptions().get(EditorOption.unfoldOnClickAfterEndOfLine);\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingImportsByDefault)) {\n\t\t\t\tthis._foldingImportsByDefault = this.editor.getOptions().get(EditorOption.foldingImportsByDefault);\n\t\t\t}\n\t\t}));\n\t\tthis.onModelChanged();\n\t}\n\n\t/**\n\t * Store view state.\n\t */\n\tpublic saveViewState(): FoldingStateMemento | undefined {\n\t\tconst model = this.editor.getModel();\n\t\tif (!model || !this._isEnabled || model.isTooLargeForTokenization()) {\n\t\t\treturn {};\n\t\t}\n\t\tif (this.foldingModel) { // disposed ?\n\t\t\tconst collapsedRegions = this.foldingModel.getMemento();\n\t\t\tconst provider = this.rangeProvider ? this.rangeProvider.id : undefined;\n\t\t\treturn { collapsedRegions, lineCount: model.getLineCount(), provider, foldedImports: this._currentModelHasFoldedImports };\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Restore view state.\n\t */\n\tpublic restoreViewState(state: FoldingStateMemento): void {\n\t\tconst model = this.editor.getModel();\n\t\tif (!model || !this._isEnabled || model.isTooLargeForTokenization() || !this.hiddenRangeModel) {\n\t\t\treturn;\n\t\t}\n\t\tif (!state) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentModelHasFoldedImports = !!state.foldedImports;\n\t\tif (state.collapsedRegions && state.collapsedRegions.length > 0 && this.foldingModel) {\n\t\t\tthis._restoringViewState = true;\n\t\t\ttry {\n\t\t\t\tthis.foldingModel.applyMemento(state.collapsedRegions);\n\t\t\t} finally {\n\t\t\t\tthis._restoringViewState = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onModelChanged(): void {\n\t\tthis.localToDispose.clear();\n\n\t\tconst model = this.editor.getModel();\n\t\tif (!this._isEnabled || !model || model.isTooLargeForTokenization()) {\n\t\t\t// huge files get no view model, so they cannot support hidden areas\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentModelHasFoldedImports = false;\n\t\tthis.foldingModel = new FoldingModel(model, this.foldingDecorationProvider);\n\t\tthis.localToDispose.add(this.foldingModel);\n\n\t\tthis.hiddenRangeModel = new HiddenRangeModel(this.foldingModel);\n\t\tthis.localToDispose.add(this.hiddenRangeModel);\n\t\tthis.localToDispose.add(this.hiddenRangeModel.onDidChange(hr => this.onHiddenRangesChanges(hr)));\n\n\t\tthis.updateScheduler = new Delayer<FoldingModel>(this.updateDebounceInfo.get(model));\n\n\t\tthis.cursorChangedScheduler = new RunOnceScheduler(() => this.revealCursor(), 200);\n\t\tthis.localToDispose.add(this.cursorChangedScheduler);\n\t\tthis.localToDispose.add(this.languageFeaturesService.foldingRangeProvider.onDidChange(() => this.onFoldingStrategyChanged()));\n\t\tthis.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(() => this.onFoldingStrategyChanged())); // covers model language changes as well\n\t\tthis.localToDispose.add(this.editor.onDidChangeModelContent(e => this.onDidChangeModelContent(e)));\n\t\tthis.localToDispose.add(this.editor.onDidChangeCursorPosition(() => this.onCursorPositionChanged()));\n\t\tthis.localToDispose.add(this.editor.onMouseDown(e => this.onEditorMouseDown(e)));\n\t\tthis.localToDispose.add(this.editor.onMouseUp(e => this.onEditorMouseUp(e)));\n\t\tthis.localToDispose.add({\n\t\t\tdispose: () => {\n\t\t\t\tif (this.foldingRegionPromise) {\n\t\t\t\t\tthis.foldingRegionPromise.cancel();\n\t\t\t\t\tthis.foldingRegionPromise = null;\n\t\t\t\t}\n\t\t\t\tthis.updateScheduler?.cancel();\n\t\t\t\tthis.updateScheduler = null;\n\t\t\t\tthis.foldingModel = null;\n\t\t\t\tthis.foldingModelPromise = null;\n\t\t\t\tthis.hiddenRangeModel = null;\n\t\t\t\tthis.cursorChangedScheduler = null;\n\t\t\t\tthis.rangeProvider?.dispose();\n\t\t\t\tthis.rangeProvider = null;\n\t\t\t}\n\t\t});\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\tprivate onFoldingStrategyChanged() {\n\t\tthis.rangeProvider?.dispose();\n\t\tthis.rangeProvider = null;\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\tprivate getRangeProvider(editorModel: ITextModel): RangeProvider {\n\t\tif (this.rangeProvider) {\n\t\t\treturn this.rangeProvider;\n\t\t}\n\t\tconst indentRangeProvider = new IndentRangeProvider(editorModel, this.languageConfigurationService, this._foldingLimitReporter);\n\t\tthis.rangeProvider = indentRangeProvider; // fallback\n\t\tif (this._useFoldingProviders && this.foldingModel) {\n\t\t\tconst selectedProviders = FoldingController.getFoldingRangeProviders(this.languageFeaturesService, editorModel);\n\t\t\tif (selectedProviders.length > 0) {\n\t\t\t\tthis.rangeProvider = new SyntaxRangeProvider(editorModel, selectedProviders, () => this.triggerFoldingModelChanged(), this._foldingLimitReporter, indentRangeProvider);\n\t\t\t}\n\t\t}\n\t\treturn this.rangeProvider;\n\t}\n\n\tpublic getFoldingModel(): Promise<FoldingModel | null> | null {\n\t\treturn this.foldingModelPromise;\n\t}\n\n\tprivate onDidChangeModelContent(e: IModelContentChangedEvent) {\n\t\tthis.hiddenRangeModel?.notifyChangeModelContent(e);\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\n\tpublic triggerFoldingModelChanged() {\n\t\tif (this.updateScheduler) {\n\t\t\tif (this.foldingRegionPromise) {\n\t\t\t\tthis.foldingRegionPromise.cancel();\n\t\t\t\tthis.foldingRegionPromise = null;\n\t\t\t}\n\t\t\tthis.foldingModelPromise = this.updateScheduler.trigger(() => {\n\t\t\t\tconst foldingModel = this.foldingModel;\n\t\t\t\tif (!foldingModel) { // null if editor has been disposed, or folding turned off\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst sw = new StopWatch();\n\t\t\t\tconst provider = this.getRangeProvider(foldingModel.textModel);\n\t\t\t\tconst foldingRegionPromise = this.foldingRegionPromise = createCancelablePromise(token => provider.compute(token));\n\t\t\t\treturn foldingRegionPromise.then(foldingRanges => {\n\t\t\t\t\tif (foldingRanges && foldingRegionPromise === this.foldingRegionPromise) { // new request or cancelled in the meantime?\n\t\t\t\t\t\tlet scrollState: StableEditorScrollState | undefined;\n\n\t\t\t\t\t\tif (this._foldingImportsByDefault && !this._currentModelHasFoldedImports) {\n\t\t\t\t\t\t\tconst hasChanges = foldingRanges.setCollapsedAllOfType(FoldingRangeKind.Imports.value, true);\n\t\t\t\t\t\t\tif (hasChanges) {\n\t\t\t\t\t\t\t\tscrollState = StableEditorScrollState.capture(this.editor);\n\t\t\t\t\t\t\t\tthis._currentModelHasFoldedImports = hasChanges;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// some cursors might have moved into hidden regions, make sure they are in expanded regions\n\t\t\t\t\t\tconst selections = this.editor.getSelections();\n\t\t\t\t\t\tfoldingModel.update(foldingRanges, toSelectedLines(selections));\n\n\t\t\t\t\t\tscrollState?.restore(this.editor);\n\n\t\t\t\t\t\t// update debounce info\n\t\t\t\t\t\tconst newValue = this.updateDebounceInfo.update(foldingModel.textModel, sw.elapsed());\n\t\t\t\t\t\tif (this.updateScheduler) {\n\t\t\t\t\t\t\tthis.updateScheduler.defaultDelay = newValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn foldingModel;\n\t\t\t\t});\n\t\t\t}).then(undefined, (err) => {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate onHiddenRangesChanges(hiddenRanges: IRange[]) {\n\t\tif (this.hiddenRangeModel && hiddenRanges.length && !this._restoringViewState) {\n\t\t\tconst selections = this.editor.getSelections();\n\t\t\tif (selections) {\n\t\t\t\tif (this.hiddenRangeModel.adjustSelections(selections)) {\n\t\t\t\t\tthis.editor.setSelections(selections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.editor.setHiddenAreas(hiddenRanges, this);\n\t}\n\n\tprivate onCursorPositionChanged() {\n\t\tif (this.hiddenRangeModel && this.hiddenRangeModel.hasRanges()) {\n\t\t\tthis.cursorChangedScheduler!.schedule();\n\t\t}\n\t}\n\n\tprivate revealCursor() {\n\t\tconst foldingModel = this.getFoldingModel();\n\t\tif (!foldingModel) {\n\t\t\treturn;\n\t\t}\n\t\tfoldingModel.then(foldingModel => { // null is returned if folding got disabled in the meantime\n\t\t\tif (foldingModel) {\n\t\t\t\tconst selections = this.editor.getSelections();\n\t\t\t\tif (selections && selections.length > 0) {\n\t\t\t\t\tconst toToggle: FoldingRegion[] = [];\n\t\t\t\t\tfor (const selection of selections) {\n\t\t\t\t\t\tconst lineNumber = selection.selectionStartLineNumber;\n\t\t\t\t\t\tif (this.hiddenRangeModel && this.hiddenRangeModel.isHidden(lineNumber)) {\n\t\t\t\t\t\t\ttoToggle.push(...foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (toToggle.length) {\n\t\t\t\t\t\tfoldingModel.toggleCollapseState(toToggle);\n\t\t\t\t\t\tthis.reveal(selections[0].getPosition());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}).then(undefined, onUnexpectedError);\n\n\t}\n\n\tprivate onEditorMouseDown(e: IEditorMouseEvent): void {\n\t\tthis.mouseDownInfo = null;\n\n\n\t\tif (!this.hiddenRangeModel || !e.target || !e.target.range) {\n\t\t\treturn;\n\t\t}\n\t\tif (!e.event.leftButton && !e.event.middleButton) {\n\t\t\treturn;\n\t\t}\n\t\tconst range = e.target.range;\n\t\tlet iconClicked = false;\n\t\tswitch (e.target.type) {\n\t\t\tcase MouseTargetType.GUTTER_LINE_DECORATIONS: {\n\t\t\t\tconst data = e.target.detail;\n\t\t\t\tconst offsetLeftInGutter = e.target.element!.offsetLeft;\n\t\t\t\tconst gutterOffsetX = data.offsetX - offsetLeftInGutter;\n\n\t\t\t\t// const gutterOffsetX = data.offsetX - data.glyphMarginWidth - data.lineNumbersWidth - data.glyphMarginLeft;\n\n\t\t\t\t// TODO@joao TODO@alex TODO@martin this is such that we don't collide with dirty diff\n\t\t\t\tif (gutterOffsetX < 4) { // the whitespace between the border and the real folding icon border is 4px\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ticonClicked = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase MouseTargetType.CONTENT_EMPTY: {\n\t\t\t\tif (this._unfoldOnClickAfterEndOfLine && this.hiddenRangeModel.hasRanges()) {\n\t\t\t\t\tconst data = e.target.detail;\n\t\t\t\t\tif (!data.isAfterLines) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase MouseTargetType.CONTENT_TEXT: {\n\t\t\t\tif (this.hiddenRangeModel.hasRanges()) {\n\t\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\t\tif (model && range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tthis.mouseDownInfo = { lineNumber: range.startLineNumber, iconClicked };\n\t}\n\n\tprivate onEditorMouseUp(e: IEditorMouseEvent): void {\n\t\tconst foldingModel = this.foldingModel;\n\t\tif (!foldingModel || !this.mouseDownInfo || !e.target) {\n\t\t\treturn;\n\t\t}\n\t\tconst lineNumber = this.mouseDownInfo.lineNumber;\n\t\tconst iconClicked = this.mouseDownInfo.iconClicked;\n\n\t\tconst range = e.target.range;\n\t\tif (!range || range.startLineNumber !== lineNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iconClicked) {\n\t\t\tif (e.target.type !== MouseTargetType.GUTTER_LINE_DECORATIONS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tconst model = this.editor.getModel();\n\t\t\tif (!model || range.startColumn !== model.getLineMaxColumn(lineNumber)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst region = foldingModel.getRegionAtLine(lineNumber);\n\t\tif (region && region.startLineNumber === lineNumber) {\n\t\t\tconst isCollapsed = region.isCollapsed;\n\t\t\tif (iconClicked || isCollapsed) {\n\t\t\t\tconst surrounding = e.event.altKey;\n\t\t\t\tlet toToggle = [];\n\t\t\t\tif (surrounding) {\n\t\t\t\t\tconst filter = (otherRegion: FoldingRegion) => !otherRegion.containedBy(region) && !region.containedBy(otherRegion);\n\t\t\t\t\tconst toMaybeToggle = foldingModel.getRegionsInside(null, filter);\n\t\t\t\t\tfor (const r of toMaybeToggle) {\n\t\t\t\t\t\tif (r.isCollapsed) {\n\t\t\t\t\t\t\ttoToggle.push(r);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// if any surrounding regions are folded, unfold those. Otherwise, fold all surrounding\n\t\t\t\t\tif (toToggle.length === 0) {\n\t\t\t\t\t\ttoToggle = toMaybeToggle;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst recursive = e.event.middleButton || e.event.shiftKey;\n\t\t\t\t\tif (recursive) {\n\t\t\t\t\t\tfor (const r of foldingModel.getRegionsInside(region)) {\n\t\t\t\t\t\t\tif (r.isCollapsed === isCollapsed) {\n\t\t\t\t\t\t\t\ttoToggle.push(r);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// when recursive, first only collapse all children. If all are already folded or there are no children, also fold parent.\n\t\t\t\t\tif (isCollapsed || !recursive || toToggle.length === 0) {\n\t\t\t\t\t\ttoToggle.push(region);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfoldingModel.toggleCollapseState(toToggle);\n\t\t\t\tthis.reveal({ lineNumber, column: 1 });\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic reveal(position: IPosition): void {\n\t\tthis.editor.revealPositionInCenterIfOutsideViewport(position, ScrollType.Smooth);\n\t}\n}\n\nexport class RangesLimitReporter extends Disposable implements FoldingLimitReporter {\n\tconstructor(private readonly editor: ICodeEditor) {\n\t\tsuper();\n\t}\n\n\tpublic get limit() {\n\t\treturn this.editor.getOptions().get(EditorOption.foldingMaximumRegions);\n\t}\n\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\n}\n\nabstract class FoldingAction<T> extends EditorAction {\n\n\tabstract invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: T, languageConfigurationService: ILanguageConfigurationService): void;\n\n\tpublic override runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: T): void | Promise<void> {\n\t\tconst languageConfigurationService = accessor.get(ILanguageConfigurationService);\n\t\tconst foldingController = FoldingController.get(editor);\n\t\tif (!foldingController) {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingModelPromise = foldingController.getFoldingModel();\n\t\tif (foldingModelPromise) {\n\t\t\tthis.reportTelemetry(accessor, editor);\n\t\t\treturn foldingModelPromise.then(foldingModel => {\n\t\t\t\tif (foldingModel) {\n\t\t\t\t\tthis.invoke(foldingController, foldingModel, editor, args, languageConfigurationService);\n\t\t\t\t\tconst selection = editor.getSelection();\n\t\t\t\t\tif (selection) {\n\t\t\t\t\t\tfoldingController.reveal(selection.getStartPosition());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected getSelectedLines(editor: ICodeEditor) {\n\t\tconst selections = editor.getSelections();\n\t\treturn selections ? selections.map(s => s.startLineNumber) : [];\n\t}\n\n\tprotected getLineNumbers(args: FoldingArguments, editor: ICodeEditor) {\n\t\tif (args && args.selectionLines) {\n\t\t\treturn args.selectionLines.map(l => l + 1); // to 0-bases line numbers\n\t\t}\n\t\treturn this.getSelectedLines(editor);\n\t}\n\n\tpublic run(_accessor: ServicesAccessor, _editor: ICodeEditor): void {\n\t}\n}\n\nexport interface SelectedLines {\n\tstartsInside(startLine: number, endLine: number): boolean;\n}\n\nexport function toSelectedLines(selections: Selection[] | null): SelectedLines {\n\tif (!selections || selections.length === 0) {\n\t\treturn {\n\t\t\tstartsInside: () => false\n\t\t};\n\t}\n\treturn {\n\t\tstartsInside(startLine: number, endLine: number): boolean {\n\t\t\tfor (const s of selections) {\n\t\t\t\tconst line = s.startLineNumber;\n\t\t\t\tif (line >= startLine && line <= endLine) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t};\n}\n\ninterface FoldingArguments {\n\tlevels?: number;\n\tdirection?: 'up' | 'down';\n\tselectionLines?: number[];\n}\n\nfunction foldingArgumentsConstraint(args: any) {\n\tif (!types.isUndefined(args)) {\n\t\tif (!types.isObject(args)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst foldingArgs: FoldingArguments = args;\n\t\tif (!types.isUndefined(foldingArgs.levels) && !types.isNumber(foldingArgs.levels)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!types.isUndefined(foldingArgs.direction) && !types.isString(foldingArgs.direction)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!types.isUndefined(foldingArgs.selectionLines) && (!Array.isArray(foldingArgs.selectionLines) || !foldingArgs.selectionLines.every(types.isNumber))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nclass UnfoldAction extends FoldingAction<FoldingArguments> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfold',\n\t\t\tlabel: nls.localize2('unfoldAction.label', \"Unfold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.BracketRight,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.BracketRight\n\t\t\t\t},\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tdescription: 'Unfold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Unfold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t* 'levels': Number of levels to unfold. If not set, defaults to 1.\n\t\t\t\t\t\t* 'direction': If 'up', unfold given number of levels up otherwise unfolds down.\n\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint,\n\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t'type': 'object',\n\t\t\t\t\t\t\t'properties': {\n\t\t\t\t\t\t\t\t'levels': {\n\t\t\t\t\t\t\t\t\t'type': 'number',\n\t\t\t\t\t\t\t\t\t'default': 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'direction': {\n\t\t\t\t\t\t\t\t\t'type': 'string',\n\t\t\t\t\t\t\t\t\t'enum': ['up', 'down'],\n\t\t\t\t\t\t\t\t\t'default': 'down'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'selectionLines': {\n\t\t\t\t\t\t\t\t\t'type': 'array',\n\t\t\t\t\t\t\t\t\t'items': {\n\t\t\t\t\t\t\t\t\t\t'type': 'number'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: FoldingArguments): void {\n\t\tconst levels = args && args.levels || 1;\n\t\tconst lineNumbers = this.getLineNumbers(args, editor);\n\t\tif (args && args.direction === 'up') {\n\t\t\tsetCollapseStateLevelsUp(foldingModel, false, levels, lineNumbers);\n\t\t} else {\n\t\t\tsetCollapseStateLevelsDown(foldingModel, false, levels, lineNumbers);\n\t\t}\n\t}\n}\n\nclass UnFoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldRecursively',\n\t\t\tlabel: nls.localize2('unFoldRecursivelyAction.label', \"Unfold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.BracketRight),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, _args: any): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, false, Number.MAX_VALUE, this.getSelectedLines(editor));\n\t}\n}\n\nclass FoldAction extends FoldingAction<FoldingArguments> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.fold',\n\t\t\tlabel: nls.localize2('foldAction.label', \"Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.BracketLeft,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.BracketLeft\n\t\t\t\t},\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tdescription: 'Fold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Fold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold.\n\t\t\t\t\t\t\t* 'direction': If 'up', folds given number of levels up otherwise folds down.\n\t\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t\tIf no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead.\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint,\n\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t'type': 'object',\n\t\t\t\t\t\t\t'properties': {\n\t\t\t\t\t\t\t\t'levels': {\n\t\t\t\t\t\t\t\t\t'type': 'number',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'direction': {\n\t\t\t\t\t\t\t\t\t'type': 'string',\n\t\t\t\t\t\t\t\t\t'enum': ['up', 'down'],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'selectionLines': {\n\t\t\t\t\t\t\t\t\t'type': 'array',\n\t\t\t\t\t\t\t\t\t'items': {\n\t\t\t\t\t\t\t\t\t\t'type': 'number'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: FoldingArguments): void {\n\t\tconst lineNumbers = this.getLineNumbers(args, editor);\n\n\t\tconst levels = args && args.levels;\n\t\tconst direction = args && args.direction;\n\n\t\tif (typeof levels !== 'number' && typeof direction !== 'string') {\n\t\t\t// fold the region at the location or if already collapsed, the first uncollapsed parent instead.\n\t\t\tsetCollapseStateUp(foldingModel, true, lineNumbers);\n\t\t} else {\n\t\t\tif (direction === 'up') {\n\t\t\t\tsetCollapseStateLevelsUp(foldingModel, true, levels || 1, lineNumbers);\n\t\t\t} else {\n\t\t\t\tsetCollapseStateLevelsDown(foldingModel, true, levels || 1, lineNumbers);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nclass ToggleFoldAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleFold',\n\t\t\tlabel: nls.localize2('toggleFoldAction.label', \"Toggle Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyL),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\ttoggleCollapseState(foldingModel, 1, selectedLines);\n\t}\n}\n\n\nclass FoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldRecursively',\n\t\t\tlabel: nls.localize2('foldRecursivelyAction.label', \"Fold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.BracketLeft),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateLevelsDown(foldingModel, true, Number.MAX_VALUE, selectedLines);\n\t}\n}\n\n\nclass ToggleFoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleFoldRecursively',\n\t\t\tlabel: nls.localize2('toggleFoldRecursivelyAction.label', \"Toggle Fold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyL),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\ttoggleCollapseState(foldingModel, Number.MAX_VALUE, selectedLines);\n\t}\n}\n\n\nclass FoldAllBlockCommentsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllBlockComments',\n\t\t\tlabel: nls.localize2('foldAllBlockComments.label', \"Fold All Block Comments\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Slash),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Comment.value, true);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst comments = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).comments;\n\t\t\tif (comments && comments.blockCommentStartToken) {\n\t\t\t\tconst regExp = new RegExp('^\\\\s*' + escapeRegExpCharacters(comments.blockCommentStartToken));\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldAllRegionsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllMarkerRegions',\n\t\t\tlabel: nls.localize2('foldAllMarkerRegions.label', \"Fold All Regions\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit8),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, true);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst foldingRules = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).foldingRules;\n\t\t\tif (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n\t\t\t\tconst regExp = new RegExp(foldingRules.markers.start);\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass UnfoldAllRegionsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAllMarkerRegions',\n\t\t\tlabel: nls.localize2('unfoldAllMarkerRegions.label', \"Unfold All Regions\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit9),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, false);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst foldingRules = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).foldingRules;\n\t\t\tif (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n\t\t\t\tconst regExp = new RegExp(foldingRules.markers.start);\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, false);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldAllExceptAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllExcept',\n\t\t\tlabel: nls.localize2('foldAllExcept.label', \"Fold All Except Selected\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Minus),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateForRest(foldingModel, true, selectedLines);\n\t}\n\n}\n\nclass UnfoldAllExceptAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAllExcept',\n\t\t\tlabel: nls.localize2('unfoldAllExcept.label', \"Unfold All Except Selected\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Equal),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateForRest(foldingModel, false, selectedLines);\n\t}\n}\n\nclass FoldAllAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAll',\n\t\t\tlabel: nls.localize2('foldAllAction.label', \"Fold All\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit0),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, _editor: ICodeEditor): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, true);\n\t}\n}\n\nclass UnfoldAllAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAll',\n\t\t\tlabel: nls.localize2('unfoldAllAction.label', \"Unfold All\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyJ),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, _editor: ICodeEditor): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, false);\n\t}\n}\n\nclass FoldLevelAction extends FoldingAction<void> {\n\tprivate static readonly ID_PREFIX = 'editor.foldLevel';\n\tpublic static readonly ID = (level: number) => FoldLevelAction.ID_PREFIX + level;\n\n\tprivate getFoldingLevel() {\n\t\treturn parseInt(this.id.substr(FoldLevelAction.ID_PREFIX.length));\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tsetCollapseStateAtLevel(foldingModel, this.getFoldingLevel(), true, this.getSelectedLines(editor));\n\t}\n}\n\n/** Action to go to the parent fold of current line */\nclass GotoParentFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoParentFold',\n\t\t\tlabel: nls.localize2('gotoParentFold.label', \"Go to Parent Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getParentFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Action to go to the previous fold of current line */\nclass GotoPreviousFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoPreviousFold',\n\t\t\tlabel: nls.localize2('gotoPreviousFold.label', \"Go to Previous Folding Range\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getPreviousFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Action to go to the next fold of current line */\nclass GotoNextFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoNextFold',\n\t\t\tlabel: nls.localize2('gotoNextFold.label', \"Go to Next Folding Range\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getNextFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldRangeFromSelectionAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.createFoldingRangeFromSelection',\n\t\t\tlabel: nls.localize2('createManualFoldRange.label', \"Create Folding Range from Selection\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Comma),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst collapseRanges: FoldRange[] = [];\n\t\tconst selections = editor.getSelections();\n\t\tif (selections) {\n\t\t\tfor (const selection of selections) {\n\t\t\t\tlet endLineNumber = selection.endLineNumber;\n\t\t\t\tif (selection.endColumn === 1) {\n\t\t\t\t\t--endLineNumber;\n\t\t\t\t}\n\t\t\t\tif (endLineNumber > selection.startLineNumber) {\n\t\t\t\t\tcollapseRanges.push({\n\t\t\t\t\t\tstartLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tendLineNumber: endLineNumber,\n\t\t\t\t\t\ttype: undefined,\n\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\tsource: FoldSource.userDefined\n\t\t\t\t\t});\n\t\t\t\t\teditor.setSelection({\n\t\t\t\t\t\tstartLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\t\tendLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tendColumn: 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (collapseRanges.length > 0) {\n\t\t\t\tcollapseRanges.sort((a, b) => {\n\t\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t\t});\n\t\t\t\tconst newRanges = FoldingRegions.sanitizeAndMerge(foldingModel.regions, collapseRanges, editor.getModel()?.getLineCount());\n\t\t\t\tfoldingModel.updatePost(FoldingRegions.fromFoldRanges(newRanges));\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass RemoveFoldRangeFromSelectionAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.removeManualFoldingRanges',\n\t\t\tlabel: nls.localize2('removeManualFoldingRanges.label', \"Remove Manual Folding Ranges\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Period),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selections = editor.getSelections();\n\t\tif (selections) {\n\t\t\tconst ranges: ILineRange[] = [];\n\t\t\tfor (const selection of selections) {\n\t\t\t\tconst { startLineNumber, endLineNumber } = selection;\n\t\t\t\tranges.push(endLineNumber >= startLineNumber ? { startLineNumber, endLineNumber } : { endLineNumber, startLineNumber });\n\t\t\t}\n\t\t\tfoldingModel.removeManualRanges(ranges);\n\t\t\tfoldingController.triggerFoldingModelChanged();\n\t\t}\n\t}\n}\n\n\nclass ToggleImportFoldAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleImportFold',\n\t\t\tlabel: nls.localize2('toggleImportFold.label', \"Toggle Import Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tasync invoke(foldingController: FoldingController, foldingModel: FoldingModel): Promise<void> {\n\t\tconst regionsToToggle: FoldingRegion[] = [];\n\t\tconst regions = foldingModel.regions;\n\t\tfor (let i = regions.length - 1; i >= 0; i--) {\n\t\t\tif (regions.getType(i) === FoldingRangeKind.Imports.value) {\n\t\t\t\tregionsToToggle.push(regions.toRegion(i));\n\t\t\t}\n\t\t}\n\t\tfoldingModel.toggleCollapseState(regionsToToggle);\n\t\tfoldingController.triggerFoldingModelChanged();\n\t}\n}\n\n\nregisterEditorContribution(FoldingController.ID, FoldingController, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState`\nregisterEditorAction(UnfoldAction);\nregisterEditorAction(UnFoldRecursivelyAction);\nregisterEditorAction(FoldAction);\nregisterEditorAction(FoldRecursivelyAction);\nregisterEditorAction(ToggleFoldRecursivelyAction);\nregisterEditorAction(FoldAllAction);\nregisterEditorAction(UnfoldAllAction);\nregisterEditorAction(FoldAllBlockCommentsAction);\nregisterEditorAction(FoldAllRegionsAction);\nregisterEditorAction(UnfoldAllRegionsAction);\nregisterEditorAction(FoldAllExceptAction);\nregisterEditorAction(UnfoldAllExceptAction);\nregisterEditorAction(ToggleFoldAction);\nregisterEditorAction(GotoParentFoldAction);\nregisterEditorAction(GotoPreviousFoldAction);\nregisterEditorAction(GotoNextFoldAction);\nregisterEditorAction(FoldRangeFromSelectionAction);\nregisterEditorAction(RemoveFoldRangeFromSelectionAction);\nregisterEditorAction(ToggleImportFoldAction);\n\nfor (let i = 1; i <= 7; i++) {\n\tregisterInstantiatedEditorAction(\n\t\tnew FoldLevelAction({\n\t\t\tid: FoldLevelAction.ID(i),\n\t\t\tlabel: nls.localize2('foldLevelAction.label', \"Fold Level {0}\", i),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | (KeyCode.Digit0 + i)),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t})\n\t);\n}\n\nCommandsRegistry.registerCommand('_executeFoldingRangeProvider', async function (accessor, ...args) {\n\tconst [resource] = args;\n\tif (!(resource instanceof URI)) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst languageFeaturesService = accessor.get(ILanguageFeaturesService);\n\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst configurationService = accessor.get(IConfigurationService);\n\tif (!configurationService.getValue('editor.folding', { resource })) {\n\t\treturn [];\n\t}\n\n\tconst languageConfigurationService = accessor.get(ILanguageConfigurationService);\n\n\tconst strategy = configurationService.getValue('editor.foldingStrategy', { resource });\n\tconst foldingLimitReporter = {\n\t\tget limit() {\n\t\t\treturn <number>configurationService.getValue('editor.foldingMaximumRegions', { resource });\n\t\t},\n\t\tupdate: (computed: number, limited: number | false) => { }\n\t};\n\n\tconst indentRangeProvider = new IndentRangeProvider(model, languageConfigurationService, foldingLimitReporter);\n\tlet rangeProvider: RangeProvider = indentRangeProvider;\n\tif (strategy !== 'indentation') {\n\t\tconst providers = FoldingController.getFoldingRangeProviders(languageFeaturesService, model);\n\t\tif (providers.length) {\n\t\t\trangeProvider = new SyntaxRangeProvider(model, providers, () => { }, foldingLimitReporter, indentRangeProvider);\n\t\t}\n\t}\n\tconst ranges = await rangeProvider.compute(CancellationToken.None);\n\tconst result: FoldingRange[] = [];\n\ttry {\n\t\tif (ranges) {\n\t\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\t\tconst type = ranges.getType(i);\n\t\t\t\tresult.push({ start: ranges.getStartLineNumber(i), end: ranges.getEndLineNumber(i), kind: type ? FoldingRangeKind.fromValue(type) : undefined });\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t} finally {\n\t\trangeProvider.dispose();\n\t}\n});\n"]}
1
+ {"version":3,"sources":["vs/editor/contrib/folding/browser/folding.ts"],"names":[],"mappings":"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","file":"folding.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CancelablePromise, createCancelablePromise, Delayer, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { illegalArgument, onUnexpectedError } from '../../../../base/common/errors.js';\nimport { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { escapeRegExpCharacters } from '../../../../base/common/strings.js';\nimport * as types from '../../../../base/common/types.js';\nimport './folding.css';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from '../../../browser/editorExtensions.js';\nimport { ConfigurationChangedEvent, EditorOption } from '../../../common/config/editorOptions.js';\nimport { IPosition } from '../../../common/core/position.js';\nimport { IRange } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { IEditorContribution, ScrollType } from '../../../common/editorCommon.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { IModelContentChangedEvent } from '../../../common/textModelEvents.js';\nimport { FoldingRange, FoldingRangeKind, FoldingRangeProvider } from '../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js';\nimport { CollapseMemento, FoldingModel, getNextFoldLine, getParentFoldLine as getParentFoldLine, getPreviousFoldLine, setCollapseStateAtLevel, setCollapseStateForMatchingLines, setCollapseStateForRest, setCollapseStateForType, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateUp, toggleCollapseState } from './foldingModel.js';\nimport { HiddenRangeModel } from './hiddenRangeModel.js';\nimport { IndentRangeProvider } from './indentRangeProvider.js';\nimport * as nls from '../../../../nls.js';\nimport { IContextKey, IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { FoldingDecorationProvider } from './foldingDecorations.js';\nimport { FoldingRegion, FoldingRegions, FoldRange, FoldSource, ILineRange } from './foldingRanges.js';\nimport { SyntaxRangeProvider } from './syntaxRangeProvider.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IModelService } from '../../../common/services/model.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\n\nconst CONTEXT_FOLDING_ENABLED = new RawContextKey<boolean>('foldingEnabled', false);\n\nexport interface RangeProvider {\n\treadonly id: string;\n\tcompute(cancelationToken: CancellationToken): Promise<FoldingRegions | null>;\n\tdispose(): void;\n}\n\ninterface FoldingStateMemento {\n\tcollapsedRegions?: CollapseMemento;\n\tlineCount?: number;\n\tprovider?: string;\n\tfoldedImports?: boolean;\n}\n\nexport interface FoldingLimitReporter {\n\treadonly limit: number;\n\tupdate(computed: number, limited: number | false): void;\n}\n\nexport type FoldingRangeProviderSelector = (provider: FoldingRangeProvider[], document: ITextModel) => FoldingRangeProvider[] | undefined;\n\nexport class FoldingController extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.folding';\n\n\tpublic static get(editor: ICodeEditor): FoldingController | null {\n\t\treturn editor.getContribution<FoldingController>(FoldingController.ID);\n\t}\n\n\tprivate static _foldingRangeSelector: FoldingRangeProviderSelector | undefined;\n\n\tpublic static getFoldingRangeProviders(languageFeaturesService: ILanguageFeaturesService, model: ITextModel): FoldingRangeProvider[] {\n\t\tconst foldingRangeProviders = languageFeaturesService.foldingRangeProvider.ordered(model);\n\t\treturn (FoldingController._foldingRangeSelector?.(foldingRangeProviders, model)) ?? foldingRangeProviders;\n\t}\n\n\tprivate readonly editor: ICodeEditor;\n\tprivate _isEnabled: boolean;\n\tprivate _useFoldingProviders: boolean;\n\tprivate _unfoldOnClickAfterEndOfLine: boolean;\n\tprivate _restoringViewState: boolean;\n\tprivate _foldingImportsByDefault: boolean;\n\tprivate _currentModelHasFoldedImports: boolean;\n\n\tprivate readonly foldingDecorationProvider: FoldingDecorationProvider;\n\n\tprivate foldingModel: FoldingModel | null;\n\tprivate hiddenRangeModel: HiddenRangeModel | null;\n\n\tprivate rangeProvider: RangeProvider | null;\n\tprivate foldingRegionPromise: CancelablePromise<FoldingRegions | null> | null;\n\n\tprivate foldingModelPromise: Promise<FoldingModel | null> | null;\n\tprivate updateScheduler: Delayer<FoldingModel | null> | null;\n\tprivate readonly updateDebounceInfo: IFeatureDebounceInformation;\n\n\tprivate foldingEnabled: IContextKey<boolean>;\n\tprivate cursorChangedScheduler: RunOnceScheduler | null;\n\n\tprivate readonly localToDispose = this._register(new DisposableStore());\n\tprivate mouseDownInfo: { lineNumber: number; iconClicked: boolean } | null;\n\n\tpublic readonly _foldingLimitReporter: RangesLimitReporter;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IContextKeyService private readonly contextKeyService: IContextKeyService,\n\t\t@ILanguageConfigurationService private readonly languageConfigurationService: ILanguageConfigurationService,\n\t\t@INotificationService notificationService: INotificationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis.editor = editor;\n\n\t\tthis._foldingLimitReporter = this._register(new RangesLimitReporter(editor));\n\n\t\tconst options = this.editor.getOptions();\n\t\tthis._isEnabled = options.get(EditorOption.folding);\n\t\tthis._useFoldingProviders = options.get(EditorOption.foldingStrategy) !== 'indentation';\n\t\tthis._unfoldOnClickAfterEndOfLine = options.get(EditorOption.unfoldOnClickAfterEndOfLine);\n\t\tthis._restoringViewState = false;\n\t\tthis._currentModelHasFoldedImports = false;\n\t\tthis._foldingImportsByDefault = options.get(EditorOption.foldingImportsByDefault);\n\t\tthis.updateDebounceInfo = languageFeatureDebounceService.for(languageFeaturesService.foldingRangeProvider, 'Folding', { min: 200 });\n\n\t\tthis.foldingModel = null;\n\t\tthis.hiddenRangeModel = null;\n\t\tthis.rangeProvider = null;\n\t\tthis.foldingRegionPromise = null;\n\t\tthis.foldingModelPromise = null;\n\t\tthis.updateScheduler = null;\n\t\tthis.cursorChangedScheduler = null;\n\t\tthis.mouseDownInfo = null;\n\n\t\tthis.foldingDecorationProvider = new FoldingDecorationProvider(editor);\n\t\tthis.foldingDecorationProvider.showFoldingControls = options.get(EditorOption.showFoldingControls);\n\t\tthis.foldingDecorationProvider.showFoldingHighlights = options.get(EditorOption.foldingHighlight);\n\t\tthis.foldingEnabled = CONTEXT_FOLDING_ENABLED.bindTo(this.contextKeyService);\n\t\tthis.foldingEnabled.set(this._isEnabled);\n\n\t\tthis._register(this.editor.onDidChangeModel(() => this.onModelChanged()));\n\n\t\tthis._register(this.editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => {\n\t\t\tif (e.hasChanged(EditorOption.folding)) {\n\t\t\t\tthis._isEnabled = this.editor.getOptions().get(EditorOption.folding);\n\t\t\t\tthis.foldingEnabled.set(this._isEnabled);\n\t\t\t\tthis.onModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingMaximumRegions)) {\n\t\t\t\tthis.onModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.showFoldingControls) || e.hasChanged(EditorOption.foldingHighlight)) {\n\t\t\t\tconst options = this.editor.getOptions();\n\t\t\t\tthis.foldingDecorationProvider.showFoldingControls = options.get(EditorOption.showFoldingControls);\n\t\t\t\tthis.foldingDecorationProvider.showFoldingHighlights = options.get(EditorOption.foldingHighlight);\n\t\t\t\tthis.triggerFoldingModelChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingStrategy)) {\n\t\t\t\tthis._useFoldingProviders = this.editor.getOptions().get(EditorOption.foldingStrategy) !== 'indentation';\n\t\t\t\tthis.onFoldingStrategyChanged();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.unfoldOnClickAfterEndOfLine)) {\n\t\t\t\tthis._unfoldOnClickAfterEndOfLine = this.editor.getOptions().get(EditorOption.unfoldOnClickAfterEndOfLine);\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.foldingImportsByDefault)) {\n\t\t\t\tthis._foldingImportsByDefault = this.editor.getOptions().get(EditorOption.foldingImportsByDefault);\n\t\t\t}\n\t\t}));\n\t\tthis.onModelChanged();\n\t}\n\n\t/**\n\t * Store view state.\n\t */\n\tpublic saveViewState(): FoldingStateMemento | undefined {\n\t\tconst model = this.editor.getModel();\n\t\tif (!model || !this._isEnabled || model.isTooLargeForTokenization()) {\n\t\t\treturn {};\n\t\t}\n\t\tif (this.foldingModel) { // disposed ?\n\t\t\tconst collapsedRegions = this.foldingModel.getMemento();\n\t\t\tconst provider = this.rangeProvider ? this.rangeProvider.id : undefined;\n\t\t\treturn { collapsedRegions, lineCount: model.getLineCount(), provider, foldedImports: this._currentModelHasFoldedImports };\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Restore view state.\n\t */\n\tpublic restoreViewState(state: FoldingStateMemento): void {\n\t\tconst model = this.editor.getModel();\n\t\tif (!model || !this._isEnabled || model.isTooLargeForTokenization() || !this.hiddenRangeModel) {\n\t\t\treturn;\n\t\t}\n\t\tif (!state) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentModelHasFoldedImports = !!state.foldedImports;\n\t\tif (state.collapsedRegions && state.collapsedRegions.length > 0 && this.foldingModel) {\n\t\t\tthis._restoringViewState = true;\n\t\t\ttry {\n\t\t\t\tthis.foldingModel.applyMemento(state.collapsedRegions);\n\t\t\t} finally {\n\t\t\t\tthis._restoringViewState = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate onModelChanged(): void {\n\t\tthis.localToDispose.clear();\n\n\t\tconst model = this.editor.getModel();\n\t\tif (!this._isEnabled || !model || model.isTooLargeForTokenization()) {\n\t\t\t// huge files get no view model, so they cannot support hidden areas\n\t\t\treturn;\n\t\t}\n\n\t\tthis._currentModelHasFoldedImports = false;\n\t\tthis.foldingModel = new FoldingModel(model, this.foldingDecorationProvider);\n\t\tthis.localToDispose.add(this.foldingModel);\n\n\t\tthis.hiddenRangeModel = new HiddenRangeModel(this.foldingModel);\n\t\tthis.localToDispose.add(this.hiddenRangeModel);\n\t\tthis.localToDispose.add(this.hiddenRangeModel.onDidChange(hr => this.onHiddenRangesChanges(hr)));\n\n\t\tthis.updateScheduler = new Delayer<FoldingModel>(this.updateDebounceInfo.get(model));\n\t\tthis.localToDispose.add(this.updateScheduler);\n\n\t\tthis.cursorChangedScheduler = new RunOnceScheduler(() => this.revealCursor(), 200);\n\t\tthis.localToDispose.add(this.cursorChangedScheduler);\n\t\tthis.localToDispose.add(this.languageFeaturesService.foldingRangeProvider.onDidChange(() => this.onFoldingStrategyChanged()));\n\t\tthis.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(() => this.onFoldingStrategyChanged())); // covers model language changes as well\n\t\tthis.localToDispose.add(this.editor.onDidChangeModelContent(e => this.onDidChangeModelContent(e)));\n\t\tthis.localToDispose.add(this.editor.onDidChangeCursorPosition(() => this.onCursorPositionChanged()));\n\t\tthis.localToDispose.add(this.editor.onMouseDown(e => this.onEditorMouseDown(e)));\n\t\tthis.localToDispose.add(this.editor.onMouseUp(e => this.onEditorMouseUp(e)));\n\t\tthis.localToDispose.add({\n\t\t\tdispose: () => {\n\t\t\t\tif (this.foldingRegionPromise) {\n\t\t\t\t\tthis.foldingRegionPromise.cancel();\n\t\t\t\t\tthis.foldingRegionPromise = null;\n\t\t\t\t}\n\t\t\t\tthis.updateScheduler?.cancel();\n\t\t\t\tthis.updateScheduler = null;\n\t\t\t\tthis.foldingModel = null;\n\t\t\t\tthis.foldingModelPromise = null;\n\t\t\t\tthis.hiddenRangeModel = null;\n\t\t\t\tthis.cursorChangedScheduler = null;\n\t\t\t\tthis.rangeProvider?.dispose();\n\t\t\t\tthis.rangeProvider = null;\n\t\t\t}\n\t\t});\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\tprivate onFoldingStrategyChanged() {\n\t\tthis.rangeProvider?.dispose();\n\t\tthis.rangeProvider = null;\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\tprivate getRangeProvider(editorModel: ITextModel): RangeProvider {\n\t\tif (this.rangeProvider) {\n\t\t\treturn this.rangeProvider;\n\t\t}\n\t\tconst indentRangeProvider = new IndentRangeProvider(editorModel, this.languageConfigurationService, this._foldingLimitReporter);\n\t\tthis.rangeProvider = indentRangeProvider; // fallback\n\t\tif (this._useFoldingProviders && this.foldingModel) {\n\t\t\tconst selectedProviders = FoldingController.getFoldingRangeProviders(this.languageFeaturesService, editorModel);\n\t\t\tif (selectedProviders.length > 0) {\n\t\t\t\tthis.rangeProvider = new SyntaxRangeProvider(editorModel, selectedProviders, () => this.triggerFoldingModelChanged(), this._foldingLimitReporter, indentRangeProvider);\n\t\t\t}\n\t\t}\n\t\treturn this.rangeProvider;\n\t}\n\n\tpublic getFoldingModel(): Promise<FoldingModel | null> | null {\n\t\treturn this.foldingModelPromise;\n\t}\n\n\tprivate onDidChangeModelContent(e: IModelContentChangedEvent) {\n\t\tthis.hiddenRangeModel?.notifyChangeModelContent(e);\n\t\tthis.triggerFoldingModelChanged();\n\t}\n\n\n\tpublic triggerFoldingModelChanged() {\n\t\tif (this.updateScheduler) {\n\t\t\tif (this.foldingRegionPromise) {\n\t\t\t\tthis.foldingRegionPromise.cancel();\n\t\t\t\tthis.foldingRegionPromise = null;\n\t\t\t}\n\t\t\tthis.foldingModelPromise = this.updateScheduler.trigger(() => {\n\t\t\t\tconst foldingModel = this.foldingModel;\n\t\t\t\tif (!foldingModel) { // null if editor has been disposed, or folding turned off\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst sw = new StopWatch();\n\t\t\t\tconst provider = this.getRangeProvider(foldingModel.textModel);\n\t\t\t\tconst foldingRegionPromise = this.foldingRegionPromise = createCancelablePromise(token => provider.compute(token));\n\t\t\t\treturn foldingRegionPromise.then(foldingRanges => {\n\t\t\t\t\tif (foldingRanges && foldingRegionPromise === this.foldingRegionPromise) { // new request or cancelled in the meantime?\n\t\t\t\t\t\tlet scrollState: StableEditorScrollState | undefined;\n\n\t\t\t\t\t\tif (this._foldingImportsByDefault && !this._currentModelHasFoldedImports) {\n\t\t\t\t\t\t\tconst hasChanges = foldingRanges.setCollapsedAllOfType(FoldingRangeKind.Imports.value, true);\n\t\t\t\t\t\t\tif (hasChanges) {\n\t\t\t\t\t\t\t\tscrollState = StableEditorScrollState.capture(this.editor);\n\t\t\t\t\t\t\t\tthis._currentModelHasFoldedImports = hasChanges;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// some cursors might have moved into hidden regions, make sure they are in expanded regions\n\t\t\t\t\t\tconst selections = this.editor.getSelections();\n\t\t\t\t\t\tfoldingModel.update(foldingRanges, toSelectedLines(selections));\n\n\t\t\t\t\t\tscrollState?.restore(this.editor);\n\n\t\t\t\t\t\t// update debounce info\n\t\t\t\t\t\tconst newValue = this.updateDebounceInfo.update(foldingModel.textModel, sw.elapsed());\n\t\t\t\t\t\tif (this.updateScheduler) {\n\t\t\t\t\t\t\tthis.updateScheduler.defaultDelay = newValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn foldingModel;\n\t\t\t\t});\n\t\t\t}).then(undefined, (err) => {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t\treturn null;\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate onHiddenRangesChanges(hiddenRanges: IRange[]) {\n\t\tif (this.hiddenRangeModel && hiddenRanges.length && !this._restoringViewState) {\n\t\t\tconst selections = this.editor.getSelections();\n\t\t\tif (selections) {\n\t\t\t\tif (this.hiddenRangeModel.adjustSelections(selections)) {\n\t\t\t\t\tthis.editor.setSelections(selections);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.editor.setHiddenAreas(hiddenRanges, this);\n\t}\n\n\tprivate onCursorPositionChanged() {\n\t\tif (this.hiddenRangeModel && this.hiddenRangeModel.hasRanges()) {\n\t\t\tthis.cursorChangedScheduler!.schedule();\n\t\t}\n\t}\n\n\tprivate revealCursor() {\n\t\tconst foldingModel = this.getFoldingModel();\n\t\tif (!foldingModel) {\n\t\t\treturn;\n\t\t}\n\t\tfoldingModel.then(foldingModel => { // null is returned if folding got disabled in the meantime\n\t\t\tif (foldingModel) {\n\t\t\t\tconst selections = this.editor.getSelections();\n\t\t\t\tif (selections && selections.length > 0) {\n\t\t\t\t\tconst toToggle: FoldingRegion[] = [];\n\t\t\t\t\tfor (const selection of selections) {\n\t\t\t\t\t\tconst lineNumber = selection.selectionStartLineNumber;\n\t\t\t\t\t\tif (this.hiddenRangeModel && this.hiddenRangeModel.isHidden(lineNumber)) {\n\t\t\t\t\t\t\ttoToggle.push(...foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (toToggle.length) {\n\t\t\t\t\t\tfoldingModel.toggleCollapseState(toToggle);\n\t\t\t\t\t\tthis.reveal(selections[0].getPosition());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}).then(undefined, onUnexpectedError);\n\n\t}\n\n\tprivate onEditorMouseDown(e: IEditorMouseEvent): void {\n\t\tthis.mouseDownInfo = null;\n\n\n\t\tif (!this.hiddenRangeModel || !e.target || !e.target.range) {\n\t\t\treturn;\n\t\t}\n\t\tif (!e.event.leftButton && !e.event.middleButton) {\n\t\t\treturn;\n\t\t}\n\t\tconst range = e.target.range;\n\t\tlet iconClicked = false;\n\t\tswitch (e.target.type) {\n\t\t\tcase MouseTargetType.GUTTER_LINE_DECORATIONS: {\n\t\t\t\tconst data = e.target.detail;\n\t\t\t\tconst offsetLeftInGutter = e.target.element!.offsetLeft;\n\t\t\t\tconst gutterOffsetX = data.offsetX - offsetLeftInGutter;\n\n\t\t\t\t// const gutterOffsetX = data.offsetX - data.glyphMarginWidth - data.lineNumbersWidth - data.glyphMarginLeft;\n\n\t\t\t\t// TODO@joao TODO@alex TODO@martin this is such that we don't collide with dirty diff\n\t\t\t\tif (gutterOffsetX < 4) { // the whitespace between the border and the real folding icon border is 4px\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ticonClicked = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase MouseTargetType.CONTENT_EMPTY: {\n\t\t\t\tif (this._unfoldOnClickAfterEndOfLine && this.hiddenRangeModel.hasRanges()) {\n\t\t\t\t\tconst data = e.target.detail;\n\t\t\t\t\tif (!data.isAfterLines) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase MouseTargetType.CONTENT_TEXT: {\n\t\t\t\tif (this.hiddenRangeModel.hasRanges()) {\n\t\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\t\tif (model && range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\n\t\tthis.mouseDownInfo = { lineNumber: range.startLineNumber, iconClicked };\n\t}\n\n\tprivate onEditorMouseUp(e: IEditorMouseEvent): void {\n\t\tconst foldingModel = this.foldingModel;\n\t\tif (!foldingModel || !this.mouseDownInfo || !e.target) {\n\t\t\treturn;\n\t\t}\n\t\tconst lineNumber = this.mouseDownInfo.lineNumber;\n\t\tconst iconClicked = this.mouseDownInfo.iconClicked;\n\n\t\tconst range = e.target.range;\n\t\tif (!range || range.startLineNumber !== lineNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iconClicked) {\n\t\t\tif (e.target.type !== MouseTargetType.GUTTER_LINE_DECORATIONS) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tconst model = this.editor.getModel();\n\t\t\tif (!model || range.startColumn !== model.getLineMaxColumn(lineNumber)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst region = foldingModel.getRegionAtLine(lineNumber);\n\t\tif (region && region.startLineNumber === lineNumber) {\n\t\t\tconst isCollapsed = region.isCollapsed;\n\t\t\tif (iconClicked || isCollapsed) {\n\t\t\t\tconst surrounding = e.event.altKey;\n\t\t\t\tlet toToggle = [];\n\t\t\t\tif (surrounding) {\n\t\t\t\t\tconst filter = (otherRegion: FoldingRegion) => !otherRegion.containedBy(region) && !region.containedBy(otherRegion);\n\t\t\t\t\tconst toMaybeToggle = foldingModel.getRegionsInside(null, filter);\n\t\t\t\t\tfor (const r of toMaybeToggle) {\n\t\t\t\t\t\tif (r.isCollapsed) {\n\t\t\t\t\t\t\ttoToggle.push(r);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// if any surrounding regions are folded, unfold those. Otherwise, fold all surrounding\n\t\t\t\t\tif (toToggle.length === 0) {\n\t\t\t\t\t\ttoToggle = toMaybeToggle;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst recursive = e.event.middleButton || e.event.shiftKey;\n\t\t\t\t\tif (recursive) {\n\t\t\t\t\t\tfor (const r of foldingModel.getRegionsInside(region)) {\n\t\t\t\t\t\t\tif (r.isCollapsed === isCollapsed) {\n\t\t\t\t\t\t\t\ttoToggle.push(r);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// when recursive, first only collapse all children. If all are already folded or there are no children, also fold parent.\n\t\t\t\t\tif (isCollapsed || !recursive || toToggle.length === 0) {\n\t\t\t\t\t\ttoToggle.push(region);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfoldingModel.toggleCollapseState(toToggle);\n\t\t\t\tthis.reveal({ lineNumber, column: 1 });\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic reveal(position: IPosition): void {\n\t\tthis.editor.revealPositionInCenterIfOutsideViewport(position, ScrollType.Smooth);\n\t}\n}\n\nexport class RangesLimitReporter extends Disposable implements FoldingLimitReporter {\n\tconstructor(private readonly editor: ICodeEditor) {\n\t\tsuper();\n\t}\n\n\tpublic get limit() {\n\t\treturn this.editor.getOptions().get(EditorOption.foldingMaximumRegions);\n\t}\n\n\tprivate _onDidChange = this._register(new Emitter<void>());\n\n\tprivate _computed: number = 0;\n\tprivate _limited: number | false = false;\n\tpublic update(computed: number, limited: number | false) {\n\t\tif (computed !== this._computed || limited !== this._limited) {\n\t\t\tthis._computed = computed;\n\t\t\tthis._limited = limited;\n\t\t\tthis._onDidChange.fire();\n\t\t}\n\t}\n}\n\nabstract class FoldingAction<T> extends EditorAction {\n\n\tabstract invoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: T, languageConfigurationService: ILanguageConfigurationService): void;\n\n\tpublic override runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor, args: T): void | Promise<void> {\n\t\tconst languageConfigurationService = accessor.get(ILanguageConfigurationService);\n\t\tconst foldingController = FoldingController.get(editor);\n\t\tif (!foldingController) {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingModelPromise = foldingController.getFoldingModel();\n\t\tif (foldingModelPromise) {\n\t\t\tthis.reportTelemetry(accessor, editor);\n\t\t\treturn foldingModelPromise.then(foldingModel => {\n\t\t\t\tif (foldingModel) {\n\t\t\t\t\tthis.invoke(foldingController, foldingModel, editor, args, languageConfigurationService);\n\t\t\t\t\tconst selection = editor.getSelection();\n\t\t\t\t\tif (selection) {\n\t\t\t\t\t\tfoldingController.reveal(selection.getStartPosition());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprotected getSelectedLines(editor: ICodeEditor) {\n\t\tconst selections = editor.getSelections();\n\t\treturn selections ? selections.map(s => s.startLineNumber) : [];\n\t}\n\n\tprotected getLineNumbers(args: FoldingArguments, editor: ICodeEditor) {\n\t\tif (args && args.selectionLines) {\n\t\t\treturn args.selectionLines.map(l => l + 1); // to 0-bases line numbers\n\t\t}\n\t\treturn this.getSelectedLines(editor);\n\t}\n\n\tpublic run(_accessor: ServicesAccessor, _editor: ICodeEditor): void {\n\t}\n}\n\nexport interface SelectedLines {\n\tstartsInside(startLine: number, endLine: number): boolean;\n}\n\nexport function toSelectedLines(selections: Selection[] | null): SelectedLines {\n\tif (!selections || selections.length === 0) {\n\t\treturn {\n\t\t\tstartsInside: () => false\n\t\t};\n\t}\n\treturn {\n\t\tstartsInside(startLine: number, endLine: number): boolean {\n\t\t\tfor (const s of selections) {\n\t\t\t\tconst line = s.startLineNumber;\n\t\t\t\tif (line >= startLine && line <= endLine) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t};\n}\n\ninterface FoldingArguments {\n\tlevels?: number;\n\tdirection?: 'up' | 'down';\n\tselectionLines?: number[];\n}\n\nfunction foldingArgumentsConstraint(args: any) {\n\tif (!types.isUndefined(args)) {\n\t\tif (!types.isObject(args)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst foldingArgs: FoldingArguments = args;\n\t\tif (!types.isUndefined(foldingArgs.levels) && !types.isNumber(foldingArgs.levels)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!types.isUndefined(foldingArgs.direction) && !types.isString(foldingArgs.direction)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!types.isUndefined(foldingArgs.selectionLines) && (!Array.isArray(foldingArgs.selectionLines) || !foldingArgs.selectionLines.every(types.isNumber))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nclass UnfoldAction extends FoldingAction<FoldingArguments> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfold',\n\t\t\tlabel: nls.localize2('unfoldAction.label', \"Unfold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.BracketRight,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.BracketRight\n\t\t\t\t},\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tdescription: 'Unfold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Unfold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t* 'levels': Number of levels to unfold. If not set, defaults to 1.\n\t\t\t\t\t\t* 'direction': If 'up', unfold given number of levels up otherwise unfolds down.\n\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint,\n\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t'type': 'object',\n\t\t\t\t\t\t\t'properties': {\n\t\t\t\t\t\t\t\t'levels': {\n\t\t\t\t\t\t\t\t\t'type': 'number',\n\t\t\t\t\t\t\t\t\t'default': 1\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'direction': {\n\t\t\t\t\t\t\t\t\t'type': 'string',\n\t\t\t\t\t\t\t\t\t'enum': ['up', 'down'],\n\t\t\t\t\t\t\t\t\t'default': 'down'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'selectionLines': {\n\t\t\t\t\t\t\t\t\t'type': 'array',\n\t\t\t\t\t\t\t\t\t'items': {\n\t\t\t\t\t\t\t\t\t\t'type': 'number'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: FoldingArguments): void {\n\t\tconst levels = args && args.levels || 1;\n\t\tconst lineNumbers = this.getLineNumbers(args, editor);\n\t\tif (args && args.direction === 'up') {\n\t\t\tsetCollapseStateLevelsUp(foldingModel, false, levels, lineNumbers);\n\t\t} else {\n\t\t\tsetCollapseStateLevelsDown(foldingModel, false, levels, lineNumbers);\n\t\t}\n\t}\n}\n\nclass UnFoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldRecursively',\n\t\t\tlabel: nls.localize2('unFoldRecursivelyAction.label', \"Unfold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.BracketRight),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, _args: any): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, false, Number.MAX_VALUE, this.getSelectedLines(editor));\n\t}\n}\n\nclass FoldAction extends FoldingAction<FoldingArguments> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.fold',\n\t\t\tlabel: nls.localize2('foldAction.label', \"Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.BracketLeft,\n\t\t\t\tmac: {\n\t\t\t\t\tprimary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.BracketLeft\n\t\t\t\t},\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\tdescription: 'Fold the content in the editor',\n\t\t\t\targs: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Fold editor argument',\n\t\t\t\t\t\tdescription: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold.\n\t\t\t\t\t\t\t* 'direction': If 'up', folds given number of levels up otherwise folds down.\n\t\t\t\t\t\t\t* 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t\tIf no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead.\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tconstraint: foldingArgumentsConstraint,\n\t\t\t\t\t\tschema: {\n\t\t\t\t\t\t\t'type': 'object',\n\t\t\t\t\t\t\t'properties': {\n\t\t\t\t\t\t\t\t'levels': {\n\t\t\t\t\t\t\t\t\t'type': 'number',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'direction': {\n\t\t\t\t\t\t\t\t\t'type': 'string',\n\t\t\t\t\t\t\t\t\t'enum': ['up', 'down'],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'selectionLines': {\n\t\t\t\t\t\t\t\t\t'type': 'array',\n\t\t\t\t\t\t\t\t\t'items': {\n\t\t\t\t\t\t\t\t\t\t'type': 'number'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: FoldingArguments): void {\n\t\tconst lineNumbers = this.getLineNumbers(args, editor);\n\n\t\tconst levels = args && args.levels;\n\t\tconst direction = args && args.direction;\n\n\t\tif (typeof levels !== 'number' && typeof direction !== 'string') {\n\t\t\t// fold the region at the location or if already collapsed, the first uncollapsed parent instead.\n\t\t\tsetCollapseStateUp(foldingModel, true, lineNumbers);\n\t\t} else {\n\t\t\tif (direction === 'up') {\n\t\t\t\tsetCollapseStateLevelsUp(foldingModel, true, levels || 1, lineNumbers);\n\t\t\t} else {\n\t\t\t\tsetCollapseStateLevelsDown(foldingModel, true, levels || 1, lineNumbers);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nclass ToggleFoldAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleFold',\n\t\t\tlabel: nls.localize2('toggleFoldAction.label', \"Toggle Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyL),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\ttoggleCollapseState(foldingModel, 1, selectedLines);\n\t}\n}\n\n\nclass FoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldRecursively',\n\t\t\tlabel: nls.localize2('foldRecursivelyAction.label', \"Fold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.BracketLeft),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateLevelsDown(foldingModel, true, Number.MAX_VALUE, selectedLines);\n\t}\n}\n\n\nclass ToggleFoldRecursivelyAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleFoldRecursively',\n\t\t\tlabel: nls.localize2('toggleFoldRecursivelyAction.label', \"Toggle Fold Recursively\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyL),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\ttoggleCollapseState(foldingModel, Number.MAX_VALUE, selectedLines);\n\t}\n}\n\n\nclass FoldAllBlockCommentsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllBlockComments',\n\t\t\tlabel: nls.localize2('foldAllBlockComments.label', \"Fold All Block Comments\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Slash),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Comment.value, true);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst comments = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).comments;\n\t\t\tif (comments && comments.blockCommentStartToken) {\n\t\t\t\tconst regExp = new RegExp('^\\\\s*' + escapeRegExpCharacters(comments.blockCommentStartToken));\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldAllRegionsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllMarkerRegions',\n\t\t\tlabel: nls.localize2('foldAllMarkerRegions.label', \"Fold All Regions\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit8),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, true);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst foldingRules = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).foldingRules;\n\t\t\tif (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n\t\t\t\tconst regExp = new RegExp(foldingRules.markers.start);\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, true);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass UnfoldAllRegionsAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAllMarkerRegions',\n\t\t\tlabel: nls.localize2('unfoldAllMarkerRegions.label', \"Unfold All Regions\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit9),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor, args: void, languageConfigurationService: ILanguageConfigurationService): void {\n\t\tif (foldingModel.regions.hasTypes()) {\n\t\t\tsetCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, false);\n\t\t} else {\n\t\t\tconst editorModel = editor.getModel();\n\t\t\tif (!editorModel) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst foldingRules = languageConfigurationService.getLanguageConfiguration(editorModel.getLanguageId()).foldingRules;\n\t\t\tif (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n\t\t\t\tconst regExp = new RegExp(foldingRules.markers.start);\n\t\t\t\tsetCollapseStateForMatchingLines(foldingModel, regExp, false);\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldAllExceptAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAllExcept',\n\t\t\tlabel: nls.localize2('foldAllExcept.label', \"Fold All Except Selected\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Minus),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateForRest(foldingModel, true, selectedLines);\n\t}\n\n}\n\nclass UnfoldAllExceptAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAllExcept',\n\t\t\tlabel: nls.localize2('unfoldAllExcept.label', \"Unfold All Except Selected\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Equal),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tsetCollapseStateForRest(foldingModel, false, selectedLines);\n\t}\n}\n\nclass FoldAllAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.foldAll',\n\t\t\tlabel: nls.localize2('foldAllAction.label', \"Fold All\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Digit0),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, _editor: ICodeEditor): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, true);\n\t}\n}\n\nclass UnfoldAllAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.unfoldAll',\n\t\t\tlabel: nls.localize2('unfoldAllAction.label', \"Unfold All\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyJ),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, _editor: ICodeEditor): void {\n\t\tsetCollapseStateLevelsDown(foldingModel, false);\n\t}\n}\n\nclass FoldLevelAction extends FoldingAction<void> {\n\tprivate static readonly ID_PREFIX = 'editor.foldLevel';\n\tpublic static readonly ID = (level: number) => FoldLevelAction.ID_PREFIX + level;\n\n\tprivate getFoldingLevel() {\n\t\treturn parseInt(this.id.substr(FoldLevelAction.ID_PREFIX.length));\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tsetCollapseStateAtLevel(foldingModel, this.getFoldingLevel(), true, this.getSelectedLines(editor));\n\t}\n}\n\n/** Action to go to the parent fold of current line */\nclass GotoParentFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoParentFold',\n\t\t\tlabel: nls.localize2('gotoParentFold.label', \"Go to Parent Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getParentFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Action to go to the previous fold of current line */\nclass GotoPreviousFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoPreviousFold',\n\t\t\tlabel: nls.localize2('gotoPreviousFold.label', \"Go to Previous Folding Range\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getPreviousFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Action to go to the next fold of current line */\nclass GotoNextFoldAction extends FoldingAction<void> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.gotoNextFold',\n\t\t\tlabel: nls.localize2('gotoNextFold.label', \"Go to Next Folding Range\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selectedLines = this.getSelectedLines(editor);\n\t\tif (selectedLines.length > 0) {\n\t\t\tconst startLineNumber = getNextFoldLine(selectedLines[0], foldingModel);\n\t\t\tif (startLineNumber !== null) {\n\t\t\t\teditor.setSelection({\n\t\t\t\t\tstartLineNumber: startLineNumber,\n\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\tendLineNumber: startLineNumber,\n\t\t\t\t\tendColumn: 1\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass FoldRangeFromSelectionAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.createFoldingRangeFromSelection',\n\t\t\tlabel: nls.localize2('createManualFoldRange.label', \"Create Folding Range from Selection\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Comma),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(_foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst collapseRanges: FoldRange[] = [];\n\t\tconst selections = editor.getSelections();\n\t\tif (selections) {\n\t\t\tfor (const selection of selections) {\n\t\t\t\tlet endLineNumber = selection.endLineNumber;\n\t\t\t\tif (selection.endColumn === 1) {\n\t\t\t\t\t--endLineNumber;\n\t\t\t\t}\n\t\t\t\tif (endLineNumber > selection.startLineNumber) {\n\t\t\t\t\tcollapseRanges.push({\n\t\t\t\t\t\tstartLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tendLineNumber: endLineNumber,\n\t\t\t\t\t\ttype: undefined,\n\t\t\t\t\t\tisCollapsed: true,\n\t\t\t\t\t\tsource: FoldSource.userDefined\n\t\t\t\t\t});\n\t\t\t\t\teditor.setSelection({\n\t\t\t\t\t\tstartLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tstartColumn: 1,\n\t\t\t\t\t\tendLineNumber: selection.startLineNumber,\n\t\t\t\t\t\tendColumn: 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (collapseRanges.length > 0) {\n\t\t\t\tcollapseRanges.sort((a, b) => {\n\t\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t\t});\n\t\t\t\tconst newRanges = FoldingRegions.sanitizeAndMerge(foldingModel.regions, collapseRanges, editor.getModel()?.getLineCount());\n\t\t\t\tfoldingModel.updatePost(FoldingRegions.fromFoldRanges(newRanges));\n\t\t\t}\n\t\t}\n\t}\n}\n\nclass RemoveFoldRangeFromSelectionAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.removeManualFoldingRanges',\n\t\t\tlabel: nls.localize2('removeManualFoldingRanges.label', \"Remove Manual Folding Ranges\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.Period),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tinvoke(foldingController: FoldingController, foldingModel: FoldingModel, editor: ICodeEditor): void {\n\t\tconst selections = editor.getSelections();\n\t\tif (selections) {\n\t\t\tconst ranges: ILineRange[] = [];\n\t\t\tfor (const selection of selections) {\n\t\t\t\tconst { startLineNumber, endLineNumber } = selection;\n\t\t\t\tranges.push(endLineNumber >= startLineNumber ? { startLineNumber, endLineNumber } : { endLineNumber, startLineNumber });\n\t\t\t}\n\t\t\tfoldingModel.removeManualRanges(ranges);\n\t\t\tfoldingController.triggerFoldingModelChanged();\n\t\t}\n\t}\n}\n\n\nclass ToggleImportFoldAction extends FoldingAction<void> {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.toggleImportFold',\n\t\t\tlabel: nls.localize2('toggleImportFold.label', \"Toggle Import Fold\"),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t});\n\t}\n\n\tasync invoke(foldingController: FoldingController, foldingModel: FoldingModel): Promise<void> {\n\t\tconst regionsToToggle: FoldingRegion[] = [];\n\t\tconst regions = foldingModel.regions;\n\t\tfor (let i = regions.length - 1; i >= 0; i--) {\n\t\t\tif (regions.getType(i) === FoldingRangeKind.Imports.value) {\n\t\t\t\tregionsToToggle.push(regions.toRegion(i));\n\t\t\t}\n\t\t}\n\t\tfoldingModel.toggleCollapseState(regionsToToggle);\n\t\tfoldingController.triggerFoldingModelChanged();\n\t}\n}\n\n\nregisterEditorContribution(FoldingController.ID, FoldingController, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState`\nregisterEditorAction(UnfoldAction);\nregisterEditorAction(UnFoldRecursivelyAction);\nregisterEditorAction(FoldAction);\nregisterEditorAction(FoldRecursivelyAction);\nregisterEditorAction(ToggleFoldRecursivelyAction);\nregisterEditorAction(FoldAllAction);\nregisterEditorAction(UnfoldAllAction);\nregisterEditorAction(FoldAllBlockCommentsAction);\nregisterEditorAction(FoldAllRegionsAction);\nregisterEditorAction(UnfoldAllRegionsAction);\nregisterEditorAction(FoldAllExceptAction);\nregisterEditorAction(UnfoldAllExceptAction);\nregisterEditorAction(ToggleFoldAction);\nregisterEditorAction(GotoParentFoldAction);\nregisterEditorAction(GotoPreviousFoldAction);\nregisterEditorAction(GotoNextFoldAction);\nregisterEditorAction(FoldRangeFromSelectionAction);\nregisterEditorAction(RemoveFoldRangeFromSelectionAction);\nregisterEditorAction(ToggleImportFoldAction);\n\nfor (let i = 1; i <= 7; i++) {\n\tregisterInstantiatedEditorAction(\n\t\tnew FoldLevelAction({\n\t\t\tid: FoldLevelAction.ID(i),\n\t\t\tlabel: nls.localize2('foldLevelAction.label', \"Fold Level {0}\", i),\n\t\t\tprecondition: CONTEXT_FOLDING_ENABLED,\n\t\t\tkbOpts: {\n\t\t\t\tkbExpr: EditorContextKeys.editorTextFocus,\n\t\t\t\tprimary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | (KeyCode.Digit0 + i)),\n\t\t\t\tweight: KeybindingWeight.EditorContrib\n\t\t\t}\n\t\t})\n\t);\n}\n\nCommandsRegistry.registerCommand('_executeFoldingRangeProvider', async function (accessor, ...args) {\n\tconst [resource] = args;\n\tif (!(resource instanceof URI)) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst languageFeaturesService = accessor.get(ILanguageFeaturesService);\n\n\tconst model = accessor.get(IModelService).getModel(resource);\n\tif (!model) {\n\t\tthrow illegalArgument();\n\t}\n\n\tconst configurationService = accessor.get(IConfigurationService);\n\tif (!configurationService.getValue('editor.folding', { resource })) {\n\t\treturn [];\n\t}\n\n\tconst languageConfigurationService = accessor.get(ILanguageConfigurationService);\n\n\tconst strategy = configurationService.getValue('editor.foldingStrategy', { resource });\n\tconst foldingLimitReporter = {\n\t\tget limit() {\n\t\t\treturn <number>configurationService.getValue('editor.foldingMaximumRegions', { resource });\n\t\t},\n\t\tupdate: (computed: number, limited: number | false) => { }\n\t};\n\n\tconst indentRangeProvider = new IndentRangeProvider(model, languageConfigurationService, foldingLimitReporter);\n\tlet rangeProvider: RangeProvider = indentRangeProvider;\n\tif (strategy !== 'indentation') {\n\t\tconst providers = FoldingController.getFoldingRangeProviders(languageFeaturesService, model);\n\t\tif (providers.length) {\n\t\t\trangeProvider = new SyntaxRangeProvider(model, providers, () => { }, foldingLimitReporter, indentRangeProvider);\n\t\t}\n\t}\n\tconst ranges = await rangeProvider.compute(CancellationToken.None);\n\tconst result: FoldingRange[] = [];\n\ttry {\n\t\tif (ranges) {\n\t\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\t\tconst type = ranges.getType(i);\n\t\t\t\tresult.push({ start: ranges.getStartLineNumber(i), end: ranges.getEndLineNumber(i), kind: type ? FoldingRangeKind.fromValue(type) : undefined });\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t} finally {\n\t\trangeProvider.dispose();\n\t}\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "monaco-editor-core",
3
3
  "private": false,
4
- "version": "0.54.0-dev-20250930",
4
+ "version": "0.54.0-dev-20251001",
5
5
  "description": "A browser based code editor",
6
6
  "author": "Microsoft Corporation",
7
7
  "license": "MIT",
@@ -14,7 +14,7 @@
14
14
  "bugs": {
15
15
  "url": "https://github.com/microsoft/vscode/issues"
16
16
  },
17
- "vscodeCommitId": "50e37a458d877100ed90fe48f0319b88a8effd5a",
17
+ "vscodeCommitId": "7680230b2fe0f603a3a6a911a2805e171799484c",
18
18
  "dependencies": {
19
19
  "marked": "14.0.0",
20
20
  "dompurify": "3.1.7"