src/Tools/VSCode/src/build_vscode.scala
author wenzelm
Sat, 28 Nov 2020 21:56:24 +0100
changeset 72763 3cc73d00553c
parent 72627 8d83acc5062e
child 72767 f6bf65554764
permissions -rw-r--r--
added document antiquotation @{tool}; formal check of isabelle tools via Isabelle/Scala;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
65367
83c30e290702 tuned headers;
wenzelm
parents: 65251
diff changeset
     1
/*  Title:      Tools/VSCode/src/build_vscode.scala
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     3
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     4
Build VSCode configuration and extension module for Isabelle.
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     5
*/
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     6
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     7
package isabelle.vscode
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     8
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     9
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    10
import isabelle._
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    11
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    12
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    13
object Build_VSCode
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    14
{
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    15
  val extension_dir = Path.explode("~~/src/Tools/VSCode/extension")
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    16
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    17
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    18
  /* grammar */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    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
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    21
  {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    22
    val logic = Grammar.default_logic
72627
8d83acc5062e clarified signature;
wenzelm
parents: 71726
diff changeset
    23
    val keywords = Sessions.base_info(options, logic).check.base.overall_syntax.keywords
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    24
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    25
    val output_path = extension_dir + Path.explode(Grammar.default_output(logic))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    26
    progress.echo(output_path.implode)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    27
    File.write_backup(output_path, Grammar.generate(keywords))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    28
  }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    29
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    30
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    31
  /* extension */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    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
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    34
  {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    35
    val output_path = extension_dir + Path.explode("out")
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    36
    progress.echo(output_path.implode)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    37
65164
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    38
    progress.bash(
66231
406b5ae7f5f3 more robust: always package;
wenzelm
parents: 66230
diff changeset
    39
      "npm install && npm update --dev && vsce package" + (if (publish) " && vsce publish" else ""),
65164
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    40
      cwd = extension_dir.file, echo = true).check
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    41
  }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    42
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    43
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    44
  /* Isabelle tool wrapper */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    45
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    46
  val isabelle_tool =
72763
3cc73d00553c added document antiquotation @{tool};
wenzelm
parents: 72627
diff changeset
    47
    Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module",
3cc73d00553c added document antiquotation @{tool};
wenzelm
parents: 72627
diff changeset
    48
      Scala_Project.here, args =>
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    49
    {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    50
      var publish = false
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    51
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    52
      val getopts = Getopts("""
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    53
Usage: isabelle build_vscode
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    54
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    55
  Options are:
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    56
    -P           publish the package
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    57
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    58
Build Isabelle/VSCode extension module in directory
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    59
""" + extension_dir.expand + """
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    60
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    61
This requires npm and the vsce build and publishing tool, see also
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    62
https://code.visualstudio.com/docs/tools/vscecli
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    63
""",
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    64
        "P" -> (_ => publish = true))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    65
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    66
      val more_args = getopts(args)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    67
      if (more_args.nonEmpty) getopts.usage()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    68
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    69
      val options = Options.init()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    70
      val progress = new Console_Progress()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    71
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    72
      build_grammar(options, progress)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    73
      build_extension(progress, publish = publish)
69277
258bef08b31e support for user-defined Isabelle/Scala command-line tools;
wenzelm
parents: 66976
diff changeset
    74
    })
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    75
}