Skip to content
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

Use JLine 3 in the REPL #4680

Merged
merged 18 commits into from
Jun 29, 2018
Merged

Use JLine 3 in the REPL #4680

merged 18 commits into from
Jun 29, 2018

Conversation

allanrenucci
Copy link
Contributor

No description provided.


context match {
case ParseContext.ACCEPT_LINE =>
// TODO: take into account cursor position
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lihaoyi In Ammonite, when do you consider a line to be complete or not?

I am thinking of doing something like: A line is considered incomplete

  1. if the cursor position is before the last non-whitespace character
  2. if the cursor position is before the last closing parenthese

Either (1) or (2)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@allanrenucci not sure what context you are asking this in, but ENTER means "submit" instead of "add a newline to this cell" if parsing the cell results in a failure whose parse-index is right at the end of the cell's text (or the cursor is not on the last line of the cell)

Copy link
Contributor Author

@allanrenucci allanrenucci Jun 18, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It makes sense. Thanks!

@allanrenucci
Copy link
Contributor Author

@sjrd Can you try it out on Windows? You can start the REPL from sbt by running the repl command

@Glavo
Copy link
Contributor

Glavo commented Jun 19, 2018

I got an exception while trying to run on windows:

sbt:dotty> repl
[info] Updating dotty-interfaces...
[info] Updating dotty-library...
[info] Done updating.
[info] Compiling 7 Java sources to C:\Users\Glavo\Projects\Dotty\dotty-jline3\interfaces\target\classes ...
[info] Done updating.
[info] Updating dotty-compiler...
[info] Done compiling.
[info] Packaging C:\Users\Glavo\Projects\Dotty\dotty-jline3\interfaces\target\dotty-interfaces-0.9.0-bin-SNAPSHOT.jar ...
[info] Done packaging.
[info] Done updating.
[info] Compiling 40 Scala sources and 136 Java sources to C:\Users\Glavo\Projects\Dotty\dotty-jline3\library\target\scala-2.12\classes ...
[info] Done compiling.
[info] Packaging C:\Users\Glavo\Projects\Dotty\dotty-jline3\library\target\scala-2.12\dotty-library_2.12-0.9.0-bin-SNAPSHOT-nonbootstrapped.jar ...
[info] Done packaging.
[info] Compiling 368 Scala sources and 3 Java sources to C:\Users\Glavo\Projects\Dotty\dotty-jline3\compiler\target\scala-2.12\classes ...
[info] Done compiling.
[warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list
[error] java.lang.RuntimeException: Nonzero exit code: 127
[error]         at scala.sys.package$.error(package.scala:27)
[error]         at scala.sys.process.BasicIO$Streamed$.next$1(BasicIO.scala:49)
[error]         at scala.sys.process.BasicIO$Streamed$.$anonfun$apply$4(BasicIO.scala:52)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:146)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:109)
[error]         at VersionUtil$.executeScript(VersionUtil.scala:9)
[error]         at VersionUtil$.gitHash(VersionUtil.scala:16)
[error]         at Build$.$anonfun$commonDottyCompilerSettings$17(Build.scala:544)
[error]         at sbt.std.Transform$$anon$3.$anonfun$apply$2(System.scala:46)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:272)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] java.lang.RuntimeException: Nonzero exit code: 127
[error]         at scala.sys.package$.error(package.scala:27)
[error]         at scala.sys.process.BasicIO$Streamed$.next$1(BasicIO.scala:49)
[error]         at scala.sys.process.BasicIO$Streamed$.$anonfun$apply$4(BasicIO.scala:52)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:146)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:109)
[error]         at VersionUtil$.executeScript(VersionUtil.scala:9)
[error]         at VersionUtil$.gitHash(VersionUtil.scala:16)
[error]         at Build$.$anonfun$commonDottyCompilerSettings$7(Build.scala:503)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:272)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
sbt:dotty> [error] (dotty-compiler / packageOptions) Nonzero exit code: 127
[error] (dotty-compiler / Compile / managedResources) Nonzero exit code: 127
[error] Total time: 36 s, completed 2018-6-19 12:08:40
show discoveredMainClasses
[info] Cleaning the dotty-sbt-bridge cache
[info] Updating dotty-sbt-bridge...
[info] Updating ...
[info] Updating dotty-doc...
[info] Done updating.
[info] Done updating.
[info] Done updating.
[error] java.lang.RuntimeException: Nonzero exit code: 127
[error]         at scala.sys.package$.error(package.scala:27)
[error]         at scala.sys.process.BasicIO$Streamed$.next$1(BasicIO.scala:49)
[error]         at scala.sys.process.BasicIO$Streamed$.$anonfun$apply$4(BasicIO.scala:52)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:146)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:109)
[error]         at VersionUtil$.executeScript(VersionUtil.scala:9)
[error]         at VersionUtil$.gitHash(VersionUtil.scala:16)
[error]         at Build$.$anonfun$commonDottyCompilerSettings$7(Build.scala:503)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:272)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (dotty-compiler / Compile / managedResources) Nonzero exit code: 127
[error] Total time: 3 s, completed 2018-6-19 12:09:49
sbt:dotty> run  dotty.tools.repl.Main
[warn] Multiple main classes detected.  Run 'show discoveredMainClasses' to see the list
[error] java.lang.RuntimeException: Nonzero exit code: 127
[error]         at scala.sys.package$.error(package.scala:27)
[error]         at scala.sys.process.BasicIO$Streamed$.next$1(BasicIO.scala:49)
[error]         at scala.sys.process.BasicIO$Streamed$.$anonfun$apply$4(BasicIO.scala:52)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:146)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:109)
[error]         at VersionUtil$.executeScript(VersionUtil.scala:9)
[error]         at VersionUtil$.gitHash(VersionUtil.scala:16)
[error]         at Build$.$anonfun$commonDottyCompilerSettings$17(Build.scala:544)
[error]         at sbt.std.Transform$$anon$3.$anonfun$apply$2(System.scala:46)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:272)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
sbt:dotty> [error] java.lang.RuntimeException: Nonzero exit code: 127
[error]         at scala.sys.package$.error(package.scala:27)
[error]         at scala.sys.process.BasicIO$Streamed$.next$1(BasicIO.scala:49)
[error]         at scala.sys.process.BasicIO$Streamed$.$anonfun$apply$4(BasicIO.scala:52)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:146)
[error]         at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.lineStream(ProcessBuilderImpl.scala:109)
[error]         at VersionUtil$.executeScript(VersionUtil.scala:9)
[error]         at VersionUtil$.gitHash(VersionUtil.scala:16)
[error]         at Build$.$anonfun$commonDottyCompilerSettings$7(Build.scala:503)
[error]         at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]         at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error]         at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]         at sbt.Execute.$anonfun$submit$2(Execute.scala:263)
[error]         at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]         at sbt.Execute.work(Execute.scala:272)
[error]         at sbt.Execute.$anonfun$submit$1(Execute.scala:263)
[error]         at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]         at sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (dotty-compiler / packageOptions) Nonzero exit code: 127
[error] (dotty-compiler / Compile / managedResources) Nonzero exit code: 127
[error] Total time: 1 s, completed 2018-6-19 12:22:19

@smarter
Copy link
Member

smarter commented Jun 19, 2018

@allanrenucci Note that we have a Windows VM at LAMP you can use to experiment, ask Fabien to get access.

@allanrenucci
Copy link
Contributor Author

@Glavo The last commit should fix the issue you encountered

@Glavo
Copy link
Contributor

Glavo commented Jun 19, 2018

A NullPointerException was thrown when I pressed Ctrl+C in cmd:
image

@Glavo
Copy link
Contributor

Glavo commented Jun 19, 2018

In addition, autocomplete does not work under Windows.

@Glavo
Copy link
Contributor

Glavo commented Jun 19, 2018

REPL now does not highlight the text entered:
image
And there are problems with echoing on multi-line input.This is what I typed:

{<enter>
  println("Hello world!")<enter>
}<enter>

The screen shows:
image

@allanrenucci
Copy link
Contributor Author

On Windows, the REPL doesn't work from the Dotty build. JLine is not able to create a terminal in the forked JVM created by sbt.

@Glavo If you want to try out the repl on windows, here is what you can do:

  • run sbt dotty-bootstrapped/publishLocal from within the dotty repository
  • create a sbt dotty project. Here is an example
  • set the scalaVersion in the build.sbt to "0.9.0-bin-SNAPSHOT"
  • run sbt console

Also Ctrl+C is currently not supported

@Glavo
Copy link
Contributor

Glavo commented Jun 23, 2018

When I tried to do this, I got an exception:

sbt:dotty-simple> console
[info] Updating ...
[warn] Choosing local for ch.epfl.lamp#scala-library;0.9.0-bin-SNAPSHOT
[warn] Choosing local for ch.epfl.lamp#dotty-library_0.9;0.9.0-bin-SNAPSHOT
[warn] circular dependency found: ch.epfl.lamp#scala-library;0.9.0-bin-SNAPSHOT->ch.epfl.lamp#dotty-library_0.9;0.9.0-bin-SNAPSHOT->...
[warn] circular dependency found: ch.epfl.lamp#dotty-library_0.9;0.9.0-bin-SNAPSHOT->ch.epfl.lamp#scala-library;0.9.0-bin-SNAPSHOT->...
[warn] Choosing local for ch.epfl.lamp#dotty_0.9;0.9.0-bin-SNAPSHOT
[warn] Choosing local for ch.epfl.lamp#dotty-compiler_0.9;0.9.0-bin-SNAPSHOT
[warn] Choosing local for ch.epfl.lamp#dotty-interfaces;0.9.0-bin-SNAPSHOT
[info] Done updating.
[info] Compiling 1 Scala source to C:\Users\Glavo\IdeaProjects\DottyTest\DottyTest\target\scala-0.9\classes ...
[info] Attempting to fetch ch.epfl.lamp:dotty-sbt-bridge:0.9.0-bin-SNAPSHOT.
[warn] Choosing local for ch.epfl.lamp#dotty-sbt-bridge;0.9.0-bin-SNAPSHOT
[error] ch.epfl.lamp#dotty-sbt-bridge;0.9.0-bin-SNAPSHOT!dotty-sbt-bridge.jar(src) origin location must be absolute: /home/glavo/dotty/sbt-bridge/target/dotty-sbt-bridge-0.9.0-bin-SNAPSHOT-nonbootstrapped-sources.jar
[error] ## Exception when compiling 1 sources to C:\Users\Glavo\IdeaProjects\DottyTest\DottyTest\target\scala-0.9\classes
[error] ch.epfl.lamp#dotty-sbt-bridge;0.9.0-bin-SNAPSHOT!dotty-sbt-bridge.jar(src) origin location must be absolute: /home/glavo/dotty/sbt-bridge/target/dotty-sbt-bridge-0.9.0-bin-SNAPSHOT-nonbootstrapped-sources.jar
[error] org.apache.ivy.util.Checks.checkAbsolute(Checks.java:57)
[error] org.apache.ivy.core.cache.DefaultRepositoryCacheManager.getArchiveFileInCache(DefaultRepositoryCacheManager.java:387)
[error] org.apache.ivy.core.cache.DefaultRepositoryCacheManager.download(DefaultRepositoryCacheManager.java:851)
[error] org.apache.ivy.plugins.resolver.BasicResolver.download(BasicResolver.java:835)
[error] org.apache.ivy.plugins.resolver.RepositoryResolver.download(RepositoryResolver.java:282)
[error] sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.downloadNodeArtifacts(ParallelResolveEngine.scala:81)
[error] sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.$anonfun$downloadArtifacts$2(ParallelResolveEngine.scala:43)
[error] scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
[error] scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2$$anon$5.block(ExecutionContextImpl.scala:76)
[error] java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3313)
[error] scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2.blockOn(ExecutionContextImpl.scala:71)
[error] scala.concurrent.package$.blocking(package.scala:142)
[error] sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.$anonfun$downloadArtifacts$1(ParallelResolveEngine.scala:43)
[error] scala.collection.parallel.mutable.ParArray$ParArrayIterator.flatmap2combiner(ParArray.scala:416)
[error] scala.collection.parallel.ParIterableLike$FlatMap.leaf(ParIterableLike.scala:1070)
[error] scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
[error] scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
[error] scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
[error] scala.collection.parallel.ParIterableLike$FlatMap.tryLeaf(ParIterableLike.scala:1066)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal(Tasks.scala:156)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal$(Tasks.scala:153)
[error] scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:440)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:146)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
[error] scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
[error] java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
[error] java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[error] java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:389)
[error] java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
[error] scala.collection.parallel.ForkJoinTasks$WrappedTask.sync(Tasks.scala:375)
[error] scala.collection.parallel.ForkJoinTasks$WrappedTask.sync$(Tasks.scala:375)
[error] scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.sync(Tasks.scala:440)
[error] scala.collection.parallel.ForkJoinTasks.executeAndWaitResult(Tasks.scala:423)
[error] scala.collection.parallel.ForkJoinTasks.executeAndWaitResult$(Tasks.scala:414)
[error] scala.collection.parallel.ForkJoinTaskSupport.executeAndWaitResult(TaskSupport.scala:56)
[error] scala.collection.parallel.ExecutionContextTasks.executeAndWaitResult(Tasks.scala:555)
[error] scala.collection.parallel.ExecutionContextTasks.executeAndWaitResult$(Tasks.scala:555)
[error] scala.collection.parallel.ExecutionContextTaskSupport.executeAndWaitResult(TaskSupport.scala:80)
[error] scala.collection.parallel.ParIterableLike$ResultMapping.leaf(ParIterableLike.scala:956)
[error] scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
[error] scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
[error] scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
[error] scala.collection.parallel.ParIterableLike$ResultMapping.tryLeaf(ParIterableLike.scala:951)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149)
[error] scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
[error] scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
[error] java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
[error] java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[error] java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
[error] java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
[error] java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
[error]
sbt:dotty-simple> [error] java.lang.IllegalArgumentException: ch.epfl.lamp#dotty-sbt-bridge;0.9.0-bin-SNAPSHOT!dotty-sbt-bridge.jar(src) origin location must be absolute: /home/glavo/dotty/sbt-bridge/target/dotty-sbt-bridge-0.9.0-bin-SNAPSHOT-nonbootstrapped-sources.jar
[error]         at org.apache.ivy.util.Checks.checkAbsolute(Checks.java:57)
[error]         at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.getArchiveFileInCache(DefaultRepositoryCacheManager.java:387)
[error]         at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.download(DefaultRepositoryCacheManager.java:851)
[error]         at org.apache.ivy.plugins.resolver.BasicResolver.download(BasicResolver.java:835)
[error]         at org.apache.ivy.plugins.resolver.RepositoryResolver.download(RepositoryResolver.java:282)
[error]         at sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.downloadNodeArtifacts(ParallelResolveEngine.scala:81)
[error]         at sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.$anonfun$downloadArtifacts$2(ParallelResolveEngine.scala:43)
[error]         at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
[error]         at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2$$anon$5.block(ExecutionContextImpl.scala:76)
[error]         at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3313)
[error]         at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$2.blockOn(ExecutionContextImpl.scala:71)
[error]         at scala.concurrent.package$.blocking(package.scala:142)
[error]         at sbt.internal.librarymanagement.ivyint.ParallelResolveEngine.$anonfun$downloadArtifacts$1(ParallelResolveEngine.scala:43)
[error]         at scala.collection.parallel.mutable.ParArray$ParArrayIterator.flatmap2combiner(ParArray.scala:416)
[error]         at scala.collection.parallel.ParIterableLike$FlatMap.leaf(ParIterableLike.scala:1070)
[error]         at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]         at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
[error]         at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
[error]         at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
[error]         at scala.collection.parallel.ParIterableLike$FlatMap.tryLeaf(ParIterableLike.scala:1066)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal(Tasks.scala:156)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.internal$(Tasks.scala:153)
[error]         at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.internal(Tasks.scala:440)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:146)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
[error]         at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
[error]         at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
[error]         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[error]         at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:389)
[error]         at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
[error]         at scala.collection.parallel.ForkJoinTasks$WrappedTask.sync(Tasks.scala:375)
[error]         at scala.collection.parallel.ForkJoinTasks$WrappedTask.sync$(Tasks.scala:375)
[error]         at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.sync(Tasks.scala:440)
[error]         at scala.collection.parallel.ForkJoinTasks.executeAndWaitResult(Tasks.scala:423)
[error]         at scala.collection.parallel.ForkJoinTasks.executeAndWaitResult$(Tasks.scala:414)
[error]         at scala.collection.parallel.ForkJoinTaskSupport.executeAndWaitResult(TaskSupport.scala:56)
[error]         at scala.collection.parallel.ExecutionContextTasks.executeAndWaitResult(Tasks.scala:555)
[error]         at scala.collection.parallel.ExecutionContextTasks.executeAndWaitResult$(Tasks.scala:555)
[error]         at scala.collection.parallel.ExecutionContextTaskSupport.executeAndWaitResult(TaskSupport.scala:80)
[error]         at scala.collection.parallel.ParIterableLike$ResultMapping.leaf(ParIterableLike.scala:956)
[error]         at scala.collection.parallel.Task.$anonfun$tryLeaf$1(Tasks.scala:49)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error]         at scala.util.control.Breaks$$anon$1.catchBreak(Breaks.scala:63)
[error]         at scala.collection.parallel.Task.tryLeaf(Tasks.scala:52)
[error]         at scala.collection.parallel.Task.tryLeaf$(Tasks.scala:46)
[error]         at scala.collection.parallel.ParIterableLike$ResultMapping.tryLeaf(ParIterableLike.scala:951)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute(Tasks.scala:149)
[error]         at scala.collection.parallel.AdaptiveWorkStealingTasks$WrappedTask.compute$(Tasks.scala:145)
[error]         at scala.collection.parallel.AdaptiveWorkStealingForkJoinTasks$WrappedTask.compute(Tasks.scala:440)
[error]         at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
[error]         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[error]         at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
[error]         at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
[error]         at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
[error] (Compile / compileIncremental) java.lang.IllegalArgumentException: ch.epfl.lamp#dotty-sbt-bridge;0.9.0-bin-SNAPSHOT!dotty-sbt-bridge.jar(src) origin location must be absolute: /home/glavo/dotty/sbt-bridge/target/dotty-sbt-bridge-0.9.0-bin-SNAPSHOT-nonbootstrapped-sources.jar
[error] Total time: 13 s, completed 2018-6-23 19:04:06

@Glavo
Copy link
Contributor

Glavo commented Jun 23, 2018

It looks like our dotr script needs to be modified:

glavo@glavo:~/Dotty/dotty-jline3$ ./bin/dotr
Starting dotty REPL...
Exception in thread "main" java.lang.NoClassDefFoundError: org/jline/terminal/TerminalBuilder
	at dotty.tools.repl.JLineTerminal.<init>(JLineTerminal.scala:21)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:111)
	at dotty.tools.repl.Main$.main(Main.scala:6)
	at dotty.tools.repl.Main.main(Main.scala)

and we need to add the corresponding bat script (#1207)

@Glavo
Copy link
Contributor

Glavo commented Jun 23, 2018

image
image
Is the threshold for this prompt too small? I need to type y quite often to start the completion.

Copy link
Member

@smarter smarter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but we should follow up on the issue with Windows and the Dotty build.

@@ -23,6 +23,12 @@ object Reporter {
simple.report(m)
}
}

/** A reporter that ignores reports */
object NoReporter extends Reporter {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe call it SilentReporter ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Scalac has something similar called NoReporter. It is more that silent, it doesn't even count errors

private val prompt = blue("scala> ")
private val newLinePrompt = blue(" | ")

/** Blockingly read line from `System.in`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we take an InputStream instead of hardcoding System.in ? For tests we shouldn't have to use System.in.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JlineLine doesn't seem to let you configure the input stream and we should probably not modify System.in. We don't do end to end testing for the REPL, the tests don't rely on JLine

// ENTER means SUBMIT when
// - cursor is at end (discarding whitespaces)
// - and, input line is complete
val cursorIsAtEnd = line.indexWhere(!_.isWhitespace, from = cursor) >= 0
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be called cursorNotAtEnd no? In any case, it's a bit confusing that the comment above describes the conditions for submitting, but the code checks the conditions for not submitting, either the code logic or the comment should be changed.

.variable(LineReader.SECONDARY_PROMPT_PATTERN, "%M")
.option(Option.INSERT_TAB, true) // at the beginning of the line, insert tab instead of completing
.option(Option.AUTO_FRESH_LINE, true) // if not at start of line before prompt, move to new line
.variable(SECONDARY_PROMPT_PATTERN, "%M")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add a comment explaining what this does?

@@ -97,39 +99,44 @@ final class JLineTerminal extends java.io.Closeable {
/* message = */ "",
/* missing = */ newLinePrompt)

case class TokenData(token: Token, start: Int, end: Int)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a documentation comment.

@allanrenucci
Copy link
Contributor Author

LGTM, but we should follow up on the issue with Windows and the Dotty build.

I think it is either a bug in sbt or JLine. It should not affect users, only contributors working on Windows. Since I'm not on Windows, it is a bit cumbersome for me to minimise and report an issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants