aboutsummaryrefslogtreecommitdiff
path: root/stage2/Scaffold.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2017-02-15 01:37:53 -0500
committerChristopher Vogt <oss.nsp@cvogt.org>2017-02-15 03:47:49 -0500
commit7ee113962134e3c9c4659d6de9de3c7015174d3f (patch)
tree55f6158be8a53d3ad640f3cd038baeaf1a8f1f30 /stage2/Scaffold.scala
parent2c8257b0c119b38102aa0c3efecffc7fefc9d766 (diff)
downloadcbt-7ee113962134e3c9c4659d6de9de3c7015174d3f.tar.gz
cbt-7ee113962134e3c9c4659d6de9de3c7015174d3f.tar.bz2
cbt-7ee113962134e3c9c4659d6de9de3c7015174d3f.zip
add package to generated Main.scala to avoid classpath weirdnesses
caused by multiple root package Main classes from different subproject or test projects ending up on the same classpath
Diffstat (limited to 'stage2/Scaffold.scala')
-rw-r--r--stage2/Scaffold.scala70
1 files changed, 66 insertions, 4 deletions
diff --git a/stage2/Scaffold.scala b/stage2/Scaffold.scala
index 866e5da..b110258 100644
--- a/stage2/Scaffold.scala
+++ b/stage2/Scaffold.scala
@@ -2,8 +2,8 @@ package cbt
import java.io._
import java.nio.file._
import java.net._
-trait Scaffold{
- def logger: Logger
+class Scaffold( logger: Logger ){
+ val lib = new Lib(logger)
private def createFile( projectDirectory: File, fileName: String, code: String ){
val outputFile = projectDirectory ++ ("/" ++ fileName)
@@ -12,10 +12,42 @@ trait Scaffold{
println( GREEN ++ "Created " ++ fileName ++ RESET )
}
+ private[cbt] def packageName(name: String) = {
+ def stripNonAlPrefix = (_:String).dropWhile(
+ !(('a' to 'z') ++ ('A' to 'Z') ++ Seq('_')).contains(_)
+ )
+ def removeNonAlNumPlusSelected = "([^-a-zA-Z0-9_\\.\\\\/])".r.replaceAllIn(_:String, "")
+ def replaceSpecialWithUnderscore = "([-\\. ])".r.replaceAllIn(_:String, "_")
+ def removeRepeatedDots = "\\.+".r.replaceAllIn(_:String, ".")
+ val transform = (
+ (
+ stripNonAlPrefix
+ andThen
+ removeNonAlNumPlusSelected
+ andThen
+ replaceSpecialWithUnderscore
+ ).andThen(
+ (_:String).replace("/",".").replace("\\",".").toLowerCase
+ ) andThen removeRepeatedDots
+
+ )
+
+ transform( name )
+ }
+
+ private[cbt] def packageFromDirectory(directory: File) = {
+ packageName(
+ directory.getAbsolutePath.stripPrefix(
+ lib.findOuterMostModuleDirectory( directory ).getParentFile.getAbsolutePath
+ )
+ )
+ }
+
def createMain(
projectDirectory: File
- ): Unit = {
- createFile(projectDirectory, "Main.scala", s"""object Main{
+ ): Unit = {
+ createFile(projectDirectory, "Main.scala", s"""package ${packageFromDirectory(projectDirectory)}
+object Main{
def main( args: Array[String] ): Unit = {
println( Console.GREEN ++ "Hello World" ++ Console.RESET )
}
@@ -50,3 +82,33 @@ class Build(val context: Context) extends BaseBuild{
)
}
}
+object ScaffoldTest{
+ val scaffold = new Scaffold(new Logger(None,System.currentTimeMillis))
+ import scaffold._
+ def main(args: Array[String]): Unit = {
+ def assertEquals[T](left: T, right: T) = {
+ assert( left == right, left + " == " + right )
+ }
+ assertEquals(
+ packageName( "AsdfAsdfAsdf" ), "asdfasdfasdf"
+ )
+ assertEquals(
+ packageName( "_AsdfA4sdf" ), "_asdfa4sdf"
+ )
+ assertEquals(
+ packageName( "-AsdfAsdf" ), "asdfasdf"
+ )
+ assertEquals(
+ packageName( "asdf 4aSdf" ), "asdf4asdf"
+ )
+ assertEquals(
+ packageName( "&/(&%$&&/(asdf" ), "asdf"
+ )
+ assertEquals(
+ packageName( "AAA" ), "aaa"
+ )
+ assertEquals(
+ packageName( "/AAA/a_a/a.a" ), "aaa.a_a.a_a"
+ )
+ }
+}