diff --git a/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala b/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala index a105a6ef3..67a65e8d9 100644 --- a/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala +++ b/internal/util-complete/src/main/scala/sbt/internal/util/LineReader.scala @@ -107,7 +107,12 @@ object LineReader { new LineReader { override def readLine(prompt: String, mask: Option[Char]): Option[String] = { val term = JLine3(terminal) - val reader = LineReaderBuilder.builder().terminal(term).completer(completer(parser)).build() + val reader = LineReaderBuilder + .builder() + .terminal(term) + .completer(completer(parser)) + .option(JLineReader.Option.CASE_INSENSITIVE, true) + .build() try { inputrcFileContents.foreach { bytes => InputRC.configure( diff --git a/internal/util-complete/src/test/scala/sbt/internal/util/complete/JLineCompletionSpec.scala b/internal/util-complete/src/test/scala/sbt/internal/util/complete/JLineCompletionSpec.scala new file mode 100644 index 000000000..6cb3a9359 --- /dev/null +++ b/internal/util-complete/src/test/scala/sbt/internal/util/complete/JLineCompletionSpec.scala @@ -0,0 +1,25 @@ +/* + * sbt + * Copyright 2023, Scala center + * Copyright 2011 - 2022, Lightbend, Inc. + * Copyright 2008 - 2010, Mark Harrah + * Licensed under Apache License 2.0 (see LICENSE) + */ + +package sbt.internal.util +package complete + +import org.scalacheck.* +import org.scalacheck.Prop.* + +object JLineCompletionSpec extends Properties("JLineCompletion"): + + property("case-insensitive completions are available at token start") = + val commands = Set("testOnly", "testQuick", "compile", "clean") + val parser = Parser.token(DefaultParsers.ID.examples(commands)) + val completions = Parser.completions(parser, "", 1).get + val names = completions.map(_.append) + (names.contains("testOnly")) :| "testOnly is in initial completions" && + (names.contains("compile")) :| "compile is in initial completions" + +end JLineCompletionSpec