monaco-editor-core 0.56.0-dev-20251124 → 0.56.0-dev-20251217

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.
Files changed (337) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +34 -2
  18. package/esm/vs/base/browser/dom.js +1 -4
  19. package/esm/vs/base/browser/dom.js.map +1 -1
  20. package/esm/vs/base/browser/markdownRenderer.js +25 -11
  21. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  22. package/esm/vs/base/browser/ui/button/button.js +15 -8
  23. package/esm/vs/base/browser/ui/button/button.js.map +1 -1
  24. package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
  25. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  26. package/esm/vs/base/browser/ui/list/list.css +1 -0
  27. package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
  28. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  29. package/esm/vs/base/common/async.js +11 -0
  30. package/esm/vs/base/common/async.js.map +1 -1
  31. package/esm/vs/base/common/codiconsLibrary.js +11 -2
  32. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  33. package/esm/vs/base/common/defaultAccount.js +6 -0
  34. package/esm/vs/base/common/defaultAccount.js.map +1 -0
  35. package/esm/vs/base/common/equals.js +73 -24
  36. package/esm/vs/base/common/equals.js.map +1 -1
  37. package/esm/vs/base/common/event.js +14 -4
  38. package/esm/vs/base/common/event.js.map +1 -1
  39. package/esm/vs/base/common/iterator.js.map +1 -1
  40. package/esm/vs/base/common/keybindings.js +0 -8
  41. package/esm/vs/base/common/keybindings.js.map +1 -1
  42. package/esm/vs/base/common/lifecycle.js +2 -2
  43. package/esm/vs/base/common/lifecycle.js.map +1 -1
  44. package/esm/vs/base/common/marshallingIds.js.map +1 -1
  45. package/esm/vs/base/common/observableInternal/index.js +1 -1
  46. package/esm/vs/base/common/observableInternal/index.js.map +1 -1
  47. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
  48. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
  49. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
  50. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
  51. package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
  52. package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
  53. package/esm/vs/base/common/product.js.map +1 -1
  54. package/esm/vs/base/common/strings.js +3 -1
  55. package/esm/vs/base/common/strings.js.map +1 -1
  56. package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
  57. package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
  58. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
  59. package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
  60. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
  61. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
  62. package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
  63. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
  64. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
  65. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
  66. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
  67. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
  68. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
  69. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
  70. package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
  71. package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
  72. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  73. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  74. package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
  75. package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
  76. package/esm/vs/editor/browser/view.js +11 -2
  77. package/esm/vs/editor/browser/view.js.map +1 -1
  78. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
  79. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  80. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
  81. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  82. package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
  83. package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
  84. package/esm/vs/editor/common/config/fontInfo.js +1 -1
  85. package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
  86. package/esm/vs/editor/common/core/edits/edit.js +19 -0
  87. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  88. package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
  89. package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
  90. package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
  91. package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
  92. package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
  93. package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
  94. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  95. package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
  96. package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
  97. package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
  98. package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
  99. package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
  100. package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
  101. package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
  102. package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
  103. package/esm/vs/editor/common/languages.js +2 -1
  104. package/esm/vs/editor/common/languages.js.map +1 -1
  105. package/esm/vs/editor/common/model/decorationProvider.js +21 -1
  106. package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
  107. package/esm/vs/editor/common/model/textModel.js +49 -30
  108. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  109. package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
  110. package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
  111. package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
  112. package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
  113. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
  114. package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
  115. package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
  116. package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
  117. package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
  118. package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
  119. package/esm/vs/editor/common/textModelEditSource.js +2 -0
  120. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  121. package/esm/vs/editor/common/textModelEvents.js.map +1 -1
  122. package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
  123. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
  124. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
  125. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
  126. package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
  127. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
  128. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
  129. package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
  130. package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
  131. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
  132. package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
  133. package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
  134. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
  135. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
  136. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +2 -0
  137. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
  138. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
  139. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
  140. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
  141. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
  142. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
  143. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
  144. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
  145. package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
  146. package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
  147. package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
  148. package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
  149. package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
  150. package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
  151. package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
  152. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
  153. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
  154. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -65
  155. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  156. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +69 -13
  157. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  158. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +159 -94
  159. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  160. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +124 -50
  161. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
  162. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +393 -0
  163. package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -0
  164. package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
  165. package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
  166. package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
  167. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
  168. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  169. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
  170. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
  171. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
  172. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  173. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
  174. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
  175. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +11 -4
  176. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  177. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
  178. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  179. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
  180. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  181. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
  182. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  183. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
  184. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
  185. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
  186. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
  187. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
  188. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
  189. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
  190. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
  191. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
  192. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
  193. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
  194. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
  195. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
  196. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
  197. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
  198. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
  199. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
  200. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
  201. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
  202. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
  203. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
  204. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
  205. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
  206. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
  207. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
  208. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
  209. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
  210. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
  211. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
  212. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
  213. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
  214. package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
  215. package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
  216. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
  217. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  218. package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
  219. package/esm/vs/editor/contrib/links/browser/links.js +10 -10
  220. package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
  221. package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
  222. package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
  223. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
  224. package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
  225. package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
  226. package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
  227. package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
  228. package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
  229. package/esm/vs/editor/contrib/rename/browser/rename.js +19 -11
  230. package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
  231. package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
  232. package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
  233. package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
  234. package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
  235. package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
  236. package/esm/vs/editor/contrib/snippet/browser/snippetParser.js +33 -0
  237. package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
  238. package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
  239. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
  240. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +12 -4
  241. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
  242. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
  243. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  244. package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
  245. package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
  246. package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
  247. package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
  248. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
  249. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
  250. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
  251. package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
  252. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
  253. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
  254. package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
  255. package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
  256. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
  257. package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
  258. package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
  259. package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
  260. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
  261. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
  262. package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
  263. package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
  264. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +19 -2
  265. package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
  266. package/esm/vs/editor/editor.api.d.ts +37 -2
  267. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
  268. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  269. package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
  270. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  271. package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
  272. package/esm/vs/editor/standalone/common/monarch/monarchLexer.js.map +1 -1
  273. package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
  274. package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
  275. package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
  276. package/esm/vs/platform/actionWidget/browser/actionWidget.css +11 -8
  277. package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
  278. package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
  279. package/esm/vs/platform/actions/browser/toolbar.js +2 -2
  280. package/esm/vs/platform/actions/common/actions.js +11 -4
  281. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  282. package/esm/vs/platform/actions/common/menuService.js +2 -2
  283. package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
  284. package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
  285. package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
  286. package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
  287. package/esm/vs/platform/contextkey/common/scanner.js +5 -5
  288. package/esm/vs/platform/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
  289. package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
  290. package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
  291. package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
  292. package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
  293. package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
  294. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
  295. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  296. package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
  297. package/esm/vs/platform/list/browser/listService.js +27 -27
  298. package/esm/vs/platform/log/common/log.js +1 -1
  299. package/esm/vs/platform/log/common/log.js.map +1 -1
  300. package/esm/vs/platform/markers/common/markerService.js +6 -6
  301. package/esm/vs/platform/markers/common/markerService.js.map +1 -1
  302. package/esm/vs/platform/markers/common/markers.js +6 -6
  303. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
  304. package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
  305. package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
  306. package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
  307. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  308. package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
  309. package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
  310. package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
  311. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
  312. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
  313. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  314. package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
  315. package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
  316. package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
  317. package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
  318. package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
  319. package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
  320. package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
  321. package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
  322. package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
  323. package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
  324. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  325. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  326. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  327. package/esm/vs/platform/undoRedo/common/undoRedoService.js +21 -21
  328. package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
  329. package/esm/vs/platform/window/common/window.js +1 -1
  330. package/esm/vs/platform/window/common/window.js.map +1 -1
  331. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  332. package/monaco.d.ts +37 -2
  333. package/package.json +2 -2
  334. package/version.txt +1 -1
  335. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
  336. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
  337. package/esm/vs/platform/product/common/productService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts","vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts"],"names":[],"mappings":"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","file":"stickyScrollWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts","vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts"],"names":[],"mappings":"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","file":"stickyScrollWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tthis._foldingIconStore.clear();\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\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 * as dom from '../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../base/browser/trustedTypes.js';\nimport { equals } from '../../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport './stickyScroll.css';\nimport { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from '../../../browser/editorBrowser.js';\nimport { getColumnOfNodeOffset } from '../../../browser/viewParts/viewLines/viewLine.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorLayoutInfo, EditorOption, RenderLineNumbersType } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { StringBuilder } from '../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { foldingCollapsedIcon, foldingExpandedIcon } from '../../folding/browser/foldingDecorations.js';\nimport { FoldingModel } from '../../folding/browser/foldingModel.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { IViewModel } from '../../../common/viewModel.js';\n\nexport class StickyScrollWidgetState {\n\tconstructor(\n\t\treadonly startLineNumbers: number[],\n\t\treadonly endLineNumbers: number[],\n\t\treadonly lastLineRelativePosition: number,\n\t\treadonly showEndForLine: number | null = null\n\t) { }\n\n\tequals(other: StickyScrollWidgetState | undefined): boolean {\n\t\treturn !!other\n\t\t\t&& this.lastLineRelativePosition === other.lastLineRelativePosition\n\t\t\t&& this.showEndForLine === other.showEndForLine\n\t\t\t&& equals(this.startLineNumbers, other.startLineNumbers)\n\t\t\t&& equals(this.endLineNumbers, other.endLineNumbers);\n\t}\n\n\tstatic get Empty() {\n\t\treturn new StickyScrollWidgetState([], [], 0);\n\t}\n}\n\nconst _ttPolicy = createTrustedTypesPolicy('stickyScrollViewLayer', { createHTML: value => value });\nconst STICKY_INDEX_ATTR = 'data-sticky-line-index';\nconst STICKY_IS_LINE_ATTR = 'data-sticky-is-line';\nconst STICKY_IS_LINE_NUMBER_ATTR = 'data-sticky-is-line-number';\nconst STICKY_IS_FOLDING_ICON_ATTR = 'data-sticky-is-folding-icon';\n\nexport class StickyScrollWidget extends Disposable implements IOverlayWidget {\n\n\tprivate readonly _foldingIconStore = this._register(new DisposableStore());\n\tprivate readonly _rootDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _lineNumbersDomNode: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNodeScrollable: HTMLElement = document.createElement('div');\n\tprivate readonly _linesDomNode: HTMLElement = document.createElement('div');\n\n\tprivate readonly _editor: ICodeEditor;\n\n\tprivate _state: StickyScrollWidgetState | undefined;\n\tprivate _lineHeight: number;\n\tprivate _renderedStickyLines: RenderedStickyLine[] = [];\n\tprivate _lineNumbers: number[] = [];\n\tprivate _lastLineRelativePosition: number = 0;\n\tprivate _minContentWidthInPx: number = 0;\n\tprivate _isOnGlyphMargin: boolean = false;\n\tprivate _height: number = -1;\n\n\tpublic get height(): number { return this._height; }\n\n\tprivate readonly _onDidChangeStickyScrollHeight = this._register(new Emitter<{ height: number }>());\n\tpublic readonly onDidChangeStickyScrollHeight = this._onDidChangeStickyScrollHeight.event;\n\n\tconstructor(\n\t\teditor: ICodeEditor\n\t) {\n\t\tsuper();\n\n\t\tthis._editor = editor;\n\t\tthis._lineHeight = editor.getOption(EditorOption.lineHeight);\n\t\tthis._lineNumbersDomNode.className = 'sticky-widget-line-numbers';\n\t\tthis._lineNumbersDomNode.setAttribute('role', 'none');\n\n\t\tthis._linesDomNode.className = 'sticky-widget-lines';\n\t\tthis._linesDomNode.setAttribute('role', 'list');\n\n\t\tthis._linesDomNodeScrollable.className = 'sticky-widget-lines-scrollable';\n\t\tthis._linesDomNodeScrollable.appendChild(this._linesDomNode);\n\n\t\tthis._rootDomNode.className = 'sticky-widget';\n\t\tthis._rootDomNode.classList.toggle('peek', editor instanceof EmbeddedCodeEditorWidget);\n\t\tthis._rootDomNode.appendChild(this._lineNumbersDomNode);\n\t\tthis._rootDomNode.appendChild(this._linesDomNodeScrollable);\n\t\tthis._setHeight(0);\n\n\t\tconst updateScrollLeftPosition = () => {\n\t\t\tthis._linesDomNode.style.left = this._editor.getOption(EditorOption.stickyScroll).scrollWithEditor ? `-${this._editor.getScrollLeft()}px` : '0px';\n\t\t};\n\t\tthis._register(this._editor.onDidChangeConfiguration((e) => {\n\t\t\tif (e.hasChanged(EditorOption.stickyScroll)) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.hasChanged(EditorOption.lineHeight)) {\n\t\t\t\tthis._lineHeight = this._editor.getOption(EditorOption.lineHeight);\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidScrollChange((e) => {\n\t\t\tif (e.scrollLeftChanged) {\n\t\t\t\tupdateScrollLeftPosition();\n\t\t\t}\n\t\t\tif (e.scrollWidthChanged) {\n\t\t\t\tthis._updateWidgetWidth();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tupdateScrollLeftPosition();\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tupdateScrollLeftPosition();\n\n\t\tthis._register(this._editor.onDidLayoutChange((e) => {\n\t\t\tthis._updateWidgetWidth();\n\t\t}));\n\t\tthis._updateWidgetWidth();\n\t}\n\n\tget lineNumbers(): number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tget lineNumberCount(): number {\n\t\treturn this._lineNumbers.length;\n\t}\n\n\tgetRenderedStickyLine(lineNumber: number): RenderedStickyLine | undefined {\n\t\treturn this._renderedStickyLines.find(stickyLine => stickyLine.lineNumber === lineNumber);\n\t}\n\n\tgetCurrentLines(): readonly number[] {\n\t\treturn this._lineNumbers;\n\t}\n\n\tsetState(state: StickyScrollWidgetState | undefined, foldingModel: FoldingModel | undefined, rebuildFromIndexCandidate?: number): void {\n\t\tconst currentStateAndPreviousStateUndefined = !this._state && !state;\n\t\tconst currentStateDefinedAndEqualsPreviousState = this._state && this._state.equals(state);\n\t\tif (rebuildFromIndexCandidate === undefined && (currentStateAndPreviousStateUndefined || currentStateDefinedAndEqualsPreviousState)) {\n\t\t\treturn;\n\t\t}\n\t\tconst data = this._findRenderingData(state);\n\t\tconst previousLineNumbers = this._lineNumbers;\n\t\tthis._lineNumbers = data.lineNumbers;\n\t\tthis._lastLineRelativePosition = data.lastLineRelativePosition;\n\t\tconst rebuildFromIndex = this._findIndexToRebuildFrom(previousLineNumbers, this._lineNumbers, rebuildFromIndexCandidate);\n\t\tthis._renderRootNode(this._lineNumbers, this._lastLineRelativePosition, foldingModel, rebuildFromIndex);\n\t\tthis._state = state;\n\t}\n\n\tprivate _findRenderingData(state: StickyScrollWidgetState | undefined): { lineNumbers: number[]; lastLineRelativePosition: number } {\n\t\tif (!state) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\tconst candidateLineNumbers = [...state.startLineNumbers];\n\t\tif (state.showEndForLine !== null) {\n\t\t\tcandidateLineNumbers[state.showEndForLine] = state.endLineNumbers[state.showEndForLine];\n\t\t}\n\t\tlet totalHeight = 0;\n\t\tfor (let i = 0; i < candidateLineNumbers.length; i++) {\n\t\t\ttotalHeight += this._editor.getLineHeightForPosition(new Position(candidateLineNumbers[i], 1));\n\t\t}\n\t\tif (totalHeight === 0) {\n\t\t\treturn { lineNumbers: [], lastLineRelativePosition: 0 };\n\t\t}\n\t\treturn { lineNumbers: candidateLineNumbers, lastLineRelativePosition: state.lastLineRelativePosition };\n\t}\n\n\tprivate _findIndexToRebuildFrom(previousLineNumbers: number[], newLineNumbers: number[], rebuildFromIndexCandidate?: number): number {\n\t\tif (newLineNumbers.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (rebuildFromIndexCandidate !== undefined) {\n\t\t\treturn rebuildFromIndexCandidate;\n\t\t}\n\t\tconst validIndex = newLineNumbers.findIndex(startLineNumber => !previousLineNumbers.includes(startLineNumber));\n\t\treturn validIndex === -1 ? 0 : validIndex;\n\t}\n\n\tprivate _updateWidgetWidth(): void {\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tthis._lineNumbersDomNode.style.width = `${lineNumbersWidth}px`;\n\t\tthis._linesDomNodeScrollable.style.setProperty('--vscode-editorStickyScroll-scrollableWidth', `${this._editor.getScrollWidth() - layoutInfo.verticalScrollbarWidth}px`);\n\t\tthis._rootDomNode.style.width = `${layoutInfo.width - layoutInfo.verticalScrollbarWidth}px`;\n\t}\n\n\tprivate _useFoldingOpacityTransition(requireTransitions: boolean) {\n\t\tthis._lineNumbersDomNode.style.setProperty('--vscode-editorStickyScroll-foldingOpacityTransition', `opacity ${requireTransitions ? 0.5 : 0}s`);\n\t}\n\n\tprivate _setFoldingIconsVisibility(allVisible: boolean) {\n\t\tfor (const line of this._renderedStickyLines) {\n\t\t\tconst foldingIcon = line.foldingIcon;\n\t\t\tif (!foldingIcon) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfoldingIcon.setVisible(allVisible ? true : foldingIcon.isCollapsed);\n\t\t}\n\t}\n\n\tprivate async _renderRootNode(lineNumbers: number[], lastLineRelativePosition: number, foldingModel: FoldingModel | undefined, rebuildFromIndex: number): Promise<void> {\n\t\tconst viewModel = this._editor._getViewModel();\n\t\tif (!viewModel) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tif (lineNumbers.length === 0) {\n\t\t\tthis._clearWidget();\n\t\t\treturn;\n\t\t}\n\t\tconst renderedStickyLines: RenderedStickyLine[] = [];\n\t\tconst lastLineNumber = lineNumbers[lineNumbers.length - 1];\n\t\tlet top: number = 0;\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tif (i < rebuildFromIndex) {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedStickyLines.push(this._updatePosition(renderedLine, top, renderedLine.lineNumber === lastLineNumber));\n\t\t\t\ttop += renderedLine.height;\n\t\t\t} else {\n\t\t\t\tconst renderedLine = this._renderedStickyLines[i];\n\t\t\t\trenderedLine.lineNumberDomNode.remove();\n\t\t\t\trenderedLine.lineDomNode.remove();\n\t\t\t}\n\t\t}\n\t\tconst layoutInfo = this._editor.getLayoutInfo();\n\t\tfor (let i = rebuildFromIndex; i < lineNumbers.length; i++) {\n\t\t\tconst stickyLine = this._renderChildNode(viewModel, i, lineNumbers[i], top, lastLineNumber === lineNumbers[i], foldingModel, layoutInfo);\n\t\t\ttop += stickyLine.height;\n\t\t\tthis._linesDomNode.appendChild(stickyLine.lineDomNode);\n\t\t\tthis._lineNumbersDomNode.appendChild(stickyLine.lineNumberDomNode);\n\t\t\trenderedStickyLines.push(stickyLine);\n\t\t}\n\t\tif (foldingModel) {\n\t\t\tthis._setFoldingHoverListeners();\n\t\t\tthis._useFoldingOpacityTransition(!this._isOnGlyphMargin);\n\t\t}\n\t\tthis._minContentWidthInPx = Math.max(...this._renderedStickyLines.map(l => l.scrollWidth)) + layoutInfo.verticalScrollbarWidth;\n\t\tthis._renderedStickyLines = renderedStickyLines;\n\t\tthis._setHeight(top + lastLineRelativePosition);\n\t\tthis._editor.layoutOverlayWidget(this);\n\t}\n\n\tprivate _clearWidget(): void {\n\t\tfor (let i = 0; i < this._renderedStickyLines.length; i++) {\n\t\t\tconst stickyLine = this._renderedStickyLines[i];\n\t\t\tstickyLine.lineNumberDomNode.remove();\n\t\t\tstickyLine.lineDomNode.remove();\n\t\t}\n\t\tthis._setHeight(0);\n\t}\n\n\tprivate _setHeight(height: number): void {\n\t\tif (this._height === height) {\n\t\t\treturn;\n\t\t}\n\t\tthis._height = height;\n\n\t\tif (this._height === 0) {\n\t\t\tthis._rootDomNode.style.display = 'none';\n\t\t} else {\n\t\t\tthis._rootDomNode.style.display = 'block';\n\t\t\tthis._lineNumbersDomNode.style.height = `${this._height}px`;\n\t\t\tthis._linesDomNodeScrollable.style.height = `${this._height}px`;\n\t\t\tthis._rootDomNode.style.height = `${this._height}px`;\n\t\t}\n\n\t\tthis._onDidChangeStickyScrollHeight.fire({ height: this._height });\n\t}\n\n\tprivate _setFoldingHoverListeners(): void {\n\t\tthis._foldingIconStore.clear();\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (showFoldingControls !== 'mouseover') {\n\t\t\treturn;\n\t\t}\n\t\tthis._foldingIconStore.clear();\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_ENTER, () => {\n\t\t\tthis._isOnGlyphMargin = true;\n\t\t\tthis._setFoldingIconsVisibility(true);\n\t\t}));\n\t\tthis._foldingIconStore.add(dom.addDisposableListener(this._lineNumbersDomNode, dom.EventType.MOUSE_LEAVE, () => {\n\t\t\tthis._isOnGlyphMargin = false;\n\t\t\tthis._useFoldingOpacityTransition(true);\n\t\t\tthis._setFoldingIconsVisibility(false);\n\t\t}));\n\t}\n\n\tprivate _renderChildNode(viewModel: IViewModel, index: number, line: number, top: number, isLastLine: boolean, foldingModel: FoldingModel | undefined, layoutInfo: EditorLayoutInfo): RenderedStickyLine {\n\t\tconst viewLineNumber = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(line, 1)).lineNumber;\n\t\tconst lineRenderingData = viewModel.getViewLineRenderingData(viewLineNumber);\n\t\tconst lineNumberOption = this._editor.getOption(EditorOption.lineNumbers);\n\t\tconst verticalScrollbarSize = this._editor.getOption(EditorOption.scrollbar).verticalScrollbarSize;\n\n\t\tlet actualInlineDecorations: LineDecoration[];\n\t\ttry {\n\t\t\tactualInlineDecorations = LineDecoration.filter(lineRenderingData.inlineDecorations, viewLineNumber, lineRenderingData.minColumn, lineRenderingData.maxColumn);\n\t\t} catch (err) {\n\t\t\tactualInlineDecorations = [];\n\t\t}\n\n\t\tconst lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));\n\t\tconst textDirection = viewModel.getTextDirection(line);\n\t\tconst renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,\n\t\t\tlineRenderingData.continuesWithWrappedLine,\n\t\t\tlineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,\n\t\t\tlineRenderingData.tokens, actualInlineDecorations,\n\t\t\tlineRenderingData.tabSize, lineRenderingData.startVisibleColumn,\n\t\t\t1, 1, 1, 500, 'none', true, true, null,\n\t\t\ttextDirection, verticalScrollbarSize\n\t\t);\n\n\t\tconst sb = new StringBuilder(2000);\n\t\tconst renderOutput = renderViewLine(renderLineInput, sb);\n\n\t\tlet newLine;\n\t\tif (_ttPolicy) {\n\t\t\tnewLine = _ttPolicy.createHTML(sb.build());\n\t\t} else {\n\t\t\tnewLine = sb.build();\n\t\t}\n\n\t\tconst lineHTMLNode = document.createElement('span');\n\t\tlineHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineHTMLNode.setAttribute(STICKY_IS_LINE_ATTR, '');\n\t\tlineHTMLNode.setAttribute('role', 'listitem');\n\t\tlineHTMLNode.tabIndex = 0;\n\t\tlineHTMLNode.className = 'sticky-line-content';\n\t\tlineHTMLNode.classList.add(`stickyLine${line}`);\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.innerHTML = newLine as string;\n\n\t\tconst lineNumberHTMLNode = document.createElement('span');\n\t\tlineNumberHTMLNode.setAttribute(STICKY_INDEX_ATTR, String(index));\n\t\tlineNumberHTMLNode.setAttribute(STICKY_IS_LINE_NUMBER_ATTR, '');\n\t\tlineNumberHTMLNode.className = 'sticky-line-number';\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tconst lineNumbersWidth = layoutInfo.contentLeft;\n\t\tlineNumberHTMLNode.style.width = `${lineNumbersWidth}px`;\n\n\t\tconst innerLineNumberHTML = document.createElement('span');\n\t\tif (lineNumberOption.renderType === RenderLineNumbersType.On || lineNumberOption.renderType === RenderLineNumbersType.Interval && line % 10 === 0) {\n\t\t\tinnerLineNumberHTML.innerText = line.toString();\n\t\t} else if (lineNumberOption.renderType === RenderLineNumbersType.Relative) {\n\t\t\tinnerLineNumberHTML.innerText = Math.abs(line - this._editor.getPosition()!.lineNumber).toString();\n\t\t}\n\t\tinnerLineNumberHTML.className = 'sticky-line-number-inner';\n\t\tinnerLineNumberHTML.style.width = `${layoutInfo.lineNumbersWidth}px`;\n\t\tinnerLineNumberHTML.style.paddingLeft = `${layoutInfo.lineNumbersLeft}px`;\n\n\t\tlineNumberHTMLNode.appendChild(innerLineNumberHTML);\n\t\tconst foldingIcon = this._renderFoldingIconForLine(foldingModel, line);\n\t\tif (foldingIcon) {\n\t\t\tlineNumberHTMLNode.appendChild(foldingIcon.domNode);\n\t\t\tfoldingIcon.domNode.style.left = `${layoutInfo.lineNumbersWidth + layoutInfo.lineNumbersLeft}px`;\n\t\t\tfoldingIcon.domNode.style.lineHeight = `${lineHeight}px`;\n\t\t}\n\n\t\tthis._editor.applyFontInfo(lineHTMLNode);\n\t\tthis._editor.applyFontInfo(lineNumberHTMLNode);\n\n\t\tlineNumberHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineHTMLNode.style.lineHeight = `${lineHeight}px`;\n\t\tlineNumberHTMLNode.style.height = `${lineHeight}px`;\n\t\tlineHTMLNode.style.height = `${lineHeight}px`;\n\n\t\tconst renderedLine = new RenderedStickyLine(\n\t\t\tindex,\n\t\t\tline,\n\t\t\tlineHTMLNode,\n\t\t\tlineNumberHTMLNode,\n\t\t\tfoldingIcon,\n\t\t\trenderOutput.characterMapping,\n\t\t\tlineHTMLNode.scrollWidth,\n\t\t\tlineHeight\n\t\t);\n\t\treturn this._updatePosition(renderedLine, top, isLastLine);\n\t}\n\n\tprivate _updatePosition(stickyLine: RenderedStickyLine, top: number, isLastLine: boolean): RenderedStickyLine {\n\t\tconst lineHTMLNode = stickyLine.lineDomNode;\n\t\tconst lineNumberHTMLNode = stickyLine.lineNumberDomNode;\n\t\tif (isLastLine) {\n\t\t\tconst zIndex = '0';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tconst updatedTop = `${top + this._lastLineRelativePosition + (stickyLine.foldingIcon?.isCollapsed ? 1 : 0)}px`;\n\t\t\tlineHTMLNode.style.top = updatedTop;\n\t\t\tlineNumberHTMLNode.style.top = updatedTop;\n\t\t} else {\n\t\t\tconst zIndex = '1';\n\t\t\tlineHTMLNode.style.zIndex = zIndex;\n\t\t\tlineNumberHTMLNode.style.zIndex = zIndex;\n\t\t\tlineHTMLNode.style.top = `${top}px`;\n\t\t\tlineNumberHTMLNode.style.top = `${top}px`;\n\t\t}\n\t\treturn stickyLine;\n\t}\n\n\tprivate _renderFoldingIconForLine(foldingModel: FoldingModel | undefined, line: number): StickyFoldingIcon | undefined {\n\t\tconst showFoldingControls: 'mouseover' | 'always' | 'never' = this._editor.getOption(EditorOption.showFoldingControls);\n\t\tif (!foldingModel || showFoldingControls === 'never') {\n\t\t\treturn;\n\t\t}\n\t\tconst foldingRegions = foldingModel.regions;\n\t\tconst indexOfFoldingRegion = foldingRegions.findRange(line);\n\t\tconst startLineNumber = foldingRegions.getStartLineNumber(indexOfFoldingRegion);\n\t\tconst isFoldingScope = line === startLineNumber;\n\t\tif (!isFoldingScope) {\n\t\t\treturn;\n\t\t}\n\t\tconst isCollapsed = foldingRegions.isCollapsed(indexOfFoldingRegion);\n\t\tconst foldingIcon = new StickyFoldingIcon(isCollapsed, startLineNumber, foldingRegions.getEndLineNumber(indexOfFoldingRegion), this._lineHeight);\n\t\tfoldingIcon.setVisible(this._isOnGlyphMargin ? true : (isCollapsed || showFoldingControls === 'always'));\n\t\tfoldingIcon.domNode.setAttribute(STICKY_IS_FOLDING_ICON_ATTR, '');\n\t\treturn foldingIcon;\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.contrib.stickyScrollWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._rootDomNode;\n\t}\n\n\tgetPosition(): IOverlayWidgetPosition | null {\n\t\treturn {\n\t\t\tpreference: OverlayWidgetPositionPreference.TOP_CENTER,\n\t\t\tstackOrdinal: 10,\n\t\t};\n\t}\n\n\tgetMinContentWidthInPx(): number {\n\t\treturn this._minContentWidthInPx;\n\t}\n\n\tfocusLineWithIndex(index: number) {\n\t\tif (0 <= index && index < this._renderedStickyLines.length) {\n\t\t\tthis._renderedStickyLines[index].lineDomNode.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Given a leaf dom node, tries to find the editor position.\n\t */\n\tgetEditorPositionFromNode(spanDomNode: HTMLElement | null): Position | null {\n\t\tif (!spanDomNode || spanDomNode.children.length > 0) {\n\t\t\t// This is not a leaf node\n\t\t\treturn null;\n\t\t}\n\t\tconst renderedStickyLine = this._getRenderedStickyLineFromChildDomNode(spanDomNode);\n\t\tif (!renderedStickyLine) {\n\t\t\treturn null;\n\t\t}\n\t\tconst column = getColumnOfNodeOffset(renderedStickyLine.characterMapping, spanDomNode, 0);\n\t\treturn new Position(renderedStickyLine.lineNumber, column);\n\t}\n\n\tgetLineNumberFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\treturn this._getRenderedStickyLineFromChildDomNode(domNode)?.lineNumber ?? null;\n\t}\n\n\tprivate _getRenderedStickyLineFromChildDomNode(domNode: HTMLElement | null): RenderedStickyLine | null {\n\t\tconst index = this.getLineIndexFromChildDomNode(domNode);\n\t\tif (index === null || index < 0 || index >= this._renderedStickyLines.length) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this._renderedStickyLines[index];\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find the line number attribute that was stored in the node.\n\t * @returns the attribute value or null if none is found.\n\t */\n\tgetLineIndexFromChildDomNode(domNode: HTMLElement | null): number | null {\n\t\tconst lineIndex = this._getAttributeValue(domNode, STICKY_INDEX_ATTR);\n\t\treturn lineIndex ? parseInt(lineIndex, 10) : null;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if it is (contained in) a sticky line.\n\t * @returns a boolean.\n\t */\n\tisInStickyLine(domNode: HTMLElement | null): boolean {\n\t\tconst isInLine = this._getAttributeValue(domNode, STICKY_IS_LINE_ATTR);\n\t\treturn isInLine !== undefined;\n\t}\n\n\t/**\n\t * Given a child dom node, tries to find if this dom node is (contained in) a sticky folding icon.\n\t * @returns a boolean.\n\t */\n\tisInFoldingIconDomNode(domNode: HTMLElement | null): boolean {\n\t\tconst isInFoldingIcon = this._getAttributeValue(domNode, STICKY_IS_FOLDING_ICON_ATTR);\n\t\treturn isInFoldingIcon !== undefined;\n\t}\n\n\t/**\n\t * Given the dom node, finds if it or its parent sequence contains the given attribute.\n\t * @returns the attribute value or undefined.\n\t */\n\tprivate _getAttributeValue(domNode: HTMLElement | null, attribute: string): string | undefined {\n\t\twhile (domNode && domNode !== this._rootDomNode) {\n\t\t\tconst line = domNode.getAttribute(attribute);\n\t\t\tif (line !== null) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tdomNode = domNode.parentElement;\n\t\t}\n\t\treturn;\n\t}\n}\n\nclass RenderedStickyLine {\n\tconstructor(\n\t\tpublic readonly index: number,\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly lineDomNode: HTMLElement,\n\t\tpublic readonly lineNumberDomNode: HTMLElement,\n\t\tpublic readonly foldingIcon: StickyFoldingIcon | undefined,\n\t\tpublic readonly characterMapping: CharacterMapping,\n\t\tpublic readonly scrollWidth: number,\n\t\tpublic readonly height: number\n\t) { }\n}\n\nclass StickyFoldingIcon {\n\n\tpublic domNode: HTMLElement;\n\n\tconstructor(\n\t\tpublic isCollapsed: boolean,\n\t\tpublic foldingStartLine: number,\n\t\tpublic foldingEndLine: number,\n\t\tpublic dimension: number\n\t) {\n\t\tthis.domNode = document.createElement('div');\n\t\tthis.domNode.style.width = `26px`;\n\t\tthis.domNode.style.height = `${dimension}px`;\n\t\tthis.domNode.style.lineHeight = `${dimension}px`;\n\t\tthis.domNode.className = ThemeIcon.asClassName(isCollapsed ? foldingCollapsedIcon : foldingExpandedIcon);\n\t}\n\n\tpublic setVisible(visible: boolean) {\n\t\tthis.domNode.style.cursor = visible ? 'pointer' : 'default';\n\t\tthis.domNode.style.opacity = visible ? '1' : '0';\n\t}\n}\n"]}
@@ -21,14 +21,15 @@ import { ILanguageFeaturesService } from '../../../common/services/languageFeatu
21
21
  import { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js';
22
22
  export const Context = {
23
23
  Visible: historyNavigationVisible,
24
- HasFocusedSuggestion: new RawContextKey('suggestWidgetHasFocusedSuggestion', false, localize(1462, "Whether any suggestion is focused")),
25
- DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize(1463, "Whether suggestion details are visible")),
26
- MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize(1464, "Whether there are multiple suggestions to pick from")),
27
- MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize(1465, "Whether inserting the current suggestion yields in a change or has everything already been typed")),
28
- AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize(1466, "Whether suggestions are inserted when pressing Enter")),
29
- HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize(1467, "Whether the current suggestion has insert and replace behaviour")),
30
- InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize(1468, "Whether the default behaviour is to insert or replace") }),
31
- CanResolve: new RawContextKey('suggestionCanResolve', false, localize(1469, "Whether the current suggestion supports to resolve further details")),
24
+ HasFocusedSuggestion: new RawContextKey('suggestWidgetHasFocusedSuggestion', false, localize(1469, "Whether any suggestion is focused")),
25
+ DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize(1470, "Whether suggestion details are visible")),
26
+ DetailsFocused: new RawContextKey('suggestWidgetDetailsFocused', false, localize(1471, "Whether the details pane of the suggest widget has focus")),
27
+ MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize(1472, "Whether there are multiple suggestions to pick from")),
28
+ MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize(1473, "Whether inserting the current suggestion yields in a change or has everything already been typed")),
29
+ AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize(1474, "Whether suggestions are inserted when pressing Enter")),
30
+ HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize(1475, "Whether the current suggestion has insert and replace behaviour")),
31
+ InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize(1476, "Whether the default behaviour is to insert or replace") }),
32
+ CanResolve: new RawContextKey('suggestionCanResolve', false, localize(1477, "Whether the current suggestion supports to resolve further details")),
32
33
  };
33
34
  export const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');
34
35
  export class CompletionItem {
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/editor/contrib/suggest/browser/suggest.ts"],"names":[],"mappings":"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","file":"suggest.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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { CancellationError, isCancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { DisposableStore, IDisposable, isDisposable } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport * as languages from '../../../common/languages.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { SnippetParser } from '../../snippet/browser/snippetParser.js';\nimport { localize } from '../../../../nls.js';\nimport { MenuId } from '../../../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js';\nimport { InternalQuickSuggestionsOptions, QuickSuggestionsValue } from '../../../common/config/editorOptions.js';\nimport { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';\nimport { StandardTokenType } from '../../../common/encodedTokenAttributes.js';\n\nexport const Context = {\n\tVisible: historyNavigationVisible,\n\tHasFocusedSuggestion: new RawContextKey<boolean>('suggestWidgetHasFocusedSuggestion', false, localize('suggestWidgetHasSelection', \"Whether any suggestion is focused\")),\n\tDetailsVisible: new RawContextKey<boolean>('suggestWidgetDetailsVisible', false, localize('suggestWidgetDetailsVisible', \"Whether suggestion details are visible\")),\n\tMultipleSuggestions: new RawContextKey<boolean>('suggestWidgetMultipleSuggestions', false, localize('suggestWidgetMultipleSuggestions', \"Whether there are multiple suggestions to pick from\")),\n\tMakesTextEdit: new RawContextKey<boolean>('suggestionMakesTextEdit', true, localize('suggestionMakesTextEdit', \"Whether inserting the current suggestion yields in a change or has everything already been typed\")),\n\tAcceptSuggestionsOnEnter: new RawContextKey<boolean>('acceptSuggestionOnEnter', true, localize('acceptSuggestionOnEnter', \"Whether suggestions are inserted when pressing Enter\")),\n\tHasInsertAndReplaceRange: new RawContextKey<boolean>('suggestionHasInsertAndReplaceRange', false, localize('suggestionHasInsertAndReplaceRange', \"Whether the current suggestion has insert and replace behaviour\")),\n\tInsertMode: new RawContextKey<'insert' | 'replace'>('suggestionInsertMode', undefined, { type: 'string', description: localize('suggestionInsertMode', \"Whether the default behaviour is to insert or replace\") }),\n\tCanResolve: new RawContextKey<boolean>('suggestionCanResolve', false, localize('suggestionCanResolve', \"Whether the current suggestion supports to resolve further details\")),\n};\n\nexport const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');\n\nexport class CompletionItem {\n\n\t//\n\treadonly editStart: IPosition;\n\treadonly editInsertEnd: IPosition;\n\treadonly editReplaceEnd: IPosition;\n\n\t//\n\treadonly textLabel: string;\n\n\t// perf\n\treadonly labelLow: string;\n\treadonly sortTextLow?: string;\n\treadonly filterTextLow?: string;\n\n\t// validation\n\treadonly isInvalid: boolean = false;\n\n\t// sorting, filtering\n\tscore: FuzzyScore = FuzzyScore.Default;\n\tdistance: number = 0;\n\tidx?: number;\n\tword?: string;\n\n\t// instrumentation\n\treadonly extensionId?: ExtensionIdentifier;\n\n\t// resolving\n\tprivate _resolveDuration?: number;\n\tprivate _resolveCache?: Promise<void>;\n\n\tconstructor(\n\t\treadonly position: IPosition,\n\t\treadonly completion: languages.CompletionItem,\n\t\treadonly container: languages.CompletionList,\n\t\treadonly provider: languages.CompletionItemProvider,\n\t) {\n\t\tthis.textLabel = typeof completion.label === 'string'\n\t\t\t? completion.label\n\t\t\t: completion.label?.label;\n\n\t\t// ensure lower-variants (perf)\n\t\tthis.labelLow = this.textLabel.toLowerCase();\n\n\t\t// validate label\n\t\tthis.isInvalid = !this.textLabel;\n\n\t\tthis.sortTextLow = completion.sortText && completion.sortText.toLowerCase();\n\t\tthis.filterTextLow = completion.filterText && completion.filterText.toLowerCase();\n\n\t\tthis.extensionId = completion.extensionId;\n\n\t\t// normalize ranges\n\t\tif (Range.isIRange(completion.range)) {\n\t\t\tthis.editStart = new Position(completion.range.startLineNumber, completion.range.startColumn);\n\t\t\tthis.editInsertEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n\t\t\tthis.editReplaceEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n\n\t\t\t// validate range\n\t\t\tthis.isInvalid = this.isInvalid\n\t\t\t\t|| Range.spansMultipleLines(completion.range) || completion.range.startLineNumber !== position.lineNumber;\n\n\t\t} else {\n\t\t\tthis.editStart = new Position(completion.range.insert.startLineNumber, completion.range.insert.startColumn);\n\t\t\tthis.editInsertEnd = new Position(completion.range.insert.endLineNumber, completion.range.insert.endColumn);\n\t\t\tthis.editReplaceEnd = new Position(completion.range.replace.endLineNumber, completion.range.replace.endColumn);\n\n\t\t\t// validate ranges\n\t\t\tthis.isInvalid = this.isInvalid\n\t\t\t\t|| Range.spansMultipleLines(completion.range.insert) || Range.spansMultipleLines(completion.range.replace)\n\t\t\t\t|| completion.range.insert.startLineNumber !== position.lineNumber || completion.range.replace.startLineNumber !== position.lineNumber\n\t\t\t\t|| completion.range.insert.startColumn !== completion.range.replace.startColumn;\n\t\t}\n\n\t\t// create the suggestion resolver\n\t\tif (typeof provider.resolveCompletionItem !== 'function') {\n\t\t\tthis._resolveCache = Promise.resolve();\n\t\t\tthis._resolveDuration = 0;\n\t\t}\n\t}\n\n\t// ---- resolving\n\n\tget isResolved(): boolean {\n\t\treturn this._resolveDuration !== undefined;\n\t}\n\n\tget resolveDuration(): number {\n\t\treturn this._resolveDuration !== undefined ? this._resolveDuration : -1;\n\t}\n\n\tasync resolve(token: CancellationToken) {\n\t\tif (!this._resolveCache) {\n\t\t\tconst sub = token.onCancellationRequested(() => {\n\t\t\t\tthis._resolveCache = undefined;\n\t\t\t\tthis._resolveDuration = undefined;\n\t\t\t});\n\t\t\tconst sw = new StopWatch(true);\n\t\t\tthis._resolveCache = Promise.resolve(this.provider.resolveCompletionItem!(this.completion, token)).then(value => {\n\t\t\t\tObject.assign(this.completion, value);\n\t\t\t\tthis._resolveDuration = sw.elapsed();\n\t\t\t}, err => {\n\t\t\t\tif (isCancellationError(err)) {\n\t\t\t\t\t// the IPC queue will reject the request with the\n\t\t\t\t\t// cancellation error -> reset cached\n\t\t\t\t\tthis._resolveCache = undefined;\n\t\t\t\t\tthis._resolveDuration = undefined;\n\t\t\t\t}\n\t\t\t}).finally(() => {\n\t\t\t\tsub.dispose();\n\t\t\t});\n\t\t}\n\t\treturn this._resolveCache;\n\t}\n}\n\nexport const enum SnippetSortOrder {\n\tTop, Inline, Bottom\n}\n\nexport class CompletionOptions {\n\n\tstatic readonly default = new CompletionOptions();\n\n\tconstructor(\n\t\treadonly snippetSortOrder = SnippetSortOrder.Bottom,\n\t\treadonly kindFilter = new Set<languages.CompletionItemKind>(),\n\t\treadonly providerFilter = new Set<languages.CompletionItemProvider>(),\n\t\treadonly providerItemsToReuse: ReadonlyMap<languages.CompletionItemProvider, CompletionItem[]> = new Map<languages.CompletionItemProvider, CompletionItem[]>(),\n\t\treadonly showDeprecated = true\n\t) { }\n}\n\nlet _snippetSuggestSupport: languages.CompletionItemProvider | undefined;\n\nexport function getSnippetSuggestSupport(): languages.CompletionItemProvider | undefined {\n\treturn _snippetSuggestSupport;\n}\n\nexport interface CompletionDurationEntry {\n\treadonly providerName: string;\n\treadonly elapsedProvider: number;\n\treadonly elapsedOverall: number;\n}\n\nexport interface CompletionDurations {\n\treadonly entries: readonly CompletionDurationEntry[];\n\treadonly elapsed: number;\n}\n\nexport class CompletionItemModel {\n\tconstructor(\n\t\treadonly items: CompletionItem[],\n\t\treadonly needsClipboard: boolean,\n\t\treadonly durations: CompletionDurations,\n\t\treadonly disposable: IDisposable,\n\t) { }\n}\n\nexport async function provideSuggestionItems(\n\tregistry: LanguageFeatureRegistry<languages.CompletionItemProvider>,\n\tmodel: ITextModel,\n\tposition: Position,\n\toptions: CompletionOptions = CompletionOptions.default,\n\tcontext: languages.CompletionContext = { triggerKind: languages.CompletionTriggerKind.Invoke },\n\ttoken: CancellationToken = CancellationToken.None\n): Promise<CompletionItemModel> {\n\n\tconst sw = new StopWatch();\n\tposition = position.clone();\n\n\tconst word = model.getWordAtPosition(position);\n\tconst defaultReplaceRange = word ? new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn) : Range.fromPositions(position);\n\tconst defaultRange = { replace: defaultReplaceRange, insert: defaultReplaceRange.setEndPosition(position.lineNumber, position.column) };\n\n\tconst result: CompletionItem[] = [];\n\tconst disposables = new DisposableStore();\n\tconst durations: CompletionDurationEntry[] = [];\n\tlet needsClipboard = false;\n\n\tconst onCompletionList = (provider: languages.CompletionItemProvider, container: languages.CompletionList | null | undefined, sw: StopWatch): boolean => {\n\t\tlet didAddResult = false;\n\t\tif (!container) {\n\t\t\treturn didAddResult;\n\t\t}\n\t\tfor (const suggestion of container.suggestions) {\n\t\t\tif (!options.kindFilter.has(suggestion.kind)) {\n\t\t\t\t// skip if not showing deprecated suggestions\n\t\t\t\tif (!options.showDeprecated && suggestion?.tags?.includes(languages.CompletionItemTag.Deprecated)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// fill in default range when missing\n\t\t\t\tif (!suggestion.range) {\n\t\t\t\t\tsuggestion.range = defaultRange;\n\t\t\t\t}\n\t\t\t\t// fill in default sortText when missing\n\t\t\t\tif (!suggestion.sortText) {\n\t\t\t\t\tsuggestion.sortText = typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.label;\n\t\t\t\t}\n\t\t\t\tif (!needsClipboard && suggestion.insertTextRules && suggestion.insertTextRules & languages.CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\t\t\tneedsClipboard = SnippetParser.guessNeedsClipboard(suggestion.insertText);\n\t\t\t\t}\n\t\t\t\tresult.push(new CompletionItem(position, suggestion, container, provider));\n\t\t\t\tdidAddResult = true;\n\t\t\t}\n\t\t}\n\t\tif (isDisposable(container)) {\n\t\t\tdisposables.add(container);\n\t\t}\n\t\tdurations.push({\n\t\t\tproviderName: provider._debugDisplayName ?? 'unknown_provider', elapsedProvider: container.duration ?? -1, elapsedOverall: sw.elapsed()\n\t\t});\n\t\treturn didAddResult;\n\t};\n\n\t// ask for snippets in parallel to asking \"real\" providers. Only do something if configured to\n\t// do so - no snippet filter, no special-providers-only request\n\tconst snippetCompletions = (async () => {\n\t\tif (!_snippetSuggestSupport || options.kindFilter.has(languages.CompletionItemKind.Snippet)) {\n\t\t\treturn;\n\t\t}\n\t\t// we have items from a previous session that we can reuse\n\t\tconst reuseItems = options.providerItemsToReuse.get(_snippetSuggestSupport);\n\t\tif (reuseItems) {\n\t\t\treuseItems.forEach(item => result.push(item));\n\t\t\treturn;\n\t\t}\n\t\tif (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {\n\t\t\treturn;\n\t\t}\n\t\tconst sw = new StopWatch();\n\t\tconst list = await _snippetSuggestSupport.provideCompletionItems(model, position, context, token);\n\t\tonCompletionList(_snippetSuggestSupport, list, sw);\n\t})();\n\n\t// add suggestions from contributed providers - providers are ordered in groups of\n\t// equal score and once a group produces a result the process stops\n\t// get provider groups, always add snippet suggestion provider\n\tfor (const providerGroup of registry.orderedGroups(model)) {\n\n\t\t// for each support in the group ask for suggestions\n\t\tlet didAddResult = false;\n\t\tawait Promise.all(providerGroup.map(async provider => {\n\t\t\t// we have items from a previous session that we can reuse\n\t\t\tif (options.providerItemsToReuse.has(provider)) {\n\t\t\t\tconst items = options.providerItemsToReuse.get(provider)!;\n\t\t\t\titems.forEach(item => result.push(item));\n\t\t\t\tdidAddResult = didAddResult || items.length > 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// check if this provider is filtered out\n\t\t\tif (options.providerFilter.size > 0 && !options.providerFilter.has(provider)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst sw = new StopWatch();\n\t\t\t\tconst list = await provider.provideCompletionItems(model, position, context, token);\n\t\t\t\tdidAddResult = onCompletionList(provider, list, sw) || didAddResult;\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedExternalError(err);\n\t\t\t}\n\t\t}));\n\n\t\tif (didAddResult || token.isCancellationRequested) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tawait snippetCompletions;\n\n\tif (token.isCancellationRequested) {\n\t\tdisposables.dispose();\n\t\treturn Promise.reject(new CancellationError());\n\t}\n\n\treturn new CompletionItemModel(\n\t\tresult.sort(getSuggestionComparator(options.snippetSortOrder)),\n\t\tneedsClipboard,\n\t\t{ entries: durations, elapsed: sw.elapsed() },\n\t\tdisposables,\n\t);\n}\n\n\nfunction defaultComparator(a: CompletionItem, b: CompletionItem): number {\n\t// check with 'sortText'\n\tif (a.sortTextLow && b.sortTextLow) {\n\t\tif (a.sortTextLow < b.sortTextLow) {\n\t\t\treturn -1;\n\t\t} else if (a.sortTextLow > b.sortTextLow) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\t// check with 'label'\n\tif (a.textLabel < b.textLabel) {\n\t\treturn -1;\n\t} else if (a.textLabel > b.textLabel) {\n\t\treturn 1;\n\t}\n\t// check with 'type'\n\treturn a.completion.kind - b.completion.kind;\n}\n\nfunction snippetUpComparator(a: CompletionItem, b: CompletionItem): number {\n\tif (a.completion.kind !== b.completion.kind) {\n\t\tif (a.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn -1;\n\t\t} else if (b.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\nfunction snippetDownComparator(a: CompletionItem, b: CompletionItem): number {\n\tif (a.completion.kind !== b.completion.kind) {\n\t\tif (a.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn 1;\n\t\t} else if (b.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\ninterface Comparator<T> { (a: T, b: T): number }\nconst _snippetComparators = new Map<SnippetSortOrder, Comparator<CompletionItem>>();\n_snippetComparators.set(SnippetSortOrder.Top, snippetUpComparator);\n_snippetComparators.set(SnippetSortOrder.Bottom, snippetDownComparator);\n_snippetComparators.set(SnippetSortOrder.Inline, defaultComparator);\n\nexport function getSuggestionComparator(snippetConfig: SnippetSortOrder): (a: CompletionItem, b: CompletionItem) => number {\n\treturn _snippetComparators.get(snippetConfig)!;\n}\n\nCommandsRegistry.registerCommand('_executeCompletionItemProvider', async (accessor, ...args: [URI, IPosition, string?, number?]) => {\n\tconst [uri, position, triggerCharacter, maxItemsToResolve] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Position.isIPosition(position));\n\tassertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n\tassertType(typeof maxItemsToResolve === 'number' || !maxItemsToResolve);\n\n\tconst { completionProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\n\t\tconst result: languages.CompletionList = {\n\t\t\tincomplete: false,\n\t\t\tsuggestions: []\n\t\t};\n\n\t\tconst resolving: Promise<unknown>[] = [];\n\t\tconst actualPosition = ref.object.textEditorModel.validatePosition(position);\n\t\tconst completions = await provideSuggestionItems(completionProvider, ref.object.textEditorModel, actualPosition, undefined, { triggerCharacter: triggerCharacter ?? undefined, triggerKind: triggerCharacter ? languages.CompletionTriggerKind.TriggerCharacter : languages.CompletionTriggerKind.Invoke });\n\t\tfor (const item of completions.items) {\n\t\t\tif (resolving.length < (maxItemsToResolve ?? 0)) {\n\t\t\t\tresolving.push(item.resolve(CancellationToken.None));\n\t\t\t}\n\t\t\tresult.incomplete = result.incomplete || item.container.incomplete;\n\t\t\tresult.suggestions.push(item.completion);\n\t\t}\n\n\t\ttry {\n\t\t\tawait Promise.all(resolving);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tsetTimeout(() => completions.disposable.dispose(), 100);\n\t\t}\n\n\t} finally {\n\t\tref.dispose();\n\t}\n\n});\n\ninterface SuggestController extends IEditorContribution {\n\ttriggerSuggest(onlyFrom?: Set<languages.CompletionItemProvider>, auto?: boolean, noFilter?: boolean): void;\n}\n\nexport function showSimpleSuggestions(editor: ICodeEditor, provider: languages.CompletionItemProvider) {\n\teditor.getContribution<SuggestController>('editor.contrib.suggestController')?.triggerSuggest(\n\t\tnew Set<languages.CompletionItemProvider>().add(provider), undefined, true\n\t);\n}\n\nexport interface ISuggestItemPreselector {\n\t/**\n\t * The preselector with highest priority is asked first.\n\t*/\n\treadonly priority: number;\n\n\t/**\n\t * Is called to preselect a suggest item.\n\t * When -1 is returned, item preselectors with lower priority are asked.\n\t*/\n\tselect(model: ITextModel, pos: IPosition, items: CompletionItem[]): number | -1;\n}\n\n\nexport abstract class QuickSuggestionsOptions {\n\n\tstatic isAllOff(config: InternalQuickSuggestionsOptions): boolean {\n\t\treturn config.other === 'off' && config.comments === 'off' && config.strings === 'off';\n\t}\n\n\tstatic isAllOn(config: InternalQuickSuggestionsOptions): boolean {\n\t\treturn config.other === 'on' && config.comments === 'on' && config.strings === 'on';\n\t}\n\n\tstatic valueFor(config: InternalQuickSuggestionsOptions, tokenType: StandardTokenType): QuickSuggestionsValue {\n\t\tswitch (tokenType) {\n\t\t\tcase StandardTokenType.Comment: return config.comments;\n\t\t\tcase StandardTokenType.String: return config.strings;\n\t\t\tdefault: return config.other;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["vs/editor/contrib/suggest/browser/suggest.ts"],"names":[],"mappings":"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","file":"suggest.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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { CancellationError, isCancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { DisposableStore, IDisposable, isDisposable } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport * as languages from '../../../common/languages.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { SnippetParser } from '../../snippet/browser/snippetParser.js';\nimport { localize } from '../../../../nls.js';\nimport { MenuId } from '../../../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js';\nimport { InternalQuickSuggestionsOptions, QuickSuggestionsValue } from '../../../common/config/editorOptions.js';\nimport { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';\nimport { StandardTokenType } from '../../../common/encodedTokenAttributes.js';\n\nexport const Context = {\n\tVisible: historyNavigationVisible,\n\tHasFocusedSuggestion: new RawContextKey<boolean>('suggestWidgetHasFocusedSuggestion', false, localize('suggestWidgetHasSelection', \"Whether any suggestion is focused\")),\n\tDetailsVisible: new RawContextKey<boolean>('suggestWidgetDetailsVisible', false, localize('suggestWidgetDetailsVisible', \"Whether suggestion details are visible\")),\n\tDetailsFocused: new RawContextKey<boolean>('suggestWidgetDetailsFocused', false, localize('suggestWidgetDetailsFocused', \"Whether the details pane of the suggest widget has focus\")),\n\tMultipleSuggestions: new RawContextKey<boolean>('suggestWidgetMultipleSuggestions', false, localize('suggestWidgetMultipleSuggestions', \"Whether there are multiple suggestions to pick from\")),\n\tMakesTextEdit: new RawContextKey<boolean>('suggestionMakesTextEdit', true, localize('suggestionMakesTextEdit', \"Whether inserting the current suggestion yields in a change or has everything already been typed\")),\n\tAcceptSuggestionsOnEnter: new RawContextKey<boolean>('acceptSuggestionOnEnter', true, localize('acceptSuggestionOnEnter', \"Whether suggestions are inserted when pressing Enter\")),\n\tHasInsertAndReplaceRange: new RawContextKey<boolean>('suggestionHasInsertAndReplaceRange', false, localize('suggestionHasInsertAndReplaceRange', \"Whether the current suggestion has insert and replace behaviour\")),\n\tInsertMode: new RawContextKey<'insert' | 'replace'>('suggestionInsertMode', undefined, { type: 'string', description: localize('suggestionInsertMode', \"Whether the default behaviour is to insert or replace\") }),\n\tCanResolve: new RawContextKey<boolean>('suggestionCanResolve', false, localize('suggestionCanResolve', \"Whether the current suggestion supports to resolve further details\")),\n};\n\nexport const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');\n\nexport class CompletionItem {\n\n\t//\n\treadonly editStart: IPosition;\n\treadonly editInsertEnd: IPosition;\n\treadonly editReplaceEnd: IPosition;\n\n\t//\n\treadonly textLabel: string;\n\n\t// perf\n\treadonly labelLow: string;\n\treadonly sortTextLow?: string;\n\treadonly filterTextLow?: string;\n\n\t// validation\n\treadonly isInvalid: boolean = false;\n\n\t// sorting, filtering\n\tscore: FuzzyScore = FuzzyScore.Default;\n\tdistance: number = 0;\n\tidx?: number;\n\tword?: string;\n\n\t// instrumentation\n\treadonly extensionId?: ExtensionIdentifier;\n\n\t// resolving\n\tprivate _resolveDuration?: number;\n\tprivate _resolveCache?: Promise<void>;\n\n\tconstructor(\n\t\treadonly position: IPosition,\n\t\treadonly completion: languages.CompletionItem,\n\t\treadonly container: languages.CompletionList,\n\t\treadonly provider: languages.CompletionItemProvider,\n\t) {\n\t\tthis.textLabel = typeof completion.label === 'string'\n\t\t\t? completion.label\n\t\t\t: completion.label?.label;\n\n\t\t// ensure lower-variants (perf)\n\t\tthis.labelLow = this.textLabel.toLowerCase();\n\n\t\t// validate label\n\t\tthis.isInvalid = !this.textLabel;\n\n\t\tthis.sortTextLow = completion.sortText && completion.sortText.toLowerCase();\n\t\tthis.filterTextLow = completion.filterText && completion.filterText.toLowerCase();\n\n\t\tthis.extensionId = completion.extensionId;\n\n\t\t// normalize ranges\n\t\tif (Range.isIRange(completion.range)) {\n\t\t\tthis.editStart = new Position(completion.range.startLineNumber, completion.range.startColumn);\n\t\t\tthis.editInsertEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n\t\t\tthis.editReplaceEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n\n\t\t\t// validate range\n\t\t\tthis.isInvalid = this.isInvalid\n\t\t\t\t|| Range.spansMultipleLines(completion.range) || completion.range.startLineNumber !== position.lineNumber;\n\n\t\t} else {\n\t\t\tthis.editStart = new Position(completion.range.insert.startLineNumber, completion.range.insert.startColumn);\n\t\t\tthis.editInsertEnd = new Position(completion.range.insert.endLineNumber, completion.range.insert.endColumn);\n\t\t\tthis.editReplaceEnd = new Position(completion.range.replace.endLineNumber, completion.range.replace.endColumn);\n\n\t\t\t// validate ranges\n\t\t\tthis.isInvalid = this.isInvalid\n\t\t\t\t|| Range.spansMultipleLines(completion.range.insert) || Range.spansMultipleLines(completion.range.replace)\n\t\t\t\t|| completion.range.insert.startLineNumber !== position.lineNumber || completion.range.replace.startLineNumber !== position.lineNumber\n\t\t\t\t|| completion.range.insert.startColumn !== completion.range.replace.startColumn;\n\t\t}\n\n\t\t// create the suggestion resolver\n\t\tif (typeof provider.resolveCompletionItem !== 'function') {\n\t\t\tthis._resolveCache = Promise.resolve();\n\t\t\tthis._resolveDuration = 0;\n\t\t}\n\t}\n\n\t// ---- resolving\n\n\tget isResolved(): boolean {\n\t\treturn this._resolveDuration !== undefined;\n\t}\n\n\tget resolveDuration(): number {\n\t\treturn this._resolveDuration !== undefined ? this._resolveDuration : -1;\n\t}\n\n\tasync resolve(token: CancellationToken) {\n\t\tif (!this._resolveCache) {\n\t\t\tconst sub = token.onCancellationRequested(() => {\n\t\t\t\tthis._resolveCache = undefined;\n\t\t\t\tthis._resolveDuration = undefined;\n\t\t\t});\n\t\t\tconst sw = new StopWatch(true);\n\t\t\tthis._resolveCache = Promise.resolve(this.provider.resolveCompletionItem!(this.completion, token)).then(value => {\n\t\t\t\tObject.assign(this.completion, value);\n\t\t\t\tthis._resolveDuration = sw.elapsed();\n\t\t\t}, err => {\n\t\t\t\tif (isCancellationError(err)) {\n\t\t\t\t\t// the IPC queue will reject the request with the\n\t\t\t\t\t// cancellation error -> reset cached\n\t\t\t\t\tthis._resolveCache = undefined;\n\t\t\t\t\tthis._resolveDuration = undefined;\n\t\t\t\t}\n\t\t\t}).finally(() => {\n\t\t\t\tsub.dispose();\n\t\t\t});\n\t\t}\n\t\treturn this._resolveCache;\n\t}\n}\n\nexport const enum SnippetSortOrder {\n\tTop, Inline, Bottom\n}\n\nexport class CompletionOptions {\n\n\tstatic readonly default = new CompletionOptions();\n\n\tconstructor(\n\t\treadonly snippetSortOrder = SnippetSortOrder.Bottom,\n\t\treadonly kindFilter = new Set<languages.CompletionItemKind>(),\n\t\treadonly providerFilter = new Set<languages.CompletionItemProvider>(),\n\t\treadonly providerItemsToReuse: ReadonlyMap<languages.CompletionItemProvider, CompletionItem[]> = new Map<languages.CompletionItemProvider, CompletionItem[]>(),\n\t\treadonly showDeprecated = true\n\t) { }\n}\n\nlet _snippetSuggestSupport: languages.CompletionItemProvider | undefined;\n\nexport function getSnippetSuggestSupport(): languages.CompletionItemProvider | undefined {\n\treturn _snippetSuggestSupport;\n}\n\nexport interface CompletionDurationEntry {\n\treadonly providerName: string;\n\treadonly elapsedProvider: number;\n\treadonly elapsedOverall: number;\n}\n\nexport interface CompletionDurations {\n\treadonly entries: readonly CompletionDurationEntry[];\n\treadonly elapsed: number;\n}\n\nexport class CompletionItemModel {\n\tconstructor(\n\t\treadonly items: CompletionItem[],\n\t\treadonly needsClipboard: boolean,\n\t\treadonly durations: CompletionDurations,\n\t\treadonly disposable: IDisposable,\n\t) { }\n}\n\nexport async function provideSuggestionItems(\n\tregistry: LanguageFeatureRegistry<languages.CompletionItemProvider>,\n\tmodel: ITextModel,\n\tposition: Position,\n\toptions: CompletionOptions = CompletionOptions.default,\n\tcontext: languages.CompletionContext = { triggerKind: languages.CompletionTriggerKind.Invoke },\n\ttoken: CancellationToken = CancellationToken.None\n): Promise<CompletionItemModel> {\n\n\tconst sw = new StopWatch();\n\tposition = position.clone();\n\n\tconst word = model.getWordAtPosition(position);\n\tconst defaultReplaceRange = word ? new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn) : Range.fromPositions(position);\n\tconst defaultRange = { replace: defaultReplaceRange, insert: defaultReplaceRange.setEndPosition(position.lineNumber, position.column) };\n\n\tconst result: CompletionItem[] = [];\n\tconst disposables = new DisposableStore();\n\tconst durations: CompletionDurationEntry[] = [];\n\tlet needsClipboard = false;\n\n\tconst onCompletionList = (provider: languages.CompletionItemProvider, container: languages.CompletionList | null | undefined, sw: StopWatch): boolean => {\n\t\tlet didAddResult = false;\n\t\tif (!container) {\n\t\t\treturn didAddResult;\n\t\t}\n\t\tfor (const suggestion of container.suggestions) {\n\t\t\tif (!options.kindFilter.has(suggestion.kind)) {\n\t\t\t\t// skip if not showing deprecated suggestions\n\t\t\t\tif (!options.showDeprecated && suggestion?.tags?.includes(languages.CompletionItemTag.Deprecated)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// fill in default range when missing\n\t\t\t\tif (!suggestion.range) {\n\t\t\t\t\tsuggestion.range = defaultRange;\n\t\t\t\t}\n\t\t\t\t// fill in default sortText when missing\n\t\t\t\tif (!suggestion.sortText) {\n\t\t\t\t\tsuggestion.sortText = typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.label;\n\t\t\t\t}\n\t\t\t\tif (!needsClipboard && suggestion.insertTextRules && suggestion.insertTextRules & languages.CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\t\t\tneedsClipboard = SnippetParser.guessNeedsClipboard(suggestion.insertText);\n\t\t\t\t}\n\t\t\t\tresult.push(new CompletionItem(position, suggestion, container, provider));\n\t\t\t\tdidAddResult = true;\n\t\t\t}\n\t\t}\n\t\tif (isDisposable(container)) {\n\t\t\tdisposables.add(container);\n\t\t}\n\t\tdurations.push({\n\t\t\tproviderName: provider._debugDisplayName ?? 'unknown_provider', elapsedProvider: container.duration ?? -1, elapsedOverall: sw.elapsed()\n\t\t});\n\t\treturn didAddResult;\n\t};\n\n\t// ask for snippets in parallel to asking \"real\" providers. Only do something if configured to\n\t// do so - no snippet filter, no special-providers-only request\n\tconst snippetCompletions = (async () => {\n\t\tif (!_snippetSuggestSupport || options.kindFilter.has(languages.CompletionItemKind.Snippet)) {\n\t\t\treturn;\n\t\t}\n\t\t// we have items from a previous session that we can reuse\n\t\tconst reuseItems = options.providerItemsToReuse.get(_snippetSuggestSupport);\n\t\tif (reuseItems) {\n\t\t\treuseItems.forEach(item => result.push(item));\n\t\t\treturn;\n\t\t}\n\t\tif (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {\n\t\t\treturn;\n\t\t}\n\t\tconst sw = new StopWatch();\n\t\tconst list = await _snippetSuggestSupport.provideCompletionItems(model, position, context, token);\n\t\tonCompletionList(_snippetSuggestSupport, list, sw);\n\t})();\n\n\t// add suggestions from contributed providers - providers are ordered in groups of\n\t// equal score and once a group produces a result the process stops\n\t// get provider groups, always add snippet suggestion provider\n\tfor (const providerGroup of registry.orderedGroups(model)) {\n\n\t\t// for each support in the group ask for suggestions\n\t\tlet didAddResult = false;\n\t\tawait Promise.all(providerGroup.map(async provider => {\n\t\t\t// we have items from a previous session that we can reuse\n\t\t\tif (options.providerItemsToReuse.has(provider)) {\n\t\t\t\tconst items = options.providerItemsToReuse.get(provider)!;\n\t\t\t\titems.forEach(item => result.push(item));\n\t\t\t\tdidAddResult = didAddResult || items.length > 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// check if this provider is filtered out\n\t\t\tif (options.providerFilter.size > 0 && !options.providerFilter.has(provider)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst sw = new StopWatch();\n\t\t\t\tconst list = await provider.provideCompletionItems(model, position, context, token);\n\t\t\t\tdidAddResult = onCompletionList(provider, list, sw) || didAddResult;\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedExternalError(err);\n\t\t\t}\n\t\t}));\n\n\t\tif (didAddResult || token.isCancellationRequested) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tawait snippetCompletions;\n\n\tif (token.isCancellationRequested) {\n\t\tdisposables.dispose();\n\t\treturn Promise.reject(new CancellationError());\n\t}\n\n\treturn new CompletionItemModel(\n\t\tresult.sort(getSuggestionComparator(options.snippetSortOrder)),\n\t\tneedsClipboard,\n\t\t{ entries: durations, elapsed: sw.elapsed() },\n\t\tdisposables,\n\t);\n}\n\n\nfunction defaultComparator(a: CompletionItem, b: CompletionItem): number {\n\t// check with 'sortText'\n\tif (a.sortTextLow && b.sortTextLow) {\n\t\tif (a.sortTextLow < b.sortTextLow) {\n\t\t\treturn -1;\n\t\t} else if (a.sortTextLow > b.sortTextLow) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\t// check with 'label'\n\tif (a.textLabel < b.textLabel) {\n\t\treturn -1;\n\t} else if (a.textLabel > b.textLabel) {\n\t\treturn 1;\n\t}\n\t// check with 'type'\n\treturn a.completion.kind - b.completion.kind;\n}\n\nfunction snippetUpComparator(a: CompletionItem, b: CompletionItem): number {\n\tif (a.completion.kind !== b.completion.kind) {\n\t\tif (a.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn -1;\n\t\t} else if (b.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\nfunction snippetDownComparator(a: CompletionItem, b: CompletionItem): number {\n\tif (a.completion.kind !== b.completion.kind) {\n\t\tif (a.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn 1;\n\t\t} else if (b.completion.kind === languages.CompletionItemKind.Snippet) {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn defaultComparator(a, b);\n}\n\ninterface Comparator<T> { (a: T, b: T): number }\nconst _snippetComparators = new Map<SnippetSortOrder, Comparator<CompletionItem>>();\n_snippetComparators.set(SnippetSortOrder.Top, snippetUpComparator);\n_snippetComparators.set(SnippetSortOrder.Bottom, snippetDownComparator);\n_snippetComparators.set(SnippetSortOrder.Inline, defaultComparator);\n\nexport function getSuggestionComparator(snippetConfig: SnippetSortOrder): (a: CompletionItem, b: CompletionItem) => number {\n\treturn _snippetComparators.get(snippetConfig)!;\n}\n\nCommandsRegistry.registerCommand('_executeCompletionItemProvider', async (accessor, ...args: [URI, IPosition, string?, number?]) => {\n\tconst [uri, position, triggerCharacter, maxItemsToResolve] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Position.isIPosition(position));\n\tassertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n\tassertType(typeof maxItemsToResolve === 'number' || !maxItemsToResolve);\n\n\tconst { completionProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\n\t\tconst result: languages.CompletionList = {\n\t\t\tincomplete: false,\n\t\t\tsuggestions: []\n\t\t};\n\n\t\tconst resolving: Promise<unknown>[] = [];\n\t\tconst actualPosition = ref.object.textEditorModel.validatePosition(position);\n\t\tconst completions = await provideSuggestionItems(completionProvider, ref.object.textEditorModel, actualPosition, undefined, { triggerCharacter: triggerCharacter ?? undefined, triggerKind: triggerCharacter ? languages.CompletionTriggerKind.TriggerCharacter : languages.CompletionTriggerKind.Invoke });\n\t\tfor (const item of completions.items) {\n\t\t\tif (resolving.length < (maxItemsToResolve ?? 0)) {\n\t\t\t\tresolving.push(item.resolve(CancellationToken.None));\n\t\t\t}\n\t\t\tresult.incomplete = result.incomplete || item.container.incomplete;\n\t\t\tresult.suggestions.push(item.completion);\n\t\t}\n\n\t\ttry {\n\t\t\tawait Promise.all(resolving);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\tsetTimeout(() => completions.disposable.dispose(), 100);\n\t\t}\n\n\t} finally {\n\t\tref.dispose();\n\t}\n\n});\n\ninterface SuggestController extends IEditorContribution {\n\ttriggerSuggest(onlyFrom?: Set<languages.CompletionItemProvider>, auto?: boolean, noFilter?: boolean): void;\n}\n\nexport function showSimpleSuggestions(editor: ICodeEditor, provider: languages.CompletionItemProvider) {\n\teditor.getContribution<SuggestController>('editor.contrib.suggestController')?.triggerSuggest(\n\t\tnew Set<languages.CompletionItemProvider>().add(provider), undefined, true\n\t);\n}\n\nexport interface ISuggestItemPreselector {\n\t/**\n\t * The preselector with highest priority is asked first.\n\t*/\n\treadonly priority: number;\n\n\t/**\n\t * Is called to preselect a suggest item.\n\t * When -1 is returned, item preselectors with lower priority are asked.\n\t*/\n\tselect(model: ITextModel, pos: IPosition, items: CompletionItem[]): number | -1;\n}\n\n\nexport abstract class QuickSuggestionsOptions {\n\n\tstatic isAllOff(config: InternalQuickSuggestionsOptions): boolean {\n\t\treturn config.other === 'off' && config.comments === 'off' && config.strings === 'off';\n\t}\n\n\tstatic isAllOn(config: InternalQuickSuggestionsOptions): boolean {\n\t\treturn config.other === 'on' && config.comments === 'on' && config.strings === 'on';\n\t}\n\n\tstatic valueFor(config: InternalQuickSuggestionsOptions, tokenType: StandardTokenType): QuickSuggestionsValue {\n\t\tswitch (tokenType) {\n\t\t\tcase StandardTokenType.Comment: return config.comments;\n\t\t\tcase StandardTokenType.String: return config.strings;\n\t\t\tdefault: return config.other;\n\t\t}\n\t}\n}\n"]}