src/Pure/Tools/scala_project.scala
author wenzelm
Thu, 15 Jul 2021 16:35:45 +0200
changeset 73987 fc363a3b690a
parent 73912 ac1639349ecf
child 74030 39e05601faeb
permissions -rw-r--r--
build.props for isabelle.jar, including isabelle.jedit; build minimal Isabelle/jEdit plugins on the spot; regular "jedit" component: discontinued special "jedit_build"; Isabelle/Scala services via jars, instead of settings;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/scala_project.scala
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     3
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     4
Setup Gradle project for Isabelle/Scala/jEdit.
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     5
*/
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     6
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     7
package isabelle
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     8
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
     9
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    10
object Scala_Project
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    11
{
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    12
  /* groovy syntax */
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    13
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    14
  def groovy_string(s: String): String =
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    15
  {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    16
    s.map(c =>
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    17
      c match {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    18
        case '\t' | '\b' | '\n' | '\r' | '\f' | '\\' | '\'' | '"' => "\\" + c
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    19
        case _ => c.toString
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    20
      }).mkString("'", "", "'")
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    21
  }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    22
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    23
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    24
  /* file and directories */
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    25
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    26
  lazy val isabelle_files: List[String] =
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    27
  {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    28
    val files1 =
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    29
    {
73522
b219774a71ae tuned signature -- more explicit types;
wenzelm
parents: 73418
diff changeset
    30
      val isabelle_home = Path.ISABELLE_HOME.canonical
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    31
      Path.split(Isabelle_System.getenv("ISABELLE_CLASSPATH")).
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    32
        map(path => File.relative_path(isabelle_home, path).getOrElse(path).implode)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    33
    }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    34
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    35
    val isabelle_jar = Path.explode("$ISABELLE_SCALA_JAR").java_path
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    36
    val isabelle_shasum = isabelle.setup.Build.get_shasum(isabelle_jar)
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    37
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    38
    val files2 =
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    39
      for {
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    40
        line <- Library.trim_split_lines(isabelle_shasum)
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    41
        name =
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    42
          if (line.length > 41 && line(40) == ' ') line.substring(41)
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    43
          else error("Bad shasum entry: " + quote(line))
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    44
        if Path.is_wellformed(name) && name != "<props>"
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
    45
      } yield name
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    46
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    47
    files1 ::: files2
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    48
  }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    49
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    50
  lazy val isabelle_scala_files: Map[String, Path] =
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    51
    isabelle_files.foldLeft(Map.empty[String, Path]) {
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    52
      case (map, name) =>
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    53
        if (!name.startsWith("src/Tools/jEdit/") && name.endsWith(".scala")) {
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    54
          val path = Path.explode("~~/" + name)
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    55
          val base = path.base.implode
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    56
          map.get(base) match {
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    57
            case None => map + (base -> path)
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    58
            case Some(path1) => error("Conflicting base names: " + path + " vs. " + path1)
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    59
          }
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    60
        }
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    61
        else map
73359
d8a0e996614b tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
    62
    }
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    63
73675
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    64
  private def guess_package(path: Path): String =
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    65
  {
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    66
    val lines = split_lines(File.read(path))
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    67
    val Package = """\bpackage\b +(?:object +)?\b((?:\w|\.)+)\b""".r
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    68
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    69
    lines.collectFirst({ case Package(name) => name }) getOrElse
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    70
      error("Failed to guess package from " + path)
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
    71
  }
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    72
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    73
72755
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    74
  /* compile-time position */
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    75
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    76
  def here: Here =
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    77
  {
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    78
    val exn = new Exception
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    79
    exn.getStackTrace.toList match {
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    80
      case _ :: caller :: _ =>
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    81
        val name = proper_string(caller.getFileName).getOrElse("")
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    82
        val line = caller.getLineNumber
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    83
        new Here(name, line)
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    84
      case _ => new Here("", 0)
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    85
    }
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    86
  }
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    87
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    88
  class Here private[Scala_Project](name: String, line: Int)
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    89
  {
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    90
    override def toString: String = name + ":" + line
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    91
    def position: Position.T =
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    92
      isabelle_scala_files.get(name) match {
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    93
        case Some(path) => Position.Line_File(line, path.implode)
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
    94
        case None => Position.none
72755
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    95
      }
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    96
  }
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    97
8dffbe01a3e1 support for Scala compile-time positions;
wenzelm
parents: 72748
diff changeset
    98
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
    99
  /* scala project */
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   100
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 73317
diff changeset
   101
  def scala_project(project_dir: Path, symlinks: Boolean = false): Unit =
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   102
  {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   103
    if (symlinks && Platform.is_windows)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   104
      error("Cannot create symlinks on Windows")
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   105
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   106
    if (project_dir.is_file || project_dir.is_dir)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   107
      error("Project directory already exists: " + project_dir)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   108
71524
4b908e70d642 copy jEdit sources instead of jar, for better browsing experience;
wenzelm
parents: 71503
diff changeset
   109
    val java_src_dir = project_dir + Path.explode("src/main/java")
72376
04bce3478688 clarified signature;
wenzelm
parents: 72375
diff changeset
   110
    val scala_src_dir = Isabelle_System.make_directory(project_dir + Path.explode("src/main/scala"))
71524
4b908e70d642 copy jEdit sources instead of jar, for better browsing experience;
wenzelm
parents: 71503
diff changeset
   111
73987
fc363a3b690a build.props for isabelle.jar, including isabelle.jedit;
wenzelm
parents: 73912
diff changeset
   112
    Isabelle_System.copy_dir(Path.explode("$JEDIT_HOME/jEdit"), java_src_dir)
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   113
73912
ac1639349ecf clarified directories;
wenzelm
parents: 73907
diff changeset
   114
    val isabelle_setup_dir = Path.explode("~~/src/Tools/Setup/isabelle")
ac1639349ecf clarified directories;
wenzelm
parents: 73907
diff changeset
   115
    if (symlinks) Isabelle_System.symlink(isabelle_setup_dir, java_src_dir)
ac1639349ecf clarified directories;
wenzelm
parents: 73907
diff changeset
   116
    else Isabelle_System.copy_dir(isabelle_setup_dir, java_src_dir)
73907
8cc891183484 clarified Isabelle/Java/Scala project setup;
wenzelm
parents: 73675
diff changeset
   117
72762
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
   118
    val files = isabelle_files
d9a54c4c9da9 more robust isabelle_scala_files;
wenzelm
parents: 72755
diff changeset
   119
    isabelle_scala_files
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   120
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   121
    for (file <- files if file.endsWith(".scala")) {
73675
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
   122
      val path = Path.ISABELLE_HOME + Path.explode(file)
6c56f2ebe157 guess package more directly;
wenzelm
parents: 73522
diff changeset
   123
      val target = scala_src_dir + Path.basic(guess_package(path))
72375
e48d93811ed7 clarified signature;
wenzelm
parents: 72176
diff changeset
   124
      Isabelle_System.make_directory(target)
73317
df49ca5da9d0 clarified modules: more like ML;
wenzelm
parents: 73035
diff changeset
   125
      if (symlinks) Isabelle_System.symlink(path, target)
df49ca5da9d0 clarified modules: more like ML;
wenzelm
parents: 73035
diff changeset
   126
      else Isabelle_System.copy_file(path, target)
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   127
    }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   128
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   129
    val jars =
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   130
      for (file <- files if file.endsWith(".jar"))
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   131
      yield {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   132
        if (file.startsWith("/")) file
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   133
        else Isabelle_System.getenv("ISABELLE_HOME") + "/" + file
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   134
      }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   135
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   136
    File.write(project_dir + Path.explode("settings.gradle"), "rootProject.name = 'Isabelle'\n")
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   137
    File.write(project_dir + Path.explode("build.gradle"),
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   138
"""plugins {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   139
  id 'scala'
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   140
}
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   141
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   142
repositories {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   143
  mavenCentral()
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   144
}
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   145
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   146
dependencies {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   147
  implementation 'org.scala-lang:scala-library:""" + scala.util.Properties.versionNumberString + """'
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   148
  compile files(
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   149
    """ + jars.map(jar => groovy_string(File.platform_path(jar))).mkString("", ",\n    ", ")") +
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   150
"""
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   151
}
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   152
""")
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   153
  }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   154
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   155
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   156
  /* Isabelle tool wrapper */
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   157
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   158
  val isabelle_tool =
72763
3cc73d00553c added document antiquotation @{tool};
wenzelm
parents: 72762
diff changeset
   159
    Isabelle_Tool("scala_project", "setup Gradle project for Isabelle/Scala/jEdit",
3cc73d00553c added document antiquotation @{tool};
wenzelm
parents: 72762
diff changeset
   160
      Scala_Project.here, args =>
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   161
    {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   162
      var symlinks = false
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   163
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   164
      val getopts = Getopts("""
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   165
Usage: isabelle scala_project [OPTIONS] PROJECT_DIR
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   166
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   167
  Options are:
71503
df7494f14388 clarified command line;
wenzelm
parents: 71378
diff changeset
   168
    -L           make symlinks to original scala files
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   169
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   170
  Setup Gradle project for Isabelle/Scala/jEdit --- to support Scala IDEs
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   171
  such as IntelliJ IDEA.
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   172
""",
71503
df7494f14388 clarified command line;
wenzelm
parents: 71378
diff changeset
   173
        "L" -> (_ => symlinks = true))
71378
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   174
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   175
      val more_args = getopts(args)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   176
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   177
      val project_dir =
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   178
        more_args match {
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   179
          case List(dir) => Path.explode(dir)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   180
          case _ => getopts.usage()
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   181
        }
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   182
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   183
      scala_project(project_dir, symlinks = symlinks)
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   184
    })
820cf124dced added "isabelle scala_project" to support e.g. IntelliJ IDEA;
wenzelm
parents:
diff changeset
   185
}