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,19 +1,8 @@
1
1
  import { commands } from 'vscode';
2
2
  import { extUriToCwdUri } from '../utils/exturi';
3
- import { willUseLakeServer } from '../utils/projectInfo';
3
+ import { displayInternalError } from '../utils/internalErrors';
4
4
  import { diagnose } from './setupDiagnoser';
5
- import { displayDependencySetupError, displayElanOutdatedSetupWarning, displayElanSetupError, displayElanSetupWarning, displaySetupError, displaySetupErrorWithOutput, displaySetupWarning, displaySetupWarningWithOptionalInput, displaySetupWarningWithOutput, worstPreconditionViolation, } from './setupNotifs';
6
- export async function checkAll(...checks) {
7
- let worstViolation = 'Fulfilled';
8
- for (const check of checks) {
9
- const result = await check();
10
- worstViolation = worstPreconditionViolation(worstViolation, result);
11
- if (worstViolation === 'Fatal') {
12
- return 'Fatal';
13
- }
14
- }
15
- return worstViolation;
16
- }
5
+ import { SetupNotifier, worstPreconditionViolation, } from './setupNotifs';
17
6
  const singleFileWarningMessage = `Lean 4 server is operating in restricted single file mode.
18
7
  Please open a valid Lean 4 project containing a \'lean-toolchain\' file for full functionality.
19
8
  Click the following link to learn how to set up or open Lean projects: [(Show Setup Guide)](command:lean4.docs.showSetupGuide)`;
@@ -27,124 +16,198 @@ const lean3ProjectErrorMessage = (origin, projectVersion) => `${origin} is using
27
16
  If you want to use Lean 3, disable this extension ('Extensions' in the left sidebar > Cog icon on 'lean4' > 'Disable') and install the 'lean' extension for Lean 3 support.`;
28
17
  const ancientLean4ProjectWarningMessage = (origin, projectVersion) => `${origin} is using a Lean 4 version (${projectVersion.toString()}) from before the first Lean 4 stable release (4.0.0).
29
18
  Pre-stable Lean 4 versions are increasingly less supported, so please consider updating to a newer Lean 4 version.`;
30
- export async function checkAreDependenciesInstalled(channel, cwdUri) {
31
- const missingDeps = [];
32
- if (!(await diagnose(channel, cwdUri).checkCurlAvailable())) {
33
- missingDeps.push('curl');
19
+ const oldServerFolderContainsNewServerFolderErrorMessage = (folderUri, fileUri, clientFolderUri) => `Error while starting language server: The project at '${folderUri.fsPath}' of the file '${fileUri.baseName()}' is contained inside of another project at '${clientFolderUri.fsPath}', for which a language server is already running.
20
+ The Lean 4 VS Code extension does not support nested Lean projects.`;
21
+ const newServerFolderContainsOldServerFolderErrorMessage = (folderUri, fileUri, clientFolderUri) => `Error while starting language server: The project at '${folderUri.fsPath}' of the file '${fileUri.baseName()}' contains another project at '${clientFolderUri.fsPath}', for which a language server is already running.
22
+ The Lean 4 VS Code extension does not support nested Lean projects.`;
23
+ export class SetupDiagnostics {
24
+ n;
25
+ constructor(o) {
26
+ this.n = new SetupNotifier(o);
34
27
  }
35
- if (!(await diagnose(channel, cwdUri).checkGitAvailable())) {
36
- missingDeps.push('git');
28
+ async checkAreDependenciesInstalled(channel, cwdUri) {
29
+ const missingDeps = [];
30
+ if (!(await diagnose({ channel, cwdUri }).checkCurlAvailable())) {
31
+ missingDeps.push('curl');
32
+ }
33
+ if (!(await diagnose({ channel, cwdUri }).checkGitAvailable())) {
34
+ missingDeps.push('git');
35
+ }
36
+ if (missingDeps.length === 0) {
37
+ return 'Fulfilled';
38
+ }
39
+ let missingDepMessage;
40
+ if (missingDeps.length === 1) {
41
+ missingDepMessage = `One of Lean's dependencies ('${missingDeps.at(0)}') is missing`;
42
+ }
43
+ else {
44
+ missingDepMessage = `Multiple of Lean's dependencies (${missingDeps.map(dep => `'${dep}'`).join(', ')}) are missing`;
45
+ }
46
+ const errorMessage = `${missingDepMessage}. Please read the Setup Guide on how to install missing dependencies and set up Lean 4.`;
47
+ return await this.n.displaySetupErrorWithSetupGuide(errorMessage);
37
48
  }
38
- if (missingDeps.length === 0) {
39
- return 'Fulfilled';
49
+ async checkIsLean4Installed(installer, context, cwdUri, toolchainUpdateMode) {
50
+ const leanVersionResult = await diagnose({
51
+ channel: installer.getOutputChannel(),
52
+ cwdUri,
53
+ context,
54
+ toolchainUpdateMode,
55
+ }).queryLeanVersion();
56
+ switch (leanVersionResult.kind) {
57
+ case 'Success':
58
+ return 'Fulfilled';
59
+ case 'CommandError':
60
+ return this.n.displaySetupErrorWithOutput(`Error while checking Lean version: ${leanVersionResult.message}`);
61
+ case 'Cancelled':
62
+ return this.n.displaySetupErrorWithOutput('Error while checking Lean version: Operation cancelled.');
63
+ case 'InvalidVersion':
64
+ return this.n.displaySetupErrorWithOutput(`Error while checking Lean version: 'lean --version' returned a version that could not be parsed: '${leanVersionResult.versionResult}'`);
65
+ case 'CommandNotFound':
66
+ return await this.n.displayElanSetupError(installer, 'Lean is not installed.');
67
+ }
40
68
  }
41
- displayDependencySetupError(missingDeps);
42
- return 'Fatal';
43
- }
44
- export async function checkIsLean4Installed(installer, cwdUri) {
45
- const leanVersionResult = await diagnose(installer.getOutputChannel(), cwdUri).queryLeanVersion();
46
- switch (leanVersionResult.kind) {
47
- case 'Success':
48
- return 'Fulfilled';
49
- case 'CommandError':
50
- return displaySetupErrorWithOutput(`Error while checking Lean version: ${leanVersionResult.message}`);
51
- case 'InvalidVersion':
52
- return displaySetupErrorWithOutput(`Error while checking Lean version: 'lean --version' returned a version that could not be parsed: '${leanVersionResult.versionResult}'`);
53
- case 'CommandNotFound':
54
- return await displayElanSetupError(installer, 'Lean is not installed.');
69
+ async checkIsElanUpToDate(installer, cwdUri, options) {
70
+ const elanDiagnosis = await diagnose({ channel: installer.getOutputChannel(), cwdUri }).elanVersion();
71
+ switch (elanDiagnosis.kind) {
72
+ case 'NotInstalled':
73
+ if (options.elanMustBeInstalled) {
74
+ return await this.n.displayElanSetupError(installer, "Lean's version manager Elan is not installed.");
75
+ }
76
+ return await this.n.displayElanSetupWarning(installer, "Lean's version manager Elan is not installed. This means that the correct Lean 4 toolchain version of Lean 4 projects will not be selected or installed automatically.");
77
+ case 'ExecutionError':
78
+ return await this.n.displaySetupWarningWithOutput('Cannot determine Elan version: ' + elanDiagnosis.message);
79
+ case 'Outdated':
80
+ return await this.n.displayElanOutdatedSetupWarning(installer, elanDiagnosis.currentVersion, elanDiagnosis.recommendedVersion);
81
+ case 'UpToDate':
82
+ return 'Fulfilled';
83
+ }
55
84
  }
56
- }
57
- export async function checkIsElanUpToDate(installer, cwdUri, options) {
58
- const elanDiagnosis = await diagnose(installer.getOutputChannel(), cwdUri).elanVersion();
59
- switch (elanDiagnosis.kind) {
60
- case 'NotInstalled':
61
- if (options.elanMustBeInstalled) {
62
- return await displayElanSetupError(installer, "Lean's version manager Elan is not installed.");
85
+ async checkIsValidProjectFolder(channel, folderUri) {
86
+ const projectSetupDiagnosis = await diagnose({ channel, cwdUri: extUriToCwdUri(folderUri) }).projectSetup();
87
+ switch (projectSetupDiagnosis.kind) {
88
+ case 'SingleFile':
89
+ return await this.n.displaySetupWarning(singleFileWarningMessage);
90
+ case 'MissingLeanToolchain':
91
+ const parentProjectFolder = projectSetupDiagnosis.parentProjectFolder;
92
+ if (parentProjectFolder === undefined) {
93
+ return await this.n.displaySetupWarning(missingLeanToolchainWarningMessage);
94
+ }
95
+ else {
96
+ return this.n.displaySetupWarningWithInput(missingLeanToolchainWithParentProjectWarningMessage(parentProjectFolder), [
97
+ {
98
+ input: 'Open Parent Directory Project',
99
+ // this kills the extension host
100
+ action: () => commands.executeCommand('vscode.openFolder', parentProjectFolder),
101
+ },
102
+ ]);
103
+ }
104
+ case 'ValidProjectSetup':
105
+ return 'Fulfilled';
106
+ }
107
+ }
108
+ async checkIsNestedProjectFolder(existingFolderUris, folderUri, fileUri, stopOtherServer) {
109
+ if (folderUri.scheme === 'untitled' || fileUri.scheme === 'untitled') {
110
+ if (existingFolderUris.some(existingFolderUri => existingFolderUri.scheme === 'untitled')) {
111
+ await displayInternalError('starting language server', 'Attempting to start new untitled language server while one already exists.');
112
+ return 'Fatal';
63
113
  }
64
- return await displayElanSetupWarning(installer, "Lean's version manager Elan is not installed. This means that the correct Lean 4 toolchain version of Lean 4 projects will not be selected or installed automatically.");
65
- case 'ExecutionError':
66
- return await displaySetupWarningWithOutput('Cannot determine Elan version: ' + elanDiagnosis.message, {
67
- modal: options.modal,
68
- });
69
- case 'Outdated':
70
- return await displayElanOutdatedSetupWarning(installer, elanDiagnosis.currentVersion, elanDiagnosis.recommendedVersion);
71
- case 'UpToDate':
72
114
  return 'Fulfilled';
73
- }
74
- }
75
- export async function checkIsValidProjectFolder(channel, folderUri) {
76
- const projectSetupDiagnosis = await diagnose(channel, extUriToCwdUri(folderUri)).projectSetup();
77
- switch (projectSetupDiagnosis.kind) {
78
- case 'SingleFile':
79
- return await displaySetupWarning(singleFileWarningMessage);
80
- case 'MissingLeanToolchain':
81
- const parentProjectFolder = projectSetupDiagnosis.parentProjectFolder;
82
- if (parentProjectFolder === undefined) {
83
- return await displaySetupWarning(missingLeanToolchainWarningMessage);
115
+ }
116
+ for (const existingFolderUri of existingFolderUris) {
117
+ if (existingFolderUri.scheme !== 'file') {
118
+ continue;
84
119
  }
85
- else {
86
- return displaySetupWarningWithOptionalInput(missingLeanToolchainWithParentProjectWarningMessage(parentProjectFolder), 'Open Parent Directory Project',
87
- // this kills the extension host
88
- () => commands.executeCommand('vscode.openFolder', parentProjectFolder));
120
+ if (existingFolderUri.isInFolder(folderUri)) {
121
+ return await this.n.displaySetupErrorWithInput(newServerFolderContainsOldServerFolderErrorMessage(folderUri, fileUri, existingFolderUri), [
122
+ {
123
+ input: 'Stop Other Server',
124
+ continueDisplaying: false,
125
+ action: () => stopOtherServer(existingFolderUri),
126
+ },
127
+ ]);
89
128
  }
90
- case 'ValidProjectSetup':
91
- return 'Fulfilled';
92
- }
93
- }
94
- export async function checkIsLeanVersionUpToDate(channel, folderUri, options) {
95
- let origin;
96
- if (options.toolchainOverride !== undefined) {
97
- origin = `Project toolchain '${options.toolchainOverride}'`;
98
- }
99
- else if (folderUri.scheme === 'untitled') {
100
- origin = 'Opened file';
101
- }
102
- else {
103
- origin = 'Opened project';
129
+ if (folderUri.isInFolder(existingFolderUri)) {
130
+ return await this.n.displaySetupErrorWithInput(oldServerFolderContainsNewServerFolderErrorMessage(folderUri, fileUri, existingFolderUri), [
131
+ {
132
+ input: 'Stop Other Server',
133
+ continueDisplaying: false,
134
+ action: () => stopOtherServer(existingFolderUri),
135
+ },
136
+ ]);
137
+ }
138
+ }
139
+ return 'Fulfilled';
104
140
  }
105
- const projectLeanVersionDiagnosis = await diagnose(channel, extUriToCwdUri(folderUri), options.toolchainOverride).leanVersion();
106
- switch (projectLeanVersionDiagnosis.kind) {
107
- case 'NotInstalled':
108
- return displaySetupErrorWithOutput("Error while checking Lean version: 'lean' command was not found.");
109
- case 'ExecutionError':
110
- return displaySetupErrorWithOutput(`Error while checking Lean version: ${projectLeanVersionDiagnosis.message}`);
111
- case 'IsLean3Version':
112
- return displaySetupError(lean3ProjectErrorMessage(origin, projectLeanVersionDiagnosis.version));
113
- case 'IsAncientLean4Version':
114
- return await displaySetupWarning(ancientLean4ProjectWarningMessage(origin, projectLeanVersionDiagnosis.version), {
115
- modal: options.modal,
116
- });
117
- case 'UpToDate':
118
- return 'Fulfilled';
141
+ async checkIsLeanVersionUpToDate(channel, context, folderUri, options) {
142
+ let origin;
143
+ if (options.toolchainOverride !== undefined) {
144
+ origin = `Project toolchain '${options.toolchainOverride}'`;
145
+ }
146
+ else if (folderUri.scheme === 'untitled') {
147
+ origin = 'Opened file';
148
+ }
149
+ else {
150
+ origin = 'Opened project';
151
+ }
152
+ const projectLeanVersionDiagnosis = await diagnose({
153
+ channel,
154
+ cwdUri: extUriToCwdUri(folderUri),
155
+ toolchain: options.toolchainOverride,
156
+ context,
157
+ toolchainUpdateMode: options.toolchainUpdateMode,
158
+ }).leanVersion();
159
+ switch (projectLeanVersionDiagnosis.kind) {
160
+ case 'NotInstalled':
161
+ return this.n.displaySetupErrorWithOutput("Error while checking Lean version: 'lean' command was not found.");
162
+ case 'ExecutionError':
163
+ return this.n.displaySetupErrorWithOutput(`Error while checking Lean version: ${projectLeanVersionDiagnosis.message}`);
164
+ case 'Cancelled':
165
+ return this.n.displaySetupErrorWithOutput('Error while checking Lean version: Operation cancelled.');
166
+ case 'IsLean3Version':
167
+ return this.n.displaySetupError(lean3ProjectErrorMessage(origin, projectLeanVersionDiagnosis.version));
168
+ case 'IsAncientLean4Version':
169
+ return await this.n.displaySetupWarning(ancientLean4ProjectWarningMessage(origin, projectLeanVersionDiagnosis.version));
170
+ case 'UpToDate':
171
+ return 'Fulfilled';
172
+ }
119
173
  }
120
- }
121
- export async function checkIsLakeInstalledCorrectly(channel, folderUri, options) {
122
- const lakeVersionResult = await diagnose(channel, extUriToCwdUri(folderUri), options.toolchainOverride).queryLakeVersion();
123
- switch (lakeVersionResult.kind) {
124
- case 'CommandNotFound':
125
- return displaySetupErrorWithOutput("Error while checking Lake version: 'lake' command was not found.");
126
- case 'CommandError':
127
- return displaySetupErrorWithOutput(`Error while checking Lake version: ${lakeVersionResult.message}`);
128
- case 'InvalidVersion':
129
- return displaySetupErrorWithOutput(`Error while checking Lake version: Invalid Lake version format: '${lakeVersionResult.versionResult}'`);
130
- case 'Success':
131
- return 'Fulfilled';
174
+ async checkIsLakeInstalledCorrectly(channel, context, folderUri, options) {
175
+ const lakeAvailabilityResult = await diagnose({
176
+ channel,
177
+ cwdUri: extUriToCwdUri(folderUri),
178
+ toolchain: options.toolchainOverride,
179
+ context,
180
+ toolchainUpdateMode: options.toolchainUpdateMode,
181
+ }).checkLakeAvailable();
182
+ switch (lakeAvailabilityResult.kind) {
183
+ case 'NotAvailable':
184
+ return this.n.displaySetupErrorWithOutput("Error while checking Lake availability: 'lake' command was not found.");
185
+ case 'Error':
186
+ return this.n.displaySetupErrorWithOutput(`Error while checking Lake availability: ${lakeAvailabilityResult.message}`);
187
+ case 'Cancelled':
188
+ return this.n.displaySetupErrorWithOutput('Error while checking Lake availability: Operation cancelled.');
189
+ case 'Available':
190
+ return 'Fulfilled';
191
+ }
132
192
  }
133
- }
134
- export async function checkIsVSCodeUpToDate() {
135
- const vscodeVersionResult = diagnose(undefined, undefined).queryVSCodeVersion();
136
- switch (vscodeVersionResult.kind) {
137
- case 'Outdated':
138
- return displaySetupWarning(`VS Code version is too out-of-date for new versions of the Lean 4 VS Code extension. The current VS Code version is ${vscodeVersionResult.currentVersion}, but at least a version of ${vscodeVersionResult.recommendedVersion} is recommended so that new versions of the Lean 4 VS Code extension can be installed.`);
139
- case 'UpToDate':
140
- return 'Fulfilled';
193
+ async checkIsVSCodeUpToDate() {
194
+ const vscodeVersionResult = diagnose({ channel: undefined, cwdUri: undefined }).queryVSCodeVersion();
195
+ switch (vscodeVersionResult.kind) {
196
+ case 'Outdated':
197
+ return await this.n.displaySetupWarning(`VS Code version is too out-of-date for new versions of the Lean 4 VS Code extension. The current VS Code version is ${vscodeVersionResult.currentVersion}, but a version of at least ${vscodeVersionResult.recommendedVersion} is recommended so that new versions of the Lean 4 VS Code extension can be installed.`);
198
+ case 'UpToDate':
199
+ return 'Fulfilled';
200
+ }
141
201
  }
142
202
  }
143
- export async function checkLean4ProjectPreconditions(channel, folderUri) {
144
- return await checkAll(() => checkIsValidProjectFolder(channel, folderUri), () => checkIsLeanVersionUpToDate(channel, folderUri, { modal: false }), async () => {
145
- if (!(await willUseLakeServer(folderUri))) {
146
- return 'Fulfilled';
203
+ export async function checkAll(...checks) {
204
+ let worstViolation = 'Fulfilled';
205
+ for (const check of checks) {
206
+ const result = await check();
207
+ worstViolation = worstPreconditionViolation(worstViolation, result);
208
+ if (worstViolation === 'Fatal') {
209
+ return 'Fatal';
147
210
  }
148
- return await checkIsLakeInstalledCorrectly(channel, folderUri, {});
149
- });
211
+ }
212
+ return worstViolation;
150
213
  }
@@ -1,27 +1,40 @@
1
1
  import { SemVer } from 'semver';
2
2
  import { LeanInstaller } from '../utils/leanInstaller';
3
+ import { Input, StickyInput } from '../utils/notifs';
3
4
  export type PreconditionCheckResult = 'Fulfilled' | 'Warning' | 'Fatal';
4
5
  export declare function preconditionCheckResultToSeverity(result: PreconditionCheckResult): 0 | 1 | 2;
5
6
  export declare function severityToPreconditionCheckResult(severity: 0 | 1 | 2): PreconditionCheckResult;
6
7
  export declare function worstPreconditionViolation(...results: PreconditionCheckResult[]): PreconditionCheckResult;
7
- export type SetupWarningOptions = {
8
- modal: true;
9
- } | {
10
- modal: false;
11
- finalizer?: (() => void) | undefined;
8
+ export type SetupNotificationOptions = {
9
+ errorMode: {
10
+ mode: 'Sticky';
11
+ retry: () => Promise<void>;
12
+ } | {
13
+ mode: 'Modal';
14
+ } | {
15
+ mode: 'NonModal';
16
+ };
17
+ warningMode: {
18
+ modal: boolean;
19
+ proceedByDefault: boolean;
20
+ };
12
21
  };
13
- export declare function displaySetupError(message: string, finalizer?: (() => void) | undefined): PreconditionCheckResult;
14
- export declare function displaySetupErrorWithInput<T extends string>(message: string, ...items: T[]): Promise<T | undefined>;
15
- export declare function displaySetupErrorWithOptionalInput<T extends string>(message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): PreconditionCheckResult;
16
- export declare function displaySetupErrorWithOutput(message: string, finalizer?: (() => void) | undefined): PreconditionCheckResult;
17
- export declare function displaySetupErrorWithSetupGuide(message: string, finalizer?: (() => void) | undefined): PreconditionCheckResult;
18
- export declare function displayDependencySetupError(missingDeps: string[]): PreconditionCheckResult;
19
- export declare function displayElanSetupError(installer: LeanInstaller, reason: string): Promise<PreconditionCheckResult>;
20
- export declare function displayElanOutdatedSetupError(installer: LeanInstaller, currentVersion: SemVer, recommendedVersion: SemVer): Promise<PreconditionCheckResult>;
21
- export declare function displaySetupWarning(message: string, options?: SetupWarningOptions): Promise<PreconditionCheckResult>;
22
- export declare function displaySetupWarningWithInput<T extends string>(message: string, ...items: T[]): Promise<T | undefined>;
23
- export declare function displaySetupWarningWithOptionalInput<T extends string>(message: string, input: T, action: () => void, finalizer?: (() => void) | undefined): PreconditionCheckResult;
24
- export declare function displaySetupWarningWithOutput(message: string, options?: SetupWarningOptions): Promise<PreconditionCheckResult>;
25
- export declare function displaySetupWarningWithSetupGuide(message: string, options?: SetupWarningOptions): Promise<PreconditionCheckResult>;
26
- export declare function displayElanSetupWarning(installer: LeanInstaller, reason: string): Promise<PreconditionCheckResult>;
27
- export declare function displayElanOutdatedSetupWarning(installer: LeanInstaller, currentVersion: SemVer, recommendedVersion: SemVer): Promise<PreconditionCheckResult>;
22
+ export declare class SetupNotifier {
23
+ private options;
24
+ private subscriptions;
25
+ constructor(options: SetupNotificationOptions);
26
+ private error;
27
+ private warning;
28
+ displaySetupError(message: string): Promise<PreconditionCheckResult>;
29
+ displaySetupWarning(message: string): Promise<PreconditionCheckResult>;
30
+ displaySetupErrorWithInput(message: string, inputs: StickyInput<string>[]): Promise<PreconditionCheckResult>;
31
+ displaySetupWarningWithInput(message: string, inputs: Input<string>[]): Promise<PreconditionCheckResult>;
32
+ displaySetupErrorWithOutput(message: string): Promise<PreconditionCheckResult>;
33
+ displaySetupWarningWithOutput(message: string): Promise<PreconditionCheckResult>;
34
+ displaySetupErrorWithSetupGuide(message: string): Promise<PreconditionCheckResult>;
35
+ displaySetupWarningWithSetupGuide(message: string): Promise<PreconditionCheckResult>;
36
+ displayElanSetupError(installer: LeanInstaller, reason: string): Promise<PreconditionCheckResult>;
37
+ displayElanSetupWarning(installer: LeanInstaller, reason: string): Promise<PreconditionCheckResult>;
38
+ displayElanOutdatedSetupError(installer: LeanInstaller, currentVersion: SemVer, recommendedVersion: SemVer): Promise<PreconditionCheckResult>;
39
+ displayElanOutdatedSetupWarning(installer: LeanInstaller, currentVersion: SemVer, recommendedVersion: SemVer): Promise<PreconditionCheckResult>;
40
+ }