author | wenzelm |
Sat, 10 Nov 2018 14:08:02 +0100 | |
changeset 69277 | 258bef08b31e |
parent 66976 | 806bc39550a5 |
child 71726 | a5fda30edae2 |
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 |
||
20 |
def build_grammar(options: Options, progress: Progress = No_Progress) |
|
21 |
{ |
|
22 |
val logic = Grammar.default_logic |
|
66976 | 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 |
||
33 |
def build_extension(progress: Progress = No_Progress, publish: Boolean = false) |
|
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 = |
|
47 |
Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module", args => |
|
48 |
{ |
|
49 |
var publish = false |
|
50 |
||
51 |
val getopts = Getopts(""" |
|
52 |
Usage: isabelle build_vscode |
|
53 |
||
54 |
Options are: |
|
55 |
-P publish the package |
|
56 |
||
57 |
Build Isabelle/VSCode extension module in directory |
|
58 |
""" + extension_dir.expand + """ |
|
59 |
||
60 |
This requires npm and the vsce build and publishing tool, see also |
|
61 |
https://code.visualstudio.com/docs/tools/vscecli |
|
62 |
""", |
|
63 |
"P" -> (_ => publish = true)) |
|
64 |
||
65 |
val more_args = getopts(args) |
|
66 |
if (more_args.nonEmpty) getopts.usage() |
|
67 |
||
68 |
val options = Options.init() |
|
69 |
val progress = new Console_Progress() |
|
70 |
||
71 |
build_grammar(options, progress) |
|
72 |
build_extension(progress, publish = publish) |
|
69277
258bef08b31e
support for user-defined Isabelle/Scala command-line tools;
wenzelm
parents:
66976
diff
changeset
|
73 |
}) |
65138 | 74 |
} |