src/Tools/VSCode/src/build_vscode.scala
author wenzelm
Mon, 13 Mar 2017 15:59:00 +0100
changeset 65210 8cfdf420b643
parent 65164 6cbb894181c8
child 65251 4b0a43afc3fb
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Admin/build_vscode.scala
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
  /* Prettify Symbols Mode */
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 prettify_config: String =
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    21
    """{
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    22
  "prettifySymbolsMode.substitutions": [
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    23
      {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    24
        "language": "isabelle",
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    25
        "revealOn": "none",
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    26
        "adjustCursorMovement": true,
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    27
        "substitutions": [""" +
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    28
          (for ((s, c) <- Symbol.codes)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    29
           yield
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    30
            JSON.Format(
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    31
              Map("ugly" -> Library.escape_regex(s),
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    32
                "pretty" -> Library.escape_regex(Codepoint.string(c)))))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    33
            .mkString("\n          ", ",\n          ", "") +
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    34
        """]
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    35
      }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    36
    ]
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    37
}"""
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    38
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    39
  def build_symbols(progress: Progress = No_Progress)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    40
  {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    41
    val output_path = extension_dir + Path.explode("isabelle-symbols.json")
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    42
    progress.echo(output_path.implode)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    43
    File.write_backup(output_path, prettify_config)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    44
  }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    45
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    46
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    47
  /* grammar */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    48
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    49
  def build_grammar(options: Options, progress: Progress = No_Progress)
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 logic = Grammar.default_logic
65210
8cfdf420b643 tuned signature;
wenzelm
parents: 65164
diff changeset
    52
    val keywords = Build.session_base(options, logic).syntax.keywords
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    53
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    54
    val output_path = extension_dir + Path.explode(Grammar.default_output(logic))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    55
    progress.echo(output_path.implode)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    56
    File.write_backup(output_path, Grammar.generate(keywords))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    57
  }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    58
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    59
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    60
  /* extension */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    61
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    62
  def build_extension(progress: Progress = No_Progress, publish: Boolean = false)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    63
  {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    64
    val output_path = extension_dir + Path.explode("out")
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    65
    progress.echo(output_path.implode)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    66
65164
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    67
    progress.bash(
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    68
      "npm install && npm update --dev && vsce " + (if (publish) "publish" else "package"),
6cbb894181c8 more thorough build;
wenzelm
parents: 65138
diff changeset
    69
      cwd = extension_dir.file, echo = true).check
65138
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    70
  }
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    71
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    72
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    73
  /* Isabelle tool wrapper */
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    74
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    75
  val isabelle_tool =
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    76
    Isabelle_Tool("build_vscode", "build Isabelle/VSCode extension module", args =>
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    77
    {
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    78
      var publish = false
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    79
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    80
      val getopts = Getopts("""
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    81
Usage: isabelle build_vscode
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    82
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    83
  Options are:
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    84
    -P           publish the package
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    85
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    86
Build Isabelle/VSCode extension module in directory
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    87
""" + extension_dir.expand + """
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    88
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    89
This requires npm and the vsce build and publishing tool, see also
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    90
https://code.visualstudio.com/docs/tools/vscecli
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    91
""",
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    92
        "P" -> (_ => publish = true))
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    93
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    94
      val more_args = getopts(args)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    95
      if (more_args.nonEmpty) getopts.usage()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    96
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    97
      val options = Options.init()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    98
      val progress = new Console_Progress()
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
    99
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
   100
      build_symbols(progress)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
   101
      build_grammar(options, progress)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
   102
      build_extension(progress, publish = publish)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
   103
    }, admin = true)
64dfee6bd243 added admin tool "isabelle build_vscode";
wenzelm
parents:
diff changeset
   104
}