From 9bfe739adc62ba073342f78a64e24c18e12d4792 Mon Sep 17 00:00:00 2001 From: prassee Date: Sat, 9 Jul 2016 01:21:45 +0000 Subject: Add IntelliJ IDEA project generator plugin --- examples/idea-plugin-example/README.md | 1 + examples/idea-plugin-example/build/build.scala | 8 ++++++++ examples/idea-plugin-example/build/build/build.scala | 6 ++++++ examples/idea-plugin-example/src/Main.scala | 3 +++ 4 files changed, 18 insertions(+) create mode 100644 examples/idea-plugin-example/README.md create mode 100644 examples/idea-plugin-example/build/build.scala create mode 100644 examples/idea-plugin-example/build/build/build.scala create mode 100644 examples/idea-plugin-example/src/Main.scala (limited to 'examples') diff --git a/examples/idea-plugin-example/README.md b/examples/idea-plugin-example/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/idea-plugin-example/README.md @@ -0,0 +1 @@ + diff --git a/examples/idea-plugin-example/build/build.scala b/examples/idea-plugin-example/build/build.scala new file mode 100644 index 0000000..6252402 --- /dev/null +++ b/examples/idea-plugin-example/build/build.scala @@ -0,0 +1,8 @@ + +import cbt._ +import idea_plugin.IdeaPlugin + + +class Build(val context: Context) extends BaseBuild with IdeaPlugin { + override def name = "idea-plugin-example" +} diff --git a/examples/idea-plugin-example/build/build/build.scala b/examples/idea-plugin-example/build/build/build.scala new file mode 100644 index 0000000..df4934a --- /dev/null +++ b/examples/idea-plugin-example/build/build/build.scala @@ -0,0 +1,6 @@ + +import cbt._ + +class Build(val context: Context) extends BuildBuild { + override def dependencies = super.dependencies :+ plugins.ideaPlugin +} diff --git a/examples/idea-plugin-example/src/Main.scala b/examples/idea-plugin-example/src/Main.scala new file mode 100644 index 0000000..ec68f73 --- /dev/null +++ b/examples/idea-plugin-example/src/Main.scala @@ -0,0 +1,3 @@ +object Main extends App { + println("This is an example Application for illustrating CBT IDEA plugin ") +} -- cgit v1.2.3 From 34f3d10608d6f11deb90979066d69d31b7a8fe4f Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Thu, 6 Apr 2017 01:24:27 +0000 Subject: change IntelliJ plugin draft to follow now recommend plugin style --- build/build.scala | 3 +- examples/idea-plugin-example/README.md | 1 - examples/idea-plugin-example/build/build.scala | 8 -- .../idea-plugin-example/build/build/build.scala | 6 -- examples/idea-plugin-example/src/Main.scala | 3 - examples/intellij/README.md | 1 + examples/intellij/build/build.scala | 5 ++ examples/intellij/src/Main.scala | 3 + plugins/idea_plugin/IdeaPlugin.scala | 85 ---------------------- plugins/idea_plugin/build/build.scala | 9 --- stage2/plugins.scala | 1 - stage2/plugins/IntelliJ.scala | 70 ++++++++++++++++++ 12 files changed, 81 insertions(+), 114 deletions(-) delete mode 100644 examples/idea-plugin-example/README.md delete mode 100644 examples/idea-plugin-example/build/build.scala delete mode 100644 examples/idea-plugin-example/build/build/build.scala delete mode 100644 examples/idea-plugin-example/src/Main.scala create mode 100644 examples/intellij/README.md create mode 100644 examples/intellij/build/build.scala create mode 100644 examples/intellij/src/Main.scala delete mode 100644 plugins/idea_plugin/IdeaPlugin.scala delete mode 100644 plugins/idea_plugin/build/build.scala create mode 100644 stage2/plugins/IntelliJ.scala (limited to 'examples') diff --git a/build/build.scala b/build/build.scala index 4635159..74bf6da 100644 --- a/build/build.scala +++ b/build/build.scala @@ -2,7 +2,7 @@ package cbt_build.cbt import cbt._ import cbt_internal._ -class Build(val context: Context) extends Shared with Scalariform with PublishLocal{ +class Build(val context: Context) extends Shared with Scalariform with PublishLocal with CommandLineOverrides{ override def name: String = "cbt" override def version: String = "0.1" override def description: String = "Fast, intuitive Build Tool for Scala" @@ -24,6 +24,7 @@ class Build(val context: Context) extends Shared with Scalariform with PublishLo Seq( context.cbtHome / "stage2" / "DirectoryDependency.scala", context.cbtHome / "stage2" / "LazyDependency.scala", + context.cbtHome / "stage2" / "plugins" / "IntelliJ.scala", context.cbtHome / "stage2" / "plugins" / "ScalaTest.scala", context.cbtHome / "stage2" / "plugins" / "Scalatex.scala", context.cbtHome / "stage2" / "plugins" / "Tut.scala", diff --git a/examples/idea-plugin-example/README.md b/examples/idea-plugin-example/README.md deleted file mode 100644 index 8b13789..0000000 --- a/examples/idea-plugin-example/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/idea-plugin-example/build/build.scala b/examples/idea-plugin-example/build/build.scala deleted file mode 100644 index 6252402..0000000 --- a/examples/idea-plugin-example/build/build.scala +++ /dev/null @@ -1,8 +0,0 @@ - -import cbt._ -import idea_plugin.IdeaPlugin - - -class Build(val context: Context) extends BaseBuild with IdeaPlugin { - override def name = "idea-plugin-example" -} diff --git a/examples/idea-plugin-example/build/build/build.scala b/examples/idea-plugin-example/build/build/build.scala deleted file mode 100644 index df4934a..0000000 --- a/examples/idea-plugin-example/build/build/build.scala +++ /dev/null @@ -1,6 +0,0 @@ - -import cbt._ - -class Build(val context: Context) extends BuildBuild { - override def dependencies = super.dependencies :+ plugins.ideaPlugin -} diff --git a/examples/idea-plugin-example/src/Main.scala b/examples/idea-plugin-example/src/Main.scala deleted file mode 100644 index ec68f73..0000000 --- a/examples/idea-plugin-example/src/Main.scala +++ /dev/null @@ -1,3 +0,0 @@ -object Main extends App { - println("This is an example Application for illustrating CBT IDEA plugin ") -} diff --git a/examples/intellij/README.md b/examples/intellij/README.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/intellij/README.md @@ -0,0 +1 @@ + diff --git a/examples/intellij/build/build.scala b/examples/intellij/build/build.scala new file mode 100644 index 0000000..921cf40 --- /dev/null +++ b/examples/intellij/build/build.scala @@ -0,0 +1,5 @@ +import cbt._ + +class Build(val context: Context) extends BaseBuild with IntelliJ { + override def name = "idea-plugin-example" +} diff --git a/examples/intellij/src/Main.scala b/examples/intellij/src/Main.scala new file mode 100644 index 0000000..407a577 --- /dev/null +++ b/examples/intellij/src/Main.scala @@ -0,0 +1,3 @@ +object Main extends App { + println("This is an example Application for illustrating CBT IntelliJ project generator") +} diff --git a/plugins/idea_plugin/IdeaPlugin.scala b/plugins/idea_plugin/IdeaPlugin.scala deleted file mode 100644 index 97e53b1..0000000 --- a/plugins/idea_plugin/IdeaPlugin.scala +++ /dev/null @@ -1,85 +0,0 @@ -package idea_plugin - -import java.io.{File, FileWriter} - -import cbt.{BaseBuild, ExitCode} - -trait IdeaPlugin extends BaseBuild { - - import IdeaPlugin._ - - // @TODO add only the top level dependencies - // @TODO return exit code dynamically - def generateIdeaProject: ExitCode = { - - val dependencyEntry: (String) => String = (url: String) => - - - - - - - - .toString() - - val moduleDir = projectDirectory.getPath - val projectDependencies: List[String] = for { - depJarFile <- this.dependencies - .flatMap(dep => dep.dependenciesArray().toList) - .flatMap(x => x.exportedClasspathArray().toList) - .toList - depIdeaOrderEntry = dependencyEntry( - s"jar://$moduleDir/../cbt/${depJarFile.getPath.split("/cbt")(1)}!/") - } yield depIdeaOrderEntry - - val imlFile = new File(projectDirectory.getPath + s"/$name.iml") - if (!imlFile.exists()) { - imlFile.createNewFile() - } - val fw = new FileWriter(imlFile.getPath, false) - fw.write(templateWithCBTSources(projectDependencies.mkString("\n"), moduleDir)) - fw.close() - ExitCode.Success - } - -} - -private[idea_plugin] object IdeaPlugin { - - // @TODO inject from the build.scala - // @TODO infer scala version from project - // path of cbt relative to module dir - - private val templateWithCBTSources: (String, String) => String = (dependencies: String, - moduleRootDir: String) => - """ - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | | - | """.stripMargin + dependencies + - """ - |""".stripMargin -} diff --git a/plugins/idea_plugin/build/build.scala b/plugins/idea_plugin/build/build.scala deleted file mode 100644 index 991e07e..0000000 --- a/plugins/idea_plugin/build/build.scala +++ /dev/null @@ -1,9 +0,0 @@ -import cbt._ - -class Build(val context: Context) extends Plugin { - override def dependencies = - super.dependencies ++ - Resolver(mavenCentral).bind( - ScalaDependency("org.scala-lang.modules", "scala-xml", "1.0.5") - ) -} diff --git a/stage2/plugins.scala b/stage2/plugins.scala index c48a31b..ea1aa74 100644 --- a/stage2/plugins.scala +++ b/stage2/plugins.scala @@ -7,7 +7,6 @@ class plugins( context: Context, scalaVersion: String ) { ), None ) - final lazy val ideaPlugin = plugin( "idea_plugin" ) final lazy val googleJavaFormat = plugin( "google-java-format" ) final lazy val proguard = plugin( "proguard" ) final lazy val sbtLayout = plugin( "sbt_layout" ) diff --git a/stage2/plugins/IntelliJ.scala b/stage2/plugins/IntelliJ.scala new file mode 100644 index 0000000..c41ea51 --- /dev/null +++ b/stage2/plugins/IntelliJ.scala @@ -0,0 +1,70 @@ +package cbt + +import java.io.{ File, FileWriter } + +trait IntelliJ extends BaseBuild { + private // this plugin is not functional right now, needs fixing + def intellij = { + lib.writeIfChanged( + projectDirectory / name ++ ".iml", + IntelliJ.iml( + scalaVersion, + transitiveDependencies + ) + ) + } +} + +// TODO: +// - projects, their builds, their build builds, etc should be represented individually +// ideally with cbt's main sources being editable, but not the sources of other cbt versions +object IntelliJ { + def iml( + scalaVersion: String, + transitiveDependencies: Seq[Dependency] + ): String = { + """""" ++ "\n" ++ +// format: OFF + + + + + + + + + + + + + + + + + + + + + + + + + + + { + transitiveDependencies.flatMap( _.exportedClasspath.files ).map( _.string ).map { cp => + + + + + + + + + + } + } + +.buildString( stripComments = false ) // format: ON + } +} -- cgit v1.2.3