New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unify sbt shell and build.sbt syntax #1812

Closed
eed3si9n opened this Issue Jan 18, 2015 · 6 comments

Comments

Projects
None yet
3 participants
@eed3si9n
Member

eed3si9n commented Jan 18, 2015

The sbt 0.13 shell syntax

{<build-uri>}<project-id>/config:intask::key

and sbt 0.13 build.sbt DSL syntax discrepancy makes learning curve steep. There has been several proposal of unifying the two.

idea 1: improve both shell notation and build.sbt syntax so they can be unified

> Test/compile
> Test/run foo
> root/IntegrationTest/testOnly x.y
> projectA/IntegrationTest/compile

older idea: allow build.sbt expression in sbt shell

Things to consider are scoping and passing in input task arguments.

> compile in Test
> (run in Test).toTask(" foo")

This is not going to be usable.

appendix: making Scala REPL the sbt shell

consoleProject is a useful experiment on what it's like to be to integrate REPL and sbt shell (idea 0). We will have to provide all the feature we currently provide via commands:

  • Multi-project support. project foo is a command.
  • Cross build support. ++2.11.5
  • Reload support.
  • Delegation of tasks compile should work, not compile in Compile.
  • .eval should be called automatically.
  • Continuous execution support. ~compile
  • last
  • ;foo;bar;
@jsuereth

This comment has been minimized.

Show comment
Hide comment
@jsuereth

jsuereth Jan 19, 2015

Member

I really like this idea. Does this mean the Command engine disappears? cosnoleProject is very much not compatible with it.

Member

jsuereth commented Jan 19, 2015

I really like this idea. Does this mean the Command engine disappears? cosnoleProject is very much not compatible with it.

@jsuereth

This comment has been minimized.

Show comment
Hide comment
@jsuereth

jsuereth Jan 19, 2015

Member

i.e. I think you need to add notes of <command> working and <last> etc.

Member

jsuereth commented Jan 19, 2015

i.e. I think you need to add notes of <command> working and <last> etc.

@eed3si9n

This comment has been minimized.

Show comment
Hide comment
@eed3si9n

eed3si9n Jan 19, 2015

Member

I don't know if we can get there in time. All I'm saying is that if people want to experiment with unified syntax, we already have consoleProject.

Member

eed3si9n commented Jan 19, 2015

I don't know if we can get there in time. All I'm saying is that if people want to experiment with unified syntax, we already have consoleProject.

@eed3si9n

This comment has been minimized.

Show comment
Hide comment
@eed3si9n

eed3si9n Nov 1, 2016

Member

The other direction @lihaoyi suggested is implementing REPL friendly Scala notation. I just tried implementing : method:

scala> class Configuration  { def `:`(task: Any): Unit = () }
defined class Configuration

scala> val Test = new Configuration
Test: Configuration = Configuration@be633d8

scala> object compile
defined object compile

scala> Test:compile
<console>:14: error: not found: type compile
       Test:compile
            ^

so something other than :.

Member

eed3si9n commented Nov 1, 2016

The other direction @lihaoyi suggested is implementing REPL friendly Scala notation. I just tried implementing : method:

scala> class Configuration  { def `:`(task: Any): Unit = () }
defined class Configuration

scala> val Test = new Configuration
Test: Configuration = Configuration@be633d8

scala> object compile
defined object compile

scala> Test:compile
<console>:14: error: not found: type compile
       Test:compile
            ^

so something other than :.

@dwijnand

This comment has been minimized.

Show comment
Hide comment
@dwijnand

dwijnand Nov 1, 2016

Member

I don't think we can simultaneously change both syntaxes..

Member

dwijnand commented Nov 1, 2016

I don't think we can simultaneously change both syntaxes..

@eed3si9n

This comment has been minimized.

Show comment
Hide comment
@eed3si9n

eed3si9n Nov 1, 2016

Member

We can use slash everywhere:

scala> object Task { def value = ()  }
defined object Task

scala> class Configuration  { def /(task: Any) = Task }
defined class Configuration

scala> val Test = new Configuration
Test: Configuration = Configuration@10f54b9f

scala> val compile = Task
compile: Task.type = Task$@258382e8

scala> compile.value

scala> Test/compile
res1: Task.type = Task$@258382e8

scala> val x = (Test / compile).value
x: Unit = ()

This character is relatively easy to type, and the meaning is close enough.
We might need to introduce the notion of top-level / and current ./ to disambiguate between a configuration named IntegrationTest and a subproject that could be named IntegrationTest.

If we can implement this on top of the existing shell, we could even experiment during 0.13.x.

Member

eed3si9n commented Nov 1, 2016

We can use slash everywhere:

scala> object Task { def value = ()  }
defined object Task

scala> class Configuration  { def /(task: Any) = Task }
defined class Configuration

scala> val Test = new Configuration
Test: Configuration = Configuration@10f54b9f

scala> val compile = Task
compile: Task.type = Task$@258382e8

scala> compile.value

scala> Test/compile
res1: Task.type = Task$@258382e8

scala> val x = (Test / compile).value
x: Unit = ()

This character is relatively easy to type, and the meaning is close enough.
We might need to introduce the notion of top-level / and current ./ to disambiguate between a configuration named IntegrationTest and a subproject that could be named IntegrationTest.

If we can implement this on top of the existing shell, we could even experiment during 0.13.x.

@eed3si9n eed3si9n added this to Todo in Hackathon ideas Mar 2, 2017

@eed3si9n eed3si9n added the help wanted label Mar 2, 2017

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Jun 7, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `ScopeSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

### Examples

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

@eed3si9n eed3si9n self-assigned this Jun 7, 2017

@eed3si9n eed3si9n added the in progress label Jun 7, 2017

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Jun 8, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `ScopeSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

### Examples

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Jun 11, 2017

Unify sbt shell towards build.sbt DSL syntax
Fixes sbt#1812

sbt shell now accepts the build.sbt DSL notation for the scoped keys.
Instead of the current `<project-id>/config:intask::key`, the shell adds
`key in (<project-id>, <config-ident>, intask)` where `<config-ident>` is the Scala identifier notation for the configurations like `Compile` and `Test`. (The old shell syntax will continue to function)

### Examples

These examples will work both from the shell and in build.sbt.

    cancelable in Global
    scalaVersion.in(ThisBuild)
    test in Test
    scalacOptions in (root, Compile, compile)
    name in (Zero, Compile)
    (run in Runtime)

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info]  Compiles sources.
    [info] Provided by:
    [info]  compile in (root, Compile)
    [info] Defined at:
    [info]  (sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info]  manipulateBytecode in (root, Compile)
    [info]  incCompileSetup in (root, Compile)

If for some reason, you have to pass `in Runtime` or other valid expression to an input task or a command, you can disambiguate using parenthesis:

    > run in Runtime Universe
    [info] Running example.Hello Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:07 PM
    > (run) in Runtime Universe
    [info] Running example.Hello in Runtime Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:09 PM

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Jun 11, 2017

Unify sbt shell towards build.sbt DSL syntax
Fixes sbt#1812

sbt shell now accepts the build.sbt DSL notation for the scoped keys.
Instead of the current `<project-id>/config:intask::key`, the shell adds
`key in (<project-id>, <config-ident>, intask)` where `<config-ident>` is the Scala identifier notation for the configurations like `Compile` and `Test`. (The old shell syntax will continue to function)

### Examples

These examples will work both from the shell and in build.sbt.

    cancelable in Global
    scalaVersion.in(ThisBuild)
    test in Test
    scalacOptions in (root, Compile, compile)
    name in (Zero, Compile)
    (run in Runtime)

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info]  Compiles sources.
    [info] Provided by:
    [info]  compile in (root, Compile)
    [info] Defined at:
    [info]  (sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info]  manipulateBytecode in (root, Compile)
    [info]  incCompileSetup in (root, Compile)

If for some reason, you have to pass `in Runtime` or other valid expression to an input task or a command, you can disambiguate using parenthesis:

    > run in Runtime Universe
    [info] Running example.Hello Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:07 PM
    > (run) in Runtime Universe
    [info] Running example.Hello in Runtime Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:09 PM

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Jun 12, 2017

Unify sbt shell towards build.sbt DSL syntax
Fixes sbt#1812

sbt shell now accepts the build.sbt DSL notation for the scoped keys.
Instead of the current `<project-id>/config:intask::key`, the shell adds
`key in (<project-id>, <config-ident>, intask)` where `<config-ident>` is the Scala identifier notation for the configurations like `Compile` and `Test`. (The old shell syntax will continue to function)

### Examples

These examples will work both from the shell and in build.sbt.

    cancelable in Global
    scalaVersion.in(ThisBuild)
    test in Test
    scalacOptions in (root, Compile, compile)
    name in (Zero, Compile)
    (run in Runtime)

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info]  Compiles sources.
    [info] Provided by:
    [info]  compile in (root, Compile)
    [info] Defined at:
    [info]  (sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info]  manipulateBytecode in (root, Compile)
    [info]  incCompileSetup in (root, Compile)

If for some reason, you have to pass `in Runtime` or other valid expression to an input task or a command, you can disambiguate using parenthesis:

    > run in Runtime Universe
    [info] Running example.Hello Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:07 PM
    > (run) in Runtime Universe
    [info] Running example.Hello in Runtime Universe
    [success] Total time: 0 s, completed Jun 11, 2017 6:36:09 PM

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Aug 14, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `ScopeSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Sep 25, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `ScopeSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Sep 27, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `SlashSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Sep 27, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `SlashSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Sep 27, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `SlashSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

eed3si9n added a commit to eed3si9n/sbt that referenced this issue Sep 28, 2017

Unified slash syntax
Fixes sbt#1812

This adds unified slash syntax for both sbt shell and the build.sbt DSL.
Instead of the current `<project-id>/config:intask::key`,
this adds `<project-id>/<config-ident>/intask/key` where <config-ident> is the Scala identifier notation for the configurations like `Compile` and `Test`.

This also adds a series of implicits called `SlashSyntax` that adds `/` operators to project refererences, configuration, and keys such that the same syntax works in build.sbt.

These examples work for both from the shell and in build.sbt.

    Global / cancelable
    ThisBuild / scalaVersion
    Test / test
    root / Compile / compile / scalacOptions
    ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/scalacOptions
    Zero / Zero / name

The inspect command now outputs something that can be copy-pasted:

    > inspect compile
    [info] Task: sbt.inc.Analysis
    [info] Description:
    [info] 	Compiles sources.
    [info] Provided by:
    [info] 	ProjectRef(uri("file:/xxx/helloworld/"),"root")/Compile/compile
    [info] Defined at:
    [info] 	(sbt.Defaults) Defaults.scala:326
    [info] Dependencies:
    [info] 	Compile/manipulateBytecode
    [info] 	Compile/incCompileSetup
    [info] Reverse dependencies:
    [info] 	Compile/printWarnings
    [info] 	Compile/products
    [info] 	Compile/discoveredSbtPlugins
    [info] 	Compile/discoveredMainClasses
    [info] Delegates:
    [info] 	Compile/compile
    [info] 	compile
    [info] 	ThisBuild/Compile/compile
    [info] 	ThisBuild/compile
    [info] 	Zero/Compile/compile
    [info] 	Global/compile
    [info] Related:
    [info] 	Test/compile

@dwijnand dwijnand removed this from Todo in Hackathon ideas Jun 11, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment