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.
- package/README.md +75 -0
- package/dist/JuliaMono-Regular.ttf +0 -0
- package/dist/css/custom.css +7 -1
- package/dist/infowebview.d.ts +3 -4
- package/dist/infowebview.js +4 -4
- package/dist/lean4-infoview/codicon.ttf +0 -0
- package/dist/lean4-infoview/esm-shims/react-dom.d.ts +5 -0
- package/dist/lean4-infoview/esm-shims/react-jsx-runtime.d.ts +5 -0
- package/dist/lean4-infoview/esm-shims/react.d.ts +5 -0
- package/dist/lean4-infoview/index.css +4161 -0
- package/dist/lean4-infoview/index.d.ts +16 -0
- package/dist/lean4-infoview/index.development.js +37312 -0
- package/dist/lean4-infoview/index.production.min.js +1528 -0
- package/dist/lean4-infoview/infoview/collapsing.d.ts +12 -0
- package/dist/lean4-infoview/infoview/contexts.d.ts +10 -0
- package/dist/lean4-infoview/infoview/editorConnection.d.ts +22 -0
- package/dist/lean4-infoview/infoview/errors.d.ts +14 -0
- package/dist/lean4-infoview/infoview/event.d.ts +33 -0
- package/dist/lean4-infoview/infoview/goalLocation.d.ts +61 -0
- package/dist/lean4-infoview/infoview/goals.d.ts +46 -0
- package/dist/lean4-infoview/infoview/info.d.ts +18 -0
- package/dist/lean4-infoview/infoview/infos.d.ts +2 -0
- package/dist/lean4-infoview/infoview/interactiveCode.d.ts +19 -0
- package/dist/lean4-infoview/infoview/main.d.ts +13 -0
- package/dist/lean4-infoview/infoview/messages.d.ts +19 -0
- package/dist/lean4-infoview/infoview/rpcSessions.d.ts +11 -0
- package/dist/lean4-infoview/infoview/serverVersion.d.ts +10 -0
- package/dist/lean4-infoview/infoview/tooltips.d.ts +32 -0
- package/dist/lean4-infoview/infoview/traceExplorer.d.ts +11 -0
- package/dist/lean4-infoview/infoview/userWidget.d.ts +39 -0
- package/dist/lean4-infoview/infoview/util.d.ts +144 -0
- package/dist/lean4-infoview/loader.d.ts +20 -0
- package/dist/lean4-infoview/loader.development.js +1006 -0
- package/dist/lean4-infoview/loader.production.min.js +1 -0
- package/dist/lean4-infoview/react-dom.development.js +30537 -0
- package/dist/lean4-infoview/react-dom.production.min.js +21 -0
- package/dist/lean4-infoview/react-jsx-runtime.development.js +1362 -0
- package/dist/lean4-infoview/react-jsx-runtime.production.min.js +1 -0
- package/dist/lean4-infoview/react.development.js +2823 -0
- package/dist/lean4-infoview/react.production.min.js +1 -0
- package/dist/leanmonaco.js +5 -4
- package/dist/monaco-lean4/vscode-lean4/package.json +944 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +9 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +20 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.d.ts +12 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.js +40 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +20 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +79 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.d.ts +13 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.js +29 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +28 -0
- package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +124 -0
- package/dist/monaco-lean4/vscode-lean4/src/config.d.ts +33 -0
- package/dist/monaco-lean4/vscode-lean4/src/config.js +119 -0
- package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +27 -0
- package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +133 -0
- package/dist/monaco-lean4/vscode-lean4/src/infoview.d.ts +69 -0
- package/dist/monaco-lean4/vscode-lean4/src/infoview.js +711 -0
- package/dist/monaco-lean4/vscode-lean4/src/leanclient.d.ts +67 -0
- package/dist/monaco-lean4/vscode-lean4/src/leanclient.js +443 -0
- package/dist/monaco-lean4/vscode-lean4/src/rpc.d.ts +16 -0
- package/dist/monaco-lean4/vscode-lean4/src/rpc.js +102 -0
- package/dist/monaco-lean4/vscode-lean4/src/taskgutter.d.ts +11 -0
- package/dist/monaco-lean4/vscode-lean4/src/taskgutter.js +130 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/batch.d.ts +37 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/batch.js +203 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.d.ts +41 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.js +205 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/converters.d.ts +16 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/converters.js +129 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/elan.d.ts +3 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/elan.js +4 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.d.ts +21 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.js +53 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.d.ts +35 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.js +136 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.d.ts +17 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.js +36 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +37 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.js +210 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/logger.d.ts +7 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/logger.js +20 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.d.ts +24 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.js +110 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.d.ts +9 -0
- package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.js +125 -0
- package/dist/monacoleanclient.d.ts +1 -2
- package/dist/monacoleanclient.js +3 -3
- package/dist/vscode-lean4/lean4-infoview/package.json +25 -23
- package/dist/vscode-lean4/lean4-infoview/src/infoview/highlightjs.css +210 -0
- package/dist/vscode-lean4/lean4-infoview/tsconfig.json +6 -2
- package/dist/vscode-lean4/lean4-infoview-api/package.json +1 -1
- package/dist/vscode-lean4/lean4-unicode-input/package.json +1 -1
- package/dist/vscode-lean4/lean4-unicode-input/src/abbreviations.json +12 -12
- package/dist/vscode-lean4/lean4-unicode-input-component/package.json +2 -2
- package/dist/vscode-lean4/package-lock.json +6129 -3245
- package/dist/vscode-lean4/vscode-lean4/language-configuration.json +1 -1
- package/dist/vscode-lean4/vscode-lean4/loogleview/static/index.css +19 -16
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-dark.svg +91 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-dark.svg +114 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-light.svg +114 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-passthrough-dark.svg +109 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-i-passthrough-light.svg +109 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-init-dark.svg +100 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-init-light.svg +100 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-dark.svg +123 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-light.svg +123 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-passthrough-dark.svg +109 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-l-passthrough-light.svg +109 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-light.svg +91 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-dark.svg +123 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-light.svg +123 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-passthrough-dark.svg +118 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/error-t-passthrough-light.svg +118 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-dark.svg +138 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-i-passthrough-dark.svg +160 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-i-passthrough-light.svg +160 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-l-passthrough-dark.svg +158 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-l-passthrough-light.svg +158 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-light.svg +138 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-t-passthrough-dark.svg +169 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-checkmark-t-passthrough-light.svg +169 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-dark.svg +147 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-i-passthrough-dark.svg +170 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-i-passthrough-light.svg +170 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-l-passthrough-dark.svg +167 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-l-passthrough-light.svg +167 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-light.svg +147 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-t-passthrough-dark.svg +179 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-circled-checkmark-t-passthrough-light.svg +179 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-dark.svg +165 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-i-passthrough-dark.svg +187 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-i-passthrough-light.svg +187 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-l-passthrough-dark.svg +185 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-l-passthrough-light.svg +185 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-light.svg +165 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-t-passthrough-dark.svg +196 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-octopus-t-passthrough-light.svg +196 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-dark.svg +184 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-i-passthrough-dark.svg +206 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-i-passthrough-light.svg +206 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-l-passthrough-dark.svg +204 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-l-passthrough-light.svg +204 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-light.svg +184 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-t-passthrough-dark.svg +215 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/goals-accomplished-tada-t-passthrough-light.svg +215 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-dark.svg +132 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-i-passthrough-dark.svg +154 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-i-passthrough-light.svg +154 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-l-passthrough-dark.svg +152 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-l-passthrough-light.svg +152 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-light.svg +132 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-t-passthrough-dark.svg +163 -0
- package/dist/vscode-lean4/vscode-lean4/media/diagnostic-gutter-icons/warning-t-passthrough-light.svg +163 -0
- package/dist/vscode-lean4/vscode-lean4/moogleview/static/index.css +198 -0
- package/dist/vscode-lean4/vscode-lean4/moogleview/tsconfig.json +10 -0
- package/dist/vscode-lean4/vscode-lean4/package.json +638 -18
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +2 -2
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +2 -2
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +2 -3
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +3 -5
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +1 -2
- package/dist/vscode-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +4 -8
- package/dist/vscode-lean4/vscode-lean4/src/config.d.ts +14 -1
- package/dist/vscode-lean4/vscode-lean4/src/config.js +56 -5
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.d.ts +36 -5
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnoser.js +59 -23
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.d.ts +22 -17
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupDiagnostics.js +182 -119
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +33 -20
- package/dist/vscode-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +235 -89
- package/dist/vscode-lean4/vscode-lean4/src/infoview.d.ts +7 -18
- package/dist/vscode-lean4/vscode-lean4/src/infoview.js +217 -102
- package/dist/vscode-lean4/vscode-lean4/src/leanclient.d.ts +12 -7
- package/dist/vscode-lean4/vscode-lean4/src/leanclient.js +187 -64
- package/dist/vscode-lean4/vscode-lean4/src/taskgutter.d.ts +35 -3
- package/dist/vscode-lean4/vscode-lean4/src/taskgutter.js +533 -93
- package/dist/vscode-lean4/vscode-lean4/src/utils/batch.d.ts +12 -4
- package/dist/vscode-lean4/vscode-lean4/src/utils/batch.js +78 -72
- package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.d.ts +9 -9
- package/dist/vscode-lean4/vscode-lean4/src/utils/clientProvider.js +121 -77
- package/dist/vscode-lean4/vscode-lean4/src/utils/converters.d.ts +15 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/converters.js +9 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/elan.d.ts +179 -1
- package/dist/vscode-lean4/vscode-lean4/src/utils/elan.js +422 -3
- package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.d.ts +3 -1
- package/dist/vscode-lean4/vscode-lean4/src/utils/exturi.js +11 -11
- package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.d.ts +2 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.js +17 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.d.ts +2 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/internalErrors.js +35 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.d.ts +34 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.js +249 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.d.ts +83 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.js +323 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +41 -12
- package/dist/vscode-lean4/vscode-lean4/src/utils/leanInstaller.js +245 -128
- package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.d.ts +27 -22
- package/dist/vscode-lean4/vscode-lean4/src/utils/notifs.js +177 -82
- package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.d.ts +11 -4
- package/dist/vscode-lean4/vscode-lean4/src/utils/projectInfo.js +18 -16
- package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.d.ts +1 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/semverRegex.js +2 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.d.ts +3 -0
- package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.js +22 -0
- package/dist/vscode-lean4/vscode-lean4/tsconfig.json +2 -1
- package/dist/vscode-lean4/vscode-lean4/webview/tsconfig.json +3 -1
- package/dist/vscode.css +7 -0
- package/package.json +7 -5
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { env } from 'vscode';
|
|
2
|
+
import { displayModalNotification, displayNotificationWithInput } from './notifs';
|
|
3
|
+
export async function displayInternalError(scope, e) {
|
|
4
|
+
let msg = `Internal error (while ${scope}): ${e}`;
|
|
5
|
+
let fullMsg = msg;
|
|
6
|
+
if (e instanceof Error && e.stack !== undefined) {
|
|
7
|
+
fullMsg += `\n\n${e.stack}`;
|
|
8
|
+
}
|
|
9
|
+
msg +=
|
|
10
|
+
"\n\nIf you are using an up-to-date version of the Lean 4 VS Code extension, please copy the full error message using the 'Copy Error to Clipboard' button and report it at https://github.com/leanprover/vscode-lean4/ or https://leanprover.zulipchat.com/.";
|
|
11
|
+
const copyToClipboardInput = 'Copy Error to Clipboard';
|
|
12
|
+
const closeInput = 'Close';
|
|
13
|
+
const choice = await displayNotificationWithInput('Error', msg, [copyToClipboardInput], closeInput);
|
|
14
|
+
if (choice === copyToClipboardInput) {
|
|
15
|
+
await env.clipboard.writeText(fullMsg);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const duplicateCommandError = (scope) => `Error (while ${scope}): Two separate Lean 4 VS Code extensions that register the same VS Code functionality are installed.
|
|
19
|
+
Please uninstall or disable one of them and restart VS Code.
|
|
20
|
+
|
|
21
|
+
The 'Lean 4' extension by the 'leanprover' organization is the only official Lean 4 VS Code extension.`;
|
|
22
|
+
export async function displayInternalErrorsIn(scope, f) {
|
|
23
|
+
try {
|
|
24
|
+
return await f();
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
const msg = e.message;
|
|
28
|
+
if (msg !== undefined && typeof msg === 'string' && msg.match(/command '.*' already exists/)) {
|
|
29
|
+
await displayModalNotification('Error', duplicateCommandError(scope));
|
|
30
|
+
throw e;
|
|
31
|
+
}
|
|
32
|
+
await displayInternalError(scope, e);
|
|
33
|
+
throw e;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ExtensionContext, OutputChannel } from 'vscode';
|
|
2
|
+
import { ExecutionResult } from './batch';
|
|
3
|
+
import { FileUri } from './exturi';
|
|
4
|
+
export type ToolchainUpdateMode = 'UpdateAutomatically' | 'PromptAboutUpdate' | 'DoNotUpdate';
|
|
5
|
+
export type ToolchainDecisionOptions = {
|
|
6
|
+
channel: OutputChannel | undefined;
|
|
7
|
+
cwdUri: FileUri | undefined;
|
|
8
|
+
context: string | undefined;
|
|
9
|
+
toolchainUpdateMode: ToolchainUpdateMode;
|
|
10
|
+
toolchain?: string | undefined;
|
|
11
|
+
};
|
|
12
|
+
export type LeanCommandOptions = ToolchainDecisionOptions & {
|
|
13
|
+
waitingPrompt: string;
|
|
14
|
+
translator?: ((line: string) => string | undefined) | undefined;
|
|
15
|
+
};
|
|
16
|
+
export declare class LeanCommandRunner {
|
|
17
|
+
private stickyUpdateDecisions;
|
|
18
|
+
private runCmd;
|
|
19
|
+
private analyzeElanStateDumpWithoutNetResult;
|
|
20
|
+
private analyzeElanDumpStateWithNetResult;
|
|
21
|
+
decideToolchain(options: ToolchainDecisionOptions): Promise<{
|
|
22
|
+
kind: 'RunWithActiveToolchain';
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'RunWithSpecificToolchain';
|
|
25
|
+
toolchain: string;
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'Error';
|
|
28
|
+
message: string;
|
|
29
|
+
}>;
|
|
30
|
+
runLeanCommand(executablePath: string, args: string[], options: LeanCommandOptions): Promise<ExecutionResult>;
|
|
31
|
+
}
|
|
32
|
+
export declare let leanRunner: LeanCommandRunner;
|
|
33
|
+
/** Must be called at the very start when the extension is activated so that `leanRunner` is defined. */
|
|
34
|
+
export declare function registerLeanCommandRunner(context: ExtensionContext): void;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { alwaysAskBeforeInstallingLeanVersions } from '../config';
|
|
3
|
+
import { batchExecuteWithProgress, ExecutionExitCode } from './batch';
|
|
4
|
+
import { elanDumpStateWithNet, elanDumpStateWithoutNet, elanInstallToolchain, ElanToolchains, ElanUnresolvedToolchain, } from './elan';
|
|
5
|
+
import { displayNotification, displayNotificationWithInput } from './notifs';
|
|
6
|
+
function shouldUpdateToolchainAutomatically(mode) {
|
|
7
|
+
return !alwaysAskBeforeInstallingLeanVersions() && mode === 'UpdateAutomatically';
|
|
8
|
+
}
|
|
9
|
+
function overrideReason(activeOverride) {
|
|
10
|
+
switch (activeOverride?.kind) {
|
|
11
|
+
case undefined:
|
|
12
|
+
return undefined;
|
|
13
|
+
case 'Environment':
|
|
14
|
+
return undefined;
|
|
15
|
+
case 'Manual':
|
|
16
|
+
return `set by \`elan override\` in folder '${activeOverride.directoryPath.baseName()}'`;
|
|
17
|
+
case 'ToolchainFile':
|
|
18
|
+
return `of Lean project '${path.dirname(activeOverride.toolchainPath.fsPath)}'`;
|
|
19
|
+
case 'LeanpkgFile':
|
|
20
|
+
return `of Lean project '${path.dirname(activeOverride.leanpkgPath.fsPath)}'`;
|
|
21
|
+
case 'ToolchainDirectory':
|
|
22
|
+
return `of Lean project '${activeOverride.directoryPath.fsPath}'`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function leanNotInstalledError(activeOverride, unresolvedActiveToolchain) {
|
|
26
|
+
const or = overrideReason(activeOverride);
|
|
27
|
+
const formattedOverride = or !== undefined ? ' ' + or : '';
|
|
28
|
+
if (unresolvedActiveToolchain.fromChannel !== undefined) {
|
|
29
|
+
const prefix = activeOverride === undefined ? 'default ' : '';
|
|
30
|
+
return `No Lean version for ${prefix}release channel '${ElanUnresolvedToolchain.toolchainName(unresolvedActiveToolchain)}'${formattedOverride} is installed.`;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const prefix = activeOverride === undefined ? 'Default ' : '';
|
|
34
|
+
return `${prefix}Lean version '${ElanUnresolvedToolchain.toolchainName(unresolvedActiveToolchain)}'${formattedOverride} is not installed.`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function installationPrompt(activeOverride, unresolvedActiveToolchain) {
|
|
38
|
+
const error = leanNotInstalledError(activeOverride, unresolvedActiveToolchain);
|
|
39
|
+
if (unresolvedActiveToolchain.fromChannel !== undefined) {
|
|
40
|
+
return `${error}\n\n` + 'Do you wish to install one?';
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return `${error}\n\n` + 'Do you wish to install it?';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function updatePrompt(activeOverride, releaseChannel, cachedActiveToolchain, resolvedActiveToolchain) {
|
|
47
|
+
const prefix = activeOverride === undefined ? 'default ' : '';
|
|
48
|
+
const reason = overrideReason(activeOverride);
|
|
49
|
+
return (`Installed Lean version '${cachedActiveToolchain}' for ${prefix}release channel '${releaseChannel}'${reason !== undefined ? ' ' + reason : ''} is outdated.\n\n` +
|
|
50
|
+
`Do you wish to install the new Lean version '${resolvedActiveToolchain}' or continue using the outdated Lean version?`);
|
|
51
|
+
}
|
|
52
|
+
function updateDecisionKey(cwdUri, cachedToolchain) {
|
|
53
|
+
return JSON.stringify({
|
|
54
|
+
cwdUri,
|
|
55
|
+
cachedToolchain,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
export class LeanCommandRunner {
|
|
59
|
+
stickyUpdateDecisions = new Map();
|
|
60
|
+
async runCmd(executablePath, args, options, toolchain) {
|
|
61
|
+
const toolchainOverride = toolchain ?? options.toolchain;
|
|
62
|
+
if (toolchainOverride !== undefined) {
|
|
63
|
+
args = [`+${toolchainOverride}`, ...args];
|
|
64
|
+
}
|
|
65
|
+
return await batchExecuteWithProgress(executablePath, args, options.context, options.waitingPrompt, {
|
|
66
|
+
cwd: options.cwdUri?.fsPath,
|
|
67
|
+
channel: options.channel,
|
|
68
|
+
translator: options.translator,
|
|
69
|
+
allowCancellation: true,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async analyzeElanStateDumpWithoutNetResult(channel, context, r) {
|
|
73
|
+
const runWithActiveToolchain = { kind: 'RunWithActiveToolchain' };
|
|
74
|
+
let elanState;
|
|
75
|
+
switch (r.kind) {
|
|
76
|
+
case 'Success':
|
|
77
|
+
elanState = r.state;
|
|
78
|
+
break;
|
|
79
|
+
case 'ElanNotFound':
|
|
80
|
+
return runWithActiveToolchain;
|
|
81
|
+
case 'ExecutionError':
|
|
82
|
+
return runWithActiveToolchain;
|
|
83
|
+
}
|
|
84
|
+
const unresolvedToolchain = ElanToolchains.unresolvedToolchain(elanState.toolchains);
|
|
85
|
+
const toolchainResolutionResult = elanState.toolchains.resolvedActive;
|
|
86
|
+
if (unresolvedToolchain === undefined || toolchainResolutionResult === undefined) {
|
|
87
|
+
return runWithActiveToolchain;
|
|
88
|
+
}
|
|
89
|
+
if (unresolvedToolchain.kind === 'Local') {
|
|
90
|
+
return runWithActiveToolchain;
|
|
91
|
+
}
|
|
92
|
+
const cachedToolchain = toolchainResolutionResult.cachedToolchain;
|
|
93
|
+
if (cachedToolchain === undefined) {
|
|
94
|
+
const installNewToolchain = async () => {
|
|
95
|
+
const elanInstallToolchainResult = await elanInstallToolchain(channel, context, ElanUnresolvedToolchain.toolchainName(unresolvedToolchain));
|
|
96
|
+
switch (elanInstallToolchainResult.kind) {
|
|
97
|
+
case 'Success':
|
|
98
|
+
case 'ElanNotFound':
|
|
99
|
+
case 'ToolchainAlreadyInstalled':
|
|
100
|
+
return runWithActiveToolchain;
|
|
101
|
+
case 'Error':
|
|
102
|
+
return {
|
|
103
|
+
kind: 'Error',
|
|
104
|
+
message: leanNotInstalledError(elanState.toolchains.activeOverride?.reason, unresolvedToolchain) + ` Reason: Installation failed. Error: ${elanInstallToolchainResult.message}`,
|
|
105
|
+
};
|
|
106
|
+
case 'Cancelled':
|
|
107
|
+
return {
|
|
108
|
+
kind: 'Error',
|
|
109
|
+
message: leanNotInstalledError(elanState.toolchains.activeOverride?.reason, unresolvedToolchain) + ' Reason: Installation was cancelled.',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
if (!alwaysAskBeforeInstallingLeanVersions()) {
|
|
114
|
+
return await installNewToolchain();
|
|
115
|
+
}
|
|
116
|
+
const choice = await displayNotificationWithInput('Information', installationPrompt(elanState.toolchains.activeOverride?.reason, unresolvedToolchain), ['Install Version']);
|
|
117
|
+
if (choice === undefined) {
|
|
118
|
+
return {
|
|
119
|
+
kind: 'Error',
|
|
120
|
+
message: leanNotInstalledError(elanState.toolchains.activeOverride?.reason, unresolvedToolchain),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
choice;
|
|
124
|
+
return await installNewToolchain();
|
|
125
|
+
}
|
|
126
|
+
if (unresolvedToolchain.fromChannel === undefined) {
|
|
127
|
+
return runWithActiveToolchain;
|
|
128
|
+
}
|
|
129
|
+
return { kind: 'CheckForToolchainUpdate', cachedToolchain };
|
|
130
|
+
}
|
|
131
|
+
async analyzeElanDumpStateWithNetResult(channel, context, toolchainUpdateMode, cachedToolchain, r) {
|
|
132
|
+
const runWithActiveToolchain = { kind: 'RunWithActiveToolchain' };
|
|
133
|
+
const runWithCachedToolchain = warning => ({
|
|
134
|
+
kind: 'RunWithCachedToolchain',
|
|
135
|
+
warning,
|
|
136
|
+
});
|
|
137
|
+
let elanState;
|
|
138
|
+
switch (r.kind) {
|
|
139
|
+
case 'Success':
|
|
140
|
+
elanState = r.state;
|
|
141
|
+
break;
|
|
142
|
+
case 'ElanNotFound':
|
|
143
|
+
return runWithActiveToolchain;
|
|
144
|
+
case 'ExecutionError':
|
|
145
|
+
return runWithActiveToolchain;
|
|
146
|
+
case 'Cancelled':
|
|
147
|
+
return runWithCachedToolchain(`Lean version information query was cancelled, falling back to installed Lean version '${cachedToolchain}'.`);
|
|
148
|
+
}
|
|
149
|
+
const unresolvedToolchain = ElanToolchains.unresolvedToolchain(elanState.toolchains);
|
|
150
|
+
const toolchainResolutionResult = elanState.toolchains.resolvedActive;
|
|
151
|
+
if (unresolvedToolchain === undefined || toolchainResolutionResult === undefined) {
|
|
152
|
+
return runWithActiveToolchain;
|
|
153
|
+
}
|
|
154
|
+
if (unresolvedToolchain.kind === 'Local' || unresolvedToolchain.fromChannel === undefined) {
|
|
155
|
+
return runWithActiveToolchain;
|
|
156
|
+
}
|
|
157
|
+
const resolvedToolchainResult = toolchainResolutionResult.resolvedToolchain;
|
|
158
|
+
let resolvedToolchain;
|
|
159
|
+
switch (resolvedToolchainResult.kind) {
|
|
160
|
+
case 'Error':
|
|
161
|
+
return runWithCachedToolchain(`Could not fetch Lean version information, falling back to installed Lean version '${cachedToolchain}'. Error: ${resolvedToolchainResult.message}`);
|
|
162
|
+
case 'Ok':
|
|
163
|
+
resolvedToolchain = resolvedToolchainResult.value;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
const willActiveToolchainBeUpdated = cachedToolchain !== resolvedToolchain;
|
|
167
|
+
if (!willActiveToolchainBeUpdated) {
|
|
168
|
+
return runWithActiveToolchain;
|
|
169
|
+
}
|
|
170
|
+
const isResolvedToolchainAlreadyInstalled = elanState.toolchains.installed.has(resolvedToolchain);
|
|
171
|
+
if (isResolvedToolchainAlreadyInstalled) {
|
|
172
|
+
return runWithActiveToolchain;
|
|
173
|
+
}
|
|
174
|
+
const updateToolchain = async () => {
|
|
175
|
+
const elanInstallToolchainResult = await elanInstallToolchain(channel, context, ElanUnresolvedToolchain.toolchainName(unresolvedToolchain));
|
|
176
|
+
switch (elanInstallToolchainResult.kind) {
|
|
177
|
+
case 'Success':
|
|
178
|
+
case 'ElanNotFound':
|
|
179
|
+
case 'ToolchainAlreadyInstalled':
|
|
180
|
+
return runWithActiveToolchain;
|
|
181
|
+
case 'Error':
|
|
182
|
+
return runWithCachedToolchain(`Could not update Lean version, falling back to installed Lean version '${cachedToolchain}'. Error: ${elanInstallToolchainResult.message}`);
|
|
183
|
+
case 'Cancelled':
|
|
184
|
+
return runWithCachedToolchain(`Lean version update was cancelled, falling back to installed Lean version '${cachedToolchain}'.`);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
if (shouldUpdateToolchainAutomatically(toolchainUpdateMode)) {
|
|
188
|
+
return await updateToolchain();
|
|
189
|
+
}
|
|
190
|
+
const choice = await displayNotificationWithInput('Information', updatePrompt(elanState.toolchains.activeOverride?.reason, ElanUnresolvedToolchain.toolchainName(unresolvedToolchain), cachedToolchain, resolvedToolchain), ['Update Lean Version'], 'Use Old Version');
|
|
191
|
+
if (choice === undefined || choice === 'Use Old Version') {
|
|
192
|
+
return runWithCachedToolchain(undefined);
|
|
193
|
+
}
|
|
194
|
+
choice;
|
|
195
|
+
return await updateToolchain();
|
|
196
|
+
}
|
|
197
|
+
async decideToolchain(options) {
|
|
198
|
+
const elanStateDumpWithoutNetResult = await elanDumpStateWithoutNet(options.cwdUri, options.toolchain);
|
|
199
|
+
const withoutNetAnalysisResult = await this.analyzeElanStateDumpWithoutNetResult(options.channel, options.context, elanStateDumpWithoutNetResult);
|
|
200
|
+
if (withoutNetAnalysisResult.kind !== 'CheckForToolchainUpdate') {
|
|
201
|
+
return withoutNetAnalysisResult;
|
|
202
|
+
}
|
|
203
|
+
const cachedToolchain = withoutNetAnalysisResult.cachedToolchain;
|
|
204
|
+
const key = updateDecisionKey(options.cwdUri, cachedToolchain);
|
|
205
|
+
if (options.toolchainUpdateMode === 'DoNotUpdate' ||
|
|
206
|
+
(!shouldUpdateToolchainAutomatically(options.toolchainUpdateMode) &&
|
|
207
|
+
this.stickyUpdateDecisions.get(key) === 'DoNotUpdate')) {
|
|
208
|
+
return { kind: 'RunWithSpecificToolchain', toolchain: cachedToolchain };
|
|
209
|
+
}
|
|
210
|
+
const elanStateDumpWithNetResult = await elanDumpStateWithNet(options.cwdUri, options.context, options.toolchain);
|
|
211
|
+
const withNetAnalysisResult = await this.analyzeElanDumpStateWithNetResult(options.channel, options.context, options.toolchainUpdateMode, cachedToolchain, elanStateDumpWithNetResult);
|
|
212
|
+
if (withNetAnalysisResult.kind === 'RunWithCachedToolchain') {
|
|
213
|
+
this.stickyUpdateDecisions.set(key, 'DoNotUpdate');
|
|
214
|
+
if (withNetAnalysisResult.warning !== undefined) {
|
|
215
|
+
displayNotification('Warning', withNetAnalysisResult.warning);
|
|
216
|
+
}
|
|
217
|
+
return { kind: 'RunWithSpecificToolchain', toolchain: cachedToolchain };
|
|
218
|
+
}
|
|
219
|
+
return withNetAnalysisResult;
|
|
220
|
+
}
|
|
221
|
+
async runLeanCommand(executablePath, args, options) {
|
|
222
|
+
const toolchainDecision = await this.decideToolchain(options);
|
|
223
|
+
if (toolchainDecision.kind === 'Error') {
|
|
224
|
+
return {
|
|
225
|
+
exitCode: ExecutionExitCode.ExecutionError,
|
|
226
|
+
stdout: toolchainDecision.message,
|
|
227
|
+
stderr: '',
|
|
228
|
+
combined: toolchainDecision.message,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (toolchainDecision.kind === 'RunWithActiveToolchain') {
|
|
232
|
+
return await this.runCmd(executablePath, args, options, undefined);
|
|
233
|
+
}
|
|
234
|
+
toolchainDecision.kind;
|
|
235
|
+
return await this.runCmd(executablePath, args, options, toolchainDecision.toolchain);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
export let leanRunner;
|
|
239
|
+
/** Must be called at the very start when the extension is activated so that `leanRunner` is defined. */
|
|
240
|
+
export function registerLeanCommandRunner(context) {
|
|
241
|
+
leanRunner = new LeanCommandRunner();
|
|
242
|
+
context.subscriptions.push({
|
|
243
|
+
dispose: () => {
|
|
244
|
+
const u = undefined;
|
|
245
|
+
// Implicit invariant: When the extension deactivates, `leanRunner` is not called after this assignment.
|
|
246
|
+
leanRunner = u;
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Disposable, ExtensionContext, TextDocument, TextEditor, TextEditorEdit, TextEditorSelectionChangeEvent } from 'vscode';
|
|
2
|
+
import { ExtUri } from './exturi';
|
|
3
|
+
export declare class LeanDocument {
|
|
4
|
+
readonly doc: TextDocument;
|
|
5
|
+
readonly extUri: ExtUri;
|
|
6
|
+
constructor(doc: TextDocument, extUri: ExtUri);
|
|
7
|
+
equals(other: LeanDocument): boolean;
|
|
8
|
+
equalsTextDocument(other: TextDocument): boolean;
|
|
9
|
+
static equalsWithUndefined(a: LeanDocument | undefined, b: LeanDocument | undefined): boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class LeanEditor {
|
|
12
|
+
readonly editor: TextEditor;
|
|
13
|
+
readonly documentExtUri: ExtUri;
|
|
14
|
+
constructor(editor: TextEditor, documentExtUri: ExtUri);
|
|
15
|
+
equals(other: LeanEditor): boolean;
|
|
16
|
+
equalsTextEditor(other: TextEditor): boolean;
|
|
17
|
+
static equalsWithUndefined(a: LeanEditor | undefined, b: LeanEditor | undefined): boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function isLeanDocument(doc: TextDocument): boolean;
|
|
20
|
+
export declare function asLeanDocument(doc: TextDocument): LeanDocument | undefined;
|
|
21
|
+
export declare function filterLeanDocuments(docs: readonly TextDocument[]): LeanDocument[];
|
|
22
|
+
export declare function filterLeanDocument(doc: TextDocument | undefined): LeanDocument | undefined;
|
|
23
|
+
export declare function isLeanEditor(editor: TextEditor): boolean;
|
|
24
|
+
export declare function asLeanEditor(editor: TextEditor): LeanEditor | undefined;
|
|
25
|
+
export declare function filterLeanEditors(editors: readonly TextEditor[]): LeanEditor[];
|
|
26
|
+
export declare function filterLeanEditor(editor: TextEditor | undefined): LeanEditor | undefined;
|
|
27
|
+
export declare class LeanEditorProvider implements Disposable {
|
|
28
|
+
private subscriptions;
|
|
29
|
+
private _visibleLeanEditors;
|
|
30
|
+
private visibleLeanEditorsByUri;
|
|
31
|
+
private readonly onDidChangeVisibleLeanEditorsEmitter;
|
|
32
|
+
readonly onDidChangeVisibleLeanEditors: import("vscode").Event<readonly LeanEditor[]>;
|
|
33
|
+
private _activeLeanEditor;
|
|
34
|
+
private readonly onDidChangeActiveLeanEditorEmitter;
|
|
35
|
+
readonly onDidChangeActiveLeanEditor: import("vscode").Event<LeanEditor | undefined>;
|
|
36
|
+
private _lastActiveLeanEditor;
|
|
37
|
+
private readonly onDidChangeLastActiveLeanEditorEmitter;
|
|
38
|
+
readonly onDidChangeLastActiveLeanEditor: import("vscode").Event<LeanEditor | undefined>;
|
|
39
|
+
private _leanDocuments;
|
|
40
|
+
private leanDocumentsByUri;
|
|
41
|
+
private readonly onDidChangeLeanDocumentsEmitter;
|
|
42
|
+
readonly onDidChangeLeanDocuments: import("vscode").Event<readonly LeanDocument[]>;
|
|
43
|
+
private readonly onDidOpenLeanDocumentEmitter;
|
|
44
|
+
readonly onDidOpenLeanDocument: import("vscode").Event<LeanDocument>;
|
|
45
|
+
private readonly onDidCloseLeanDocumentEmitter;
|
|
46
|
+
readonly onDidCloseLeanDocument: import("vscode").Event<LeanDocument>;
|
|
47
|
+
private _lastActiveLeanDocument;
|
|
48
|
+
private readonly onDidChangeLastActiveLeanDocumentEmitter;
|
|
49
|
+
readonly onDidChangeLastActiveLeanDocument: import("vscode").Event<LeanDocument | undefined>;
|
|
50
|
+
private readonly onDidRevealLeanEditorEmitter;
|
|
51
|
+
readonly onDidRevealLeanEditor: import("vscode").Event<LeanEditor>;
|
|
52
|
+
private readonly onDidConcealLeanEditorEmitter;
|
|
53
|
+
readonly onDidConcealLeanEditor: import("vscode").Event<LeanEditor>;
|
|
54
|
+
private readonly onDidChangeLeanEditorSelectionEmitter;
|
|
55
|
+
readonly onDidChangeLeanEditorSelection: import("vscode").Event<TextEditorSelectionChangeEvent>;
|
|
56
|
+
constructor();
|
|
57
|
+
private updateVisibleTextEditors;
|
|
58
|
+
private updateActiveTextEditor;
|
|
59
|
+
private updateVisibleLeanEditors;
|
|
60
|
+
private revealLeanEditors;
|
|
61
|
+
private concealLeanEditors;
|
|
62
|
+
private updateActiveLeanEditor;
|
|
63
|
+
private invalidateInvisibleLastActiveLeanEditor;
|
|
64
|
+
private updateLastActiveLeanEditor;
|
|
65
|
+
private updateLeanDocuments;
|
|
66
|
+
private openLeanDocument;
|
|
67
|
+
private closeLeanDocument;
|
|
68
|
+
private invalidateClosedLastActiveLeanDocument;
|
|
69
|
+
private updateLastActiveLeanDocument;
|
|
70
|
+
private updateTextEditorSelection;
|
|
71
|
+
get visibleLeanEditors(): readonly LeanEditor[];
|
|
72
|
+
get activeLeanEditor(): LeanEditor | undefined;
|
|
73
|
+
get lastActiveLeanEditor(): LeanEditor | undefined;
|
|
74
|
+
get leanDocuments(): readonly LeanDocument[];
|
|
75
|
+
get lastActiveLeanDocument(): LeanDocument | undefined;
|
|
76
|
+
getVisibleLeanEditorsByUri(uri: ExtUri): readonly LeanEditor[];
|
|
77
|
+
getLeanDocumentByUri(uri: ExtUri): LeanDocument | undefined;
|
|
78
|
+
registerLeanEditorCommand(command: string, callback: (leanEditor: LeanEditor, edit: TextEditorEdit, ...args: any[]) => void, thisArg?: any): Disposable;
|
|
79
|
+
dispose(): void;
|
|
80
|
+
}
|
|
81
|
+
export declare let lean: LeanEditorProvider;
|
|
82
|
+
/** Must be called at the very start when the extension is activated so that `lean` is defined. */
|
|
83
|
+
export declare function registerLeanEditorProvider(context: ExtensionContext): void;
|