src/Tools/VSCode/src/build_vscode.scala
author wenzelm
Mon, 12 Jun 2017 15:40:40 +0200
changeset 66070 65a68dcd95c3
parent 65367 83c30e290702
child 66228 5707cfb531ee
permissions -rw-r--r--
dynamic configuration of prettify-symbols-mode, similar to VSCoq;
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
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    20
  def build_grammar(options: Options, progress: Progress = No_Progress)
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
65251
4b0a43afc3fb clarified modules;
wenzelm
parents: 65210
diff changeset
    23
    val keywords = Sessions.session_base(options, logic).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
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    33
  def build_extension(progress: Progress = No_Progress, publish: Boolean = false)
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(
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    39
      "npm install && npm update --dev && vsce " + (if (publish) "publish" else "package"),
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 =
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    47
    Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module", args =>
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    48
    {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    49
      var publish = false
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    50
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    51
      val getopts = Getopts("""
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    52
Usage: isabelle build_vscode
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    53
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    54
  Options are:
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    55
    -P           publish the package
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    56
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    57
Build Isabelle/VSCode extension module in directory
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    58
""" + extension_dir.expand + """
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    59
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    60
This requires npm and the vsce build and publishing tool, see also
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    61
https://code.visualstudio.com/docs/tools/vscecli
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    62
""",
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    63
        "P" -> (_ => publish = true))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    64
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    65
      val more_args = getopts(args)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    66
      if (more_args.nonEmpty) getopts.usage()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    67
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    68
      val options = Options.init()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    69
      val progress = new Console_Progress()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    70
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    71
      build_grammar(options, progress)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    72
      build_extension(progress, publish = publish)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    73
    }, admin = true)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    74
}