author | wenzelm |
Sat, 28 Nov 2020 21:56:24 +0100 | |
changeset 72763 | 3cc73d00553c |
parent 72627 | 8d83acc5062e |
child 72767 | f6bf65554764 |
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 |
||
71726
a5fda30edae2
clarified signature: more uniform treatment of stopped/interrupted state;
wenzelm
parents:
69277
diff
changeset
|
20 |
def build_grammar(options: Options, progress: Progress = new Progress) |
65138 | 21 |
{ |
22 |
val logic = Grammar.default_logic |
|
72627 | 23 |
val keywords = Sessions.base_info(options, logic).check.base.overall_syntax.keywords |
65138 | 24 |
|
25 |
val output_path = extension_dir + Path.explode(Grammar.default_output(logic)) |
|
26 |
progress.echo(output_path.implode) |
|
27 |
File.write_backup(output_path, Grammar.generate(keywords)) |
|
28 |
} |
|
29 |
||
30 |
||
31 |
/* extension */ |
|
32 |
||
71726
a5fda30edae2
clarified signature: more uniform treatment of stopped/interrupted state;
wenzelm
parents:
69277
diff
changeset
|
33 |
def build_extension(progress: Progress = new Progress, publish: Boolean = false) |
65138 | 34 |
{ |
35 |
val output_path = extension_dir + Path.explode("out") |
|
36 |
progress.echo(output_path.implode) |
|
37 |
||
65164 | 38 |
progress.bash( |
66231 | 39 |
"npm install && npm update --dev && vsce package" + (if (publish) " && vsce publish" else ""), |
65164 | 40 |
cwd = extension_dir.file, echo = true).check |
65138 | 41 |
} |
42 |
||
43 |
||
44 |
/* Isabelle tool wrapper */ |
|
45 |
||
46 |
val isabelle_tool = |
|
72763 | 47 |
Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module", |
48 |
Scala_Project.here, args => |
|
65138 | 49 |
{ |
50 |
var publish = false |
|
51 |
||
52 |
val getopts = Getopts(""" |
|
53 |
Usage: isabelle build_vscode |
|
54 |
||
55 |
Options are: |
|
56 |
-P publish the package |
|
57 |
||
58 |
Build Isabelle/VSCode extension module in directory |
|
59 |
""" + extension_dir.expand + """ |
|
60 |
||
61 |
This requires npm and the vsce build and publishing tool, see also |
|
62 |
https://code.visualstudio.com/docs/tools/vscecli |
|
63 |
""", |
|
64 |
"P" -> (_ => publish = true)) |
|
65 |
||
66 |
val more_args = getopts(args) |
|
67 |
if (more_args.nonEmpty) getopts.usage() |
|
68 |
||
69 |
val options = Options.init() |
|
70 |
val progress = new Console_Progress() |
|
71 |
||
72 |
build_grammar(options, progress) |
|
73 |
build_extension(progress, publish = publish) |
|
69277
258bef08b31e
support for user-defined Isabelle/Scala command-line tools;
wenzelm
parents:
66976
diff
changeset
|
74 |
}) |
65138 | 75 |
} |