blob: e9cf37761a5363ae69f3e83c54c287b21790d34c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/* NSC -- new Scala compiler
* Copyright 2005-2012 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools
package cmd
/** Interpolation logic for generated files. The idea is to be
* able to write in terms of @@THIS@@ and @@THAT@@ and the reference
* specification knows enough to perform the substitutions. Warrants
* expansion.
*/
trait Interpolation {
self: Spec =>
private lazy val reference = referenceSpec
import reference._
object interpolate {
def mapper: Map[String, () => String] = Map(
"PROGRAM" -> (() => programInfo.runner),
"ALLOPTIONS" -> (() => options.all mkString " "),
"MAINCLASS" -> (() => programInfo.mainClass)
)
private def mark(key: String) = "@@" + key + "@@"
def apply(template: String) = mapper.foldLeft(template) { case (s, (key, f)) => s.replaceAll(mark(key), f()) }
}
}
object Interpolation {
/** A simple template for generating bash completion functions.
*/
lazy val bashTemplate = """
|_@@PROGRAM@@()
|{
| local cur opts base
| COMPREPLY=()
| cur="${COMP_WORDS[COMP_CWORD]}"
| opts="@@ALLOPTIONS@@"
|
| COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
| _filedir
| return 0
|} && complete -F _@@PROGRAM@@ @@PROGRAM@@
""".stripMargin
/** A simple template for generating a runner script.
*/
val runnerTemplate = """
|#!/bin/sh
|#
|
|scala @@MAINCLASS@@ "$@"
|""".stripMargin.trim + "\n"
}
|