author | wenzelm |
Fri, 25 Feb 2022 15:47:47 +0100 | |
changeset 75149 | 105820b79d8f |
parent 75147 | f9d2a9e94138 |
child 75152 | 1011ae2b524c |
permissions | -rw-r--r-- |
65367 | 1 |
/* Title: Tools/VSCode/src/build_vscode.scala |
65138 | 2 |
Author: Makarius |
3 |
||
4 |
Build VSCode configuration and extension module for Isabelle. |
|
5 |
*/ |
|
6 |
||
7 |
package isabelle.vscode |
|
8 |
||
9 |
||
10 |
import isabelle._ |
|
11 |
||
12 |
||
13 |
object Build_VSCode |
|
14 |
{ |
|
15 |
val extension_dir = Path.explode("~~/src/Tools/VSCode/extension") |
|
16 |
||
17 |
||
18 |
/* grammar */ |
|
19 |
||
73340 | 20 |
def build_grammar(options: Options, progress: Progress = new Progress): Unit = |
65138 | 21 |
{ |
72767 | 22 |
val logic = TextMate_Grammar.default_logic |
72627 | 23 |
val keywords = Sessions.base_info(options, logic).check.base.overall_syntax.keywords |
65138 | 24 |
|
72767 | 25 |
val output_path = extension_dir + Path.explode(TextMate_Grammar.default_output(logic)) |
65138 | 26 |
progress.echo(output_path.implode) |
72767 | 27 |
File.write_backup(output_path, TextMate_Grammar.generate(keywords)) |
65138 | 28 |
} |
29 |
||
30 |
||
31 |
/* extension */ |
|
32 |
||
75144 | 33 |
def uninstall_extension(progress: Progress = new Progress): Unit = |
75149
105820b79d8f
clarified extension name (again), corresponding to qualified resources within VSCode (settings, commands, etc.);
wenzelm
parents:
75147
diff
changeset
|
34 |
progress.bash("isabelle vscode --uninstall-extension isabelle.isabelle").check |
75144 | 35 |
|
36 |
def install_extension(vsix_path: Path, progress: Progress = new Progress): Unit = |
|
37 |
progress.bash("isabelle vscode --install-extension " + |
|
38 |
File.bash_platform_path(vsix_path)) |
|
39 |
||
40 |
def build_extension(progress: Progress = new Progress): Path = |
|
65138 | 41 |
{ |
42 |
val output_path = extension_dir + Path.explode("out") |
|
75143 | 43 |
Isabelle_System.rm_tree(output_path) |
44 |
Isabelle_System.make_directory(output_path) |
|
65138 | 45 |
progress.echo(output_path.implode) |
46 |
||
75143 | 47 |
val result = |
48 |
progress.bash("npm install && npm update --dev && vsce package", |
|
49 |
cwd = extension_dir.file, echo = true).check |
|
50 |
||
75149
105820b79d8f
clarified extension name (again), corresponding to qualified resources within VSCode (settings, commands, etc.);
wenzelm
parents:
75147
diff
changeset
|
51 |
val Pattern = """.*Packaged:.*(isabelle-.*\.vsix).*""".r |
75144 | 52 |
result.out_lines.collectFirst( |
53 |
{ case Pattern(vsix_name) => extension_dir + Path.basic(vsix_name) }) |
|
54 |
.getOrElse(error("Failed to guess resulting .vsix file name")) |
|
65138 | 55 |
} |
56 |
||
57 |
||
58 |
/* Isabelle tool wrapper */ |
|
59 |
||
60 |
val isabelle_tool = |
|
72763 | 61 |
Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module", |
62 |
Scala_Project.here, args => |
|
65138 | 63 |
{ |
75143 | 64 |
var install = false |
75144 | 65 |
var uninstall = false |
65138 | 66 |
|
67 |
val getopts = Getopts(""" |
|
68 |
Usage: isabelle build_vscode |
|
69 |
||
70 |
Options are: |
|
75143 | 71 |
-I install resulting extension |
75144 | 72 |
-U uninstall extension (no build) |
65138 | 73 |
|
74 |
Build Isabelle/VSCode extension module in directory |
|
75 |
""" + extension_dir.expand + """ |
|
76 |
||
75143 | 77 |
This requires node.js/npm and the vsce build tool. |
65138 | 78 |
""", |
75144 | 79 |
"I" -> (_ => install = true), |
80 |
"U" -> (_ => uninstall = true)) |
|
65138 | 81 |
|
82 |
val more_args = getopts(args) |
|
83 |
if (more_args.nonEmpty) getopts.usage() |
|
84 |
||
85 |
val options = Options.init() |
|
86 |
val progress = new Console_Progress() |
|
87 |
||
75144 | 88 |
if (uninstall) { |
89 |
uninstall_extension(progress = progress) |
|
90 |
} |
|
91 |
else { |
|
92 |
build_grammar(options, progress = progress) |
|
93 |
val path = build_extension(progress = progress) |
|
94 |
if (install) install_extension(path, progress = progress) |
|
95 |
} |
|
69277
258bef08b31e
support for user-defined Isabelle/Scala command-line tools;
wenzelm
parents:
66976
diff
changeset
|
96 |
}) |
65138 | 97 |
} |