author | wenzelm |
Wed, 23 Mar 2022 16:41:32 +0100 | |
changeset 75314 | f31fbe4e1909 |
parent 75313 | d07c886a27a9 |
child 75315 | 5c0ea94757f2 |
permissions | -rw-r--r-- |
75292 | 1 |
/* Title: Tools/VSCode/src/vscode_main.scala |
75083 | 2 |
Author: Makarius |
3 |
||
75292 | 4 |
Main application entry point for Isabelle/VSCode. |
75083 | 5 |
*/ |
6 |
||
7 |
package isabelle.vscode |
|
8 |
||
9 |
||
10 |
import isabelle._ |
|
11 |
||
12 |
||
75292 | 13 |
object VSCode_Main |
75083 | 14 |
{ |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
15 |
/* vscodium command-line interface */ |
75292 | 16 |
|
75298 | 17 |
def server_log_path: Path = |
18 |
Path.explode("$ISABELLE_VSCODE_SETTINGS/server.log").expand |
|
19 |
||
75304 | 20 |
def run_vscodium(args: List[String], |
75292 | 21 |
environment: Iterable[(String, String)] = Nil, |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
22 |
options: List[String] = Nil, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
23 |
logic: String = "", |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
24 |
logic_ancestor: String = "", |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
25 |
logic_requirements: Boolean = false, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
26 |
session_dirs: List[Path] = Nil, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
27 |
include_sessions: List[String] = Nil, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
28 |
modes: List[String] = Nil, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
29 |
no_build: Boolean = false, |
75298 | 30 |
server_log: Boolean = false, |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
31 |
verbose: Boolean = false, |
75292 | 32 |
background: Boolean = false, |
33 |
progress: Progress = new Progress): Process_Result = |
|
34 |
{ |
|
75311 | 35 |
def platform_path(s: String): String = File.platform_path(Path.explode(s)) |
36 |
||
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
37 |
val args_json = |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
38 |
JSON.optional("options" -> proper_list(options)) ++ |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
39 |
JSON.optional("logic" -> proper_string(logic)) ++ |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
40 |
JSON.optional("logic_ancestor" -> proper_string(logic_ancestor)) ++ |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
41 |
JSON.optional("logic_requirements" -> proper_bool(logic_requirements)) ++ |
75297
fc4d07587695
more robust errors -- on foreground process instead of background server;
wenzelm
parents:
75296
diff
changeset
|
42 |
JSON.optional("session_dirs" -> |
fc4d07587695
more robust errors -- on foreground process instead of background server;
wenzelm
parents:
75296
diff
changeset
|
43 |
proper_list(session_dirs.map(dir => Sessions.check_session_dir(dir).absolute.implode))) ++ |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
44 |
JSON.optional("include_sessions" -> proper_list(include_sessions)) ++ |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
45 |
JSON.optional("modes" -> proper_list(modes)) ++ |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
46 |
JSON.optional("no_build" -> proper_bool(no_build)) ++ |
75298 | 47 |
JSON.optional("log_file" -> |
48 |
(if (server_log) Some(server_log_path.absolute.implode) else None)) ++ |
|
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
49 |
JSON.optional("verbose" -> proper_bool(verbose)) |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
50 |
|
75292 | 51 |
val env = new java.util.HashMap(Isabelle_System.settings()) |
52 |
for ((a, b) <- environment) env.put(a, b) |
|
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
53 |
env.put("ISABELLE_VSCODIUM_ARGS", JSON.Format(args_json)) |
75292 | 54 |
env.put("ISABELLE_VSCODIUM_APP", platform_path("$ISABELLE_VSCODIUM_RESOURCES/vscodium")) |
55 |
env.put("ELECTRON_RUN_AS_NODE", "1") |
|
75083 | 56 |
|
75292 | 57 |
val electron = Isabelle_System.getenv("ISABELLE_VSCODIUM_ELECTRON") |
58 |
if (electron.isEmpty) { |
|
59 |
error("""Undefined $ISABELLE_VSCODIUM_ELECTRON: missing "vscodium" component""") |
|
60 |
} |
|
61 |
val args0 = |
|
62 |
List(platform_path("$ISABELLE_VSCODIUM_RESOURCES/vscodium/out/cli.js"), |
|
63 |
"--ms-enable-electron-run-as-node", "--locale", "en-US", |
|
64 |
"--user-data-dir", platform_path("$ISABELLE_VSCODE_SETTINGS/user-data"), |
|
65 |
"--extensions-dir", platform_path("$ISABELLE_VSCODE_SETTINGS/extensions")) |
|
66 |
val script = |
|
67 |
Bash.strings(electron :: args0 ::: args) + |
|
68 |
(if (background) " > /dev/null 2> /dev/null &" else "") |
|
69 |
||
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
70 |
progress.bash(script, env = env, echo = true) |
75292 | 71 |
} |
72 |
||
73 |
||
75312
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
74 |
/* extension */ |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
75 |
|
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
76 |
def extension_dir: Path = Path.explode("$ISABELLE_VSCODE_HOME/extension") |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
77 |
def extension_manifest(): Manifest = new Manifest |
75313 | 78 |
val extension_name: String = "isabelle.isabelle" |
75312
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
79 |
|
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
80 |
final class Manifest private[VSCode_Main] |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
81 |
{ |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
82 |
private val MANIFEST: Path = Path.explode("MANIFEST") |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
83 |
private val text = File.read(extension_dir + MANIFEST) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
84 |
private def entries: List[String] = split_lines(text).filter(_.nonEmpty) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
85 |
|
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
86 |
val shasum: String = |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
87 |
{ |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
88 |
val a = SHA1.digest(text).toString + " <MANIFEST>" |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
89 |
val bs = |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
90 |
for (entry <- entries) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
91 |
yield SHA1.digest(extension_dir + Path.explode(entry)).toString + " " + entry |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
92 |
terminate_lines(a :: bs) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
93 |
} |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
94 |
|
75314 | 95 |
def check_dir(dir: Path): Boolean = |
75312
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
96 |
{ |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
97 |
val path = dir + MANIFEST.shasum |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
98 |
path.is_file && File.read(path) == shasum |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
99 |
} |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
100 |
|
75314 | 101 |
def prepare_dir(dir: Path): Unit = |
75312
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
102 |
{ |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
103 |
for (entry <- entries) { |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
104 |
val path = Path.explode(entry) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
105 |
Isabelle_System.copy_file(extension_dir + path, |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
106 |
Isabelle_System.make_directory(dir + path.dir)) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
107 |
} |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
108 |
File.write(dir + MANIFEST.shasum, shasum) |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
109 |
} |
e641ac92b489
more formal extension_manifest, with shasum for sources;
wenzelm
parents:
75311
diff
changeset
|
110 |
} |
75305 | 111 |
|
75313 | 112 |
def locate_extension(): Option[Path] = |
113 |
{ |
|
114 |
val out = run_vscodium(List("--locate-extension", extension_name)).check.out |
|
115 |
if (out.nonEmpty) Some(Path.explode(File.standard_path(out))) else None |
|
116 |
} |
|
117 |
||
75305 | 118 |
def uninstall_extension(progress: Progress = new Progress): Unit = |
75313 | 119 |
locate_extension() match { |
120 |
case None => progress.echo_warning("No extension " + quote(extension_name) + " to uninstall") |
|
121 |
case Some(dir) => |
|
122 |
run_vscodium(List("--uninstall-extension", extension_name)).check |
|
123 |
progress.echo("Uninstalled extension " + quote(extension_name) + |
|
124 |
" from directory:\n " + dir) |
|
125 |
} |
|
75305 | 126 |
|
127 |
def install_extension(vsix: File.Content, progress: Progress = new Progress): Unit = |
|
128 |
{ |
|
129 |
Isabelle_System.with_tmp_dir("tmp")(tmp_dir => |
|
130 |
{ |
|
131 |
vsix.write(tmp_dir) |
|
75313 | 132 |
run_vscodium(List("--install-extension", File.platform_path(tmp_dir + vsix.path))).check |
133 |
locate_extension() match { |
|
134 |
case None => error("No extension " + extension_name + " after installation") |
|
135 |
case Some(dir) => |
|
136 |
progress.echo("Installed extension " + quote(extension_name) + |
|
137 |
" into directory:\n " + dir) |
|
138 |
} |
|
75305 | 139 |
}) |
140 |
} |
|
141 |
||
142 |
||
75292 | 143 |
/* settings */ |
144 |
||
145 |
def settings_path: Path = |
|
75257
d1e5f9dbf885
clarified startup of "isabelle vscode": vscodium component is required, with patches for Isabelle/VSCode;
wenzelm
parents:
75252
diff
changeset
|
146 |
Path.explode("$ISABELLE_VSCODE_SETTINGS/user-data/User/settings.json") |
75083 | 147 |
|
75292 | 148 |
private val default_settings = """ { |
75166 | 149 |
"editor.fontFamily": "'Isabelle DejaVu Sans Mono'", |
150 |
"editor.fontSize": 18, |
|
151 |
"editor.lineNumbers": "off", |
|
152 |
"editor.renderIndentGuides": false, |
|
153 |
"editor.rulers": [80, 100], |
|
75171 | 154 |
"editor.unicodeHighlight.ambiguousCharacters": false, |
75166 | 155 |
"extensions.autoCheckUpdates": false, |
75167 | 156 |
"extensions.autoUpdate": false, |
75178 | 157 |
"terminal.integrated.fontFamily": "monospace", |
75167 | 158 |
"update.mode": "none" |
75166 | 159 |
} |
160 |
""" |
|
161 |
||
75292 | 162 |
def init_settings(): Unit = |
75083 | 163 |
{ |
75292 | 164 |
if (!settings_path.is_file) { |
165 |
Isabelle_System.make_directory(settings_path.dir) |
|
166 |
File.write(settings_path, default_settings) |
|
75163 | 167 |
} |
75083 | 168 |
} |
169 |
||
170 |
||
171 |
/* Isabelle tool wrapper */ |
|
172 |
||
173 |
val isabelle_tool = |
|
75292 | 174 |
Isabelle_Tool("vscode", "Isabelle/VSCode interface wrapper", Scala_Project.here, args => |
75083 | 175 |
{ |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
176 |
var logic_ancestor = "" |
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
177 |
var console = false |
75298 | 178 |
var server_log = false |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
179 |
var logic_requirements = false |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
180 |
var session_dirs = List.empty[Path] |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
181 |
var include_sessions = List.empty[String] |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
182 |
var logic = "" |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
183 |
var modes = List.empty[String] |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
184 |
var no_build = false |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
185 |
var options = List.empty[String] |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
186 |
var verbose = false |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
187 |
|
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
188 |
def add_option(opt: String): Unit = options = options ::: List(opt) |
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
189 |
|
75083 | 190 |
val getopts = Getopts(""" |
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
191 |
Usage: isabelle vscode [OPTIONS] [-- VSCODE_OPTIONS ...] |
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
192 |
|
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
193 |
-A NAME ancestor session for option -R (default: parent) |
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
194 |
-C run as foreground process, with console output |
75298 | 195 |
-L enable language server log to file: |
196 |
""" + server_log_path.implode + """ |
|
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
197 |
-R NAME build image with requirements from other sessions |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
198 |
-d DIR include session directory |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
199 |
-i NAME include session in name-space of theories |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
200 |
-l NAME logic session name |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
201 |
-m MODE add print mode for output |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
202 |
-n no build of session image on startup |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
203 |
-o OPTION override Isabelle system OPTION (via NAME=VAL or NAME) |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
204 |
-p CMD ML process command prefix (process policy) |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
205 |
-s system build mode for session image (system_heaps=true) |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
206 |
-u user build mode for session image (system_heaps=false) |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
207 |
-v verbose logging of language server |
75083 | 208 |
|
75292 | 209 |
Start Isabelle/VSCode application, with automatic configuration of |
210 |
user settings. |
|
75163 | 211 |
|
212 |
The following initial settings are provided for a fresh installation: |
|
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
213 |
""" + default_settings, |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
214 |
"A:" -> (arg => logic_ancestor = arg), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
215 |
"C" -> (_ => console = true), |
75298 | 216 |
"L" -> (_ => server_log = true), |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
217 |
"R:" -> (arg => { logic = arg; logic_requirements = true }), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
218 |
"d:" -> (arg => session_dirs = session_dirs ::: List(Path.explode(arg))), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
219 |
"i:" -> (arg => include_sessions = include_sessions ::: List(arg)), |
75296 | 220 |
"l:" -> (arg => { logic = arg; logic_requirements = false }), |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
221 |
"m:" -> (arg => modes = modes ::: List(arg)), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
222 |
"n" -> (_ => no_build = true), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
223 |
"o:" -> add_option, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
224 |
"p:" -> (arg => add_option("ML_process_policy=" + arg)), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
225 |
"s" -> (_ => add_option("system_heaps=true")), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
226 |
"u" -> (_ => add_option("system_heaps=false")), |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
227 |
"v" -> (_ => verbose = true)) |
75083 | 228 |
|
229 |
val more_args = getopts(args) |
|
75292 | 230 |
|
75293
c5da08c5b01b
support console output, e.g. "isabelle vscode -C -- --help";
wenzelm
parents:
75292
diff
changeset
|
231 |
init_settings() |
75083 | 232 |
|
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
233 |
val (background, progress) = |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
234 |
if (console) (false, new Console_Progress) |
75304 | 235 |
else { run_vscodium(List("--version")).check; (true, new Progress) } |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
236 |
|
75304 | 237 |
run_vscodium(more_args, options = options, logic = logic, logic_ancestor = logic_ancestor, |
75295
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
238 |
logic_requirements = logic_requirements, session_dirs = session_dirs, |
38398766be6b
command-line arguments for "isabelle vscode", similar to "isabelle jedit";
wenzelm
parents:
75293
diff
changeset
|
239 |
include_sessions = include_sessions, modes = modes, no_build = no_build, |
75298 | 240 |
server_log = server_log, verbose = verbose, background = background, |
241 |
progress = progress).check |
|
75083 | 242 |
}) |
243 |
} |