diff --git a/core/src/main/scala/sbt/librarymanagement/ConfigurationExtra.scala b/core/src/main/scala/sbt/librarymanagement/ConfigurationExtra.scala index 00acf7305..b8e339526 100644 --- a/core/src/main/scala/sbt/librarymanagement/ConfigurationExtra.scala +++ b/core/src/main/scala/sbt/librarymanagement/ConfigurationExtra.scala @@ -110,6 +110,9 @@ private[sbt] object ConfigurationMacro { c, methodName => s"""$methodName must be directly assigned to a val, such as `val Tooling = $methodName("tooling")`.""") + if (enclosingValName.head.isLower) { + c.error(c.enclosingPosition, "configuration id must be capitalized") + } val id = c.Expr[String](Literal(Constant(enclosingValName))) reify { Configuration.of(id.splice, name.splice) } } diff --git a/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala b/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala new file mode 100644 index 000000000..85d798a21 --- /dev/null +++ b/core/src/test/scala/sbt/librarymanagement/ConfigMacroTest.scala @@ -0,0 +1,13 @@ +package sbt.librarymanagement + +import sbt.librarymanagement.Configurations.config +import org.scalatest._ + +class ConfigMacroTest extends FunSpec with Matchers { + describe("Configurations.config") { + it("should validate the ID in compile time") { + """val A = config("a")""" should compile + """val b = config("b")""" shouldNot compile + } + } +}