lean4monaco 1.0.46 → 1.1.0

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 (209) hide show
  1. package/README.md +75 -0
  2. package/dist/JuliaMono-Regular.ttf +0 -0
  3. package/dist/css/custom.css +7 -1
  4. package/dist/infowebview.d.ts +3 -4
  5. package/dist/infowebview.js +4 -4
  6. package/dist/lean4-infoview/codicon.ttf +0 -0
  7. package/dist/lean4-infoview/esm-shims/react-dom.d.ts +5 -0
  8. package/dist/lean4-infoview/esm-shims/react-jsx-runtime.d.ts +5 -0
  9. package/dist/lean4-infoview/esm-shims/react.d.ts +5 -0
  10. package/dist/lean4-infoview/index.css +4161 -0
  11. package/dist/lean4-infoview/index.d.ts +16 -0
  12. package/dist/lean4-infoview/index.development.js +37312 -0
  13. package/dist/lean4-infoview/index.production.min.js +1528 -0
  14. package/dist/lean4-infoview/infoview/collapsing.d.ts +12 -0
  15. package/dist/lean4-infoview/infoview/contexts.d.ts +10 -0
  16. package/dist/lean4-infoview/infoview/editorConnection.d.ts +22 -0
  17. package/dist/lean4-infoview/infoview/errors.d.ts +14 -0
  18. package/dist/lean4-infoview/infoview/event.d.ts +33 -0
  19. package/dist/lean4-infoview/infoview/goalLocation.d.ts +61 -0
  20. package/dist/lean4-infoview/infoview/goals.d.ts +46 -0
  21. package/dist/lean4-infoview/infoview/info.d.ts +18 -0
  22. package/dist/lean4-infoview/infoview/infos.d.ts +2 -0
  23. package/dist/lean4-infoview/infoview/interactiveCode.d.ts +19 -0
  24. package/dist/lean4-infoview/infoview/main.d.ts +13 -0
  25. package/dist/lean4-infoview/infoview/messages.d.ts +19 -0
  26. package/dist/lean4-infoview/infoview/rpcSessions.d.ts +11 -0
  27. package/dist/lean4-infoview/infoview/serverVersion.d.ts +10 -0
  28. package/dist/lean4-infoview/infoview/tooltips.d.ts +32 -0
  29. package/dist/lean4-infoview/infoview/traceExplorer.d.ts +11 -0
  30. package/dist/lean4-infoview/infoview/userWidget.d.ts +39 -0
  31. package/dist/lean4-infoview/infoview/util.d.ts +144 -0
  32. package/dist/lean4-infoview/loader.d.ts +20 -0
  33. package/dist/lean4-infoview/loader.development.js +1006 -0
  34. package/dist/lean4-infoview/loader.production.min.js +1 -0
  35. package/dist/lean4-infoview/react-dom.development.js +30537 -0
  36. package/dist/lean4-infoview/react-dom.production.min.js +21 -0
  37. package/dist/lean4-infoview/react-jsx-runtime.development.js +1362 -0
  38. package/dist/lean4-infoview/react-jsx-runtime.production.min.js +1 -0
  39. package/dist/lean4-infoview/react.development.js +2823 -0
  40. package/dist/lean4-infoview/react.production.min.js +1 -0
  41. package/dist/leanmonaco.js +5 -4
  42. package/dist/monaco-lean4/vscode-lean4/package.json +944 -0
  43. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +9 -0
  44. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +20 -0
  45. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.d.ts +12 -0
  46. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.js +40 -0
  47. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +20 -0
  48. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +79 -0
  49. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.d.ts +13 -0
  50. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.js +29 -0
  51. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +28 -0
  52. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +124 -0
  53. package/dist/monaco-lean4/vscode-lean4/src/config.d.ts +33 -0
  54. package/dist/monaco-lean4/vscode-lean4/src/config.js +119 -0
  55. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +27 -0
  56. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +133 -0
  57. package/dist/monaco-lean4/vscode-lean4/src/infoview.d.ts +69 -0
  58. package/dist/monaco-lean4/vscode-lean4/src/infoview.js +711 -0
  59. package/dist/monaco-lean4/vscode-lean4/src/leanclient.d.ts +67 -0
  60. package/dist/monaco-lean4/vscode-lean4/src/leanclient.js +443 -0
  61. package/dist/monaco-lean4/vscode-lean4/src/rpc.d.ts +16 -0
  62. package/dist/monaco-lean4/vscode-lean4/src/rpc.js +102 -0
  63. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.d.ts +11 -0
  64. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.js +130 -0
  65. package/dist/monaco-lean4/vscode-lean4/src/utils/batch.d.ts +37 -0
  66. package/dist/monaco-lean4/vscode-lean4/src/utils/batch.js +203 -0
  67. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.d.ts +41 -0
  68. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.js +205 -0
  69. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.d.ts +16 -0
  70. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.js +129 -0
  71. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.d.ts +3 -0
  72. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.js +4 -0
  73. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.d.ts +21 -0
  74. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.js +53 -0
  75. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.d.ts +35 -0
  76. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.js +136 -0
  77. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.d.ts +17 -0
  78. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.js +36 -0
  79. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +37 -0
  80. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.js +210 -0
  81. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.d.ts +7 -0
  82. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.js +20 -0
  83. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.d.ts +24 -0
  84. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.js +110 -0
  85. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.d.ts +9 -0
  86. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.js +125 -0
  87. package/dist/monacoleanclient.d.ts +1 -2
  88. package/dist/monacoleanclient.js +3 -3
  89. package/dist/vscode-lean4/lean4-infoview/package.json +25 -23
  90. package/dist/vscode-lean4/lean4-infoview/src/infoview/highlightjs.css +210 -0
  91. package/dist/vscode-lean4/lean4-infoview/tsconfig.json +6 -2
  92. package/dist/vscode-lean4/lean4-infoview-api/package.json +1 -1
  93. package/dist/vscode-lean4/lean4-unicode-input/package.json +1 -1
  94. package/dist/vscode-lean4/lean4-unicode-input/src/abbreviations.json +12 -12
  95. package/dist/vscode-lean4/lean4-unicode-input-component/package.json +2 -2
  96. package/dist/vscode-lean4/package-lock.json +6129 -3245
  97. package/dist/vscode-lean4/vscode-lean4/language-configuration.json +1 -1
  98. package/dist/vscode-lean4/vscode-lean4/loogleview/static/index.css +19 -16
  99. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-dark.svg +91 -0
  100. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-dark.svg +114 -0
  101. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-light.svg +114 -0
  102. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-passthrough-dark.svg +109 -0
  103. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-passthrough-light.svg +109 -0
  104. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-init-dark.svg +100 -0
  105. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-init-light.svg +100 -0
  106. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-dark.svg +123 -0
  107. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-light.svg +123 -0
  108. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-passthrough-dark.svg +109 -0
  109. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-passthrough-light.svg +109 -0
  110. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-light.svg +91 -0
  111. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-dark.svg +123 -0
  112. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-light.svg +123 -0
  113. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-passthrough-dark.svg +118 -0
  114. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-passthrough-light.svg +118 -0
  115. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-dark.svg +138 -0
  116. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-i-passthrough-dark.svg +160 -0
  117. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-i-passthrough-light.svg +160 -0
  118. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-l-passthrough-dark.svg +158 -0
  119. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-l-passthrough-light.svg +158 -0
  120. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-light.svg +138 -0
  121. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-t-passthrough-dark.svg +169 -0
  122. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-t-passthrough-light.svg +169 -0
  123. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-dark.svg +147 -0
  124. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-i-passthrough-dark.svg +170 -0
  125. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-i-passthrough-light.svg +170 -0
  126. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-l-passthrough-dark.svg +167 -0
  127. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-l-passthrough-light.svg +167 -0
  128. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-light.svg +147 -0
  129. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-t-passthrough-dark.svg +179 -0
  130. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-t-passthrough-light.svg +179 -0
  131. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-dark.svg +165 -0
  132. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-i-passthrough-dark.svg +187 -0
  133. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-i-passthrough-light.svg +187 -0
  134. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-l-passthrough-dark.svg +185 -0
  135. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-l-passthrough-light.svg +185 -0
  136. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-light.svg +165 -0
  137. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-t-passthrough-dark.svg +196 -0
  138. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-t-passthrough-light.svg +196 -0
  139. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-dark.svg +184 -0
  140. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-i-passthrough-dark.svg +206 -0
  141. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-i-passthrough-light.svg +206 -0
  142. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-l-passthrough-dark.svg +204 -0
  143. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-l-passthrough-light.svg +204 -0
  144. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-light.svg +184 -0
  145. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-t-passthrough-dark.svg +215 -0
  146. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-t-passthrough-light.svg +215 -0
  147. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-dark.svg +132 -0
  148. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-i-passthrough-dark.svg +154 -0
  149. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-i-passthrough-light.svg +154 -0
  150. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-l-passthrough-dark.svg +152 -0
  151. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-l-passthrough-light.svg +152 -0
  152. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-light.svg +132 -0
  153. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-t-passthrough-dark.svg +163 -0
  154. package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-t-passthrough-light.svg +163 -0
  155. package/dist/vscode-lean4/vscode-lean4/moogleview/static/index.css +198 -0
  156. package/dist/vscode-lean4/vscode-lean4/moogleview/tsconfig.json +10 -0
  157. package/dist/vscode-lean4/vscode-lean4/package.json +638 -18
  158. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +2 -2
  159. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +2 -2
  160. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +2 -3
  161. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +3 -5
  162. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +1 -2
  163. package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +4 -8
  164. package/dist/vscode-lean4/vscode-lean4/src/config.d.ts +14 -1
  165. package/dist/vscode-lean4/vscode-lean4/src/config.js +56 -5
  166. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.d.ts +36 -5
  167. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.js +59 -23
  168. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.d.ts +22 -17
  169. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.js +182 -119
  170. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +33 -20
  171. package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +235 -89
  172. package/dist/vscode-lean4/vscode-lean4/src/infoview.d.ts +7 -18
  173. package/dist/vscode-lean4/vscode-lean4/src/infoview.js +217 -102
  174. package/dist/vscode-lean4/vscode-lean4/src/leanclient.d.ts +12 -7
  175. package/dist/vscode-lean4/vscode-lean4/src/leanclient.js +187 -64
  176. package/dist/vscode-lean4/vscode-lean4/src/taskgutter.d.ts +35 -3
  177. package/dist/vscode-lean4/vscode-lean4/src/taskgutter.js +533 -93
  178. package/dist/vscode-lean4/vscode-lean4/src/utils/batch.d.ts +12 -4
  179. package/dist/vscode-lean4/vscode-lean4/src/utils/batch.js +78 -72
  180. package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.d.ts +9 -9
  181. package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.js +121 -77
  182. package/dist/vscode-lean4/vscode-lean4/src/utils/converters.d.ts +15 -0
  183. package/dist/vscode-lean4/vscode-lean4/src/utils/converters.js +9 -0
  184. package/dist/vscode-lean4/vscode-lean4/src/utils/elan.d.ts +179 -1
  185. package/dist/vscode-lean4/vscode-lean4/src/utils/elan.js +422 -3
  186. package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.d.ts +3 -1
  187. package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.js +11 -11
  188. package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.d.ts +2 -0
  189. package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.js +17 -0
  190. package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.d.ts +2 -0
  191. package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.js +35 -0
  192. package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.d.ts +34 -0
  193. package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.js +249 -0
  194. package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.d.ts +83 -0
  195. package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.js +323 -0
  196. package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +41 -12
  197. package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.js +245 -128
  198. package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.d.ts +27 -22
  199. package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.js +177 -82
  200. package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.d.ts +11 -4
  201. package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.js +18 -16
  202. package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.d.ts +1 -0
  203. package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.js +2 -0
  204. package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.d.ts +3 -0
  205. package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.js +22 -0
  206. package/dist/vscode-lean4/vscode-lean4/tsconfig.json +2 -1
  207. package/dist/vscode-lean4/vscode-lean4/webview/tsconfig.json +3 -1
  208. package/dist/vscode.css +7 -0
  209. package/package.json +7 -5
@@ -1,9 +1,9 @@
1
1
  import { EventEmitter, window } from 'vscode';
2
- import { getPowerShellPath, isRunningTest } from '../config';
3
- import { ExecutionExitCode, batchExecute, displayResultError } from './batch';
4
- import { elanSelfUpdate } from './elan';
2
+ import { getPowerShellPath, isRunningTest, setAlwaysAskBeforeInstallingLeanVersions } from '../config';
3
+ import { ExecutionExitCode, displayResultError } from './batch';
4
+ import { elanSelfUninstall, elanSelfUpdate, elanVersion, isElanEagerResolutionVersion } from './elan';
5
5
  import { logger } from './logger';
6
- import { displayError, displayErrorWithOptionalInput, displayNotificationWithInput, } from './notifs';
6
+ import { displayNotification, displayNotificationWithInput, displayNotificationWithOptionalInput, displayStickyNotificationWithOptionalInput, } from './notifs';
7
7
  export class LeanVersion {
8
8
  version;
9
9
  error;
@@ -13,11 +13,8 @@ export class LeanInstaller {
13
13
  leanInstallerWindows = 'https://raw.githubusercontent.com/leanprover/elan/master/elan-init.ps1';
14
14
  outputChannel;
15
15
  prompting = false;
16
- installing = false;
16
+ pendingOperation;
17
17
  freshInstallDefaultToolchain;
18
- elanDefaultToolchain = ''; // the default toolchain according to elan (toolchain marked with '(default)')
19
- workspaceSuffix = '(workspace override)';
20
- defaultSuffix = '(default)';
21
18
  promptUser = true;
22
19
  // This event is raised whenever a version change happens.
23
20
  // The event provides the workspace Uri where the change happened.
@@ -57,154 +54,274 @@ export class LeanInstaller {
57
54
  const finalizer = () => {
58
55
  this.prompting = false;
59
56
  };
60
- displayErrorWithOptionalInput(message, 'Restart Lean', () => this.installChangedEmitter.fire(packageUri), finalizer);
57
+ displayNotificationWithOptionalInput('Error', message, [{ input: 'Restart Lean', action: () => this.installChangedEmitter.fire(packageUri) }], finalizer);
61
58
  }
62
59
  handleLakeFileChanged(packageUri) {
63
60
  void this.showRestartPromptAndRestart('Lake file configuration changed', packageUri);
64
61
  }
65
- removeSuffix(version) {
66
- let s = version;
67
- const suffixes = [this.defaultSuffix, this.workspaceSuffix];
68
- suffixes.forEach(suffix => {
69
- if (s.endsWith(suffix)) {
70
- s = s.substr(0, s.length - suffix.length);
71
- }
72
- });
73
- return s.trim();
62
+ installElanPrompt(reason) {
63
+ let message;
64
+ if (reason !== undefined) {
65
+ message = `${reason} Do you wish to install Lean's version manager Elan?`;
66
+ }
67
+ else {
68
+ message = "This command will install Lean's version manager Elan.\n\n" + 'Do you wish to proceed?';
69
+ }
70
+ const item = 'Install Elan';
71
+ return { message, item };
74
72
  }
75
- async getElanDefaultToolchain(packageUri) {
76
- if (this.elanDefaultToolchain) {
77
- return this.elanDefaultToolchain;
73
+ async displayInstallElanPromptWithItems(severity, reason, otherItems = [], defaultItem) {
74
+ if (!this.getPromptUser()) {
75
+ // Used in tests
76
+ await this.autoInstall();
77
+ return { kind: 'InstallElan', success: true };
78
78
  }
79
- const toolChains = await this.elanListToolChains(packageUri);
80
- let result = '';
81
- toolChains.forEach(s => {
82
- if (s.endsWith(this.defaultSuffix)) {
83
- result = this.removeSuffix(s);
84
- }
85
- });
86
- this.elanDefaultToolchain = result;
87
- return result;
88
- }
89
- async elanListToolChains(packageUri) {
90
- try {
91
- const cmd = 'elan';
92
- const options = ['toolchain', 'list'];
93
- const cwd = packageUri.scheme === 'file' ? packageUri.fsPath : undefined;
94
- const stdout = (await batchExecute(cmd, options, cwd)).stdout;
95
- if (!stdout) {
96
- throw new Error('elan toolchain list returned no output.');
97
- }
98
- const result = [];
99
- stdout.split(/\r?\n/).forEach(s => {
100
- s = s.trim();
101
- if (s !== '') {
102
- result.push(s);
103
- }
104
- });
105
- return result;
79
+ const p = this.installElanPrompt(reason);
80
+ const choice = await displayNotificationWithInput(severity, p.message, [p.item, ...otherItems], defaultItem);
81
+ if (choice === undefined) {
82
+ return undefined;
106
83
  }
107
- catch (err) {
108
- return [`${err}`];
84
+ if (choice === p.item) {
85
+ return { kind: 'InstallElan', success: (await this.installElanAndDisplaySettingPrompt()) === 'Success' };
109
86
  }
87
+ return { kind: 'OtherItem', choice };
110
88
  }
111
- async hasElan() {
112
- try {
113
- const options = ['--version'];
114
- const result = await batchExecute('elan', options);
115
- const filterVersion = /elan (\d+)\.\d+\..+/;
116
- const match = filterVersion.exec(result.stdout);
117
- return match !== null;
89
+ async displayInstallElanPrompt(severity, reason) {
90
+ const r = await this.displayInstallElanPromptWithItems(severity, reason);
91
+ if (r !== undefined && r.kind === 'InstallElan') {
92
+ return r.success;
118
93
  }
119
- catch (err) {
120
- return false;
94
+ return false;
95
+ }
96
+ displayStickyInstallElanPrompt(severity, reason,
97
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
98
+ options, otherItems = []) {
99
+ const p = this.installElanPrompt(reason);
100
+ const installElanItem = {
101
+ input: p.item,
102
+ continueDisplaying: false,
103
+ action: async () => {
104
+ await this.installElanAndDisplaySettingPrompt();
105
+ },
106
+ };
107
+ return displayStickyNotificationWithOptionalInput(severity, p.message, options, [
108
+ installElanItem,
109
+ ...otherItems,
110
+ ]);
111
+ }
112
+ updateElanPrompt(mode) {
113
+ switch (mode.kind) {
114
+ case 'Manual':
115
+ return {
116
+ message: "This command will update Lean's version manager Elan to its most recent version.\n\n" +
117
+ 'Do you wish to proceed?',
118
+ item: 'Update Elan',
119
+ };
120
+ case 'Outdated':
121
+ return {
122
+ message: `Lean's version manager Elan is outdated: the installed version is ${mode.versions.currentVersion.toString()}, but a version of ${mode.versions.recommendedVersion.toString()} is recommended.\n\n` +
123
+ 'Do you wish to update Elan?',
124
+ item: 'Update Elan',
125
+ };
121
126
  }
122
127
  }
123
- async displayInstallElanPrompt(severity, reason) {
124
- if (!this.getPromptUser()) {
125
- // Used in tests
126
- await this.autoInstall();
127
- return true;
128
+ async displayElanUpdateSuccessfulPrompt(currentVersion) {
129
+ if (isElanEagerResolutionVersion(currentVersion)) {
130
+ displayNotification('Information', 'Elan update successful!');
131
+ return;
128
132
  }
129
- const reasonPrefix = reason ? reason + ' ' : '';
130
- const installElanItem = 'Install Elan and Lean 4';
131
- const installElanChoice = await displayNotificationWithInput(severity, reasonPrefix + "Do you want to install Lean's version manager Elan and a recent stable version of Lean 4?", installElanItem);
132
- if (installElanChoice === undefined) {
133
- return false;
133
+ const prompt = 'Elan update successful!\n\n' +
134
+ 'Do you want Elan in VS Code to continue downloading and installing Lean versions automatically, or would you prefer it to ask for confirmation before downloading and installing new Lean versions?\n' +
135
+ 'Asking for confirmation is especially desirable if you are ever using a limited internet data plan or your internet connection tends to be slow, whereas automatic installs are less tedious on fast and unlimited internet connections.';
136
+ const choice = await displayNotificationWithInput('Information', prompt, ['Always Ask For Confirmation'], 'Install Lean Versions Automatically');
137
+ if (choice === 'Always Ask For Confirmation') {
138
+ await setAlwaysAskBeforeInstallingLeanVersions(true);
139
+ }
140
+ if (choice === 'Install Lean Versions Automatically') {
141
+ await setAlwaysAskBeforeInstallingLeanVersions(false);
134
142
  }
135
- await this.installElan();
136
- return true;
137
143
  }
138
- async displayUpdateElanPrompt(severity, currentVersion, recommendedVersion) {
139
- const updateElanItem = 'Update Elan';
140
- const updateElanChoice = await displayNotificationWithInput(severity, `Lean's version manager Elan is outdated: the installed version is ${currentVersion.toString()}, but a version of ${recommendedVersion.toString()} is recommended. Do you want to update Elan?`, updateElanItem);
141
- if (updateElanChoice === undefined) {
144
+ async updateElan(currentVersion) {
145
+ const r = await this.performOperation('Update', async () => {
146
+ if (currentVersion.compare('3.1.0') === 0) {
147
+ // `elan self update` was broken in elan 3.1.0, so we need to take a different approach to updating elan here.
148
+ const installElanResult = await this.installElanAndDisplaySettingPrompt();
149
+ if (installElanResult !== 'Success') {
150
+ return false;
151
+ }
152
+ await this.displayElanUpdateSuccessfulPrompt(currentVersion);
153
+ return true;
154
+ }
155
+ const elanSelfUpdateResult = await elanSelfUpdate(this.outputChannel, 'Update Elan');
156
+ if (elanSelfUpdateResult.exitCode !== ExecutionExitCode.Success) {
157
+ displayResultError(elanSelfUpdateResult, "Cannot update Elan. If you suspect that this is due to the way that you have set up Elan (e.g. from a package repository that ships an outdated version of Elan), you can disable these warnings using the 'Lean4: Show Setup Warnings' setting under 'File' > 'Preferences' > 'Settings'.");
158
+ return false;
159
+ }
160
+ await this.displayElanUpdateSuccessfulPrompt(currentVersion);
161
+ return true;
162
+ });
163
+ if (r === 'PendingOperation') {
142
164
  return false;
143
165
  }
144
- if (currentVersion.compare('3.1.0') === 0) {
145
- // `elan self update` was broken in elan 3.1.0, so we need to take a different approach to updating elan here.
146
- const installElanResult = await this.installElan();
147
- return installElanResult === 'Success';
166
+ return r;
167
+ }
168
+ async displayUpdateElanPromptWithItems(severity, mode, otherItems = [], defaultItem) {
169
+ const p = this.updateElanPrompt(mode);
170
+ const choice = await displayNotificationWithInput(severity, p.message, [p.item, ...otherItems], defaultItem);
171
+ if (choice === undefined) {
172
+ return undefined;
173
+ }
174
+ if (choice === p.item) {
175
+ return { kind: 'UpdateElan', success: await this.updateElan(mode.versions.currentVersion) };
148
176
  }
149
- const elanSelfUpdateResult = await elanSelfUpdate(this.outputChannel);
150
- if (elanSelfUpdateResult.exitCode !== ExecutionExitCode.Success) {
151
- displayResultError(elanSelfUpdateResult, "Cannot update Elan. If you suspect that this is due to the way that you have set up Elan (e.g. from a package repository that ships an outdated version of Elan), you can disable these warnings using the 'Lean4: Show Setup Warnings' setting under 'File' > 'Preferences' > 'Settings'.");
152
- return false;
177
+ return { kind: 'OtherItem', choice };
178
+ }
179
+ async displayUpdateElanPrompt(severity, mode) {
180
+ const r = await this.displayUpdateElanPromptWithItems(severity, mode);
181
+ if (r !== undefined && r.kind === 'UpdateElan') {
182
+ return r.success;
183
+ }
184
+ return false;
185
+ }
186
+ displayStickyUpdateElanPrompt(severity, mode,
187
+ // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
188
+ options, otherItems = []) {
189
+ const p = this.updateElanPrompt(mode);
190
+ const updateElanItem = {
191
+ input: p.item,
192
+ continueDisplaying: false,
193
+ action: async () => {
194
+ await this.updateElan(mode.versions.currentVersion);
195
+ },
196
+ };
197
+ return displayStickyNotificationWithOptionalInput(severity, p.message, options, [updateElanItem, ...otherItems]);
198
+ }
199
+ async displayManualUpdateElanPrompt() {
200
+ const versionResult = await elanVersion();
201
+ switch (versionResult.kind) {
202
+ case 'Success':
203
+ await this.displayUpdateElanPrompt('Information', {
204
+ kind: 'Manual',
205
+ versions: { currentVersion: versionResult.version },
206
+ });
207
+ break;
208
+ case 'ElanNotInstalled':
209
+ displayNotification('Error', 'Elan is not installed.');
210
+ break;
211
+ case 'ExecutionError':
212
+ displayNotification('Error', `Error while determining current Elan version: ${versionResult.message}`);
213
+ break;
153
214
  }
154
- return true;
155
215
  }
156
216
  async autoInstall() {
157
217
  logger.log('[LeanInstaller] Installing Elan ...');
158
218
  await this.installElan();
159
219
  logger.log('[LeanInstaller] Elan installed');
160
220
  }
221
+ async installElanAndDisplaySettingPrompt() {
222
+ const r = await this.installElan();
223
+ if (r !== 'Success') {
224
+ return r;
225
+ }
226
+ const prompt = 'Elan installation successful!\n\n' +
227
+ 'Do you want Elan in VS Code to download and install Lean versions automatically, or would you prefer it to ask for confirmation before downloading and installing new Lean versions?\n' +
228
+ 'Asking for confirmation is especially desirable if you are ever using a limited internet data plan or your internet connection tends to be slow, whereas automatic installs are less tedious on fast and unlimited internet connections.';
229
+ const choice = await displayNotificationWithInput('Information', prompt, ['Always Ask For Confirmation'], 'Install Lean Versions Automatically');
230
+ if (choice === 'Always Ask For Confirmation') {
231
+ await setAlwaysAskBeforeInstallingLeanVersions(true);
232
+ }
233
+ if (choice === 'Install Lean Versions Automatically') {
234
+ await setAlwaysAskBeforeInstallingLeanVersions(false);
235
+ }
236
+ return r;
237
+ }
161
238
  async installElan() {
162
- if (this.installing) {
163
- displayError('Elan is already being installed. Please wait until the installation has finished.');
164
- return 'PendingInstallation';
165
- }
166
- this.installing = true;
167
- const terminalName = 'Lean installation via elan';
168
- let terminalOptions = { name: terminalName };
169
- if (process.platform === 'win32') {
170
- terminalOptions = { name: terminalName, shellPath: getPowerShellPath() };
171
- }
172
- const terminal = window.createTerminal(terminalOptions);
173
- terminal.show();
174
- // We register a listener, to restart the Lean extension once elan has finished.
175
- const resultPromise = new Promise(function (resolve, reject) {
176
- window.onDidCloseTerminal(async (t) => {
177
- if (t === terminal) {
178
- resolve(true);
179
- }
180
- else {
181
- logger.log('[LeanInstaller] ignoring terminal closed: ' + t.name + ', waiting for: ' + terminalName);
182
- }
239
+ return await this.performOperation('Install', async () => {
240
+ const terminalName = 'Lean installation via elan';
241
+ let terminalOptions = { name: terminalName };
242
+ if (process.platform === 'win32') {
243
+ terminalOptions = { name: terminalName, shellPath: getPowerShellPath() };
244
+ }
245
+ const terminal = window.createTerminal(terminalOptions);
246
+ terminal.show();
247
+ // We register a listener, to restart the Lean extension once elan has finished.
248
+ const resultPromise = new Promise(function (resolve, reject) {
249
+ window.onDidCloseTerminal(async (t) => {
250
+ if (t === terminal) {
251
+ resolve(true);
252
+ }
253
+ else {
254
+ logger.log('[LeanInstaller] ignoring terminal closed: ' + t.name + ', waiting for: ' + terminalName);
255
+ }
256
+ });
183
257
  });
258
+ if (process.platform === 'win32') {
259
+ terminal.sendText(`Start-BitsTransfer -Source "${this.leanInstallerWindows}" -Destination "elan-init.ps1"\r\n` +
260
+ 'Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process\r\n' +
261
+ `$rc = .\\elan-init.ps1 -NoPrompt 1 -DefaultToolchain ${this.freshInstallDefaultToolchain}\r\n` +
262
+ 'Write-Host "elan-init returned [$rc]"\r\n' +
263
+ 'del .\\elan-init.ps1\r\n' +
264
+ 'if ($rc -ne 0) {\r\n' +
265
+ ' Read-Host -Prompt "Press ENTER to continue"\r\n' +
266
+ '}\r\n' +
267
+ 'exit\r\n');
268
+ }
269
+ else {
270
+ const elanArgs = `-y --default-toolchain ${this.freshInstallDefaultToolchain}`;
271
+ const prompt = '(echo && read -n 1 -s -r -p "Install failed, press ENTER to continue...")';
272
+ terminal.sendText(`bash -c 'curl ${this.leanInstallerLinux} -sSf | sh -s -- ${elanArgs} || ${prompt}' && exit `);
273
+ }
274
+ const result = await resultPromise;
275
+ if (!result) {
276
+ displayNotification('Error', 'Elan installation failed. Check the terminal output for details.');
277
+ return 'InstallationFailed';
278
+ }
279
+ return 'Success';
280
+ });
281
+ }
282
+ async uninstallElan() {
283
+ await this.performOperation('Uninstall', async () => {
284
+ const prompt = "This command will uninstall Lean's version manager Elan and all installed Lean versions.\n\n" +
285
+ 'Do you wish to proceed?';
286
+ const choice = await displayNotificationWithInput('Information', prompt, ['Proceed']);
287
+ if (choice !== 'Proceed') {
288
+ return;
289
+ }
290
+ const r = await elanSelfUninstall(this.outputChannel, 'Uninstall Elan');
291
+ switch (r.exitCode) {
292
+ case ExecutionExitCode.Success:
293
+ displayNotification('Information', 'Elan uninstalled successfully.');
294
+ break;
295
+ case ExecutionExitCode.CannotLaunch:
296
+ displayNotification('Error', 'Elan is not installed.');
297
+ break;
298
+ case ExecutionExitCode.ExecutionError:
299
+ displayNotification('Error', `Error while installing Elan: ${r.combined}`);
300
+ break;
301
+ case ExecutionExitCode.Cancelled:
302
+ displayNotification('Information', 'Uninstalling Elan cancelled.');
303
+ }
184
304
  });
185
- if (process.platform === 'win32') {
186
- terminal.sendText(`Start-BitsTransfer -Source "${this.leanInstallerWindows}" -Destination "elan-init.ps1"\r\n` +
187
- 'Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process\r\n' +
188
- `$rc = .\\elan-init.ps1 -NoPrompt 1 -DefaultToolchain ${this.freshInstallDefaultToolchain}\r\n` +
189
- 'Write-Host "elan-init returned [$rc]"\r\n' +
190
- 'del .\\elan-init.ps1\r\n' +
191
- 'if ($rc -ne 0) {\r\n' +
192
- ' Read-Host -Prompt "Press ENTER to continue"\r\n' +
193
- '}\r\n' +
194
- 'exit\r\n');
305
+ }
306
+ async performOperation(kind, op) {
307
+ switch (this.pendingOperation) {
308
+ case 'Install':
309
+ displayNotification('Error', 'Elan is being installed. Please wait until the installation has finished.');
310
+ return 'PendingOperation';
311
+ case 'Update':
312
+ displayNotification('Error', 'Elan is being updated. Please wait until the update has finished.');
313
+ return 'PendingOperation';
314
+ case 'Uninstall':
315
+ displayNotification('Error', 'Elan is being uninstalled. Please wait until the deinstallation has finished.');
316
+ return 'PendingOperation';
317
+ case undefined:
318
+ this.pendingOperation = kind;
319
+ try {
320
+ return await op();
321
+ }
322
+ finally {
323
+ this.pendingOperation = undefined;
324
+ }
195
325
  }
196
- else {
197
- const elanArgs = `-y --default-toolchain ${this.freshInstallDefaultToolchain}`;
198
- const prompt = '(echo && read -n 1 -s -r -p "Install failed, press ENTER to continue...")';
199
- terminal.sendText(`bash -c 'curl ${this.leanInstallerLinux} -sSf | sh -s -- ${elanArgs} || ${prompt}' && exit `);
200
- }
201
- const result = await resultPromise;
202
- this.elanDefaultToolchain = this.freshInstallDefaultToolchain;
203
- this.installing = false;
204
- if (!result) {
205
- displayError('Elan installation failed. Check the terminal output for details.');
206
- return 'InstallationFailed';
207
- }
208
- return 'Success';
209
326
  }
210
327
  }
@@ -1,24 +1,29 @@
1
+ import { Disposable } from 'vscode';
1
2
  export type NotificationSeverity = 'Information' | 'Warning' | 'Error';
3
+ export declare function setStickyNotificationActiveButHidden(isActiveButHidden: boolean): Promise<void>;
4
+ export type StickyNotificationOptions<T> = {
5
+ onInput: (lastChoice: T, continueDisplaying: boolean) => Promise<boolean>;
6
+ onDisplay: () => Promise<void>;
7
+ };
8
+ export declare function displayActiveStickyNotification(): void;
2
9
  export declare function displayNotification(severity: NotificationSeverity, message: string, finalizer?: (() => void) | undefined): void;
3
- export declare function displayNotificationWithInput<T extends string>(severity: NotificationSeverity, message: string, ...items: T[]): Promise<T | undefined>;
4
- export declare function displayNotificationWithOptionalInput<T extends string>(severity: NotificationSeverity, message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): void;
5
- export declare function displayNotificationWithOutput(severity: NotificationSeverity, message: string, finalizer?: (() => void) | undefined): void;
6
- export declare function displayNotificationWithSetupGuide(severity: NotificationSeverity, message: string, finalizer?: (() => void) | undefined): void;
7
- export declare function displayError(message: string, finalizer?: (() => void) | undefined): void;
8
- export declare function displayErrorWithInput<T extends string>(message: string, ...items: T[]): Promise<T | undefined>;
9
- export declare function displayErrorWithOptionalInput<T extends string>(message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): void;
10
- export declare function displayErrorWithOutput(message: string, finalizer?: (() => void) | undefined): void;
11
- export declare function displayErrorWithSetupGuide(message: string, finalizer?: (() => void) | undefined): void;
12
- export declare function displayWarning(message: string, finalizer?: (() => void) | undefined): void;
13
- export declare function displayModalWarning(message: string): Promise<'Proceed' | 'Abort'>;
14
- export declare function displayWarningWithInput<T extends string>(message: string, ...items: T[]): Promise<T | undefined>;
15
- export declare function displayWarningWithOptionalInput<T extends string>(message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): void;
16
- export declare function displayWarningWithOutput(message: string, finalizer?: (() => void) | undefined): void;
17
- export declare function displayModalWarningWithOutput(message: string): Promise<'Proceed' | 'Abort'>;
18
- export declare function displayWarningWithSetupGuide(message: string, finalizer?: (() => void) | undefined): void;
19
- export declare function displayModalWarningWithSetupGuide(message: string): Promise<'Proceed' | 'Abort'>;
20
- export declare function displayInformation(message: string, finalizer?: (() => void) | undefined): void;
21
- export declare function displayInformationWithInput<T extends string>(message: string, ...items: T[]): Promise<T | undefined>;
22
- export declare function displayInformationWithOptionalInput<T extends string>(message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): void;
23
- export declare function displayInformationWithOutput(message: string, finalizer?: (() => void) | undefined): void;
24
- export declare function displayInformationWithSetupGuide(message: string, finalizer?: (() => void) | undefined): void;
10
+ export declare function displayStickyNotification(severity: NotificationSeverity, message: string, options: StickyNotificationOptions<void>): Disposable;
11
+ export declare function displayNotificationWithInput<T extends string>(severity: NotificationSeverity, message: string, items: T[], defaultItem?: T | undefined): Promise<T | undefined>;
12
+ export declare function displayModalNotification(severity: NotificationSeverity, message: string): Promise<void>;
13
+ export type Input<T> = {
14
+ input: T;
15
+ action: () => void;
16
+ };
17
+ export declare function displayNotificationWithOptionalInput<T extends string>(severity: NotificationSeverity, message: string, inputs: Input<T>[], finalizer?: (() => void) | undefined): void;
18
+ export type StickyInput<T> = {
19
+ input: T;
20
+ continueDisplaying: boolean;
21
+ action: () => Promise<void>;
22
+ };
23
+ export declare function displayStickyNotificationWithOptionalInput<T extends string>(severity: NotificationSeverity, message: string, options: StickyNotificationOptions<T>, inputs: StickyInput<T>[]): Disposable;
24
+ export declare function displayNotificationWithOutput(severity: NotificationSeverity, message: string, otherInputs?: Input<string>[], finalizer?: (() => void) | undefined): void;
25
+ export declare function displayModalNotificationWithOutput(severity: NotificationSeverity, message: string, otherItems?: string[], defaultItem?: string | undefined): Promise<'Show Output' | string | undefined>;
26
+ export declare function displayStickyNotificationWithOutput(severity: NotificationSeverity, message: string, options: StickyNotificationOptions<'Show Output' | string>, otherInputs?: StickyInput<string>[]): Disposable;
27
+ export declare function displayNotificationWithSetupGuide(severity: NotificationSeverity, message: string, otherInputs?: Input<string>[], finalizer?: (() => void) | undefined): void;
28
+ export declare function displayStickyNotificationWithSetupGuide(severity: NotificationSeverity, message: string, options: StickyNotificationOptions<'Open Setup Guide' | string>, otherInputs?: StickyInput<string>[]): Disposable;
29
+ export declare function displayModalNotificationWithSetupGuide(severity: NotificationSeverity, message: string, otherItems?: string[], defaultItem?: string | undefined): Promise<'Open Setup Guide' | string | undefined>;