monaco-editor-core 0.54.0-dev-20251006 → 0.55.0-dev-20251007
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.
- package/esm/nls.messages.de.js +1 -1
- package/esm/nls.messages.es.js +1 -1
- package/esm/nls.messages.fr.js +1 -1
- package/esm/nls.messages.it.js +1 -1
- package/esm/nls.messages.ja.js +1 -1
- package/esm/nls.messages.ko.js +1 -1
- package/esm/nls.messages.ru.js +1 -1
- package/esm/nls.messages.zh-cn.js +1 -1
- package/esm/nls.messages.zh-tw.js +1 -1
- package/esm/vs/base/common/glob.js +1 -1
- package/esm/vs/base/common/glob.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +15 -0
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/map.js +0 -1
- package/esm/vs/base/common/map.js.map +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js +1 -1
- package/esm/vs/editor/browser/view/viewLayer.js.map +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +1 -2
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js.map +1 -1
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +29 -13
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/commands/common/commands.js.map +1 -1
- package/esm/vs/platform/instantiation/common/descriptors.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js +0 -5
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/log/common/logService.js.map +1 -1
- package/package.json +2 -2
- package/version.txt +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/viewLayer.ts","vs/editor/browser/view/viewLayer.ts"],"names":[],"mappings":"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","file":"viewLayer.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 { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport * as viewEvents from '../../common/viewEvents.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\n\n/**\n * Represents a visible line\n */\nexport interface IVisibleLine extends ILine {\n\tgetDomNode(): HTMLElement | null;\n\tsetDomNode(domNode: HTMLElement): void;\n\n\t/**\n\t * Return null if the HTML should not be touched.\n\t * Return the new HTML otherwise.\n\t */\n\trenderLine(lineNumber: number, deltaTop: number, lineHeight: number, viewportData: ViewportData, sb: StringBuilder): boolean;\n\n\t/**\n\t * Layout the line.\n\t */\n\tlayoutLine(lineNumber: number, deltaTop: number, lineHeight: number): void;\n}\n\nexport interface ILine {\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n}\n\nexport interface ILineFactory<T extends ILine> {\n\tcreateLine(): T;\n}\n\nexport class RenderedLinesCollection<T extends ILine> {\n\tprivate _lines!: T[];\n\tprivate _rendLineNumberStart!: number;\n\n\tconstructor(\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis._set(1, []);\n\t}\n\n\tpublic flush(): void {\n\t\tthis._set(1, []);\n\t}\n\n\t_set(rendLineNumberStart: number, lines: T[]): void {\n\t\tthis._lines = lines;\n\t\tthis._rendLineNumberStart = rendLineNumberStart;\n\t}\n\n\t_get(): { rendLineNumberStart: number; lines: T[] } {\n\t\treturn {\n\t\t\trendLineNumberStart: this._rendLineNumberStart,\n\t\t\tlines: this._lines\n\t\t};\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getStartLineNumber(): number {\n\t\treturn this._rendLineNumberStart;\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getEndLineNumber(): number {\n\t\treturn this._rendLineNumberStart + this._lines.length - 1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLine(lineNumber: number): T {\n\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\tif (lineIndex < 0 || lineIndex >= this._lines.length) {\n\t\t\tthrow new BugIndicatingError('Illegal value for lineNumber');\n\t\t}\n\t\treturn this._lines[lineIndex];\n\t}\n\n\t/**\n\t * @returns Lines that were removed from this collection\n\t */\n\tpublic onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t// deleting above the viewport\n\t\t\tconst deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\tthis._rendLineNumberStart -= deleteCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (deleteFromLineNumber > endLineNumber) {\n\t\t\t// deleted below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\t// Record what needs to be deleted\n\t\tlet deleteStartIndex = 0;\n\t\tlet deleteCount = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\n\t\t\tif (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n\t\t\t\t// this is a line to be deleted\n\t\t\t\tif (deleteCount === 0) {\n\t\t\t\t\t// this is the first line to be deleted\n\t\t\t\t\tdeleteStartIndex = lineIndex;\n\t\t\t\t\tdeleteCount = 1;\n\t\t\t\t} else {\n\t\t\t\t\tdeleteCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust this._rendLineNumberStart for lines deleted above\n\t\tif (deleteFromLineNumber < startLineNumber) {\n\t\t\t// Something was deleted above\n\t\t\tlet deleteAboveCount = 0;\n\n\t\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t\t// the entire deleted lines are above\n\t\t\t\tdeleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\t} else {\n\t\t\t\tdeleteAboveCount = startLineNumber - deleteFromLineNumber;\n\t\t\t}\n\n\t\t\tthis._rendLineNumberStart -= deleteAboveCount;\n\t\t}\n\n\t\tconst deleted = this._lines.splice(deleteStartIndex, deleteCount);\n\t\treturn deleted;\n\t}\n\n\tpublic onLinesChanged(changeFromLineNumber: number, changeCount: number): boolean {\n\t\tconst changeToLineNumber = changeFromLineNumber + changeCount - 1;\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet someoneNotified = false;\n\n\t\tfor (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n\t\t\tif (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n\t\t\t\t// Notify the line\n\t\t\t\tthis._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n\t\t\t\tsomeoneNotified = true;\n\t\t\t}\n\t\t}\n\n\t\treturn someoneNotified;\n\t}\n\n\tpublic onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (insertFromLineNumber <= startLineNumber) {\n\t\t\t// inserting above the viewport\n\t\t\tthis._rendLineNumberStart += insertCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertFromLineNumber > endLineNumber) {\n\t\t\t// inserting below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertCnt + insertFromLineNumber > endLineNumber) {\n\t\t\t// insert inside the viewport in such a way that all remaining lines are pushed outside\n\t\t\tconst deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n\t\t\treturn deleted;\n\t\t}\n\n\t\t// insert inside the viewport, push out some lines, but not all remaining lines\n\t\tconst newLines: T[] = [];\n\t\tfor (let i = 0; i < insertCnt; i++) {\n\t\t\tnewLines[i] = this._lineFactory.createLine();\n\t\t}\n\t\tconst insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n\t\tconst beforeLines = this._lines.slice(0, insertIndex);\n\t\tconst afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n\t\tconst deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n\n\t\tthis._lines = beforeLines.concat(newLines).concat(afterLines);\n\n\t\treturn deletedLines;\n\t}\n\n\tpublic onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number }[]): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet notifiedSomeone = false;\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst rng = ranges[i];\n\n\t\t\tif (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n\t\t\t\t// range outside viewport\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst from = Math.max(startLineNumber, rng.fromLineNumber);\n\t\t\tconst to = Math.min(endLineNumber, rng.toLineNumber);\n\n\t\t\tfor (let lineNumber = from; lineNumber <= to; lineNumber++) {\n\t\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\t\t\tthis._lines[lineIndex].onTokensChanged();\n\t\t\t\tnotifiedSomeone = true;\n\t\t\t}\n\t\t}\n\n\t\treturn notifiedSomeone;\n\t}\n}\n\nexport class VisibleLinesCollection<T extends IVisibleLine> {\n\n\tpublic readonly domNode: FastDomNode<HTMLElement>;\n\tprivate readonly _linesCollection: RenderedLinesCollection<T>;\n\n\tconstructor(\n\t\tprivate readonly _viewContext: ViewContext,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis.domNode = this._createDomNode();\n\t\tthis._linesCollection = new RenderedLinesCollection<T>(this._lineFactory);\n\t}\n\n\tprivate _createDomNode(): FastDomNode<HTMLElement> {\n\t\tconst domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('view-layer');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.domNode.setAttribute('role', 'presentation');\n\t\tdomNode.domNode.setAttribute('aria-hidden', 'true');\n\t\treturn domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent, flushDom?: boolean): boolean {\n\t\t// No need to clear the dom node because a full .innerHTML will occur in\n\t\t// ViewLayerRenderer._render, however the fallback mechanism in the\n\t\t// GPU renderer may cause this to be necessary as the .innerHTML call\n\t\t// may not happen depending on the new state, leaving stale DOM nodes\n\t\t// around.\n\t\tif (flushDom) {\n\t\t\tconst start = this._linesCollection.getStartLineNumber();\n\t\t\tconst end = this._linesCollection.getEndLineNumber();\n\t\t\tfor (let i = start; i <= end; i++) {\n\t\t\t\tthis._linesCollection.getLine(i).getDomNode()?.remove();\n\t\t\t}\n\t\t}\n\t\tthis._linesCollection.flush();\n\t\treturn true;\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._linesCollection.onLinesChanged(e.fromLineNumber, e.count);\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._linesCollection.onTokensChanged(e.ranges);\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getStartLineNumber(): number {\n\t\treturn this._linesCollection.getStartLineNumber();\n\t}\n\n\tpublic getEndLineNumber(): number {\n\t\treturn this._linesCollection.getEndLineNumber();\n\t}\n\n\tpublic getVisibleLine(lineNumber: number): T {\n\t\treturn this._linesCollection.getLine(lineNumber);\n\t}\n\n\tpublic renderLines(viewportData: ViewportData): void {\n\n\t\tconst inp = this._linesCollection._get();\n\n\t\tconst renderer = new ViewLayerRenderer<T>(this.domNode.domNode, this._lineFactory, viewportData, this._viewContext);\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inp.rendLineNumberStart,\n\t\t\tlines: inp.lines,\n\t\t\tlinesLength: inp.lines.length\n\t\t};\n\n\t\t// Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n\t\tconst resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n\n\t\tthis._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n\t}\n}\n\ninterface IRendererContext<T extends IVisibleLine> {\n\trendLineNumberStart: number;\n\tlines: T[];\n\tlinesLength: number;\n}\n\nclass ViewLayerRenderer<T extends IVisibleLine> {\n\n\tprivate static _ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value });\n\n\tconstructor(\n\t\tprivate readonly _domNode: HTMLElement,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t\tprivate readonly _viewportData: ViewportData,\n\t\tprivate readonly _viewContext: ViewContext\n\t) {\n\t}\n\n\tpublic render(inContext: IRendererContext<T>, startLineNumber: number, stopLineNumber: number, deltaTop: number[]): IRendererContext<T> {\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inContext.rendLineNumberStart,\n\t\t\tlines: inContext.lines.slice(0),\n\t\t\tlinesLength: inContext.linesLength\n\t\t};\n\n\t\tif ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n\t\t\t// There is no overlap whatsoever\n\t\t\tctx.rendLineNumberStart = startLineNumber;\n\t\t\tctx.linesLength = stopLineNumber - startLineNumber + 1;\n\t\t\tctx.lines = [];\n\t\t\tfor (let x = startLineNumber; x <= stopLineNumber; x++) {\n\t\t\t\tctx.lines[x - startLineNumber] = this._lineFactory.createLine();\n\t\t\t}\n\t\t\tthis._finishRendering(ctx, true, deltaTop);\n\t\t\treturn ctx;\n\t\t}\n\n\t\t// Update lines which will remain untouched\n\t\tthis._renderUntouchedLines(\n\t\t\tctx,\n\t\t\tMath.max(startLineNumber - ctx.rendLineNumberStart, 0),\n\t\t\tMath.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1),\n\t\t\tdeltaTop,\n\t\t\tstartLineNumber\n\t\t);\n\n\t\tif (ctx.rendLineNumberStart > startLineNumber) {\n\t\t\t// Insert lines before\n\t\t\tconst fromLineNumber = startLineNumber;\n\t\t\tconst toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\t\t} else if (ctx.rendLineNumberStart < startLineNumber) {\n\t\t\t// Remove lines before\n\t\t\tconst removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesBefore(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tctx.rendLineNumberStart = startLineNumber;\n\n\t\tif (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n\t\t\t// Insert lines after\n\t\t\tconst fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n\t\t\tconst toLineNumber = stopLineNumber;\n\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\n\t\t} else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n\t\t\t// Remove lines after\n\t\t\tconst fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n\t\t\tconst toLineNumber = ctx.linesLength - 1;\n\t\t\tconst removeCnt = toLineNumber - fromLineNumber + 1;\n\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesAfter(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tthis._finishRendering(ctx, false, deltaTop);\n\n\t\treturn ctx;\n\t}\n\n\tprivate _renderUntouchedLines(ctx: IRendererContext<T>, startIndex: number, endIndex: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\t\tconst lines = ctx.lines;\n\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tconst lineNumber = rendLineNumberStart + i;\n\t\t\tlines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN], this._lineHeightForLineNumber(lineNumber));\n\t\t}\n\t}\n\n\tprivate _insertLinesBefore(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = newLines.concat(ctx.lines);\n\t}\n\n\tprivate _removeLinesBefore(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(0, removeCount);\n\t}\n\n\tprivate _insertLinesAfter(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = ctx.lines.concat(newLines);\n\t}\n\n\tprivate _removeLinesAfter(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tconst removeIndex = ctx.linesLength - removeCount;\n\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(removeIndex, removeCount);\n\t}\n\n\tprivate _finishRenderingNewLines(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, newLinesHTML: string | TrustedHTML, wasNew: boolean[]): void {\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tnewLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(newLinesHTML as string);\n\t\t}\n\t\tconst lastChild = <HTMLElement>this._domNode.lastChild;\n\t\tif (domNodeIsEmpty || !lastChild) {\n\t\t\tthis._domNode.innerHTML = newLinesHTML as string; // explains the ugly casts -> https://github.com/microsoft/vscode/issues/106396#issuecomment-692625393;\n\t\t} else {\n\t\t\tlastChild.insertAdjacentHTML('afterend', newLinesHTML as string);\n\t\t}\n\n\t\tlet currChild = <HTMLElement>this._domNode.lastChild;\n\t\tfor (let i = ctx.linesLength - 1; i >= 0; i--) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasNew[i]) {\n\t\t\t\tline.setDomNode(currChild);\n\t\t\t\tcurrChild = <HTMLElement>currChild.previousSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRenderingInvalidLines(ctx: IRendererContext<T>, invalidLinesHTML: string | TrustedHTML, wasInvalid: boolean[]): void {\n\t\tconst hugeDomNode = document.createElement('div');\n\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tinvalidLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(invalidLinesHTML as string);\n\t\t}\n\t\thugeDomNode.innerHTML = invalidLinesHTML as string;\n\n\t\tfor (let i = 0; i < ctx.linesLength; i++) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasInvalid[i]) {\n\t\t\t\tconst source = <HTMLElement>hugeDomNode.firstChild;\n\t\t\t\tconst lineDomNode = line.getDomNode()!;\n\t\t\t\tlineDomNode.parentNode!.replaceChild(source, lineDomNode);\n\t\t\t\tline.setDomNode(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static readonly _sb = new StringBuilder(100000);\n\n\tprivate _finishRendering(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, deltaTop: number[]): void {\n\n\t\tconst sb = ViewLayerRenderer._sb;\n\t\tconst linesLength = ctx.linesLength;\n\t\tconst lines = ctx.lines;\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\n\t\tconst wasNew: boolean[] = [];\n\t\t{\n\t\t\tsb.reset();\n\t\t\tlet hadNewLine = false;\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasNew[i] = false;\n\n\t\t\t\tconst lineDomNode = line.getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\t// line is not new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasNew[i] = true;\n\t\t\t\thadNewLine = true;\n\t\t\t}\n\n\t\t\tif (hadNewLine) {\n\t\t\t\tthis._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tsb.reset();\n\n\t\t\tlet hadInvalidLine = false;\n\t\t\tconst wasInvalid: boolean[] = [];\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasInvalid[i] = false;\n\n\t\t\t\tif (wasNew[i]) {\n\t\t\t\t\t// line was new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasInvalid[i] = true;\n\t\t\t\thadInvalidLine = true;\n\t\t\t}\n\n\t\t\tif (hadInvalidLine) {\n\t\t\t\tthis._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _lineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewContext.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\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 { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport * as viewEvents from '../../common/viewEvents.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\n\n/**\n * Represents a visible line\n */\nexport interface IVisibleLine extends ILine {\n\tgetDomNode(): HTMLElement | null;\n\tsetDomNode(domNode: HTMLElement): void;\n\n\t/**\n\t * Return null if the HTML should not be touched.\n\t * Return the new HTML otherwise.\n\t */\n\trenderLine(lineNumber: number, deltaTop: number, lineHeight: number, viewportData: ViewportData, sb: StringBuilder): boolean;\n\n\t/**\n\t * Layout the line.\n\t */\n\tlayoutLine(lineNumber: number, deltaTop: number, lineHeight: number): void;\n}\n\nexport interface ILine {\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n}\n\nexport interface ILineFactory<T extends ILine> {\n\tcreateLine(): T;\n}\n\nexport class RenderedLinesCollection<T extends ILine> {\n\tprivate _lines!: T[];\n\tprivate _rendLineNumberStart!: number;\n\n\tconstructor(\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis._set(1, []);\n\t}\n\n\tpublic flush(): void {\n\t\tthis._set(1, []);\n\t}\n\n\t_set(rendLineNumberStart: number, lines: T[]): void {\n\t\tthis._lines = lines;\n\t\tthis._rendLineNumberStart = rendLineNumberStart;\n\t}\n\n\t_get(): { rendLineNumberStart: number; lines: T[] } {\n\t\treturn {\n\t\t\trendLineNumberStart: this._rendLineNumberStart,\n\t\t\tlines: this._lines\n\t\t};\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getStartLineNumber(): number {\n\t\treturn this._rendLineNumberStart;\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getEndLineNumber(): number {\n\t\treturn this._rendLineNumberStart + this._lines.length - 1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLine(lineNumber: number): T {\n\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\tif (lineIndex < 0 || lineIndex >= this._lines.length) {\n\t\t\tthrow new BugIndicatingError('Illegal value for lineNumber');\n\t\t}\n\t\treturn this._lines[lineIndex];\n\t}\n\n\t/**\n\t * @returns Lines that were removed from this collection\n\t */\n\tpublic onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t// deleting above the viewport\n\t\t\tconst deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\tthis._rendLineNumberStart -= deleteCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (deleteFromLineNumber > endLineNumber) {\n\t\t\t// deleted below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\t// Record what needs to be deleted\n\t\tlet deleteStartIndex = 0;\n\t\tlet deleteCount = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\n\t\t\tif (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n\t\t\t\t// this is a line to be deleted\n\t\t\t\tif (deleteCount === 0) {\n\t\t\t\t\t// this is the first line to be deleted\n\t\t\t\t\tdeleteStartIndex = lineIndex;\n\t\t\t\t\tdeleteCount = 1;\n\t\t\t\t} else {\n\t\t\t\t\tdeleteCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust this._rendLineNumberStart for lines deleted above\n\t\tif (deleteFromLineNumber < startLineNumber) {\n\t\t\t// Something was deleted above\n\t\t\tlet deleteAboveCount = 0;\n\n\t\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t\t// the entire deleted lines are above\n\t\t\t\tdeleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\t} else {\n\t\t\t\tdeleteAboveCount = startLineNumber - deleteFromLineNumber;\n\t\t\t}\n\n\t\t\tthis._rendLineNumberStart -= deleteAboveCount;\n\t\t}\n\n\t\tconst deleted = this._lines.splice(deleteStartIndex, deleteCount);\n\t\treturn deleted;\n\t}\n\n\tpublic onLinesChanged(changeFromLineNumber: number, changeCount: number): boolean {\n\t\tconst changeToLineNumber = changeFromLineNumber + changeCount - 1;\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet someoneNotified = false;\n\n\t\tfor (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n\t\t\tif (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n\t\t\t\t// Notify the line\n\t\t\t\tthis._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n\t\t\t\tsomeoneNotified = true;\n\t\t\t}\n\t\t}\n\n\t\treturn someoneNotified;\n\t}\n\n\tpublic onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (insertFromLineNumber <= startLineNumber) {\n\t\t\t// inserting above the viewport\n\t\t\tthis._rendLineNumberStart += insertCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertFromLineNumber > endLineNumber) {\n\t\t\t// inserting below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertCnt + insertFromLineNumber > endLineNumber) {\n\t\t\t// insert inside the viewport in such a way that all remaining lines are pushed outside\n\t\t\tconst deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n\t\t\treturn deleted;\n\t\t}\n\n\t\t// insert inside the viewport, push out some lines, but not all remaining lines\n\t\tconst newLines: T[] = [];\n\t\tfor (let i = 0; i < insertCnt; i++) {\n\t\t\tnewLines[i] = this._lineFactory.createLine();\n\t\t}\n\t\tconst insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n\t\tconst beforeLines = this._lines.slice(0, insertIndex);\n\t\tconst afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n\t\tconst deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n\n\t\tthis._lines = beforeLines.concat(newLines).concat(afterLines);\n\n\t\treturn deletedLines;\n\t}\n\n\tpublic onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number }[]): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet notifiedSomeone = false;\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst rng = ranges[i];\n\n\t\t\tif (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n\t\t\t\t// range outside viewport\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst from = Math.max(startLineNumber, rng.fromLineNumber);\n\t\t\tconst to = Math.min(endLineNumber, rng.toLineNumber);\n\n\t\t\tfor (let lineNumber = from; lineNumber <= to; lineNumber++) {\n\t\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\t\t\tthis._lines[lineIndex].onTokensChanged();\n\t\t\t\tnotifiedSomeone = true;\n\t\t\t}\n\t\t}\n\n\t\treturn notifiedSomeone;\n\t}\n}\n\nexport class VisibleLinesCollection<T extends IVisibleLine> {\n\n\tpublic readonly domNode: FastDomNode<HTMLElement>;\n\tprivate readonly _linesCollection: RenderedLinesCollection<T>;\n\n\tconstructor(\n\t\tprivate readonly _viewContext: ViewContext,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis.domNode = this._createDomNode();\n\t\tthis._linesCollection = new RenderedLinesCollection<T>(this._lineFactory);\n\t}\n\n\tprivate _createDomNode(): FastDomNode<HTMLElement> {\n\t\tconst domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('view-layer');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.domNode.setAttribute('role', 'presentation');\n\t\tdomNode.domNode.setAttribute('aria-hidden', 'true');\n\t\treturn domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent, flushDom?: boolean): boolean {\n\t\t// No need to clear the dom node because a full .innerHTML will occur in\n\t\t// ViewLayerRenderer._render, however the fallback mechanism in the\n\t\t// GPU renderer may cause this to be necessary as the .innerHTML call\n\t\t// may not happen depending on the new state, leaving stale DOM nodes\n\t\t// around.\n\t\tif (flushDom) {\n\t\t\tconst start = this._linesCollection.getStartLineNumber();\n\t\t\tconst end = this._linesCollection.getEndLineNumber();\n\t\t\tfor (let i = start; i <= end; i++) {\n\t\t\t\tthis._linesCollection.getLine(i).getDomNode()?.remove();\n\t\t\t}\n\t\t}\n\t\tthis._linesCollection.flush();\n\t\treturn true;\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._linesCollection.onLinesChanged(e.fromLineNumber, e.count);\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._linesCollection.onTokensChanged(e.ranges);\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getStartLineNumber(): number {\n\t\treturn this._linesCollection.getStartLineNumber();\n\t}\n\n\tpublic getEndLineNumber(): number {\n\t\treturn this._linesCollection.getEndLineNumber();\n\t}\n\n\tpublic getVisibleLine(lineNumber: number): T {\n\t\treturn this._linesCollection.getLine(lineNumber);\n\t}\n\n\tpublic renderLines(viewportData: ViewportData): void {\n\n\t\tconst inp = this._linesCollection._get();\n\n\t\tconst renderer = new ViewLayerRenderer<T>(this.domNode.domNode, this._lineFactory, viewportData, this._viewContext);\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inp.rendLineNumberStart,\n\t\t\tlines: inp.lines,\n\t\t\tlinesLength: inp.lines.length\n\t\t};\n\n\t\t// Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n\t\tconst resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n\n\t\tthis._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n\t}\n}\n\ninterface IRendererContext<T extends IVisibleLine> {\n\trendLineNumberStart: number;\n\tlines: T[];\n\tlinesLength: number;\n}\n\nclass ViewLayerRenderer<T extends IVisibleLine> {\n\n\tprivate static _ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value });\n\n\tconstructor(\n\t\tprivate readonly _domNode: HTMLElement,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t\tprivate readonly _viewportData: ViewportData,\n\t\tprivate readonly _viewContext: ViewContext\n\t) {\n\t}\n\n\tpublic render(inContext: IRendererContext<T>, startLineNumber: number, stopLineNumber: number, deltaTop: number[]): IRendererContext<T> {\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inContext.rendLineNumberStart,\n\t\t\tlines: inContext.lines.slice(0),\n\t\t\tlinesLength: inContext.linesLength\n\t\t};\n\n\t\tif ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n\t\t\t// There is no overlap whatsoever\n\t\t\tctx.rendLineNumberStart = startLineNumber;\n\t\t\tctx.linesLength = stopLineNumber - startLineNumber + 1;\n\t\t\tctx.lines = [];\n\t\t\tfor (let x = startLineNumber; x <= stopLineNumber; x++) {\n\t\t\t\tctx.lines[x - startLineNumber] = this._lineFactory.createLine();\n\t\t\t}\n\t\t\tthis._finishRendering(ctx, true, deltaTop);\n\t\t\treturn ctx;\n\t\t}\n\n\t\t// Update lines which will remain untouched\n\t\tthis._renderUntouchedLines(\n\t\t\tctx,\n\t\t\tMath.max(startLineNumber - ctx.rendLineNumberStart, 0),\n\t\t\tMath.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1),\n\t\t\tdeltaTop,\n\t\t\tstartLineNumber\n\t\t);\n\n\t\tif (ctx.rendLineNumberStart > startLineNumber) {\n\t\t\t// Insert lines before\n\t\t\tconst fromLineNumber = startLineNumber;\n\t\t\tconst toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\t\t} else if (ctx.rendLineNumberStart < startLineNumber) {\n\t\t\t// Remove lines before\n\t\t\tconst removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesBefore(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tctx.rendLineNumberStart = startLineNumber;\n\n\t\tif (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n\t\t\t// Insert lines after\n\t\t\tconst fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n\t\t\tconst toLineNumber = stopLineNumber;\n\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\n\t\t} else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n\t\t\t// Remove lines after\n\t\t\tconst fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n\t\t\tconst toLineNumber = ctx.linesLength - 1;\n\t\t\tconst removeCnt = toLineNumber - fromLineNumber + 1;\n\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesAfter(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tthis._finishRendering(ctx, false, deltaTop);\n\n\t\treturn ctx;\n\t}\n\n\tprivate _renderUntouchedLines(ctx: IRendererContext<T>, startIndex: number, endIndex: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\t\tconst lines = ctx.lines;\n\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tconst lineNumber = rendLineNumberStart + i;\n\t\t\tlines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN], this._lineHeightForLineNumber(lineNumber));\n\t\t}\n\t}\n\n\tprivate _insertLinesBefore(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = newLines.concat(ctx.lines);\n\t}\n\n\tprivate _removeLinesBefore(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(0, removeCount);\n\t}\n\n\tprivate _insertLinesAfter(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = ctx.lines.concat(newLines);\n\t}\n\n\tprivate _removeLinesAfter(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tconst removeIndex = ctx.linesLength - removeCount;\n\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(removeIndex, removeCount);\n\t}\n\n\tprivate _finishRenderingNewLines(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, newLinesHTML: string | TrustedHTML, wasNew: boolean[]): void {\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tnewLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(newLinesHTML as string);\n\t\t}\n\t\tconst lastChild = <HTMLElement>this._domNode.lastChild;\n\t\tif (domNodeIsEmpty || !lastChild) {\n\t\t\tthis._domNode.innerHTML = newLinesHTML as string; // explains the ugly casts -> https://github.com/microsoft/vscode/issues/106396#issuecomment-692625393;\n\t\t} else {\n\t\t\tlastChild.insertAdjacentHTML('afterend', newLinesHTML as string);\n\t\t}\n\n\t\tlet currChild = <HTMLElement>this._domNode.lastChild;\n\t\tfor (let i = ctx.linesLength - 1; i >= 0; i--) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasNew[i]) {\n\t\t\t\tline.setDomNode(currChild);\n\t\t\t\tcurrChild = <HTMLElement>currChild.previousSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRenderingInvalidLines(ctx: IRendererContext<T>, invalidLinesHTML: string | TrustedHTML, wasInvalid: boolean[]): void {\n\t\tconst hugeDomNode = document.createElement('div');\n\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tinvalidLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(invalidLinesHTML as string);\n\t\t}\n\t\thugeDomNode.innerHTML = invalidLinesHTML as string;\n\n\t\tfor (let i = 0; i < ctx.linesLength; i++) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasInvalid[i]) {\n\t\t\t\tconst source = <HTMLElement>hugeDomNode.firstChild;\n\t\t\t\tconst lineDomNode = line.getDomNode()!;\n\t\t\t\tlineDomNode.parentNode!.replaceChild(source, lineDomNode);\n\t\t\t\tline.setDomNode(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static readonly _sb = new StringBuilder(100000);\n\n\tprivate _finishRendering(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, deltaTop: number[]): void {\n\n\t\tconst sb = ViewLayerRenderer._sb;\n\t\tconst linesLength = ctx.linesLength;\n\t\tconst lines = ctx.lines;\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\n\t\tconst wasNew: boolean[] = [];\n\t\t{\n\t\t\tsb.reset();\n\t\t\tlet hadNewLine = false;\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasNew[i] = false;\n\n\t\t\t\tconst lineDomNode = line.getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\t// line is not new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasNew[i] = true;\n\t\t\t\thadNewLine = true;\n\t\t\t}\n\n\t\t\tif (hadNewLine) {\n\t\t\t\tthis._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tsb.reset();\n\n\t\t\tlet hadInvalidLine = false;\n\t\t\tconst wasInvalid: boolean[] = [];\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasInvalid[i] = false;\n\n\t\t\t\tif (wasNew[i]) {\n\t\t\t\t\t// line was new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasInvalid[i] = true;\n\t\t\t\thadInvalidLine = true;\n\t\t\t}\n\n\t\t\tif (hadInvalidLine) {\n\t\t\t\tthis._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _lineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewContext.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/view/viewLayer.ts","vs/editor/browser/view/viewLayer.ts"],"names":[],"mappings":"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","file":"viewLayer.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 { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport * as viewEvents from '../../common/viewEvents.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\n\n/**\n * Represents a visible line\n */\nexport interface IVisibleLine extends ILine {\n\tgetDomNode(): HTMLElement | null;\n\tsetDomNode(domNode: HTMLElement): void;\n\n\t/**\n\t * Return null if the HTML should not be touched.\n\t * Return the new HTML otherwise.\n\t */\n\trenderLine(lineNumber: number, deltaTop: number, lineHeight: number, viewportData: ViewportData, sb: StringBuilder): boolean;\n\n\t/**\n\t * Layout the line.\n\t */\n\tlayoutLine(lineNumber: number, deltaTop: number, lineHeight: number): void;\n}\n\nexport interface ILine {\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n}\n\nexport interface ILineFactory<T extends ILine> {\n\tcreateLine(): T;\n}\n\nexport class RenderedLinesCollection<T extends ILine> {\n\tprivate _lines!: T[];\n\tprivate _rendLineNumberStart!: number;\n\n\tconstructor(\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis._set(1, []);\n\t}\n\n\tpublic flush(): void {\n\t\tthis._set(1, []);\n\t}\n\n\t_set(rendLineNumberStart: number, lines: T[]): void {\n\t\tthis._lines = lines;\n\t\tthis._rendLineNumberStart = rendLineNumberStart;\n\t}\n\n\t_get(): { rendLineNumberStart: number; lines: T[] } {\n\t\treturn {\n\t\t\trendLineNumberStart: this._rendLineNumberStart,\n\t\t\tlines: this._lines\n\t\t};\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getStartLineNumber(): number {\n\t\treturn this._rendLineNumberStart;\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getEndLineNumber(): number {\n\t\treturn this._rendLineNumberStart + this._lines.length - 1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLine(lineNumber: number): T {\n\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\tif (lineIndex < 0 || lineIndex >= this._lines.length) {\n\t\t\tthrow new BugIndicatingError('Illegal value for lineNumber');\n\t\t}\n\t\treturn this._lines[lineIndex];\n\t}\n\n\t/**\n\t * @returns Lines that were removed from this collection\n\t */\n\tpublic onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t// deleting above the viewport\n\t\t\tconst deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\tthis._rendLineNumberStart -= deleteCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (deleteFromLineNumber > endLineNumber) {\n\t\t\t// deleted below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\t// Record what needs to be deleted\n\t\tlet deleteStartIndex = 0;\n\t\tlet deleteCount = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\n\t\t\tif (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n\t\t\t\t// this is a line to be deleted\n\t\t\t\tif (deleteCount === 0) {\n\t\t\t\t\t// this is the first line to be deleted\n\t\t\t\t\tdeleteStartIndex = lineIndex;\n\t\t\t\t\tdeleteCount = 1;\n\t\t\t\t} else {\n\t\t\t\t\tdeleteCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust this._rendLineNumberStart for lines deleted above\n\t\tif (deleteFromLineNumber < startLineNumber) {\n\t\t\t// Something was deleted above\n\t\t\tlet deleteAboveCount = 0;\n\n\t\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t\t// the entire deleted lines are above\n\t\t\t\tdeleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\t} else {\n\t\t\t\tdeleteAboveCount = startLineNumber - deleteFromLineNumber;\n\t\t\t}\n\n\t\t\tthis._rendLineNumberStart -= deleteAboveCount;\n\t\t}\n\n\t\tconst deleted = this._lines.splice(deleteStartIndex, deleteCount);\n\t\treturn deleted;\n\t}\n\n\tpublic onLinesChanged(changeFromLineNumber: number, changeCount: number): boolean {\n\t\tconst changeToLineNumber = changeFromLineNumber + changeCount - 1;\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet someoneNotified = false;\n\n\t\tfor (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n\t\t\tif (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n\t\t\t\t// Notify the line\n\t\t\t\tthis._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n\t\t\t\tsomeoneNotified = true;\n\t\t\t}\n\t\t}\n\n\t\treturn someoneNotified;\n\t}\n\n\tpublic onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (insertFromLineNumber <= startLineNumber) {\n\t\t\t// inserting above the viewport\n\t\t\tthis._rendLineNumberStart += insertCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertFromLineNumber > endLineNumber) {\n\t\t\t// inserting below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertCnt + insertFromLineNumber > endLineNumber) {\n\t\t\t// insert inside the viewport in such a way that all remaining lines are pushed outside\n\t\t\tconst deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n\t\t\treturn deleted;\n\t\t}\n\n\t\t// insert inside the viewport, push out some lines, but not all remaining lines\n\t\tconst newLines: T[] = [];\n\t\tfor (let i = 0; i < insertCnt; i++) {\n\t\t\tnewLines[i] = this._lineFactory.createLine();\n\t\t}\n\t\tconst insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n\t\tconst beforeLines = this._lines.slice(0, insertIndex);\n\t\tconst afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n\t\tconst deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n\n\t\tthis._lines = beforeLines.concat(newLines).concat(afterLines);\n\n\t\treturn deletedLines;\n\t}\n\n\tpublic onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number }[]): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet notifiedSomeone = false;\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst rng = ranges[i];\n\n\t\t\tif (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n\t\t\t\t// range outside viewport\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst from = Math.max(startLineNumber, rng.fromLineNumber);\n\t\t\tconst to = Math.min(endLineNumber, rng.toLineNumber);\n\n\t\t\tfor (let lineNumber = from; lineNumber <= to; lineNumber++) {\n\t\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\t\t\tthis._lines[lineIndex].onTokensChanged();\n\t\t\t\tnotifiedSomeone = true;\n\t\t\t}\n\t\t}\n\n\t\treturn notifiedSomeone;\n\t}\n}\n\nexport class VisibleLinesCollection<T extends IVisibleLine> {\n\n\tpublic readonly domNode: FastDomNode<HTMLElement>;\n\tprivate readonly _linesCollection: RenderedLinesCollection<T>;\n\n\tconstructor(\n\t\tprivate readonly _viewContext: ViewContext,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis.domNode = this._createDomNode();\n\t\tthis._linesCollection = new RenderedLinesCollection<T>(this._lineFactory);\n\t}\n\n\tprivate _createDomNode(): FastDomNode<HTMLElement> {\n\t\tconst domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('view-layer');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.domNode.setAttribute('role', 'presentation');\n\t\tdomNode.domNode.setAttribute('aria-hidden', 'true');\n\t\treturn domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent, flushDom?: boolean): boolean {\n\t\t// No need to clear the dom node because a full .innerHTML will occur in\n\t\t// ViewLayerRenderer._render, however the fallback mechanism in the\n\t\t// GPU renderer may cause this to be necessary as the .innerHTML call\n\t\t// may not happen depending on the new state, leaving stale DOM nodes\n\t\t// around.\n\t\tif (flushDom) {\n\t\t\tconst start = this._linesCollection.getStartLineNumber();\n\t\t\tconst end = this._linesCollection.getEndLineNumber();\n\t\t\tfor (let i = start; i <= end; i++) {\n\t\t\t\tthis._linesCollection.getLine(i).getDomNode()?.remove();\n\t\t\t}\n\t\t}\n\t\tthis._linesCollection.flush();\n\t\treturn true;\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._linesCollection.onLinesChanged(e.fromLineNumber, e.count);\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._linesCollection.onTokensChanged(e.ranges);\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getStartLineNumber(): number {\n\t\treturn this._linesCollection.getStartLineNumber();\n\t}\n\n\tpublic getEndLineNumber(): number {\n\t\treturn this._linesCollection.getEndLineNumber();\n\t}\n\n\tpublic getVisibleLine(lineNumber: number): T {\n\t\treturn this._linesCollection.getLine(lineNumber);\n\t}\n\n\tpublic renderLines(viewportData: ViewportData): void {\n\n\t\tconst inp = this._linesCollection._get();\n\n\t\tconst renderer = new ViewLayerRenderer<T>(this.domNode.domNode, this._lineFactory, viewportData, this._viewContext);\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inp.rendLineNumberStart,\n\t\t\tlines: inp.lines,\n\t\t\tlinesLength: inp.lines.length\n\t\t};\n\n\t\t// Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n\t\tconst resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n\n\t\tthis._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n\t}\n}\n\ninterface IRendererContext<T extends IVisibleLine> {\n\trendLineNumberStart: number;\n\tlines: T[];\n\tlinesLength: number;\n}\n\nclass ViewLayerRenderer<T extends IVisibleLine> {\n\n\tprivate static _ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value });\n\n\tconstructor(\n\t\tprivate readonly _domNode: HTMLElement,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t\tprivate readonly _viewportData: ViewportData,\n\t\tprivate readonly _viewContext: ViewContext\n\t) {\n\t}\n\n\tpublic render(inContext: IRendererContext<T>, startLineNumber: number, stopLineNumber: number, deltaTop: number[]): IRendererContext<T> {\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inContext.rendLineNumberStart,\n\t\t\tlines: inContext.lines.slice(0),\n\t\t\tlinesLength: inContext.linesLength\n\t\t};\n\n\t\tif ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n\t\t\t// There is no overlap whatsoever\n\t\t\tctx.rendLineNumberStart = startLineNumber;\n\t\t\tctx.linesLength = stopLineNumber - startLineNumber + 1;\n\t\t\tctx.lines = [];\n\t\t\tfor (let x = startLineNumber; x <= stopLineNumber; x++) {\n\t\t\t\tctx.lines[x - startLineNumber] = this._lineFactory.createLine();\n\t\t\t}\n\t\t\tthis._finishRendering(ctx, true, deltaTop);\n\t\t\treturn ctx;\n\t\t}\n\n\t\t// Update lines which will remain untouched\n\t\tthis._renderUntouchedLines(\n\t\t\tctx,\n\t\t\tMath.max(startLineNumber - ctx.rendLineNumberStart, 0),\n\t\t\tMath.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1),\n\t\t\tdeltaTop,\n\t\t\tstartLineNumber\n\t\t);\n\n\t\tif (ctx.rendLineNumberStart > startLineNumber) {\n\t\t\t// Insert lines before\n\t\t\tconst fromLineNumber = startLineNumber;\n\t\t\tconst toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\t\t} else if (ctx.rendLineNumberStart < startLineNumber) {\n\t\t\t// Remove lines before\n\t\t\tconst removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesBefore(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tctx.rendLineNumberStart = startLineNumber;\n\n\t\tif (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n\t\t\t// Insert lines after\n\t\t\tconst fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n\t\t\tconst toLineNumber = stopLineNumber;\n\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\n\t\t} else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n\t\t\t// Remove lines after\n\t\t\tconst fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n\t\t\tconst toLineNumber = ctx.linesLength - 1;\n\t\t\tconst removeCnt = toLineNumber - fromLineNumber + 1;\n\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesAfter(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tthis._finishRendering(ctx, false, deltaTop);\n\n\t\treturn ctx;\n\t}\n\n\tprivate _renderUntouchedLines(ctx: IRendererContext<T>, startIndex: number, endIndex: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\t\tconst lines = ctx.lines;\n\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tconst lineNumber = rendLineNumberStart + i;\n\t\t\tlines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN], this._lineHeightForLineNumber(lineNumber));\n\t\t}\n\t}\n\n\tprivate _insertLinesBefore(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = newLines.concat(ctx.lines);\n\t}\n\n\tprivate _removeLinesBefore(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(0, removeCount);\n\t}\n\n\tprivate _insertLinesAfter(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = ctx.lines.concat(newLines);\n\t}\n\n\tprivate _removeLinesAfter(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tconst removeIndex = ctx.linesLength - removeCount;\n\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(removeIndex, removeCount);\n\t}\n\n\tprivate _finishRenderingNewLines(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, newLinesHTML: string | TrustedHTML, wasNew: boolean[]): void {\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tnewLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(newLinesHTML as string);\n\t\t}\n\t\tconst lastChild = <HTMLElement>this._domNode.lastChild;\n\t\tif (domNodeIsEmpty || !lastChild) {\n\t\t\tthis._domNode.innerHTML = newLinesHTML as string; // explains the ugly casts -> https://github.com/microsoft/vscode/issues/106396#issuecomment-692625393;\n\t\t} else {\n\t\t\tlastChild.insertAdjacentHTML('afterend', newLinesHTML as string);\n\t\t}\n\n\t\tlet currChild = <HTMLElement>this._domNode.lastChild;\n\t\tfor (let i = ctx.linesLength - 1; i >= 0; i--) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasNew[i]) {\n\t\t\t\tline.setDomNode(currChild);\n\t\t\t\tcurrChild = <HTMLElement>currChild.previousSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRenderingInvalidLines(ctx: IRendererContext<T>, invalidLinesHTML: string | TrustedHTML, wasInvalid: boolean[]): void {\n\t\tconst hugeDomNode = document.createElement('div');\n\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tinvalidLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(invalidLinesHTML as string);\n\t\t}\n\t\thugeDomNode.innerHTML = invalidLinesHTML as string;\n\n\t\tfor (let i = 0; i < ctx.linesLength; i++) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasInvalid[i]) {\n\t\t\t\tconst source = <HTMLElement>hugeDomNode.firstChild;\n\t\t\t\tconst lineDomNode = line.getDomNode()!;\n\t\t\t\tlineDomNode.replaceWith(source);\n\t\t\t\tline.setDomNode(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static readonly _sb = new StringBuilder(100000);\n\n\tprivate _finishRendering(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, deltaTop: number[]): void {\n\n\t\tconst sb = ViewLayerRenderer._sb;\n\t\tconst linesLength = ctx.linesLength;\n\t\tconst lines = ctx.lines;\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\n\t\tconst wasNew: boolean[] = [];\n\t\t{\n\t\t\tsb.reset();\n\t\t\tlet hadNewLine = false;\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasNew[i] = false;\n\n\t\t\t\tconst lineDomNode = line.getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\t// line is not new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasNew[i] = true;\n\t\t\t\thadNewLine = true;\n\t\t\t}\n\n\t\t\tif (hadNewLine) {\n\t\t\t\tthis._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tsb.reset();\n\n\t\t\tlet hadInvalidLine = false;\n\t\t\tconst wasInvalid: boolean[] = [];\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasInvalid[i] = false;\n\n\t\t\t\tif (wasNew[i]) {\n\t\t\t\t\t// line was new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasInvalid[i] = true;\n\t\t\t\thadInvalidLine = true;\n\t\t\t}\n\n\t\t\tif (hadInvalidLine) {\n\t\t\t\tthis._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _lineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewContext.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\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 { FastDomNode, createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport * as viewEvents from '../../common/viewEvents.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\n\n/**\n * Represents a visible line\n */\nexport interface IVisibleLine extends ILine {\n\tgetDomNode(): HTMLElement | null;\n\tsetDomNode(domNode: HTMLElement): void;\n\n\t/**\n\t * Return null if the HTML should not be touched.\n\t * Return the new HTML otherwise.\n\t */\n\trenderLine(lineNumber: number, deltaTop: number, lineHeight: number, viewportData: ViewportData, sb: StringBuilder): boolean;\n\n\t/**\n\t * Layout the line.\n\t */\n\tlayoutLine(lineNumber: number, deltaTop: number, lineHeight: number): void;\n}\n\nexport interface ILine {\n\tonContentChanged(): void;\n\tonTokensChanged(): void;\n}\n\nexport interface ILineFactory<T extends ILine> {\n\tcreateLine(): T;\n}\n\nexport class RenderedLinesCollection<T extends ILine> {\n\tprivate _lines!: T[];\n\tprivate _rendLineNumberStart!: number;\n\n\tconstructor(\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis._set(1, []);\n\t}\n\n\tpublic flush(): void {\n\t\tthis._set(1, []);\n\t}\n\n\t_set(rendLineNumberStart: number, lines: T[]): void {\n\t\tthis._lines = lines;\n\t\tthis._rendLineNumberStart = rendLineNumberStart;\n\t}\n\n\t_get(): { rendLineNumberStart: number; lines: T[] } {\n\t\treturn {\n\t\t\trendLineNumberStart: this._rendLineNumberStart,\n\t\t\tlines: this._lines\n\t\t};\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getStartLineNumber(): number {\n\t\treturn this._rendLineNumberStart;\n\t}\n\n\t/**\n\t * @returns Inclusive line number that is inside this collection\n\t */\n\tpublic getEndLineNumber(): number {\n\t\treturn this._rendLineNumberStart + this._lines.length - 1;\n\t}\n\n\tpublic getCount(): number {\n\t\treturn this._lines.length;\n\t}\n\n\tpublic getLine(lineNumber: number): T {\n\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\tif (lineIndex < 0 || lineIndex >= this._lines.length) {\n\t\t\tthrow new BugIndicatingError('Illegal value for lineNumber');\n\t\t}\n\t\treturn this._lines[lineIndex];\n\t}\n\n\t/**\n\t * @returns Lines that were removed from this collection\n\t */\n\tpublic onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t// deleting above the viewport\n\t\t\tconst deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\tthis._rendLineNumberStart -= deleteCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (deleteFromLineNumber > endLineNumber) {\n\t\t\t// deleted below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\t// Record what needs to be deleted\n\t\tlet deleteStartIndex = 0;\n\t\tlet deleteCount = 0;\n\t\tfor (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\n\t\t\tif (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n\t\t\t\t// this is a line to be deleted\n\t\t\t\tif (deleteCount === 0) {\n\t\t\t\t\t// this is the first line to be deleted\n\t\t\t\t\tdeleteStartIndex = lineIndex;\n\t\t\t\t\tdeleteCount = 1;\n\t\t\t\t} else {\n\t\t\t\t\tdeleteCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Adjust this._rendLineNumberStart for lines deleted above\n\t\tif (deleteFromLineNumber < startLineNumber) {\n\t\t\t// Something was deleted above\n\t\t\tlet deleteAboveCount = 0;\n\n\t\t\tif (deleteToLineNumber < startLineNumber) {\n\t\t\t\t// the entire deleted lines are above\n\t\t\t\tdeleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n\t\t\t} else {\n\t\t\t\tdeleteAboveCount = startLineNumber - deleteFromLineNumber;\n\t\t\t}\n\n\t\t\tthis._rendLineNumberStart -= deleteAboveCount;\n\t\t}\n\n\t\tconst deleted = this._lines.splice(deleteStartIndex, deleteCount);\n\t\treturn deleted;\n\t}\n\n\tpublic onLinesChanged(changeFromLineNumber: number, changeCount: number): boolean {\n\t\tconst changeToLineNumber = changeFromLineNumber + changeCount - 1;\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet someoneNotified = false;\n\n\t\tfor (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n\t\t\tif (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n\t\t\t\t// Notify the line\n\t\t\t\tthis._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n\t\t\t\tsomeoneNotified = true;\n\t\t\t}\n\t\t}\n\n\t\treturn someoneNotified;\n\t}\n\n\tpublic onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): T[] | null {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn null;\n\t\t}\n\n\t\tconst insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tif (insertFromLineNumber <= startLineNumber) {\n\t\t\t// inserting above the viewport\n\t\t\tthis._rendLineNumberStart += insertCnt;\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertFromLineNumber > endLineNumber) {\n\t\t\t// inserting below the viewport\n\t\t\treturn null;\n\t\t}\n\n\t\tif (insertCnt + insertFromLineNumber > endLineNumber) {\n\t\t\t// insert inside the viewport in such a way that all remaining lines are pushed outside\n\t\t\tconst deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n\t\t\treturn deleted;\n\t\t}\n\n\t\t// insert inside the viewport, push out some lines, but not all remaining lines\n\t\tconst newLines: T[] = [];\n\t\tfor (let i = 0; i < insertCnt; i++) {\n\t\t\tnewLines[i] = this._lineFactory.createLine();\n\t\t}\n\t\tconst insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n\t\tconst beforeLines = this._lines.slice(0, insertIndex);\n\t\tconst afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n\t\tconst deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n\n\t\tthis._lines = beforeLines.concat(newLines).concat(afterLines);\n\n\t\treturn deletedLines;\n\t}\n\n\tpublic onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number }[]): boolean {\n\t\tif (this.getCount() === 0) {\n\t\t\t// no lines\n\t\t\treturn false;\n\t\t}\n\n\t\tconst startLineNumber = this.getStartLineNumber();\n\t\tconst endLineNumber = this.getEndLineNumber();\n\n\t\tlet notifiedSomeone = false;\n\t\tfor (let i = 0, len = ranges.length; i < len; i++) {\n\t\t\tconst rng = ranges[i];\n\n\t\t\tif (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n\t\t\t\t// range outside viewport\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst from = Math.max(startLineNumber, rng.fromLineNumber);\n\t\t\tconst to = Math.min(endLineNumber, rng.toLineNumber);\n\n\t\t\tfor (let lineNumber = from; lineNumber <= to; lineNumber++) {\n\t\t\t\tconst lineIndex = lineNumber - this._rendLineNumberStart;\n\t\t\t\tthis._lines[lineIndex].onTokensChanged();\n\t\t\t\tnotifiedSomeone = true;\n\t\t\t}\n\t\t}\n\n\t\treturn notifiedSomeone;\n\t}\n}\n\nexport class VisibleLinesCollection<T extends IVisibleLine> {\n\n\tpublic readonly domNode: FastDomNode<HTMLElement>;\n\tprivate readonly _linesCollection: RenderedLinesCollection<T>;\n\n\tconstructor(\n\t\tprivate readonly _viewContext: ViewContext,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t) {\n\t\tthis.domNode = this._createDomNode();\n\t\tthis._linesCollection = new RenderedLinesCollection<T>(this._lineFactory);\n\t}\n\n\tprivate _createDomNode(): FastDomNode<HTMLElement> {\n\t\tconst domNode = createFastDomNode(document.createElement('div'));\n\t\tdomNode.setClassName('view-layer');\n\t\tdomNode.setPosition('absolute');\n\t\tdomNode.domNode.setAttribute('role', 'presentation');\n\t\tdomNode.domNode.setAttribute('aria-hidden', 'true');\n\t\treturn domNode;\n\t}\n\n\t// ---- begin view event handlers\n\n\tpublic onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean {\n\t\tif (e.hasChanged(EditorOption.layoutInfo)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic onFlushed(e: viewEvents.ViewFlushedEvent, flushDom?: boolean): boolean {\n\t\t// No need to clear the dom node because a full .innerHTML will occur in\n\t\t// ViewLayerRenderer._render, however the fallback mechanism in the\n\t\t// GPU renderer may cause this to be necessary as the .innerHTML call\n\t\t// may not happen depending on the new state, leaving stale DOM nodes\n\t\t// around.\n\t\tif (flushDom) {\n\t\t\tconst start = this._linesCollection.getStartLineNumber();\n\t\t\tconst end = this._linesCollection.getEndLineNumber();\n\t\t\tfor (let i = start; i <= end; i++) {\n\t\t\t\tthis._linesCollection.getLine(i).getDomNode()?.remove();\n\t\t\t}\n\t\t}\n\t\tthis._linesCollection.flush();\n\t\treturn true;\n\t}\n\n\tpublic onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {\n\t\treturn this._linesCollection.onLinesChanged(e.fromLineNumber, e.count);\n\t}\n\n\tpublic onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {\n\t\tconst deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n\t\tif (deleted) {\n\t\t\t// Remove from DOM\n\t\t\tfor (let i = 0, len = deleted.length; i < len; i++) {\n\t\t\t\tconst lineDomNode = deleted[i].getDomNode();\n\t\t\t\tlineDomNode?.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {\n\t\treturn e.scrollTopChanged;\n\t}\n\n\tpublic onTokensChanged(e: viewEvents.ViewTokensChangedEvent): boolean {\n\t\treturn this._linesCollection.onTokensChanged(e.ranges);\n\t}\n\n\tpublic onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean {\n\t\treturn true;\n\t}\n\n\t// ---- end view event handlers\n\n\tpublic getStartLineNumber(): number {\n\t\treturn this._linesCollection.getStartLineNumber();\n\t}\n\n\tpublic getEndLineNumber(): number {\n\t\treturn this._linesCollection.getEndLineNumber();\n\t}\n\n\tpublic getVisibleLine(lineNumber: number): T {\n\t\treturn this._linesCollection.getLine(lineNumber);\n\t}\n\n\tpublic renderLines(viewportData: ViewportData): void {\n\n\t\tconst inp = this._linesCollection._get();\n\n\t\tconst renderer = new ViewLayerRenderer<T>(this.domNode.domNode, this._lineFactory, viewportData, this._viewContext);\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inp.rendLineNumberStart,\n\t\t\tlines: inp.lines,\n\t\t\tlinesLength: inp.lines.length\n\t\t};\n\n\t\t// Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n\t\tconst resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n\n\t\tthis._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n\t}\n}\n\ninterface IRendererContext<T extends IVisibleLine> {\n\trendLineNumberStart: number;\n\tlines: T[];\n\tlinesLength: number;\n}\n\nclass ViewLayerRenderer<T extends IVisibleLine> {\n\n\tprivate static _ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value });\n\n\tconstructor(\n\t\tprivate readonly _domNode: HTMLElement,\n\t\tprivate readonly _lineFactory: ILineFactory<T>,\n\t\tprivate readonly _viewportData: ViewportData,\n\t\tprivate readonly _viewContext: ViewContext\n\t) {\n\t}\n\n\tpublic render(inContext: IRendererContext<T>, startLineNumber: number, stopLineNumber: number, deltaTop: number[]): IRendererContext<T> {\n\n\t\tconst ctx: IRendererContext<T> = {\n\t\t\trendLineNumberStart: inContext.rendLineNumberStart,\n\t\t\tlines: inContext.lines.slice(0),\n\t\t\tlinesLength: inContext.linesLength\n\t\t};\n\n\t\tif ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n\t\t\t// There is no overlap whatsoever\n\t\t\tctx.rendLineNumberStart = startLineNumber;\n\t\t\tctx.linesLength = stopLineNumber - startLineNumber + 1;\n\t\t\tctx.lines = [];\n\t\t\tfor (let x = startLineNumber; x <= stopLineNumber; x++) {\n\t\t\t\tctx.lines[x - startLineNumber] = this._lineFactory.createLine();\n\t\t\t}\n\t\t\tthis._finishRendering(ctx, true, deltaTop);\n\t\t\treturn ctx;\n\t\t}\n\n\t\t// Update lines which will remain untouched\n\t\tthis._renderUntouchedLines(\n\t\t\tctx,\n\t\t\tMath.max(startLineNumber - ctx.rendLineNumberStart, 0),\n\t\t\tMath.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1),\n\t\t\tdeltaTop,\n\t\t\tstartLineNumber\n\t\t);\n\n\t\tif (ctx.rendLineNumberStart > startLineNumber) {\n\t\t\t// Insert lines before\n\t\t\tconst fromLineNumber = startLineNumber;\n\t\t\tconst toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\t\t} else if (ctx.rendLineNumberStart < startLineNumber) {\n\t\t\t// Remove lines before\n\t\t\tconst removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesBefore(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tctx.rendLineNumberStart = startLineNumber;\n\n\t\tif (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n\t\t\t// Insert lines after\n\t\t\tconst fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n\t\t\tconst toLineNumber = stopLineNumber;\n\n\t\t\tif (fromLineNumber <= toLineNumber) {\n\t\t\t\tthis._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n\t\t\t\tctx.linesLength += toLineNumber - fromLineNumber + 1;\n\t\t\t}\n\n\t\t} else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n\t\t\t// Remove lines after\n\t\t\tconst fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n\t\t\tconst toLineNumber = ctx.linesLength - 1;\n\t\t\tconst removeCnt = toLineNumber - fromLineNumber + 1;\n\n\t\t\tif (removeCnt > 0) {\n\t\t\t\tthis._removeLinesAfter(ctx, removeCnt);\n\t\t\t\tctx.linesLength -= removeCnt;\n\t\t\t}\n\t\t}\n\n\t\tthis._finishRendering(ctx, false, deltaTop);\n\n\t\treturn ctx;\n\t}\n\n\tprivate _renderUntouchedLines(ctx: IRendererContext<T>, startIndex: number, endIndex: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\t\tconst lines = ctx.lines;\n\n\t\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\t\tconst lineNumber = rendLineNumberStart + i;\n\t\t\tlines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN], this._lineHeightForLineNumber(lineNumber));\n\t\t}\n\t}\n\n\tprivate _insertLinesBefore(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = newLines.concat(ctx.lines);\n\t}\n\n\tprivate _removeLinesBefore(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(0, removeCount);\n\t}\n\n\tprivate _insertLinesAfter(ctx: IRendererContext<T>, fromLineNumber: number, toLineNumber: number, deltaTop: number[], deltaLN: number): void {\n\t\tconst newLines: T[] = [];\n\t\tlet newLinesLen = 0;\n\t\tfor (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n\t\t\tnewLines[newLinesLen++] = this._lineFactory.createLine();\n\t\t}\n\t\tctx.lines = ctx.lines.concat(newLines);\n\t}\n\n\tprivate _removeLinesAfter(ctx: IRendererContext<T>, removeCount: number): void {\n\t\tconst removeIndex = ctx.linesLength - removeCount;\n\n\t\tfor (let i = 0; i < removeCount; i++) {\n\t\t\tconst lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n\t\t\tlineDomNode?.remove();\n\t\t}\n\t\tctx.lines.splice(removeIndex, removeCount);\n\t}\n\n\tprivate _finishRenderingNewLines(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, newLinesHTML: string | TrustedHTML, wasNew: boolean[]): void {\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tnewLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(newLinesHTML as string);\n\t\t}\n\t\tconst lastChild = <HTMLElement>this._domNode.lastChild;\n\t\tif (domNodeIsEmpty || !lastChild) {\n\t\t\tthis._domNode.innerHTML = newLinesHTML as string; // explains the ugly casts -> https://github.com/microsoft/vscode/issues/106396#issuecomment-692625393;\n\t\t} else {\n\t\t\tlastChild.insertAdjacentHTML('afterend', newLinesHTML as string);\n\t\t}\n\n\t\tlet currChild = <HTMLElement>this._domNode.lastChild;\n\t\tfor (let i = ctx.linesLength - 1; i >= 0; i--) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasNew[i]) {\n\t\t\t\tline.setDomNode(currChild);\n\t\t\t\tcurrChild = <HTMLElement>currChild.previousSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _finishRenderingInvalidLines(ctx: IRendererContext<T>, invalidLinesHTML: string | TrustedHTML, wasInvalid: boolean[]): void {\n\t\tconst hugeDomNode = document.createElement('div');\n\n\t\tif (ViewLayerRenderer._ttPolicy) {\n\t\t\tinvalidLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(invalidLinesHTML as string);\n\t\t}\n\t\thugeDomNode.innerHTML = invalidLinesHTML as string;\n\n\t\tfor (let i = 0; i < ctx.linesLength; i++) {\n\t\t\tconst line = ctx.lines[i];\n\t\t\tif (wasInvalid[i]) {\n\t\t\t\tconst source = <HTMLElement>hugeDomNode.firstChild;\n\t\t\t\tconst lineDomNode = line.getDomNode()!;\n\t\t\t\tlineDomNode.replaceWith(source);\n\t\t\t\tline.setDomNode(source);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static readonly _sb = new StringBuilder(100000);\n\n\tprivate _finishRendering(ctx: IRendererContext<T>, domNodeIsEmpty: boolean, deltaTop: number[]): void {\n\n\t\tconst sb = ViewLayerRenderer._sb;\n\t\tconst linesLength = ctx.linesLength;\n\t\tconst lines = ctx.lines;\n\t\tconst rendLineNumberStart = ctx.rendLineNumberStart;\n\n\t\tconst wasNew: boolean[] = [];\n\t\t{\n\t\t\tsb.reset();\n\t\t\tlet hadNewLine = false;\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasNew[i] = false;\n\n\t\t\t\tconst lineDomNode = line.getDomNode();\n\t\t\t\tif (lineDomNode) {\n\t\t\t\t\t// line is not new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasNew[i] = true;\n\t\t\t\thadNewLine = true;\n\t\t\t}\n\n\t\t\tif (hadNewLine) {\n\t\t\t\tthis._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tsb.reset();\n\n\t\t\tlet hadInvalidLine = false;\n\t\t\tconst wasInvalid: boolean[] = [];\n\n\t\t\tfor (let i = 0; i < linesLength; i++) {\n\t\t\t\tconst line = lines[i];\n\t\t\t\twasInvalid[i] = false;\n\n\t\t\t\tif (wasNew[i]) {\n\t\t\t\t\t// line was new\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst renderedLineNumber = i + rendLineNumberStart;\n\t\t\t\tconst renderResult = line.renderLine(renderedLineNumber, deltaTop[i], this._lineHeightForLineNumber(renderedLineNumber), this._viewportData, sb);\n\t\t\t\tif (!renderResult) {\n\t\t\t\t\t// line does not need rendering\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twasInvalid[i] = true;\n\t\t\t\thadInvalidLine = true;\n\t\t\t}\n\n\t\t\tif (hadInvalidLine) {\n\t\t\t\tthis._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _lineHeightForLineNumber(lineNumber: number): number {\n\t\treturn this._viewContext.viewLayout.getLineHeightForLineNumber(lineNumber);\n\t}\n}\n"]}
|
|
@@ -78,8 +78,7 @@ let CodeActionController = class CodeActionController extends Disposable {
|
|
|
78
78
|
const actionItem = actions.validActions[0];
|
|
79
79
|
const command = actionItem.action.command;
|
|
80
80
|
if (command && command.id === 'inlineChat.start') {
|
|
81
|
-
if (command.arguments && command.arguments.length >= 1) {
|
|
82
|
-
// eslint-disable-next-line local/code-no-any-casts
|
|
81
|
+
if (command.arguments && command.arguments.length >= 1 && command.arguments[0]) {
|
|
83
82
|
command.arguments[0] = { ...command.arguments[0], autoSend: false };
|
|
84
83
|
}
|
|
85
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/editor/contrib/codeAction/browser/codeActionController.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAKjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAE/F,OAAO,EAAa,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAyD,cAAc,EAAoC,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACtK,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQvD,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAEjD,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,UAAU;;aAE5B,OAAE,GAAG,qCAAH,AAAwC,CAAC;IAE3D,MAAM,CAAC,GAAG,CAAC,MAAmB;QACpC,OAAO,MAAM,CAAC,eAAe,CAAuB,sBAAoB,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAaD,YACC,MAAmB,EACH,aAA6B,EACzB,iBAAqC,EAClC,oBAA2C,EACxC,uBAAiD,EACnD,eAAuC,EAC9C,eAAiD,EAC3C,qBAA6D,EAC9D,oBAA2D,EAC1D,qBAA6D,EAC5D,gBAAyD;QAEjF,KAAK,EAAE,CAAC;QAN0B,oBAAe,GAAf,eAAe,CAAiB;QAC1B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC7C,yBAAoB,GAApB,oBAAoB,CAAsB;QACzC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC3C,qBAAgB,GAAhB,gBAAgB,CAAwB;QAlBjE,uBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAiB,CAAC,CAAC;QACrF,kBAAa,GAAG,KAAK,CAAC;QAItB,cAAS,GAAG,KAAK,CAAC;QAiBzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACtL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAkB,eAAe,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAEnF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAEQ,OAAO;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,OAAsB,EAAE,EAAuB;QACzF,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAClD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACxD,mDAAmD;oBACnD,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAC9E,CAAC;YACF,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAC5F,OAAO;QACR,CAAC;QACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IAEM,eAAe,CAAC,QAA2B,EAAE,OAAsB,EAAE,EAAuB;QAClG,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IAEM,8BAA8B,CACpC,mBAA2B,EAC3B,aAAsC,EACtC,MAAyB,EACzB,SAA+B;QAE/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,sCAA8B,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACtJ,CAAC;IAEO,QAAQ,CAAC,OAA0B;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAsB,EAAE,SAAkB,EAAE,OAAgB,EAAE,YAAmC;QACtH,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3H,CAAC;gBAAS,CAAC;YACV,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,oCAA4B,EAAE,aAAa,EAAE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAClH,CAAC;YACD,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACF,CAAC;IAEM,mBAAmB;QACzB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,QAAgC;QACpD,IAAI,QAAQ,CAAC,IAAI,4CAAoC,EAAE,CAAC;YACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACJ,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,eAAe,KAAK,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjE,OAAO;QACR,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAElF,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,yCAAiC,EAAE,CAAC;YAC5D,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,+BAA+B;gBACtE,yCAAyC;gBAEzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpF,IAAI,kBAAkB,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;oBACrG,CAAC;4BAAS,CAAC;wBACV,OAAO,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,oFAAoF;gBACpF,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,wCAAwC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/F,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpD,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACnH,OAAO,CAAC,OAAO,EAAE,CAAC;wBAClB,OAAO;oBACR,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;YAClE,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,sBAAsB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBAC3F,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAClI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO;gBACR,CAAC;YACF,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QACtH,CAAC;aAAM,CAAC;YACP,2BAA2B;YAC3B,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC;gBACzC,yDAAyD;gBACzD,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;YACzC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,wCAAwC,CAAC,OAA0B,EAAE,OAAsB;QAClG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,4CAA8B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;eACtF,CAAC,OAAO,CAAC,SAAS,kDAAiC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EACzF,CAAC;YACF,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,wBAAwB,CAAC,OAA0B,EAAE,OAAsB;QAClF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,4CAA8B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;eACpF,CAAC,OAAO,CAAC,SAAS,kDAAiC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3F,CAAC;YACF,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;aAEuB,eAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC;QACpE,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,qBAAqB;KAChC,CAHiC,AAGhC,CAAC;IAEI,KAAK,CAAC,kBAAkB,CAAC,OAAsB,EAAE,EAAuB,EAAE,OAA2B;QAE3G,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9J,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjE,MAAM,QAAQ,GAAwC;YACrD,QAAQ,EAAE,KAAK,EAAE,MAAsB,EAAE,OAAiB,EAAE,EAAE;gBAC7D,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;gBACrK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,SAAU,EAAE,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACtB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAsB,EAAE,KAAwB,EAAE,EAAE;gBACnE,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACnC,OAAO;gBACR,CAAC;gBAED,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAEtC,IAAI,UAAU,EAAE,CAAC;oBAChB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG;wBACrB,cAAc,CAAC,eAAe;wBAC9B,cAAc,CAAC,cAAc;wBAC7B,cAAc,CAAC,eAAe;wBAC9B,cAAc,CAAC,YAAY;wBAC3B,cAAc,CAAC,MAAM;qBACrB,CAAC;oBAEF,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC1F,CAAC;gBAED,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,CAAC,MAAkC,EAAE,EAAE;gBAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;oBACpC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC9C,kBAAkB,CAAC,KAAK,EAAE,CAAC;oBAC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,mEAAmE;wBACnE,MAAM,WAAW,GAA4B,CAAC,WAAW,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;4BACpF,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;4BAClG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAC9E,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClD,MAAM,WAAW,GAA4B,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAC9I,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;wBACpC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;wBAClC,IAAI,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;4BAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;4BACnJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAqB,EAAE,0CAA0C,EAAE,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;wBAC7J,CAAC;oBACF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC5B,CAAC;YACF,CAAC;SACD,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC7B,kBAAkB,EAClB,IAAI,EACJ,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EACnF,QAAQ,EACR,MAAM,EACN,SAAS,EACT,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,QAAQ,CAAC,QAAmB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,+BAAuB,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAEtB,wCAAwC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;QAEpE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACjB,CAAC;IAEO,kBAAkB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7G,CAAC;IAEO,oBAAoB,CAAC,OAAsB,EAAE,EAAuB,EAAE,OAA2B;QACxG,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAW,EAAE,CAAC,CAAC;YACtE,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SACxF,CAAC,CAAC,CAAC;QAEJ,IAAI,OAAO,CAAC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACpI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvC,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,QAAQ,CAAC,GAAiB,EAAE,eAAe,CAAC;gBACnD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;aACD,CAAC,CAAC,CAAC;gBACH,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,QAAQ,CAAC,GAAiB,EAAE,eAAe,CAAC;gBACnD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;;AA9WW,oBAAoB;IAqB9B,WAAA,cAAc,CAAA;IACd,WAAA,kBAAkB,CAAA;IAClB,WAAA,qBAAqB,CAAA;IACrB,WAAA,wBAAwB,CAAA;IACxB,WAAA,sBAAsB,CAAA;IACtB,WAAA,eAAe,CAAA;IACf,WAAA,qBAAqB,CAAA;IACrB,WAAA,oBAAoB,CAAA;IACpB,WAAA,qBAAqB,CAAA;IACrB,YAAA,sBAAsB,CAAA;GA9BZ,oBAAoB,CA+WhC;;AAED,0BAA0B,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;IAC/C,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,KAAwB,EAAQ,EAAE;QACnF,IAAI,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,OAAO,CAAC,kBAAkB,QAAQ,wBAAwB,KAAK,KAAK,CAAC,CAAC;QACjF,CAAC;IACF,CAAC,CAAC;IAEF,sBAAsB,CAAC,0BAA0B,EAAE,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC7F,MAAM,wBAAwB,GAAG,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;IAEhF,IAAI,wBAAwB,EAAE,CAAC;QAC9B,SAAS,CAAC,OAAO,CAAC,yDAAyD,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,wBAAwB,6BAA6B,CAAC,CAAC;IACtL,CAAC;AACF,CAAC,CAAC,CAAC","file":"codeActionController.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 { getDomNodePagePosition } from '../../../../base/browser/dom.js';\nimport * as aria from '../../../../base/browser/ui/aria/aria.js';\nimport { IAnchor } from '../../../../base/browser/ui/contextview/contextview.js';\nimport { IAction } from '../../../../base/common/actions.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { Color } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js';\nimport { Lazy } from '../../../../base/common/lazy.js';\nimport { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { localize } from '../../../../nls.js';\nimport { IActionListDelegate } from '../../../../platform/actionWidget/browser/actionList.js';\nimport { IActionWidgetService } from '../../../../platform/actionWidget/browser/actionWidget.js';\nimport { ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IMarkerService } from '../../../../platform/markers/common/markers.js';\nimport { IEditorProgressService } from '../../../../platform/progress/common/progress.js';\nimport { editorFindMatchHighlight, editorFindMatchHighlightBorder } from '../../../../platform/theme/common/colorRegistry.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IEditorContribution, ScrollType } from '../../../common/editorCommon.js';\nimport { CodeActionTriggerType } from '../../../common/languages.js';\nimport { IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { MessageController } from '../../message/browser/messageController.js';\nimport { CodeActionAutoApply, CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types.js';\nimport { ApplyCodeActionReason, applyCodeAction } from './codeAction.js';\nimport { CodeActionKeybindingResolver } from './codeActionKeybindingResolver.js';\nimport { toMenuItems } from './codeActionMenu.js';\nimport { CodeActionModel, CodeActionsState } from './codeActionModel.js';\nimport { LightBulbWidget } from './lightBulbWidget.js';\n\ninterface IActionShowOptions {\n\treadonly includeDisabledActions?: boolean;\n\treadonly fromLightbulb?: boolean;\n}\n\n\nconst DECORATION_CLASS_NAME = 'quickfix-edit-highlight';\n\nexport class CodeActionController extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.codeActionController';\n\n\tpublic static get(editor: ICodeEditor): CodeActionController | null {\n\t\treturn editor.getContribution<CodeActionController>(CodeActionController.ID);\n\t}\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _model: CodeActionModel;\n\n\tprivate readonly _lightBulbWidget: Lazy<LightBulbWidget | null>;\n\tprivate readonly _activeCodeActions = this._register(new MutableDisposable<CodeActionSet>());\n\tprivate _showDisabled = false;\n\n\tprivate readonly _resolver: CodeActionKeybindingResolver;\n\n\tprivate _disposed = false;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IMarkerService markerService: IMarkerService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t\t@IEditorProgressService progressService: IEditorProgressService,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@IActionWidgetService private readonly _actionWidgetService: IActionWidgetService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IEditorProgressService private readonly _progressService: IEditorProgressService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._model = this._register(new CodeActionModel(this._editor, languageFeaturesService.codeActionProvider, markerService, contextKeyService, progressService, _configurationService));\n\t\tthis._register(this._model.onDidChangeState(newState => this.update(newState)));\n\n\t\tthis._lightBulbWidget = new Lazy(() => {\n\t\t\tconst widget = this._editor.getContribution<LightBulbWidget>(LightBulbWidget.ID);\n\t\t\tif (widget) {\n\t\t\t\tthis._register(widget.onClick(e => this.showCodeActionsFromLightbulb(e.actions, e)));\n\t\t\t}\n\t\t\treturn widget;\n\t\t});\n\n\t\tthis._resolver = instantiationService.createInstance(CodeActionKeybindingResolver);\n\n\t\tthis._register(this._editor.onDidLayoutChange(() => this._actionWidgetService.hide()));\n\t}\n\n\toverride dispose() {\n\t\tthis._disposed = true;\n\t\tsuper.dispose();\n\t}\n\n\tprivate async showCodeActionsFromLightbulb(actions: CodeActionSet, at: IAnchor | IPosition): Promise<void> {\n\t\tif (actions.allAIFixes && actions.validActions.length === 1) {\n\t\t\tconst actionItem = actions.validActions[0];\n\t\t\tconst command = actionItem.action.command;\n\t\t\tif (command && command.id === 'inlineChat.start') {\n\t\t\t\tif (command.arguments && command.arguments.length >= 1) {\n\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\tcommand.arguments[0] = { ...(command.arguments[0] as any), autoSend: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait this.applyCodeAction(actionItem, false, false, ApplyCodeActionReason.FromAILightbulb);\n\t\t\treturn;\n\t\t}\n\t\tawait this.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: true });\n\t}\n\n\tpublic showCodeActions(_trigger: CodeActionTrigger, actions: CodeActionSet, at: IAnchor | IPosition) {\n\t\treturn this.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: false });\n\t}\n\n\tpublic manualTriggerAtCurrentPosition(\n\t\tnotAvailableMessage: string,\n\t\ttriggerAction: CodeActionTriggerSource,\n\t\tfilter?: CodeActionFilter,\n\t\tautoApply?: CodeActionAutoApply,\n\t): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tMessageController.get(this._editor)?.closeMessage();\n\t\tconst triggerPosition = this._editor.getPosition();\n\t\tthis._trigger({ type: CodeActionTriggerType.Invoke, triggerAction, filter, autoApply, context: { notAvailableMessage, position: triggerPosition } });\n\t}\n\n\tprivate _trigger(trigger: CodeActionTrigger) {\n\t\treturn this._model.trigger(trigger);\n\t}\n\n\tasync applyCodeAction(action: CodeActionItem, retrigger: boolean, preview: boolean, actionReason: ApplyCodeActionReason): Promise<void> {\n\t\tconst progress = this._progressService.show(true, 500);\n\t\ttry {\n\t\t\tawait this._instantiationService.invokeFunction(applyCodeAction, action, actionReason, { preview, editor: this._editor });\n\t\t} finally {\n\t\t\tif (retrigger) {\n\t\t\t\tthis._trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.QuickFix, filter: {} });\n\t\t\t}\n\t\t\tprogress.done();\n\t\t}\n\t}\n\n\tpublic hideLightBulbWidget(): void {\n\t\tthis._lightBulbWidget.rawValue?.hide();\n\t\tthis._lightBulbWidget.rawValue?.gutterHide();\n\t}\n\n\tprivate async update(newState: CodeActionsState.State): Promise<void> {\n\t\tif (newState.type !== CodeActionsState.Type.Triggered) {\n\t\t\tthis.hideLightBulbWidget();\n\t\t\treturn;\n\t\t}\n\n\t\tlet actions: CodeActionSet;\n\t\ttry {\n\t\t\tactions = await newState.actions;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tconst selection = this._editor.getSelection();\n\t\tif (selection?.startLineNumber !== newState.position.lineNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lightBulbWidget.value?.update(actions, newState.trigger, newState.position);\n\n\t\tif (newState.trigger.type === CodeActionTriggerType.Invoke) {\n\t\t\tif (newState.trigger.filter?.include) { // Triggered for specific scope\n\t\t\t\t// Check to see if we want to auto apply.\n\n\t\t\t\tconst validActionToApply = this.tryGetValidActionToApply(newState.trigger, actions);\n\t\t\t\tif (validActionToApply) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.hideLightBulbWidget();\n\t\t\t\t\t\tawait this.applyCodeAction(validActionToApply, false, false, ApplyCodeActionReason.FromCodeActions);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tactions.dispose();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check to see if there is an action that we would have applied were it not invalid\n\t\t\t\tif (newState.trigger.context) {\n\t\t\t\t\tconst invalidAction = this.getInvalidActionThatWouldHaveBeenApplied(newState.trigger, actions);\n\t\t\t\t\tif (invalidAction && invalidAction.action.disabled) {\n\t\t\t\t\t\tMessageController.get(this._editor)?.showMessage(invalidAction.action.disabled, newState.trigger.context.position);\n\t\t\t\t\t\tactions.dispose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst includeDisabledActions = !!newState.trigger.filter?.include;\n\t\t\tif (newState.trigger.context) {\n\t\t\t\tif (!actions.allActions.length || !includeDisabledActions && !actions.validActions.length) {\n\t\t\t\t\tMessageController.get(this._editor)?.showMessage(newState.trigger.context.notAvailableMessage, newState.trigger.context.position);\n\t\t\t\t\tthis._activeCodeActions.value = actions;\n\t\t\t\t\tactions.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._activeCodeActions.value = actions;\n\t\t\tthis.showCodeActionList(actions, this.toCoords(newState.position), { includeDisabledActions, fromLightbulb: false });\n\t\t} else {\n\t\t\t// auto magically triggered\n\t\t\tif (this._actionWidgetService.isVisible) {\n\t\t\t\t// TODO: Figure out if we should update the showing menu?\n\t\t\t\tactions.dispose();\n\t\t\t} else {\n\t\t\t\tthis._activeCodeActions.value = actions;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getInvalidActionThatWouldHaveBeenApplied(trigger: CodeActionTrigger, actions: CodeActionSet): CodeActionItem | undefined {\n\t\tif (!actions.allActions.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ((trigger.autoApply === CodeActionAutoApply.First && actions.validActions.length === 0)\n\t\t\t|| (trigger.autoApply === CodeActionAutoApply.IfSingle && actions.allActions.length === 1)\n\t\t) {\n\t\t\treturn actions.allActions.find(({ action }) => action.disabled);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate tryGetValidActionToApply(trigger: CodeActionTrigger, actions: CodeActionSet): CodeActionItem | undefined {\n\t\tif (!actions.validActions.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ((trigger.autoApply === CodeActionAutoApply.First && actions.validActions.length > 0)\n\t\t\t|| (trigger.autoApply === CodeActionAutoApply.IfSingle && actions.validActions.length === 1)\n\t\t) {\n\t\t\treturn actions.validActions[0];\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate static readonly DECORATION = ModelDecorationOptions.register({\n\t\tdescription: 'quickfix-highlight',\n\t\tclassName: DECORATION_CLASS_NAME\n\t});\n\n\tpublic async showCodeActionList(actions: CodeActionSet, at: IAnchor | IPosition, options: IActionShowOptions): Promise<void> {\n\n\t\tconst currentDecorations = this._editor.createDecorationsCollection();\n\n\t\tconst editorDom = this._editor.getDomNode();\n\t\tif (!editorDom) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst actionsToShow = options.includeDisabledActions && (this._showDisabled || actions.validActions.length === 0) ? actions.allActions : actions.validActions;\n\t\tif (!actionsToShow.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst anchor = Position.isIPosition(at) ? this.toCoords(at) : at;\n\n\t\tconst delegate: IActionListDelegate<CodeActionItem> = {\n\t\t\tonSelect: async (action: CodeActionItem, preview?: boolean) => {\n\t\t\t\tthis.applyCodeAction(action, /* retrigger */ true, !!preview, options.fromLightbulb ? ApplyCodeActionReason.FromAILightbulb : ApplyCodeActionReason.FromCodeActions);\n\t\t\t\tthis._actionWidgetService.hide(false);\n\t\t\t\tcurrentDecorations.clear();\n\t\t\t},\n\t\t\tonHide: (didCancel?) => {\n\t\t\t\tthis._editor?.focus();\n\t\t\t\tcurrentDecorations.clear();\n\t\t\t},\n\t\t\tonHover: async (action: CodeActionItem, token: CancellationToken) => {\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet canPreview = false;\n\t\t\t\tconst actionKind = action.action.kind;\n\n\t\t\t\tif (actionKind) {\n\t\t\t\t\tconst hierarchicalKind = new HierarchicalKind(actionKind);\n\t\t\t\t\tconst refactorKinds = [\n\t\t\t\t\t\tCodeActionKind.RefactorExtract,\n\t\t\t\t\t\tCodeActionKind.RefactorInline,\n\t\t\t\t\t\tCodeActionKind.RefactorRewrite,\n\t\t\t\t\t\tCodeActionKind.RefactorMove,\n\t\t\t\t\t\tCodeActionKind.Source\n\t\t\t\t\t];\n\n\t\t\t\t\tcanPreview = refactorKinds.some(refactorKind => refactorKind.contains(hierarchicalKind));\n\t\t\t\t}\n\n\t\t\t\treturn { canPreview: canPreview || !!action.action.edit?.edits.length };\n\t\t\t},\n\t\t\tonFocus: (action: CodeActionItem | undefined) => {\n\t\t\t\tif (action && action.action) {\n\t\t\t\t\tconst ranges = action.action.ranges;\n\t\t\t\t\tconst diagnostics = action.action.diagnostics;\n\t\t\t\t\tcurrentDecorations.clear();\n\t\t\t\t\tif (ranges && ranges.length > 0) {\n\t\t\t\t\t\t// Handles case for `fix all` where there are multiple diagnostics.\n\t\t\t\t\t\tconst decorations: IModelDeltaDecoration[] = (diagnostics && diagnostics?.length > 1)\n\t\t\t\t\t\t\t? diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }))\n\t\t\t\t\t\t\t: ranges.map(range => ({ range, options: CodeActionController.DECORATION }));\n\t\t\t\t\t\tcurrentDecorations.set(decorations);\n\t\t\t\t\t} else if (diagnostics && diagnostics.length > 0) {\n\t\t\t\t\t\tconst decorations: IModelDeltaDecoration[] = diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }));\n\t\t\t\t\t\tcurrentDecorations.set(decorations);\n\t\t\t\t\t\tconst diagnostic = diagnostics[0];\n\t\t\t\t\t\tif (diagnostic.startLineNumber && diagnostic.startColumn) {\n\t\t\t\t\t\t\tconst selectionText = this._editor.getModel()?.getWordAtPosition({ lineNumber: diagnostic.startLineNumber, column: diagnostic.startColumn })?.word;\n\t\t\t\t\t\t\taria.status(localize('editingNewSelection', \"Context: {0} at line {1} and column {2}.\", selectionText, diagnostic.startLineNumber, diagnostic.startColumn));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcurrentDecorations.clear();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._actionWidgetService.show(\n\t\t\t'codeActionWidget',\n\t\t\ttrue,\n\t\t\ttoMenuItems(actionsToShow, this._shouldShowHeaders(), this._resolver.getResolver()),\n\t\t\tdelegate,\n\t\t\tanchor,\n\t\t\teditorDom,\n\t\t\tthis._getActionBarActions(actions, at, options));\n\t}\n\n\tprivate toCoords(position: IPosition): IAnchor {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn { x: 0, y: 0 };\n\t\t}\n\n\t\tthis._editor.revealPosition(position, ScrollType.Immediate);\n\t\tthis._editor.render();\n\n\t\t// Translate to absolute editor position\n\t\tconst cursorCoords = this._editor.getScrolledVisiblePosition(position);\n\t\tconst editorCoords = getDomNodePagePosition(this._editor.getDomNode());\n\t\tconst x = editorCoords.left + cursorCoords.left;\n\t\tconst y = editorCoords.top + cursorCoords.top + cursorCoords.height;\n\n\t\treturn { x, y };\n\t}\n\n\tprivate _shouldShowHeaders(): boolean {\n\t\tconst model = this._editor?.getModel();\n\t\treturn this._configurationService.getValue('editor.codeActionWidget.showHeaders', { resource: model?.uri });\n\t}\n\n\tprivate _getActionBarActions(actions: CodeActionSet, at: IAnchor | IPosition, options: IActionShowOptions): IAction[] {\n\t\tif (options.fromLightbulb) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst resultActions = actions.documentation.map((command): IAction => ({\n\t\t\tid: command.id,\n\t\t\tlabel: command.title,\n\t\t\ttooltip: command.tooltip ?? '',\n\t\t\tclass: undefined,\n\t\t\tenabled: true,\n\t\t\trun: () => this._commandService.executeCommand(command.id, ...(command.arguments ?? [])),\n\t\t}));\n\n\t\tif (options.includeDisabledActions && actions.validActions.length > 0 && actions.allActions.length !== actions.validActions.length) {\n\t\t\tresultActions.push(this._showDisabled ? {\n\t\t\t\tid: 'hideMoreActions',\n\t\t\t\tlabel: localize('hideMoreActions', 'Hide Disabled'),\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: '',\n\t\t\t\tclass: undefined,\n\t\t\t\trun: () => {\n\t\t\t\t\tthis._showDisabled = false;\n\t\t\t\t\treturn this.showCodeActionList(actions, at, options);\n\t\t\t\t}\n\t\t\t} : {\n\t\t\t\tid: 'showMoreActions',\n\t\t\t\tlabel: localize('showMoreActions', 'Show Disabled'),\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: '',\n\t\t\t\tclass: undefined,\n\t\t\t\trun: () => {\n\t\t\t\t\tthis._showDisabled = true;\n\t\t\t\t\treturn this.showCodeActionList(actions, at, options);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn resultActions;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst addBackgroundColorRule = (selector: string, color: Color | undefined): void => {\n\t\tif (color) {\n\t\t\tcollector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`);\n\t\t}\n\t};\n\n\taddBackgroundColorRule('.quickfix-edit-highlight', theme.getColor(editorFindMatchHighlight));\n\tconst findMatchHighlightBorder = theme.getColor(editorFindMatchHighlightBorder);\n\n\tif (findMatchHighlightBorder) {\n\t\tcollector.addRule(`.monaco-editor .quickfix-edit-highlight { border: 1px ${isHighContrast(theme.type) ? 'dotted' : 'solid'} ${findMatchHighlightBorder}; box-sizing: border-box; }`);\n\t}\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/editor/contrib/codeAction/browser/codeActionController.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAKjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4DAA4D,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,oDAAoD,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAE/F,OAAO,EAAa,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAIvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAyD,cAAc,EAAoC,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACtK,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQvD,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAEjD,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,UAAU;;aAE5B,OAAE,GAAG,qCAAH,AAAwC,CAAC;IAE3D,MAAM,CAAC,GAAG,CAAC,MAAmB;QACpC,OAAO,MAAM,CAAC,eAAe,CAAuB,sBAAoB,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAaD,YACC,MAAmB,EACH,aAA6B,EACzB,iBAAqC,EAClC,oBAA2C,EACxC,uBAAiD,EACnD,eAAuC,EAC9C,eAAiD,EAC3C,qBAA6D,EAC9D,oBAA2D,EAC1D,qBAA6D,EAC5D,gBAAyD;QAEjF,KAAK,EAAE,CAAC;QAN0B,oBAAe,GAAf,eAAe,CAAiB;QAC1B,0BAAqB,GAArB,qBAAqB,CAAuB;QAC7C,yBAAoB,GAApB,oBAAoB,CAAsB;QACzC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC3C,qBAAgB,GAAhB,gBAAgB,CAAwB;QAlBjE,uBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAiB,CAAC,CAAC;QACrF,kBAAa,GAAG,KAAK,CAAC;QAItB,cAAS,GAAG,KAAK,CAAC;QAiBzB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;QACtL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAkB,eAAe,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC;QAEnF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAEQ,OAAO;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,KAAK,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,OAAsB,EAAE,EAAuB;QACzF,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1C,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAClD,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBACrE,CAAC;YACF,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;YAC5F,OAAO;QACR,CAAC;QACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IAEM,eAAe,CAAC,QAA2B,EAAE,OAAsB,EAAE,EAAuB;QAClG,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IAEM,8BAA8B,CACpC,mBAA2B,EAC3B,aAAsC,EACtC,MAAyB,EACzB,SAA+B;QAE/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9B,OAAO;QACR,CAAC;QAED,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,sCAA8B,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;IACtJ,CAAC;IAEO,QAAQ,CAAC,OAA0B;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAsB,EAAE,SAAkB,EAAE,OAAgB,EAAE,YAAmC;QACtH,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3H,CAAC;gBAAS,CAAC;YACV,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,oCAA4B,EAAE,aAAa,EAAE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAClH,CAAC;YACD,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACF,CAAC;IAEM,mBAAmB;QACzB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,QAAgC;QACpD,IAAI,QAAQ,CAAC,IAAI,4CAAoC,EAAE,CAAC;YACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACJ,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,iBAAiB,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,eAAe,KAAK,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjE,OAAO;QACR,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAElF,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,yCAAiC,EAAE,CAAC;YAC5D,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,+BAA+B;gBACtE,yCAAyC;gBAEzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpF,IAAI,kBAAkB,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC3B,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;oBACrG,CAAC;4BAAS,CAAC;wBACV,OAAO,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,oFAAoF;gBACpF,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,wCAAwC,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/F,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpD,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACnH,OAAO,CAAC,OAAO,EAAE,CAAC;wBAClB,OAAO;oBACR,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,sBAAsB,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;YAClE,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,sBAAsB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;oBAC3F,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAClI,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxC,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO;gBACR,CAAC;YACF,CAAC;YAED,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QACtH,CAAC;aAAM,CAAC;YACP,2BAA2B;YAC3B,IAAI,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,CAAC;gBACzC,yDAAyD;gBACzD,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,OAAO,CAAC;YACzC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,wCAAwC,CAAC,OAA0B,EAAE,OAAsB;QAClG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,4CAA8B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;eACtF,CAAC,OAAO,CAAC,SAAS,kDAAiC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EACzF,CAAC;YACF,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,wBAAwB,CAAC,OAA0B,EAAE,OAAsB;QAClF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,4CAA8B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;eACpF,CAAC,OAAO,CAAC,SAAS,kDAAiC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,EAC3F,CAAC;YACF,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;aAEuB,eAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC;QACpE,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,qBAAqB;KAChC,CAHiC,AAGhC,CAAC;IAEI,KAAK,CAAC,kBAAkB,CAAC,OAAsB,EAAE,EAAuB,EAAE,OAA2B;QAE3G,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QAC9J,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjE,MAAM,QAAQ,GAAwC;YACrD,QAAQ,EAAE,KAAK,EAAE,MAAsB,EAAE,OAAiB,EAAE,EAAE;gBAC7D,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;gBACrK,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,CAAC,SAAU,EAAE,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACtB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAsB,EAAE,KAAwB,EAAE,EAAE;gBACnE,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACnC,OAAO;gBACR,CAAC;gBAED,IAAI,UAAU,GAAG,KAAK,CAAC;gBACvB,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAEtC,IAAI,UAAU,EAAE,CAAC;oBAChB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG;wBACrB,cAAc,CAAC,eAAe;wBAC9B,cAAc,CAAC,cAAc;wBAC7B,cAAc,CAAC,eAAe;wBAC9B,cAAc,CAAC,YAAY;wBAC3B,cAAc,CAAC,MAAM;qBACrB,CAAC;oBAEF,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC1F,CAAC;gBAED,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,CAAC,MAAkC,EAAE,EAAE;gBAC/C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;oBACpC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC9C,kBAAkB,CAAC,KAAK,EAAE,CAAC;oBAC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,mEAAmE;wBACnE,MAAM,WAAW,GAA4B,CAAC,WAAW,IAAI,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC;4BACpF,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;4BAClG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAC9E,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAClD,MAAM,WAAW,GAA4B,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;wBAC9I,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;wBACpC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;wBAClC,IAAI,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;4BAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;4BACnJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAqB,EAAE,0CAA0C,EAAE,aAAa,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;wBAC7J,CAAC;oBACF,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC5B,CAAC;YACF,CAAC;SACD,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC7B,kBAAkB,EAClB,IAAI,EACJ,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EACnF,QAAQ,EACR,MAAM,EACN,SAAS,EACT,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,QAAQ,CAAC,QAAmB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,+BAAuB,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAEtB,wCAAwC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAChD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;QAEpE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACjB,CAAC;IAEO,kBAAkB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7G,CAAC;IAEO,oBAAoB,CAAC,OAAsB,EAAE,EAAuB,EAAE,OAA2B;QACxG,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAW,EAAE,CAAC,CAAC;YACtE,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SACxF,CAAC,CAAC,CAAC;QAEJ,IAAI,OAAO,CAAC,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACpI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvC,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,QAAQ,CAAC,GAAiB,EAAE,eAAe,CAAC;gBACnD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;aACD,CAAC,CAAC,CAAC;gBACH,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,QAAQ,CAAC,GAAiB,EAAE,eAAe,CAAC;gBACnD,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;;AA7WW,oBAAoB;IAqB9B,WAAA,cAAc,CAAA;IACd,WAAA,kBAAkB,CAAA;IAClB,WAAA,qBAAqB,CAAA;IACrB,WAAA,wBAAwB,CAAA;IACxB,WAAA,sBAAsB,CAAA;IACtB,WAAA,eAAe,CAAA;IACf,WAAA,qBAAqB,CAAA;IACrB,WAAA,oBAAoB,CAAA;IACpB,WAAA,qBAAqB,CAAA;IACrB,YAAA,sBAAsB,CAAA;GA9BZ,oBAAoB,CA8WhC;;AAED,0BAA0B,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;IAC/C,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,KAAwB,EAAQ,EAAE;QACnF,IAAI,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,OAAO,CAAC,kBAAkB,QAAQ,wBAAwB,KAAK,KAAK,CAAC,CAAC;QACjF,CAAC;IACF,CAAC,CAAC;IAEF,sBAAsB,CAAC,0BAA0B,EAAE,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC7F,MAAM,wBAAwB,GAAG,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;IAEhF,IAAI,wBAAwB,EAAE,CAAC;QAC9B,SAAS,CAAC,OAAO,CAAC,yDAAyD,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,wBAAwB,6BAA6B,CAAC,CAAC;IACtL,CAAC;AACF,CAAC,CAAC,CAAC","file":"codeActionController.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 { getDomNodePagePosition } from '../../../../base/browser/dom.js';\nimport * as aria from '../../../../base/browser/ui/aria/aria.js';\nimport { IAnchor } from '../../../../base/browser/ui/contextview/contextview.js';\nimport { IAction } from '../../../../base/common/actions.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { Color } from '../../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js';\nimport { Lazy } from '../../../../base/common/lazy.js';\nimport { Disposable, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { localize } from '../../../../nls.js';\nimport { IActionListDelegate } from '../../../../platform/actionWidget/browser/actionList.js';\nimport { IActionWidgetService } from '../../../../platform/actionWidget/browser/actionWidget.js';\nimport { ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IMarkerService } from '../../../../platform/markers/common/markers.js';\nimport { IEditorProgressService } from '../../../../platform/progress/common/progress.js';\nimport { editorFindMatchHighlight, editorFindMatchHighlightBorder } from '../../../../platform/theme/common/colorRegistry.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IEditorContribution, ScrollType } from '../../../common/editorCommon.js';\nimport { CodeActionTriggerType } from '../../../common/languages.js';\nimport { IModelDeltaDecoration } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { MessageController } from '../../message/browser/messageController.js';\nimport { CodeActionAutoApply, CodeActionFilter, CodeActionItem, CodeActionKind, CodeActionSet, CodeActionTrigger, CodeActionTriggerSource } from '../common/types.js';\nimport { ApplyCodeActionReason, applyCodeAction } from './codeAction.js';\nimport { CodeActionKeybindingResolver } from './codeActionKeybindingResolver.js';\nimport { toMenuItems } from './codeActionMenu.js';\nimport { CodeActionModel, CodeActionsState } from './codeActionModel.js';\nimport { LightBulbWidget } from './lightBulbWidget.js';\n\ninterface IActionShowOptions {\n\treadonly includeDisabledActions?: boolean;\n\treadonly fromLightbulb?: boolean;\n}\n\n\nconst DECORATION_CLASS_NAME = 'quickfix-edit-highlight';\n\nexport class CodeActionController extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.codeActionController';\n\n\tpublic static get(editor: ICodeEditor): CodeActionController | null {\n\t\treturn editor.getContribution<CodeActionController>(CodeActionController.ID);\n\t}\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _model: CodeActionModel;\n\n\tprivate readonly _lightBulbWidget: Lazy<LightBulbWidget | null>;\n\tprivate readonly _activeCodeActions = this._register(new MutableDisposable<CodeActionSet>());\n\tprivate _showDisabled = false;\n\n\tprivate readonly _resolver: CodeActionKeybindingResolver;\n\n\tprivate _disposed = false;\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@IMarkerService markerService: IMarkerService,\n\t\t@IContextKeyService contextKeyService: IContextKeyService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t\t@IEditorProgressService progressService: IEditorProgressService,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@IActionWidgetService private readonly _actionWidgetService: IActionWidgetService,\n\t\t@IInstantiationService private readonly _instantiationService: IInstantiationService,\n\t\t@IEditorProgressService private readonly _progressService: IEditorProgressService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._model = this._register(new CodeActionModel(this._editor, languageFeaturesService.codeActionProvider, markerService, contextKeyService, progressService, _configurationService));\n\t\tthis._register(this._model.onDidChangeState(newState => this.update(newState)));\n\n\t\tthis._lightBulbWidget = new Lazy(() => {\n\t\t\tconst widget = this._editor.getContribution<LightBulbWidget>(LightBulbWidget.ID);\n\t\t\tif (widget) {\n\t\t\t\tthis._register(widget.onClick(e => this.showCodeActionsFromLightbulb(e.actions, e)));\n\t\t\t}\n\t\t\treturn widget;\n\t\t});\n\n\t\tthis._resolver = instantiationService.createInstance(CodeActionKeybindingResolver);\n\n\t\tthis._register(this._editor.onDidLayoutChange(() => this._actionWidgetService.hide()));\n\t}\n\n\toverride dispose() {\n\t\tthis._disposed = true;\n\t\tsuper.dispose();\n\t}\n\n\tprivate async showCodeActionsFromLightbulb(actions: CodeActionSet, at: IAnchor | IPosition): Promise<void> {\n\t\tif (actions.allAIFixes && actions.validActions.length === 1) {\n\t\t\tconst actionItem = actions.validActions[0];\n\t\t\tconst command = actionItem.action.command;\n\t\t\tif (command && command.id === 'inlineChat.start') {\n\t\t\t\tif (command.arguments && command.arguments.length >= 1 && command.arguments[0]) {\n\t\t\t\t\tcommand.arguments[0] = { ...command.arguments[0], autoSend: false };\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait this.applyCodeAction(actionItem, false, false, ApplyCodeActionReason.FromAILightbulb);\n\t\t\treturn;\n\t\t}\n\t\tawait this.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: true });\n\t}\n\n\tpublic showCodeActions(_trigger: CodeActionTrigger, actions: CodeActionSet, at: IAnchor | IPosition) {\n\t\treturn this.showCodeActionList(actions, at, { includeDisabledActions: false, fromLightbulb: false });\n\t}\n\n\tpublic manualTriggerAtCurrentPosition(\n\t\tnotAvailableMessage: string,\n\t\ttriggerAction: CodeActionTriggerSource,\n\t\tfilter?: CodeActionFilter,\n\t\tautoApply?: CodeActionAutoApply,\n\t): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tMessageController.get(this._editor)?.closeMessage();\n\t\tconst triggerPosition = this._editor.getPosition();\n\t\tthis._trigger({ type: CodeActionTriggerType.Invoke, triggerAction, filter, autoApply, context: { notAvailableMessage, position: triggerPosition } });\n\t}\n\n\tprivate _trigger(trigger: CodeActionTrigger) {\n\t\treturn this._model.trigger(trigger);\n\t}\n\n\tasync applyCodeAction(action: CodeActionItem, retrigger: boolean, preview: boolean, actionReason: ApplyCodeActionReason): Promise<void> {\n\t\tconst progress = this._progressService.show(true, 500);\n\t\ttry {\n\t\t\tawait this._instantiationService.invokeFunction(applyCodeAction, action, actionReason, { preview, editor: this._editor });\n\t\t} finally {\n\t\t\tif (retrigger) {\n\t\t\t\tthis._trigger({ type: CodeActionTriggerType.Auto, triggerAction: CodeActionTriggerSource.QuickFix, filter: {} });\n\t\t\t}\n\t\t\tprogress.done();\n\t\t}\n\t}\n\n\tpublic hideLightBulbWidget(): void {\n\t\tthis._lightBulbWidget.rawValue?.hide();\n\t\tthis._lightBulbWidget.rawValue?.gutterHide();\n\t}\n\n\tprivate async update(newState: CodeActionsState.State): Promise<void> {\n\t\tif (newState.type !== CodeActionsState.Type.Triggered) {\n\t\t\tthis.hideLightBulbWidget();\n\t\t\treturn;\n\t\t}\n\n\t\tlet actions: CodeActionSet;\n\t\ttry {\n\t\t\tactions = await newState.actions;\n\t\t} catch (e) {\n\t\t\tonUnexpectedError(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tconst selection = this._editor.getSelection();\n\t\tif (selection?.startLineNumber !== newState.position.lineNumber) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lightBulbWidget.value?.update(actions, newState.trigger, newState.position);\n\n\t\tif (newState.trigger.type === CodeActionTriggerType.Invoke) {\n\t\t\tif (newState.trigger.filter?.include) { // Triggered for specific scope\n\t\t\t\t// Check to see if we want to auto apply.\n\n\t\t\t\tconst validActionToApply = this.tryGetValidActionToApply(newState.trigger, actions);\n\t\t\t\tif (validActionToApply) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.hideLightBulbWidget();\n\t\t\t\t\t\tawait this.applyCodeAction(validActionToApply, false, false, ApplyCodeActionReason.FromCodeActions);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tactions.dispose();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check to see if there is an action that we would have applied were it not invalid\n\t\t\t\tif (newState.trigger.context) {\n\t\t\t\t\tconst invalidAction = this.getInvalidActionThatWouldHaveBeenApplied(newState.trigger, actions);\n\t\t\t\t\tif (invalidAction && invalidAction.action.disabled) {\n\t\t\t\t\t\tMessageController.get(this._editor)?.showMessage(invalidAction.action.disabled, newState.trigger.context.position);\n\t\t\t\t\t\tactions.dispose();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst includeDisabledActions = !!newState.trigger.filter?.include;\n\t\t\tif (newState.trigger.context) {\n\t\t\t\tif (!actions.allActions.length || !includeDisabledActions && !actions.validActions.length) {\n\t\t\t\t\tMessageController.get(this._editor)?.showMessage(newState.trigger.context.notAvailableMessage, newState.trigger.context.position);\n\t\t\t\t\tthis._activeCodeActions.value = actions;\n\t\t\t\t\tactions.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._activeCodeActions.value = actions;\n\t\t\tthis.showCodeActionList(actions, this.toCoords(newState.position), { includeDisabledActions, fromLightbulb: false });\n\t\t} else {\n\t\t\t// auto magically triggered\n\t\t\tif (this._actionWidgetService.isVisible) {\n\t\t\t\t// TODO: Figure out if we should update the showing menu?\n\t\t\t\tactions.dispose();\n\t\t\t} else {\n\t\t\t\tthis._activeCodeActions.value = actions;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getInvalidActionThatWouldHaveBeenApplied(trigger: CodeActionTrigger, actions: CodeActionSet): CodeActionItem | undefined {\n\t\tif (!actions.allActions.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ((trigger.autoApply === CodeActionAutoApply.First && actions.validActions.length === 0)\n\t\t\t|| (trigger.autoApply === CodeActionAutoApply.IfSingle && actions.allActions.length === 1)\n\t\t) {\n\t\t\treturn actions.allActions.find(({ action }) => action.disabled);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate tryGetValidActionToApply(trigger: CodeActionTrigger, actions: CodeActionSet): CodeActionItem | undefined {\n\t\tif (!actions.validActions.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif ((trigger.autoApply === CodeActionAutoApply.First && actions.validActions.length > 0)\n\t\t\t|| (trigger.autoApply === CodeActionAutoApply.IfSingle && actions.validActions.length === 1)\n\t\t) {\n\t\t\treturn actions.validActions[0];\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate static readonly DECORATION = ModelDecorationOptions.register({\n\t\tdescription: 'quickfix-highlight',\n\t\tclassName: DECORATION_CLASS_NAME\n\t});\n\n\tpublic async showCodeActionList(actions: CodeActionSet, at: IAnchor | IPosition, options: IActionShowOptions): Promise<void> {\n\n\t\tconst currentDecorations = this._editor.createDecorationsCollection();\n\n\t\tconst editorDom = this._editor.getDomNode();\n\t\tif (!editorDom) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst actionsToShow = options.includeDisabledActions && (this._showDisabled || actions.validActions.length === 0) ? actions.allActions : actions.validActions;\n\t\tif (!actionsToShow.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst anchor = Position.isIPosition(at) ? this.toCoords(at) : at;\n\n\t\tconst delegate: IActionListDelegate<CodeActionItem> = {\n\t\t\tonSelect: async (action: CodeActionItem, preview?: boolean) => {\n\t\t\t\tthis.applyCodeAction(action, /* retrigger */ true, !!preview, options.fromLightbulb ? ApplyCodeActionReason.FromAILightbulb : ApplyCodeActionReason.FromCodeActions);\n\t\t\t\tthis._actionWidgetService.hide(false);\n\t\t\t\tcurrentDecorations.clear();\n\t\t\t},\n\t\t\tonHide: (didCancel?) => {\n\t\t\t\tthis._editor?.focus();\n\t\t\t\tcurrentDecorations.clear();\n\t\t\t},\n\t\t\tonHover: async (action: CodeActionItem, token: CancellationToken) => {\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet canPreview = false;\n\t\t\t\tconst actionKind = action.action.kind;\n\n\t\t\t\tif (actionKind) {\n\t\t\t\t\tconst hierarchicalKind = new HierarchicalKind(actionKind);\n\t\t\t\t\tconst refactorKinds = [\n\t\t\t\t\t\tCodeActionKind.RefactorExtract,\n\t\t\t\t\t\tCodeActionKind.RefactorInline,\n\t\t\t\t\t\tCodeActionKind.RefactorRewrite,\n\t\t\t\t\t\tCodeActionKind.RefactorMove,\n\t\t\t\t\t\tCodeActionKind.Source\n\t\t\t\t\t];\n\n\t\t\t\t\tcanPreview = refactorKinds.some(refactorKind => refactorKind.contains(hierarchicalKind));\n\t\t\t\t}\n\n\t\t\t\treturn { canPreview: canPreview || !!action.action.edit?.edits.length };\n\t\t\t},\n\t\t\tonFocus: (action: CodeActionItem | undefined) => {\n\t\t\t\tif (action && action.action) {\n\t\t\t\t\tconst ranges = action.action.ranges;\n\t\t\t\t\tconst diagnostics = action.action.diagnostics;\n\t\t\t\t\tcurrentDecorations.clear();\n\t\t\t\t\tif (ranges && ranges.length > 0) {\n\t\t\t\t\t\t// Handles case for `fix all` where there are multiple diagnostics.\n\t\t\t\t\t\tconst decorations: IModelDeltaDecoration[] = (diagnostics && diagnostics?.length > 1)\n\t\t\t\t\t\t\t? diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }))\n\t\t\t\t\t\t\t: ranges.map(range => ({ range, options: CodeActionController.DECORATION }));\n\t\t\t\t\t\tcurrentDecorations.set(decorations);\n\t\t\t\t\t} else if (diagnostics && diagnostics.length > 0) {\n\t\t\t\t\t\tconst decorations: IModelDeltaDecoration[] = diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }));\n\t\t\t\t\t\tcurrentDecorations.set(decorations);\n\t\t\t\t\t\tconst diagnostic = diagnostics[0];\n\t\t\t\t\t\tif (diagnostic.startLineNumber && diagnostic.startColumn) {\n\t\t\t\t\t\t\tconst selectionText = this._editor.getModel()?.getWordAtPosition({ lineNumber: diagnostic.startLineNumber, column: diagnostic.startColumn })?.word;\n\t\t\t\t\t\t\taria.status(localize('editingNewSelection', \"Context: {0} at line {1} and column {2}.\", selectionText, diagnostic.startLineNumber, diagnostic.startColumn));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcurrentDecorations.clear();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._actionWidgetService.show(\n\t\t\t'codeActionWidget',\n\t\t\ttrue,\n\t\t\ttoMenuItems(actionsToShow, this._shouldShowHeaders(), this._resolver.getResolver()),\n\t\t\tdelegate,\n\t\t\tanchor,\n\t\t\teditorDom,\n\t\t\tthis._getActionBarActions(actions, at, options));\n\t}\n\n\tprivate toCoords(position: IPosition): IAnchor {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn { x: 0, y: 0 };\n\t\t}\n\n\t\tthis._editor.revealPosition(position, ScrollType.Immediate);\n\t\tthis._editor.render();\n\n\t\t// Translate to absolute editor position\n\t\tconst cursorCoords = this._editor.getScrolledVisiblePosition(position);\n\t\tconst editorCoords = getDomNodePagePosition(this._editor.getDomNode());\n\t\tconst x = editorCoords.left + cursorCoords.left;\n\t\tconst y = editorCoords.top + cursorCoords.top + cursorCoords.height;\n\n\t\treturn { x, y };\n\t}\n\n\tprivate _shouldShowHeaders(): boolean {\n\t\tconst model = this._editor?.getModel();\n\t\treturn this._configurationService.getValue('editor.codeActionWidget.showHeaders', { resource: model?.uri });\n\t}\n\n\tprivate _getActionBarActions(actions: CodeActionSet, at: IAnchor | IPosition, options: IActionShowOptions): IAction[] {\n\t\tif (options.fromLightbulb) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst resultActions = actions.documentation.map((command): IAction => ({\n\t\t\tid: command.id,\n\t\t\tlabel: command.title,\n\t\t\ttooltip: command.tooltip ?? '',\n\t\t\tclass: undefined,\n\t\t\tenabled: true,\n\t\t\trun: () => this._commandService.executeCommand(command.id, ...(command.arguments ?? [])),\n\t\t}));\n\n\t\tif (options.includeDisabledActions && actions.validActions.length > 0 && actions.allActions.length !== actions.validActions.length) {\n\t\t\tresultActions.push(this._showDisabled ? {\n\t\t\t\tid: 'hideMoreActions',\n\t\t\t\tlabel: localize('hideMoreActions', 'Hide Disabled'),\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: '',\n\t\t\t\tclass: undefined,\n\t\t\t\trun: () => {\n\t\t\t\t\tthis._showDisabled = false;\n\t\t\t\t\treturn this.showCodeActionList(actions, at, options);\n\t\t\t\t}\n\t\t\t} : {\n\t\t\t\tid: 'showMoreActions',\n\t\t\t\tlabel: localize('showMoreActions', 'Show Disabled'),\n\t\t\t\tenabled: true,\n\t\t\t\ttooltip: '',\n\t\t\t\tclass: undefined,\n\t\t\t\trun: () => {\n\t\t\t\t\tthis._showDisabled = true;\n\t\t\t\t\treturn this.showCodeActionList(actions, at, options);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn resultActions;\n\t}\n}\n\nregisterThemingParticipant((theme, collector) => {\n\tconst addBackgroundColorRule = (selector: string, color: Color | undefined): void => {\n\t\tif (color) {\n\t\t\tcollector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`);\n\t\t}\n\t};\n\n\taddBackgroundColorRule('.quickfix-edit-highlight', theme.getColor(editorFindMatchHighlight));\n\tconst findMatchHighlightBorder = theme.getColor(editorFindMatchHighlightBorder);\n\n\tif (findMatchHighlightBorder) {\n\t\tcollector.addRule(`.monaco-editor .quickfix-edit-highlight { border: 1px ${isHighContrast(theme.type) ? 'dotted' : 'solid'} ${findMatchHighlightBorder}; box-sizing: border-box; }`);\n\t}\n});\n"]}
|
|
@@ -82,6 +82,28 @@ class ActiveInlayHintInfo {
|
|
|
82
82
|
this.hasTriggerModifier = hasTriggerModifier;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Mix of CancellationTokenSource, DisposableStore and MutableDisposable
|
|
87
|
+
*/
|
|
88
|
+
class CancellationStore {
|
|
89
|
+
constructor() {
|
|
90
|
+
this._store = new MutableDisposable();
|
|
91
|
+
this._tokenSource = new CancellationTokenSource();
|
|
92
|
+
}
|
|
93
|
+
dispose() {
|
|
94
|
+
this._store.dispose();
|
|
95
|
+
this._tokenSource.dispose(true);
|
|
96
|
+
}
|
|
97
|
+
reset() {
|
|
98
|
+
this._tokenSource.dispose(true);
|
|
99
|
+
this._tokenSource = new CancellationTokenSource();
|
|
100
|
+
this._store.value = new DisposableStore();
|
|
101
|
+
return {
|
|
102
|
+
store: this._store.value,
|
|
103
|
+
token: this._tokenSource.token
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
85
107
|
// --- controller
|
|
86
108
|
let InlayHintsController = class InlayHintsController {
|
|
87
109
|
static { InlayHintsController_1 = this; }
|
|
@@ -174,16 +196,15 @@ let InlayHintsController = class InlayHintsController {
|
|
|
174
196
|
}));
|
|
175
197
|
let cts;
|
|
176
198
|
const watchedProviders = new Set();
|
|
199
|
+
this._sessionDisposables.add(model.onWillDispose(() => cts?.cancel()));
|
|
200
|
+
const cancellationStore = this._sessionDisposables.add(new CancellationStore());
|
|
177
201
|
const scheduler = new RunOnceScheduler(async () => {
|
|
178
202
|
const t1 = Date.now();
|
|
179
|
-
|
|
180
|
-
cts = new CancellationTokenSource();
|
|
181
|
-
const listener = model.onWillDispose(() => cts?.cancel());
|
|
203
|
+
const { store, token } = cancellationStore.reset();
|
|
182
204
|
try {
|
|
183
|
-
const
|
|
184
|
-
const inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), myToken);
|
|
205
|
+
const inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), token);
|
|
185
206
|
scheduler.delay = this._debounceInfo.update(model, Date.now() - t1);
|
|
186
|
-
if (
|
|
207
|
+
if (token.isCancellationRequested) {
|
|
187
208
|
inlayHints.dispose();
|
|
188
209
|
return;
|
|
189
210
|
}
|
|
@@ -191,27 +212,22 @@ let InlayHintsController = class InlayHintsController {
|
|
|
191
212
|
for (const provider of inlayHints.provider) {
|
|
192
213
|
if (typeof provider.onDidChangeInlayHints === 'function' && !watchedProviders.has(provider)) {
|
|
193
214
|
watchedProviders.add(provider);
|
|
194
|
-
|
|
215
|
+
store.add(provider.onDidChangeInlayHints(() => {
|
|
195
216
|
if (!scheduler.isScheduled()) { // ignore event when request is already scheduled
|
|
196
217
|
scheduler.schedule();
|
|
197
218
|
}
|
|
198
219
|
}));
|
|
199
220
|
}
|
|
200
221
|
}
|
|
201
|
-
|
|
222
|
+
store.add(inlayHints);
|
|
202
223
|
this._updateHintsDecorators(inlayHints.ranges, inlayHints.items);
|
|
203
224
|
this._cacheHintsForFastRestore(model);
|
|
204
225
|
}
|
|
205
226
|
catch (err) {
|
|
206
227
|
onUnexpectedError(err);
|
|
207
228
|
}
|
|
208
|
-
finally {
|
|
209
|
-
cts.dispose();
|
|
210
|
-
listener.dispose();
|
|
211
|
-
}
|
|
212
229
|
}, this._debounceInfo.get(model));
|
|
213
230
|
this._sessionDisposables.add(scheduler);
|
|
214
|
-
this._sessionDisposables.add(toDisposable(() => cts?.dispose(true)));
|
|
215
231
|
scheduler.schedule(0);
|
|
216
232
|
this._sessionDisposables.add(this._editor.onDidScrollChange((e) => {
|
|
217
233
|
// update when scroll position changes
|