Update to scala 2.13.1 (#481)

This commit is contained in:
Dmitry Bushev 2020-02-13 17:33:39 +03:00 committed by GitHub
parent 9dee1911f8
commit 8d8e95e14a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 358 additions and 364 deletions

View File

@ -17,7 +17,7 @@ trigger:
pr: none pr: none
variables: variables:
graalVersion: 19.3.0 # Please ensure this is in sync with the graalAPIVersion in build.sbt graalVersion: 19.3.1 # Please ensure this is in sync with the graalAPIVersion in build.sbt
graalReleasesUrl: https://github.com/graalvm/graalvm-ce-builds/releases/download graalReleasesUrl: https://github.com/graalvm/graalvm-ce-builds/releases/download
graalDistributionName: graalvm-ce-java8 graalDistributionName: graalvm-ce-java8
sbtVersion: 1.3.3 # Please ensure this is in sync with project/build.properties sbtVersion: 1.3.3 # Please ensure this is in sync with project/build.properties
@ -167,4 +167,4 @@ jobs:
echo "##vso[task.complete result=Failed;]DONE" echo "##vso[task.complete result=Failed;]DONE"
condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues') condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues')
displayName: Fail on Issues displayName: Fail on Issues

228
build.sbt
View File

@ -12,9 +12,9 @@ import sbtcrossproject.CrossPlugin.autoImport.{crossProject, CrossType}
//// Global Configuration //// //// Global Configuration ////
////////////////////////////// //////////////////////////////
val scalacVersion = "2.12.10" val scalacVersion = "2.13.1"
val graalVersion = "19.3.0" val graalVersion = "19.3.1"
val circeVersion = "0.12.3" val circeVersion = "0.13.0"
organization in ThisBuild := "org.enso" organization in ThisBuild := "org.enso"
scalaVersion in ThisBuild := scalacVersion scalaVersion in ThisBuild := scalacVersion
@ -25,8 +25,9 @@ Global / onChangedBuildSource := ReloadOnSourceChanges
////////////////////////// //////////////////////////
javacOptions in ThisBuild ++= Seq( javacOptions in ThisBuild ++= Seq(
"-encoding", // Provide explicit encoding (the next line) "-encoding", // Provide explicit encoding (the next line)
"UTF-8" // Specify character encoding used by Java source files. "UTF-8", // Specify character encoding used by Java source files.
"-deprecation" // Shows a description of each use or override of a deprecated member or class.
) )
scalacOptions in ThisBuild ++= Seq( scalacOptions in ThisBuild ++= Seq(
@ -42,7 +43,6 @@ scalacOptions in ThisBuild ++= Seq(
"-unchecked", // Enable additional warnings where generated code depends on assumptions. "-unchecked", // Enable additional warnings where generated code depends on assumptions.
"-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access. "-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access.
"-Xlint:adapted-args", // Warn if an argument list is modified to match the receiver. "-Xlint:adapted-args", // Warn if an argument list is modified to match the receiver.
"-Xlint:by-name-right-associative", // By-name parameter of right associative operator.
"-Xlint:constant", // Evaluation of a constant arithmetic expression results in an error. "-Xlint:constant", // Evaluation of a constant arithmetic expression results in an error.
"-Xlint:delayedinit-select", // Selecting member of DelayedInit. "-Xlint:delayedinit-select", // Selecting member of DelayedInit.
"-Xlint:doc-detached", // A Scaladoc comment appears to be detached from its element. "-Xlint:doc-detached", // A Scaladoc comment appears to be detached from its element.
@ -56,29 +56,20 @@ scalacOptions in ThisBuild ++= Seq(
"-Xlint:poly-implicit-overload", // Parameterized overloaded implicit methods are not visible as view bounds. "-Xlint:poly-implicit-overload", // Parameterized overloaded implicit methods are not visible as view bounds.
"-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field. "-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field.
"-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component. "-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component.
"-Xlint:unsound-match", // Pattern match may not be typesafe. "-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope.
"-Xmacro-settings:-logging@org.enso", // Disable the debug logging globally. "-Xmacro-settings:-logging@org.enso", // Disable the debug logging globally.
"-Yno-adapted-args", // Do not adapt an argument list (either by inserting () or creating a tuple) to match the receiver.
"-Ypartial-unification", // Enable partial unification in type constructor inference
"-Ywarn-dead-code", // Warn when dead code is identified. "-Ywarn-dead-code", // Warn when dead code is identified.
"-Ywarn-extra-implicit", // Warn when more than one implicit parameter section is defined. "-Ywarn-extra-implicit", // Warn when more than one implicit parameter section is defined.
"-Ywarn-inaccessible", // Warn about inaccessible types in method signatures.
"-Ywarn-infer-any", // Warn when a type argument is inferred to be `Any`.
"-Ywarn-nullary-override", // Warn when non-nullary `def f()' overrides nullary `def f'.
"-Ywarn-nullary-unit", // Warn when nullary methods return Unit.
"-Ywarn-numeric-widen", // Warn when numerics are widened. "-Ywarn-numeric-widen", // Warn when numerics are widened.
"-Ywarn-unused:imports", // Warn if an import selector is not referenced. "-Ywarn-unused:imports", // Warn if an import selector is not referenced.
"-Ywarn-unused:implicits", // Warn if an implicit parameter is unused.
"-Ywarn-unused:locals", // Warn if a local definition is unused. "-Ywarn-unused:locals", // Warn if a local definition is unused.
"-Ywarn-unused:patvars", // Warn if a variable bound in a pattern is unused. "-Ywarn-unused:patvars", // Warn if a variable bound in a pattern is unused.
"-Ywarn-unused:privates", // Warn if a private member is unused. "-Ywarn-unused:privates", // Warn if a private member is unused.
"-Ywarn-unused:params", // Warn if a value parameter is unused.
"-Ywarn-value-discard" // Warn when non-Unit expression results are unused. "-Ywarn-value-discard" // Warn when non-Unit expression results are unused.
) )
// ENABLE THIS IN Scala 2.13.1 (where import annotation.unused is available).
// "-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope.
// "-Ywarn-unused:implicits", // Warn if an implicit parameter is unused.
// "-Ywarn-unused:params", // Warn if a value parameter is unused.
///////////////////////////////// /////////////////////////////////
//// Benchmark Configuration //// //// Benchmark Configuration ////
///////////////////////////////// /////////////////////////////////
@ -119,20 +110,22 @@ lazy val enso = (project in file("."))
//////////////////////////// ////////////////////////////
val monocle = { val monocle = {
val monocleVersion = "1.6.0" val monocleVersion = "2.0.0"
Seq( Seq(
"com.github.julien-truffaut" %% "monocle-core" % monocleVersion, "com.github.julien-truffaut" %% "monocle-core" % monocleVersion,
"com.github.julien-truffaut" %% "monocle-macro" % monocleVersion, "com.github.julien-truffaut" %% "monocle-macro" % monocleVersion,
"com.github.julien-truffaut" %% "monocle-law" % monocleVersion % "test" "com.github.julien-truffaut" %% "monocle-law" % monocleVersion % "test"
) )
} }
val catsVersion = "2.1.0"
val cats = { val cats = {
Seq( Seq(
"org.typelevel" %% "cats-core" % "2.0.0", "org.typelevel" %% "cats-core" % catsVersion,
"org.typelevel" %% "cats-effect" % "2.0.0", "org.typelevel" %% "cats-effect" % catsVersion,
"org.typelevel" %% "cats-free" % "2.0.0", "org.typelevel" %% "cats-free" % catsVersion,
"org.typelevel" %% "cats-macros" % "2.0.0", "org.typelevel" %% "cats-macros" % catsVersion,
"org.typelevel" %% "kittens" % "2.0.0" "org.typelevel" %% "kittens" % catsVersion
) )
} }
@ -148,8 +141,8 @@ def akkaPkg(name: String) = akkaURL %% s"akka-$name" % akkaVersion
def akkaHTTPPkg(name: String) = akkaURL %% s"akka-$name" % akkaHTTPVersion def akkaHTTPPkg(name: String) = akkaURL %% s"akka-$name" % akkaHTTPVersion
val akkaURL = "com.typesafe.akka" val akkaURL = "com.typesafe.akka"
val akkaVersion = "2.5.23" val akkaVersion = "2.6.3"
val akkaHTTPVersion = "10.1.8" val akkaHTTPVersion = "10.1.11"
val akkaActor = akkaPkg("actor") val akkaActor = akkaPkg("actor")
val akkaStream = akkaPkg("stream") val akkaStream = akkaPkg("stream")
val akkaTyped = akkaPkg("actor-typed") val akkaTyped = akkaPkg("actor-typed")
@ -196,12 +189,11 @@ lazy val flexer = crossProject(JVMPlatform, JSPlatform)
.dependsOn(logger) .dependsOn(logger)
.settings( .settings(
version := "0.1", version := "0.1",
scalacOptions -= "-deprecation", // FIXME
resolvers += Resolver.sonatypeRepo("releases"), resolvers += Resolver.sonatypeRepo("releases"),
libraryDependencies ++= scala_compiler ++ Seq( libraryDependencies ++= scala_compiler ++ Seq(
"org.feijoas" %% "mango" % "0.14", "com.google.guava" % "guava" % "28.2-jre",
"org.typelevel" %%% "cats-core" % "2.0.0-RC1", "org.typelevel" %%% "cats-core" % catsVersion,
"org.typelevel" %%% "kittens" % "2.0.0" "org.typelevel" %%% "kittens" % "2.0.0"
) )
) )
.jsSettings(jsSettings) .jsSettings(jsSettings)
@ -220,9 +212,9 @@ lazy val syntax_definition = crossProject(JVMPlatform, JSPlatform)
.dependsOn(logger, flexer) .dependsOn(logger, flexer)
.settings( .settings(
libraryDependencies ++= monocle ++ scala_compiler ++ Seq( libraryDependencies ++= monocle ++ scala_compiler ++ Seq(
"org.typelevel" %%% "cats-core" % "2.0.0-RC1", "org.typelevel" %%% "cats-core" % catsVersion,
"org.typelevel" %%% "kittens" % "2.0.0", "org.typelevel" %%% "kittens" % "2.0.0",
"com.lihaoyi" %%% "scalatags" % "0.7.0", "com.lihaoyi" %%% "scalatags" % "0.8.5",
"io.circe" %%% "circe-core" % circeVersion, "io.circe" %%% "circe-core" % circeVersion,
"io.circe" %%% "circe-generic" % circeVersion, "io.circe" %%% "circe-generic" % circeVersion,
"io.circe" %%% "circe-parser" % circeVersion "io.circe" %%% "circe-parser" % circeVersion
@ -243,8 +235,8 @@ lazy val syntax = crossProject(JVMPlatform, JSPlatform)
version := "0.1", version := "0.1",
logBuffered := false, logBuffered := false,
libraryDependencies ++= Seq( libraryDependencies ++= Seq(
"org.scalatest" %%% "scalatest" % "3.0.5" % Test, "org.scalatest" %%% "scalatest" % "3.1.0" % Test,
"com.lihaoyi" %%% "pprint" % "0.5.3", "com.lihaoyi" %%% "pprint" % "0.5.9",
"io.circe" %%% "circe-core" % circeVersion, "io.circe" %%% "circe-core" % circeVersion,
"io.circe" %%% "circe-generic" % circeVersion, "io.circe" %%% "circe-generic" % circeVersion,
"io.circe" %%% "circe-parser" % circeVersion "io.circe" %%% "circe-parser" % circeVersion
@ -266,7 +258,7 @@ lazy val syntax = crossProject(JVMPlatform, JSPlatform)
inConfig(Benchmark)(Defaults.testSettings), inConfig(Benchmark)(Defaults.testSettings),
unmanagedSourceDirectories in Benchmark += unmanagedSourceDirectories in Benchmark +=
baseDirectory.value.getParentFile / "src/bench/scala", baseDirectory.value.getParentFile / "src/bench/scala",
libraryDependencies += "com.storm-enroute" %% "scalameter" % "0.17" % "bench", libraryDependencies += "com.storm-enroute" %% "scalameter" % "0.19" % "bench",
testFrameworks := List( testFrameworks := List(
new TestFramework("org.scalatest.tools.Framework"), new TestFramework("org.scalatest.tools.Framework"),
new TestFramework("org.scalameter.ScalaMeterFramework") new TestFramework("org.scalameter.ScalaMeterFramework")
@ -292,16 +284,16 @@ lazy val graph = (project in file("common/graph/"))
.configs(Test) .configs(Test)
.settings( .settings(
version := "0.1", version := "0.1",
scalacOptions -= "-deprecation", // FIXME
resolvers ++= Seq( resolvers ++= Seq(
Resolver.sonatypeRepo("releases"), Resolver.sonatypeRepo("releases"),
Resolver.sonatypeRepo("snapshots") Resolver.sonatypeRepo("snapshots")
), ),
scalacOptions += "-Ymacro-annotations",
libraryDependencies ++= scala_compiler ++ Seq( libraryDependencies ++= scala_compiler ++ Seq(
"com.chuusai" %% "shapeless" % "2.3.3", "com.chuusai" %% "shapeless" % "2.3.3",
"io.estatico" %% "newtype" % "0.4.3", "io.estatico" %% "newtype" % "0.4.3",
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test, "org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test, "org.scalacheck" %% "scalacheck" % "1.14.3" % Test,
"com.github.julien-truffaut" %% "monocle-core" % "2.0.0", "com.github.julien-truffaut" %% "monocle-core" % "2.0.0",
"org.apache.commons" % "commons-lang3" % "3.9" "org.apache.commons" % "commons-lang3" % "3.9"
), ),
@ -314,10 +306,7 @@ lazy val graph = (project in file("common/graph/"))
addCompilerPlugin( addCompilerPlugin(
"org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full "org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full
), ),
addCompilerPlugin ( addCompilerPlugin("io.tryp" % "splain" % "0.5.1" cross CrossVersion.patch),
"org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full
),
addCompilerPlugin("io.tryp" % "splain" % "0.5.0" cross CrossVersion.patch),
scalacOptions ++= Seq( scalacOptions ++= Seq(
"-P:splain:infix:true", "-P:splain:infix:true",
"-P:splain:foundreq:true", "-P:splain:foundreq:true",
@ -331,7 +320,7 @@ lazy val pkg = (project in file("common/pkg"))
mainClass in (Compile, run) := Some("org.enso.pkg.Main"), mainClass in (Compile, run) := Some("org.enso.pkg.Main"),
version := "0.1", version := "0.1",
libraryDependencies ++= circe ++ Seq( libraryDependencies ++= circe ++ Seq(
"io.circe" %% "circe-yaml" % "0.10.0", // separate from other circe deps because its independent project with its own versioning "io.circe" %% "circe-yaml" % "0.12.0", // separate from other circe deps because its independent project with its own versioning
"commons-io" % "commons-io" % "2.6" "commons-io" % "commons-io" % "2.6"
) )
) )
@ -344,10 +333,11 @@ lazy val file_manager = (project in file("common/file-manager"))
libraryDependencies ++= akka, libraryDependencies ++= akka,
libraryDependencies += akkaSLF4J, libraryDependencies += akkaSLF4J,
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3", libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3",
libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test, libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.14.0" % Test, libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.14.3" % Test,
libraryDependencies += akkaTestkitTyped, libraryDependencies += akkaTestkitTyped,
libraryDependencies += "commons-io" % "commons-io" % "2.6", libraryDependencies += "commons-io" % "commons-io" % "2.6",
// upgrade blocked by gmethvin/directory-watcher#49
libraryDependencies += "io.methvin" % "directory-watcher" % "0.9.6" libraryDependencies += "io.methvin" % "directory-watcher" % "0.9.6"
) )
@ -357,8 +347,7 @@ lazy val project_manager = (project in file("common/project-manager"))
) )
.settings( .settings(
libraryDependencies ++= akka, libraryDependencies ++= akka,
libraryDependencies ++= circe, libraryDependencies ++= circe
libraryDependencies += "io.spray" %% "spray-json" % "1.3.5"
) )
.dependsOn(pkg) .dependsOn(pkg)
@ -386,21 +375,44 @@ lazy val core_definition = (project in file("engine/core-definition"))
inConfig(Benchmark)(Defaults.testSettings), inConfig(Benchmark)(Defaults.testSettings),
parallelExecution in Test := false, parallelExecution in Test := false,
logBuffered in Test := false, logBuffered in Test := false,
scalacOptions += "-Ymacro-annotations",
libraryDependencies ++= jmh ++ Seq( libraryDependencies ++= jmh ++ Seq(
"com.chuusai" %% "shapeless" % "2.3.3", "com.chuusai" %% "shapeless" % "2.3.3",
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test, "org.scalacheck" %% "scalacheck" % "1.14.3" % Test,
"org.scalactic" %% "scalactic" % "3.0.8" % Test, "org.scalactic" %% "scalactic" % "3.2.0-M2" % Test,
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test, "org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.typelevel" %% "cats-core" % "2.0.0-M4", "org.typelevel" %% "cats-core" % catsVersion,
"com.github.julien-truffaut" %% "monocle-core" % "2.0.0" "com.github.julien-truffaut" %% "monocle-core" % "2.0.0"
), ),
addCompilerPlugin( addCompilerPlugin(
"org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full "org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full
)
)
.dependsOn(graph)
.dependsOn(syntax.jvm)
lazy val polyglot_api = project
.in(file("engine/polyglot-api"))
.settings(
Test / fork := true,
Test / javaOptions ++= Seq(
// Puts the language runtime on the truffle classpath, rather than the
// standard classpath. This is the recommended way of handling this and
// we should strive to use such structure everywhere. See
// https://www.graalvm.org/docs/graalvm-as-a-platform/implement-language#graalvm
s"-Dtruffle.class.path.append=${(LocalProject("runtime") / Compile / fullClasspath).value
.map(_.data)
.mkString(File.pathSeparator)}"
),
libraryDependencies ++= Seq(
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
"org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.3" % Test
), ),
addCompilerPlugin( addCompilerPlugin(
"org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full "org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full
), ),
addCompilerPlugin("io.tryp" % "splain" % "0.5.0" cross CrossVersion.patch), addCompilerPlugin("io.tryp" % "splain" % "0.5.1" cross CrossVersion.patch),
scalacOptions ++= Seq( scalacOptions ++= Seq(
"-P:splain:infix:true", "-P:splain:infix:true",
"-P:splain:foundreq:true", "-P:splain:foundreq:true",
@ -408,8 +420,41 @@ lazy val core_definition = (project in file("engine/core-definition"))
"-P:splain:tree:true" "-P:splain:tree:true"
) )
) )
.dependsOn(graph) .dependsOn(pkg)
.dependsOn(syntax.jvm)
lazy val json_rpc_server = (project in file("engine/json-rpc-server"))
.settings(
libraryDependencies ++= akka ++ circe ++ Seq(
"io.circe" %% "circe-generic-extras" % "0.12.2",
"io.circe" %% "circe-literal" % circeVersion,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test
)
)
lazy val language_server = (project in file("engine/language-server"))
.settings(
libraryDependencies ++= akka ++ Seq(
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % Provided,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.3" % Test
)
)
.dependsOn(polyglot_api)
lazy val gateway = (project in file("engine/gateway"))
.dependsOn(language_server)
.settings(
libraryDependencies ++= akka ++ circe ++ Seq(
"io.circe" %% "circe-generic-extras" % "0.12.2",
"io.circe" %% "circe-literal" % circeVersion,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.3" % Test
)
)
lazy val runtime = (project in file("engine/runtime")) lazy val runtime = (project in file("engine/runtime"))
.configs(Benchmark) .configs(Benchmark)
@ -420,21 +465,22 @@ lazy val runtime = (project in file("engine/runtime"))
inConfig(Benchmark)(Defaults.testSettings), inConfig(Benchmark)(Defaults.testSettings),
parallelExecution in Test := false, parallelExecution in Test := false,
logBuffered in Test := false, logBuffered in Test := false,
scalacOptions += "-Ymacro-annotations",
libraryDependencies ++= jmh ++ Seq( libraryDependencies ++= jmh ++ Seq(
"com.chuusai" %% "shapeless" % "2.3.3", "com.chuusai" %% "shapeless" % "2.3.3",
"org.apache.commons" % "commons-lang3" % "3.9", "org.apache.commons" % "commons-lang3" % "3.9",
"org.apache.tika" % "tika-core" % "1.21", "org.apache.tika" % "tika-core" % "1.23",
"org.graalvm.sdk" % "graal-sdk" % graalVersion % "provided", "org.graalvm.sdk" % "graal-sdk" % graalVersion % "provided",
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided", "org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
"org.graalvm.truffle" % "truffle-api" % graalVersion % "provided", "org.graalvm.truffle" % "truffle-api" % graalVersion % "provided",
"org.graalvm.truffle" % "truffle-dsl-processor" % graalVersion % "provided", "org.graalvm.truffle" % "truffle-dsl-processor" % graalVersion % "provided",
"org.graalvm.truffle" % "truffle-tck" % graalVersion % "provided", "org.graalvm.truffle" % "truffle-tck" % graalVersion % "provided",
"org.graalvm.truffle" % "truffle-tck-common" % graalVersion % "provided", "org.graalvm.truffle" % "truffle-tck-common" % graalVersion % "provided",
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test, "org.scalacheck" %% "scalacheck" % "1.14.3" % Test,
"org.scalactic" %% "scalactic" % "3.0.8" % Test, "org.scalactic" %% "scalactic" % "3.2.0-M2" % Test,
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test, "org.scalatest" %% "scalatest" % "3.2.0-M2" % Test,
"org.graalvm.truffle" % "truffle-api" % graalVersion % Benchmark, "org.graalvm.truffle" % "truffle-api" % graalVersion % Benchmark,
"org.typelevel" %% "cats-core" % "2.0.0-M4" "org.typelevel" %% "cats-core" % catsVersion
), ),
// Note [Unmanaged Classpath] // Note [Unmanaged Classpath]
Compile / unmanagedClasspath += (core_definition / Compile / packageBin).value, Compile / unmanagedClasspath += (core_definition / Compile / packageBin).value,
@ -448,13 +494,10 @@ lazy val runtime = (project in file("engine/runtime"))
"-s", "-s",
(Compile / sourceManaged).value.getAbsolutePath (Compile / sourceManaged).value.getAbsolutePath
), ),
addCompilerPlugin(
"org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full
),
addCompilerPlugin( addCompilerPlugin(
"org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full "org.typelevel" %% "kind-projector" % "0.11.0" cross CrossVersion.full
), ),
addCompilerPlugin("io.tryp" % "splain" % "0.5.0" cross CrossVersion.patch), addCompilerPlugin("io.tryp" % "splain" % "0.5.1" cross CrossVersion.patch),
scalacOptions ++= Seq( scalacOptions ++= Seq(
"-P:splain:infix:true", "-P:splain:infix:true",
"-P:splain:foundreq:true", "-P:splain:foundreq:true",
@ -523,7 +566,7 @@ lazy val runner = project
"org.graalvm.truffle" % "truffle-api" % graalVersion % "provided", "org.graalvm.truffle" % "truffle-api" % graalVersion % "provided",
"commons-cli" % "commons-cli" % "1.4", "commons-cli" % "commons-cli" % "1.4",
"io.github.spencerpark" % "jupyter-jvm-basekernel" % "2.3.0", "io.github.spencerpark" % "jupyter-jvm-basekernel" % "2.3.0",
"org.jline" % "jline" % "3.1.3" "org.jline" % "jline" % "3.13.3"
), ),
connectInput in run := true connectInput in run := true
) )
@ -546,58 +589,3 @@ lazy val runner = project
.dependsOn(language_server) .dependsOn(language_server)
.dependsOn(gateway) .dependsOn(gateway)
.dependsOn(polyglot_api) .dependsOn(polyglot_api)
lazy val gateway = (project in file("engine/gateway"))
.dependsOn(language_server)
.settings(
libraryDependencies ++= akka ++ circe ++ Seq(
"io.circe" %% "circe-generic-extras" % "0.12.2",
"io.circe" %% "circe-literal" % circeVersion,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test
)
)
lazy val json_rpc_server = (project in file("engine/json-rpc-server"))
.settings(
libraryDependencies ++= akka ++ circe ++ Seq(
"io.circe" %% "circe-generic-extras" % "0.12.2",
"io.circe" %% "circe-literal" % circeVersion,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test
)
)
lazy val language_server = (project in file("engine/language-server"))
.settings(
libraryDependencies ++= akka ++ Seq(
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % Provided,
akkaTestkit % Test,
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test
)
)
.dependsOn(polyglot_api)
lazy val polyglot_api = project
.in(file("engine/polyglot-api"))
.settings(
Test / fork := true,
Test / javaOptions ++= Seq(
// Puts the language runtime on the truffle classpath, rather than the
// standard classpath. This is the recommended way of handling this and
// we should strive to use such structure everywhere. See
// https://www.graalvm.org/docs/graalvm-as-a-platform/implement-language#graalvm
s"-Dtruffle.class.path.append=${(LocalProject("runtime") / Compile / fullClasspath).value
.map(_.data)
.mkString(File.pathSeparator)}"
),
libraryDependencies ++= Seq(
"org.graalvm.sdk" % "polyglot-tck" % graalVersion % "provided",
"org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test,
"org.scalacheck" %% "scalacheck" % "1.14.0" % Test
)
)
.dependsOn(pkg)

View File

@ -3,9 +3,9 @@ package org.enso
import java.nio.file.Path import java.nio.file.Path
import java.util.UUID import java.util.UUID
import akka.actor.Scheduler
import akka.actor.typed.ActorRef import akka.actor.typed.ActorRef
import akka.actor.typed.Behavior import akka.actor.typed.Behavior
import akka.actor.typed.Scheduler
import akka.actor.typed.scaladsl.AbstractBehavior import akka.actor.typed.scaladsl.AbstractBehavior
import akka.actor.typed.scaladsl.ActorContext import akka.actor.typed.scaladsl.ActorContext
import akka.actor.typed.scaladsl.AskPattern.Askable import akka.actor.typed.scaladsl.AskPattern.Askable
@ -28,8 +28,8 @@ import scala.util.Try
* [[org.enso.filemanager.API]] for a list of supported operations and their * [[org.enso.filemanager.API]] for a list of supported operations and their
* respective request-response packages. * respective request-response packages.
*/ */
case class FileManager(projectRoot: Path, context: ActorContext[InputMessage]) case class FileManager(projectRoot: Path, override val context: ActorContext[API.InputMessage])
extends AbstractBehavior[API.InputMessage] { extends AbstractBehavior[API.InputMessage](context) {
/** Active filesystem subtree watchers */ /** Active filesystem subtree watchers */
val watchers: mutable.Map[UUID, DirectoryWatcher] = mutable.Map() val watchers: mutable.Map[UUID, DirectoryWatcher] = mutable.Map()

View File

@ -40,7 +40,7 @@ object API {
projectRoot: Path, projectRoot: Path,
accessedPath: Path) accessedPath: Path)
extends Exception( extends Exception(
s"""Cannot access path $accessedPath because it does not belong to s"""Cannot access path $accessedPath because it does not belong to
|the project under root directory $projectRoot""".stripMargin |the project under root directory $projectRoot""".stripMargin
.replaceAll("\n", " ") .replaceAll("\n", " ")
) )
@ -150,7 +150,7 @@ object API {
override def handle(fileManager: FileManager): Response = { override def handle(fileManager: FileManager): Response = {
val str = Files.list(path) val str = Files.list(path)
try { try {
Response(str.toArray.to[Vector].map(_.asInstanceOf[Path])) Response(str.toArray.toVector.map(_.asInstanceOf[Path]))
} finally str.close() } finally str.close()
} }
} }

View File

@ -11,15 +11,15 @@ import java.nio.file.Path
import org.apache.commons.io.FileExistsException import org.apache.commons.io.FileExistsException
import org.enso.FileManager import org.enso.FileManager
import org.enso.FileManager.API._ import org.enso.FileManager.API._
import org.scalatest.FunSuite
import org.scalatest.Matchers
import org.scalatest.Outcome import org.scalatest.Outcome
import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.matchers.should.Matchers
import scala.reflect.ClassTag import scala.reflect.ClassTag
import scala.util.Failure import scala.util.Failure
import scala.util.Success import scala.util.Success
class BehaviorTests extends FunSuite with Matchers with Helpers { class BehaviorTests extends AnyFunSuite with Matchers with Helpers {
var testKit: BehaviorTestKit[InputMessage] = _ var testKit: BehaviorTestKit[InputMessage] = _
var inbox: TestInbox[OutputMessage] = _ var inbox: TestInbox[OutputMessage] = _

View File

@ -6,7 +6,7 @@ import java.nio.file.Paths
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import org.scalatest.Matchers import org.scalatest.matchers.should.Matchers
trait Helpers extends Matchers { trait Helpers extends Matchers {
var tempDir: Path = _ var tempDir: Path = _
@ -71,15 +71,17 @@ trait Helpers extends Matchers {
) )
val listStream = Files.list(subtree.root) val listStream = Files.list(subtree.root)
try listStream.count() should be(2) try listStream.count() should be(2) : Unit
finally listStream.close() finally listStream.close()
} }
def expectExist(path: Path): Unit = { def expectExist(path: Path): Unit = {
assert(Files.exists(path), s"$path is expected to exist") assert(Files.exists(path), s"$path is expected to exist")
()
} }
def expectNotExist(path: Path): Unit = { def expectNotExist(path: Path): Unit = {
assert(!Files.exists(path), s"$path is expected to not exist") assert(!Files.exists(path), s"$path is expected to not exist")
()
} }
} }

View File

@ -1,9 +1,9 @@
package org.enso.filemanager package org.enso.filemanager
import akka.actor.Scheduler
import akka.actor.testkit.typed.scaladsl.ActorTestKit import akka.actor.testkit.typed.scaladsl.ActorTestKit
import akka.actor.testkit.typed.scaladsl.TestProbe import akka.actor.testkit.typed.scaladsl.TestProbe
import akka.actor.typed.ActorRef import akka.actor.typed.ActorRef
import akka.actor.typed.Scheduler
import akka.util.Timeout import akka.util.Timeout
import io.methvin.watcher.DirectoryChangeEvent import io.methvin.watcher.DirectoryChangeEvent
import java.nio.file.Files import java.nio.file.Files
@ -14,9 +14,9 @@ import java.util.UUID
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import org.enso.FileManager import org.enso.FileManager
import org.scalatest.BeforeAndAfterAll import org.scalatest.BeforeAndAfterAll
import org.scalatest.FunSuite
import org.scalatest.Matchers
import org.scalatest.Outcome import org.scalatest.Outcome
import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.matchers.should.Matchers
import scala.concurrent.Await import scala.concurrent.Await
import scala.concurrent.Future import scala.concurrent.Future
@ -26,7 +26,7 @@ import scala.util.Try
// needs to be separate because watcher message are asynchronous // needs to be separate because watcher message are asynchronous
class WatchTests class WatchTests
extends FunSuite extends AnyFunSuite
with BeforeAndAfterAll with BeforeAndAfterAll
with Matchers with Matchers
with Helpers { with Helpers {
@ -49,11 +49,11 @@ class WatchTests
try super.withFixture(test) try super.withFixture(test)
finally if (watcherID != null) finally if (watcherID != null)
// Otherwise directory would stay blocked on Windows. // Otherwise directory would stay blocked on Windows.
unobserve(watcherID) unobserve(watcherID): Unit
}) })
} }
override def afterAll() { override def afterAll(): Unit = {
testKit.shutdownTestKit() testKit.shutdownTestKit()
} }
@ -72,6 +72,7 @@ class WatchTests
events.exists(matchesEvent(path, eventType)), events.exists(matchesEvent(path, eventType)),
s"not received message about $path" s"not received message about $path"
) )
()
} }
def expectNextEvent( def expectNextEvent(
@ -84,6 +85,7 @@ class WatchTests
matchesEvent(path, eventType)(message), matchesEvent(path, eventType)(message),
s"expected of type $eventType for $path, got $message" s"expected of type $eventType for $path, got $message"
) )
()
} }
def ask[response <: Response.Success: ClassTag]( def ask[response <: Response.Success: ClassTag](
@ -219,6 +221,6 @@ class WatchTests
expectedOfType(DirectoryChangeEvent.EventType.DELETE) expectedOfType(DirectoryChangeEvent.EventType.DELETE)
symlinkEventProbe.expectNoMessage(50.millis) symlinkEventProbe.expectNoMessage(50.millis)
} finally unobserve(id) } finally unobserve(id): Unit
} }
} }

View File

@ -24,7 +24,7 @@ trait Parser[T] {
reader.rewind.matched.set() reader.rewind.matched.set()
reader.nextChar() reader.nextChar()
while (state.runCurrent() == State.Status.Exit.OK) Unit while (state.runCurrent() == State.Status.Exit.OK) ()
val value: Result.Value[T] = getResult() match { val value: Result.Value[T] = getResult() match {
case None => Result.Failure(None) case None => Result.Failure(None)

View File

@ -9,6 +9,8 @@ final class NFA {
val states: mutable.ArrayBuffer[State] = new mutable.ArrayBuffer() val states: mutable.ArrayBuffer[State] = new mutable.ArrayBuffer()
val vocabulary = new Dict() val vocabulary = new Dict()
import State.Implicits._
//// API //// //// API ////
def addState(): Int = { def addState(): Int = {
@ -65,7 +67,7 @@ final class NFA {
private def epsMatrix(): IndexedSeq[Set[Int]] = { private def epsMatrix(): IndexedSeq[Set[Int]] = {
val arr = new Array[EpsMatrix](states.size) val arr = new Array[EpsMatrix](states.size)
states.indices.foreach(fillEpsMatrix(_, arr)) states.indices.foreach(fillEpsMatrix(_, arr))
arr.map(_.links) arr.toIndexedSeq.map(_.links)
} }
private def nfaMatrix(): Array[Array[Int]] = { private def nfaMatrix(): Array[Array[Int]] = {
@ -74,7 +76,7 @@ final class NFA {
for (stateIx <- states.indices) { for (stateIx <- states.indices) {
val s = state(stateIx) val s = state(stateIx)
for ((range, vocIx) <- vocabulary) { for ((range, vocIx) <- vocabulary) {
s.links.ranged.get(range.start) match { s.links.ranged.getOption(range.start) match {
case Some(tgt) => matrix(stateIx)(vocIx) = tgt case Some(tgt) => matrix(stateIx)(vocIx) = tgt
case None => matrix(stateIx)(vocIx) = State.missing case None => matrix(stateIx)(vocIx) = State.missing
} }
@ -167,7 +169,7 @@ final class NFA {
} else { } else {
lines += s"""$source""" lines += s"""$source"""
} }
for ((range, target) <- state.links.ranged.asMapOfRanges()) { state.links.ranged.asMapOfRanges().forEach { (range, target) =>
lines += s"""$source -> $target [label="$range"]""" lines += s"""$source -> $target [label="$range"]"""
} }
for (target <- state.links.epsilon) { for (target <- state.links.epsilon) {

View File

@ -1,6 +1,6 @@
package org.enso.flexer.automata package org.enso.flexer.automata
import org.feijoas.mango.common.{collect => Guava} import com.google.common.{collect => guava}
import scala.collection.mutable import scala.collection.mutable
@ -10,23 +10,36 @@ class State {
} }
object State { object State {
object Implicits {
final implicit class RangeMapWrapper[K <: Comparable[_], V](underlying: guava.RangeMap[K, V]) {
def getOption(key: K): Option[V] =
Option(underlying.get(key))
def isEmpty: Boolean =
underlying.asMapOfRanges().isEmpty()
}
}
val missing = -1 val missing = -1
case class Desc(priority: Int, rule: String) case class Desc(priority: Int, rule: String)
object Link { object Link {
class Registry { class Registry {
private type IntOrd = Ordering.Int.type
val epsilon: mutable.ArrayBuffer[Int] = new mutable.ArrayBuffer() val epsilon: mutable.ArrayBuffer[Int] = new mutable.ArrayBuffer()
val ranged: Guava.mutable.RangeMap[Int, Int, IntOrd] = val ranged: guava.RangeMap[java.lang.Integer, Int] =
Guava.mutable.RangeMap() guava.TreeRangeMap.create[java.lang.Integer, Int]()
def add(target: Int): Unit = def add(target: Int): Unit =
epsilon += target epsilon += target
def add(target: Int, range: Range) = def add(target: Int, range: Range) =
if (range.start <= range.end) if (range.start <= range.end)
ranged.put(Guava.Range.closed(range.start, range.end), target) ranged.put(guava.Range.closed(range.start, range.end), target)
} }
} }
} }

View File

@ -495,7 +495,7 @@ object Graph {
*/ */
final class GraphData[G <: Graph]()(implicit val info: GraphInfo[G]) { final class GraphData[G <: Graph]()(implicit val info: GraphInfo[G]) {
var components: Array[Component.Storage] = var components: Array[Component.Storage] =
this.componentSizes.map(size => new Component.Storage(size)).to[Array] this.componentSizes.map(size => new Component.Storage(size)).toArray
/** Gets a reference to the graph component at the specified index. /** Gets a reference to the graph component at the specified index.
* *

View File

@ -2,10 +2,11 @@ package org.enso.graph
import org.enso.graph.{Graph => PrimGraph} import org.enso.graph.{Graph => PrimGraph}
import org.enso.graph.definition.Macro.component import org.enso.graph.definition.Macro.component
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import shapeless.test.illTyped import shapeless.test.illTyped
class ComponentMacroTest extends FlatSpec with Matchers { class ComponentMacroTest extends AnyFlatSpec with Matchers {
"The `@component` macro" should "define correct components" in { "The `@component` macro" should "define correct components" in {
"@component case class Edges() { type Edge[G <: Graph] }" should compile "@component case class Edges() { type Edge[G <: Graph] }" should compile

View File

@ -2,10 +2,11 @@ package org.enso.graph
import org.enso.graph.definition.Macro.{component, field, opaque} import org.enso.graph.definition.Macro.{component, field, opaque}
import org.enso.graph.{Graph => PrimGraph} import org.enso.graph.{Graph => PrimGraph}
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import shapeless.test.illTyped import shapeless.test.illTyped
class FieldMacroTest extends FlatSpec with Matchers { class FieldMacroTest extends AnyFlatSpec with Matchers {
val subject = "The `@field` macro" val subject = "The `@field` macro"

View File

@ -1,11 +1,12 @@
package org.enso.graph package org.enso.graph
import org.enso.graph.{Graph => PrimGraph} import org.enso.graph.{Graph => PrimGraph}
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import org.enso.graph.GraphTestDefinition._ import org.enso.graph.GraphTestDefinition._
/** This file contains tests for the graph library. */ /** This file contains tests for the graph library. */
class GraphTest extends FlatSpec with Matchers { class GraphTest extends AnyFlatSpec with Matchers {
// ========================================================================== // ==========================================================================
// === Example Graph Usage ================================================== // === Example Graph Usage ==================================================
@ -84,7 +85,6 @@ class GraphTest extends FlatSpec with Matchers {
val typeResult = n1 match { val typeResult = n1 match {
case GraphImpl.Node.Shape.Nul.any(n @ _) => "Null" case GraphImpl.Node.Shape.Nul.any(n @ _) => "Null"
case GraphImpl.Node.Shape.App.any(n1 @ _) => "App1" case GraphImpl.Node.Shape.App.any(n1 @ _) => "App1"
case GraphImpl.Node.Shape.App(_, _) => "App2"
} }
typeResult shouldEqual "App1" typeResult shouldEqual "App1"

View File

@ -4,6 +4,7 @@ import org.enso.graph.definition.Macro.{component, field, opaque}
import org.enso.graph.{Graph => PrimGraph} import org.enso.graph.{Graph => PrimGraph}
import shapeless.{::, HNil} import shapeless.{::, HNil}
// import intentionally left unused
import shapeless.nat._ import shapeless.nat._
/** This file provides a small graph implementation for testing purposes. /** This file provides a small graph implementation for testing purposes.

View File

@ -1,12 +1,13 @@
package org.enso.graph package org.enso.graph
import org.enso.graph.definition.Macro.opaque import org.enso.graph.definition.Macro.opaque
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import shapeless.test.illTyped import shapeless.test.illTyped
import scala.collection.mutable import scala.collection.mutable
class OpaqueMacroTest extends FlatSpec with Matchers { class OpaqueMacroTest extends AnyFlatSpec with Matchers {
val subject = "The @opaque macro" val subject = "The @opaque macro"
subject should "define proper opaque maps" in { subject should "define proper opaque maps" in {

View File

@ -1,12 +1,13 @@
package org.enso.graph package org.enso.graph
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import shapeless.{::, HNil, Nat} import shapeless.{::, HNil, Nat}
import shapeless.Nat._ import shapeless.Nat._
import scala.collection.mutable import scala.collection.mutable
class TypeFunctionTest extends FlatSpec with Matchers { class TypeFunctionTest extends AnyFlatSpec with Matchers {
object HListSumTest { object HListSumTest {
implicitly[HListSum.Aux[HNil, _0]] implicitly[HListSum.Aux[HNil, _0]]
@ -95,8 +96,8 @@ class TypeFunctionTest extends FlatSpec with Matchers {
MapsOf.getOpaqueData[String, maps.Out](maps.instance) shouldEqual testMap MapsOf.getOpaqueData[String, maps.Out](maps.instance) shouldEqual testMap
stringMap - 0 stringMap -= 0
testMap - 0 testMap -= 0
MapsOf.getOpaqueData[String, maps.Out](maps.instance) shouldEqual testMap MapsOf.getOpaqueData[String, maps.Out](maps.instance) shouldEqual testMap
} }

View File

@ -1,6 +1,5 @@
package org.enso package org.enso
import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context import scala.reflect.macros.blackbox.Context
import org.enso.lint.Unused import org.enso.lint.Unused

View File

@ -1,7 +1,5 @@
package org.enso package org.enso
import io.circe.syntax._
import io.circe.generic.auto._
import org.enso.flexer.Reader import org.enso.flexer.Reader
import org.enso.parserservice.Protocol import org.enso.parserservice.Protocol
import org.enso.parserservice.Server import org.enso.parserservice.Server

View File

@ -11,7 +11,6 @@ import akka.http.scaladsl.model.ws.BinaryMessage
import akka.http.scaladsl.model.ws.Message import akka.http.scaladsl.model.ws.Message
import akka.http.scaladsl.model.ws.TextMessage import akka.http.scaladsl.model.ws.TextMessage
import akka.http.scaladsl.model.ws.UpgradeToWebSocket import akka.http.scaladsl.model.ws.UpgradeToWebSocket
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Flow import akka.stream.scaladsl.Flow
import akka.stream.scaladsl.Sink import akka.stream.scaladsl.Sink
import akka.stream.scaladsl.Source import akka.stream.scaladsl.Source
@ -39,7 +38,6 @@ object Server {
*/ */
trait Server { trait Server {
implicit val system: ActorSystem = ActorSystem() implicit val system: ActorSystem = ActorSystem()
implicit val materializer: ActorMaterializer = ActorMaterializer()
/** Generate text reply for given request text message. */ /** Generate text reply for given request text message. */
def handleMessage(input: String): String def handleMessage(input: String): String

View File

@ -2,9 +2,9 @@ package org.enso.pkg
import java.io.File import java.io.File
import java.io.PrintWriter import java.io.PrintWriter
import java.nio.file.{Files, Path} import java.nio.file.Files
import scala.collection.JavaConverters._ import scala.jdk.CollectionConverters._
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import org.enso.pkg.Package.qualifiedNameSeparator import org.enso.pkg.Package.qualifiedNameSeparator
@ -46,7 +46,7 @@ case class Package(root: File, config: Config) {
/** /**
* Creates the package directory structure. * Creates the package directory structure.
*/ */
def createDirectories() { def createDirectories(): Unit = {
val created = Try(root.mkdirs).getOrElse(false) val created = Try(root.mkdirs).getOrElse(false)
if (!created) throw CouldNotCreateDirectory if (!created) throw CouldNotCreateDirectory
createSourceDir() createSourceDir()

View File

@ -3,14 +3,14 @@ package org.enso.projectmanager
import java.io.File import java.io.File
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import akka.actor.{ActorSystem, Scheduler} import akka.actor.ActorSystem
import akka.actor.typed.ActorRef import akka.actor.typed.ActorRef
import akka.actor.typed.Scheduler
import akka.actor.typed.scaladsl.AskPattern._ import akka.actor.typed.scaladsl.AskPattern._
import akka.actor.typed.scaladsl.adapter._ import akka.actor.typed.scaladsl.adapter._
import akka.http.scaladsl.Http import akka.http.scaladsl.Http
import akka.http.scaladsl.model.{HttpResponse, StatusCodes, Uri} import akka.http.scaladsl.model.{HttpResponse, StatusCodes, Uri}
import akka.http.scaladsl.server.{Directives, Route} import akka.http.scaladsl.server.{Directives, Route}
import akka.stream.ActorMaterializer
import akka.util.Timeout import akka.util.Timeout
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import org.enso.projectmanager.api.{ProjectFactory, ProjectJsonSupport} import org.enso.projectmanager.api.{ProjectFactory, ProjectJsonSupport}
@ -29,12 +29,11 @@ case class Server(
apiFactory: ProjectFactory apiFactory: ProjectFactory
)(implicit val system: ActorSystem, )(implicit val system: ActorSystem,
implicit val executor: ExecutionContext, implicit val executor: ExecutionContext,
implicit val materializer: ActorMaterializer,
implicit val askTimeout: Timeout) implicit val askTimeout: Timeout)
extends Directives extends Directives
with ProjectJsonSupport { with ProjectJsonSupport {
implicit val scheduler: Scheduler = system.scheduler implicit val scheduler: Scheduler = system.scheduler.toTyped
def projectDoesNotExistResponse(id: ProjectId): HttpResponse = def projectDoesNotExistResponse(id: ProjectId): HttpResponse =
HttpResponse(StatusCodes.NotFound, entity = s"Project $id does not exist") HttpResponse(StatusCodes.NotFound, entity = s"Project $id does not exist")
@ -114,7 +113,7 @@ case class Server(
object Server { object Server {
def main(args: Array[String]) { def main(args: Array[String]): Unit = {
val config = ConfigFactory.load.getConfig("project-manager") val config = ConfigFactory.load.getConfig("project-manager")
val serverConfig = config.getConfig("server") val serverConfig = config.getConfig("server")
@ -131,7 +130,6 @@ object Server {
implicit val system: ActorSystem = ActorSystem("project-manager") implicit val system: ActorSystem = ActorSystem("project-manager")
implicit val executor: ExecutionContext = system.dispatcher implicit val executor: ExecutionContext = system.dispatcher
implicit val materializer: ActorMaterializer = ActorMaterializer()
implicit val askTimeout: Timeout = new Timeout(timeout) implicit val askTimeout: Timeout = new Timeout(timeout)
val localProjectsPath = val localProjectsPath =
@ -165,6 +163,6 @@ object Server {
val apiFactory = ProjectFactory(routeHelper) val apiFactory = ProjectFactory(routeHelper)
val server = Server(host, port, repoActor, routeHelper, apiFactory) val server = Server(host, port, repoActor, routeHelper, apiFactory)
server.serve server.serve: Unit
} }
} }

View File

@ -1,7 +1,7 @@
package org.enso.projectmanager.services package org.enso.projectmanager.services
import akka.actor.typed.{ActorRef, Behavior} import akka.actor.typed.{ActorRef, Behavior}
import akka.actor.typed.scaladsl.{Behaviors, StashBuffer} import akka.actor.typed.scaladsl.Behaviors
import org.enso.projectmanager.model.{Project, ProjectId, ProjectsRepository} import org.enso.projectmanager.model.{Project, ProjectId, ProjectsRepository}
import scala.collection.immutable.HashMap import scala.collection.immutable.HashMap
@ -34,39 +34,40 @@ object ProjectsService {
storageManager: StorageManager, storageManager: StorageManager,
tutorialsDownloader: TutorialsDownloader tutorialsDownloader: TutorialsDownloader
): Behavior[ProjectsServiceCommand] = Behaviors.setup { context => ): Behavior[ProjectsServiceCommand] = Behaviors.setup { context =>
val buffer = StashBuffer[ProjectsServiceCommand](capacity = 100) Behaviors.withStash(capacity = 100) { buffer =>
def handle( def handle(
localRepo: ProjectsRepository, localRepo: ProjectsRepository,
tutorialsRepo: Option[ProjectsRepository] tutorialsRepo: Option[ProjectsRepository]
): Behavior[ProjectsServiceCommand] = Behaviors.receiveMessage { ): Behavior[ProjectsServiceCommand] = Behaviors.receiveMessage {
case ListProjectsRequest(replyTo) => case ListProjectsRequest(replyTo) =>
replyTo ! ListProjectsResponse(localRepo.projects) replyTo ! ListProjectsResponse(localRepo.projects)
Behaviors.same Behaviors.same
case msg: ListTutorialsRequest => case msg: ListTutorialsRequest =>
tutorialsRepo match { tutorialsRepo match {
case Some(repo) => msg.replyTo ! ListProjectsResponse(repo.projects) case Some(repo) => msg.replyTo ! ListProjectsResponse(repo.projects)
case None => buffer.stash(msg) case None => buffer.stash(msg)
} }
Behaviors.same Behaviors.same
case GetProjectById(id, replyTo) => case GetProjectById(id, replyTo) =>
val project = val project =
localRepo.getById(id).orElse(tutorialsRepo.flatMap(_.getById(id))) localRepo.getById(id).orElse(tutorialsRepo.flatMap(_.getById(id)))
replyTo ! GetProjectResponse(project) replyTo ! GetProjectResponse(project)
Behaviors.same Behaviors.same
case TutorialsReady => case TutorialsReady =>
val newTutorialsRepo = storageManager.readTutorials val newTutorialsRepo = storageManager.readTutorials
buffer.unstashAll(context, handle(localRepo, Some(newTutorialsRepo))) buffer.unstashAll(handle(localRepo, Some(newTutorialsRepo)))
case msg: CreateTemporary => case msg: CreateTemporary =>
val project = val project =
storageManager.createTemporary(msg.name) storageManager.createTemporary(msg.name)
val (projectId, newProjectsRepo) = localRepo.insert(project) val (projectId, newProjectsRepo) = localRepo.insert(project)
msg.replyTo ! CreateTemporaryResponse(projectId, project) msg.replyTo ! CreateTemporaryResponse(projectId, project)
handle(newProjectsRepo, tutorialsRepo) handle(newProjectsRepo, tutorialsRepo)
}
context.pipeToSelf(tutorialsDownloader.run())(_ => TutorialsReady)
handle(storageManager.readLocalProjects, None)
} }
context.pipeToSelf(tutorialsDownloader.run())(_ => TutorialsReady)
handle(storageManager.readLocalProjects, None)
} }
} }

View File

@ -15,15 +15,14 @@ import akka.http.scaladsl.model.HttpResponse
import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.model.StatusCodes
import akka.http.scaladsl.model.headers.Location import akka.http.scaladsl.model.headers.Location
import akka.http.scaladsl.unmarshalling.Unmarshal import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.FileIO import akka.stream.scaladsl.FileIO
import org.apache.commons.io.IOUtils import org.apache.commons.io.IOUtils
import spray.json.DefaultJsonProtocol import spray.json.DefaultJsonProtocol
import spray.json.JsonParser import spray.json.JsonParser
import scala.collection.JavaConverters._
import scala.concurrent.ExecutionContext import scala.concurrent.ExecutionContext
import scala.concurrent.Future import scala.concurrent.Future
import scala.jdk.CollectionConverters._
import scala.util.Try import scala.util.Try
case class GithubTutorial(name: String, lastPushString: String) { case class GithubTutorial(name: String, lastPushString: String) {
@ -37,8 +36,7 @@ trait GithubJsonProtocol extends SprayJsonSupport with DefaultJsonProtocol {
case class HttpHelper()( case class HttpHelper()(
implicit val executor: ExecutionContext, implicit val executor: ExecutionContext,
implicit val system: ActorSystem, implicit val system: ActorSystem) {
implicit val materializer: ActorMaterializer) {
def performWithRedirects(request: HttpRequest): Future[HttpResponse] = def performWithRedirects(request: HttpRequest): Future[HttpResponse] =
Http().singleRequest(request).flatMap(followRedirects) Http().singleRequest(request).flatMap(followRedirects)
@ -59,8 +57,7 @@ case class TutorialsDownloader(
cacheDir: File, cacheDir: File,
packagesGithubOrganisation: String packagesGithubOrganisation: String
)(implicit val system: ActorSystem, )(implicit val system: ActorSystem,
implicit val executor: ExecutionContext, implicit val executor: ExecutionContext)
implicit val materializer: ActorMaterializer)
extends GithubJsonProtocol { extends GithubJsonProtocol {
val packagesGithubUrl = val packagesGithubUrl =

View File

@ -14,7 +14,7 @@ final case class Tree[K, V](value: Option[V], branches: Map[K, Tree[K, V]]) {
} }
def map[S](f: V => S): Tree[K, S] = def map[S](f: V => S): Tree[K, S] =
Tree(value.map(f), branches.mapValues(_.map(f))) Tree(value.map(f), branches.view.mapValues(_.map(f)).toMap)
def dropValues(): Tree[K, Unit] = def dropValues(): Tree[K, Unit] =
map(_ => ()) map(_ => ())

View File

@ -917,7 +917,7 @@ object Shape extends ShapeImplicit {
R + symbol + symbol + _.lines.mkString("\n") R + symbol + symbol + _.lines.mkString("\n")
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Comment, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Comment, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Comment[T]] = t => 0 implicit def span[T]: HasSpan[Comment[T]] = _ => 0
} }
object Documented { object Documented {
@ -932,7 +932,7 @@ object Shape extends ShapeImplicit {
} }
implicit def offsetZip[T]: OffsetZip[Documented, T] = implicit def offsetZip[T]: OffsetZip[Documented, T] =
_.map(Index.Start -> _) _.map(Index.Start -> _)
implicit def span[T: HasSpan]: HasSpan[Documented[T]] = t => 0 implicit def span[T: HasSpan]: HasSpan[Documented[T]] = _ => 0
implicit def toJson[T]: Encoder[Documented[T]] = implicit def toJson[T]: Encoder[Documented[T]] =
_ => throw new NotImplementedError() _ => throw new NotImplementedError()
@ -946,7 +946,7 @@ object Shape extends ShapeImplicit {
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Import, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Import, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Import[T]] = t => 0 implicit def span[T]: HasSpan[Import[T]] = _ => 0
} }
object Mixfix { object Mixfix {
@ -956,11 +956,11 @@ object Shape extends ShapeImplicit {
val lastRepr = if (t.name.length == t.args.length) List() else List(R) val lastRepr = if (t.name.length == t.args.length) List() else List(R)
val argsRepr = t.args.toList.map(R + " " + _) ++ lastRepr val argsRepr = t.args.toList.map(R + " " + _) ++ lastRepr
val nameRepr = t.name.toList.map(Repr(_)) val nameRepr = t.name.toList.map(Repr(_))
R + (nameRepr, argsRepr).zipped.map(_ + _) R + nameRepr.lazyZip(argsRepr).map(_ + _)
} }
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Mixfix, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Mixfix, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Mixfix[T]] = t => 0 implicit def span[T]: HasSpan[Mixfix[T]] = _ => 0
} }
object Group { object Group {
@ -970,7 +970,7 @@ object Shape extends ShapeImplicit {
R + "(" + _.body + ")" R + "(" + _.body + ")"
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Group, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Group, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Group[T]] = t => 0 implicit def span[T]: HasSpan[Group[T]] = _ => 0
} }
object Def { object Def {
@ -980,7 +980,7 @@ object Shape extends ShapeImplicit {
t => R + Def.symbol + 1 + t.name + t.args.map(R + 1 + _) + t.body t => R + Def.symbol + 1 + t.name + t.args.map(R + 1 + _) + t.body
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Def, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Def, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Def[T]] = t => 0 implicit def span[T]: HasSpan[Def[T]] = _ => 0
val symbol = "def" val symbol = "def"
} }
@ -994,7 +994,7 @@ object Shape extends ShapeImplicit {
} }
// FIXME: How to make it automatic for non-spaced AST? // FIXME: How to make it automatic for non-spaced AST?
implicit def ozip[T]: OffsetZip[Foreign, T] = _.map(Index.Start -> _) implicit def ozip[T]: OffsetZip[Foreign, T] = _.map(Index.Start -> _)
implicit def span[T]: HasSpan[Foreign[T]] = t => 0 implicit def span[T]: HasSpan[Foreign[T]] = _ => 0
} }
//// Implicits //// //// Implicits ////
@ -1480,7 +1480,7 @@ object AST {
import io.circe.generic.auto._ import io.circe.generic.auto._
// Note (below) [JSON Format Customizations] // Note (below) [JSON Format Customizations]
implicit def blockEncoder[T: Encoder]: Encoder[Shape.Block[T]] = implicit def blockEncoder[A: Encoder]: Encoder[Shape.Block[A]] =
block => block =>
Json.obj( Json.obj(
"ty" -> block.ty.asJson, "ty" -> block.ty.asJson,
@ -1721,10 +1721,10 @@ object AST {
def unapply(t: AST) = def unapply(t: AST) =
Unapply[Unclosed].run(t => t.line)(t) Unapply[Unclosed].run(t => t.line)(t)
def apply(segment: Segment.Fmt*): Unclosed = def apply(segment: Segment.Fmt*): Unclosed =
Shape.TextUnclosed(Line.Fmt(segment.to[List])) Shape.TextUnclosed(Line.Fmt(segment.toList))
object Raw { object Raw {
def apply(segment: Segment.Raw*): Unclosed = def apply(segment: Segment.Raw*): Unclosed =
Shape.TextUnclosed(Line.Raw(segment.to[List])) Shape.TextUnclosed(Line.Raw(segment.toList))
} }
} }
type InvalidQuote = ASTOf[Shape.InvalidQuote] type InvalidQuote = ASTOf[Shape.InvalidQuote]
@ -1743,23 +1743,23 @@ object AST {
} }
def apply(text: Shape.Text[AST]): Text = text def apply(text: Shape.Text[AST]): Text = text
def apply(segment: Segment.Fmt*): Text = Text(Line.Fmt(segment.to[List])) def apply(segment: Segment.Fmt*): Text = Text(Line.Fmt(segment.toList))
def apply( def apply(
spaces: Int, spaces: Int,
off: Int, off: Int,
line: Shape.TextBlockLine[Segment.Fmt]* line: Shape.TextBlockLine[Segment.Fmt]*
): Text = ): Text =
Text(Shape.TextBlockFmt(line.to[List], spaces, off)) Text(Shape.TextBlockFmt(line.toList, spaces, off))
object Raw { object Raw {
def apply(segment: Segment.Raw*): Text = def apply(segment: Segment.Raw*): Text =
Text(Line.Raw(segment.to[List])) Text(Line.Raw(segment.toList))
def apply( def apply(
spaces: Int, spaces: Int,
off: Int, off: Int,
line: Shape.TextBlockLine[Segment.Raw]* line: Shape.TextBlockLine[Segment.Raw]*
): Text = ): Text =
Text(Shape.TextBlockRaw(line.to[List], spaces, off)) Text(Shape.TextBlockRaw(line.toList, spaces, off))
} }
///////////////// /////////////////
@ -1941,7 +1941,7 @@ object AST {
indent, indent,
List(), List(),
Line(firstLine), Line(firstLine),
lines.to[List].map(ast => Line(Some(ast))) lines.toList.map(ast => Line(Some(ast)))
) )
val any = UnapplyByType[Block] val any = UnapplyByType[Block]
@ -1979,7 +1979,7 @@ object AST {
def unapply(t: AST) = Unapply[M].run(_.lines)(t) def unapply(t: AST) = Unapply[M].run(_.lines)(t)
def apply(ls: List1[OptLine]): M = Shape.Module(ls) def apply(ls: List1[OptLine]): M = Shape.Module(ls)
def apply(l: OptLine): M = Module(List1(l)) def apply(l: OptLine): M = Module(List1(l))
def apply(l: OptLine, ls: OptLine*): M = Module(List1(l, ls.to[List])) def apply(l: OptLine, ls: OptLine*): M = Module(List1(l, ls.toList))
def apply(l: OptLine, ls: List[OptLine]): M = Module(List1(l, ls)) def apply(l: OptLine, ls: List[OptLine]): M = Module(List1(l, ls))
def traverseWithOff(m: M)(f: (Index, AST) => AST): M = { def traverseWithOff(m: M)(f: (Index, AST) => AST): M = {
val lines2 = m.lines.map { line: OptLine => val lines2 = m.lines.map { line: OptLine =>
@ -2297,9 +2297,9 @@ object AST {
val any = UnapplyByType[Foreign] val any = UnapplyByType[Foreign]
} }
def main() { def main(): Unit = {
val v1 = Ident.Var("foo") val v1 = Ident.Var("foo")
val v1_ = v1: AST // val v1_ = v1: AST
println(v1.span) println(v1.span)
println((v1: AST.Ident).span) println((v1: AST.Ident).span)
@ -2308,7 +2308,7 @@ object AST {
// println(v1_.asJson) // println(v1_.asJson)
// val opr1 = Ident.Opr("+") // val opr1 = Ident.Opr("+")
val v2 = App.Prefix(Ident.Var("x"), 10, Ident.Var("z")) val v2 = App.Prefix(Ident.Var("x"), 10, Ident.Var("z"))
val v2_ = v2: AST // val v2_ = v2: AST
// //
// println(v2.asJson) // println(v2.asJson)
// println(v2_.asJson) // println(v2_.asJson)

View File

@ -160,7 +160,7 @@ object Repr {
}) })
} }
def Empty() = Builder(0, identity(_)) def Empty() = Builder(0, identity(_): Unit)
def Space(span: Int) = Builder(span, _ ++= (" " * span)) def Space(span: Int) = Builder(span, _ ++= (" " * span))
def Letter(char: Char) = Builder(1, _ += char) def Letter(char: Char) = Builder(1, _ += char)
def Text(str: String) = Builder(str.length, _ ++= str) def Text(str: String) = Builder(str.length, _ ++= str)

View File

@ -1,7 +1,6 @@
package org.enso.syntax.text.ast.meta package org.enso.syntax.text.ast.meta
import org.enso.syntax.text.{AST, HasSpan, OffsetZip} import org.enso.syntax.text.{AST, HasSpan, OffsetZip}
import org.enso.syntax.text.HasSpan.implicits._
import org.enso.syntax.text.AST.SAST import org.enso.syntax.text.AST.SAST
import org.enso.syntax.text.prec.Operator import org.enso.syntax.text.prec.Operator
import org.enso.syntax.text.ast.Repr import org.enso.syntax.text.ast.Repr

View File

@ -1,7 +1,6 @@
package org.enso.syntax.text.ast.text package org.enso.syntax.text.ast.text
import org.enso.flexer.ADT import org.enso.flexer.ADT
import org.enso.syntax.text.ast.text.Escape.Slash.toString
sealed trait Escape { sealed trait Escape {
val repr: String val repr: String

View File

@ -125,7 +125,7 @@ case class DocParserDef() extends Parser[Doc] {
if (details.nonEmpty) { if (details.nonEmpty) {
var det = text.removeWhitespaces(details) var det = text.removeWhitespaces(details)
if (tagType != Tags.Tag.Unrecognized) { if (tagType != Tags.Tag.Unrecognized) {
det = ' ' + det det = s" $det"
} }
stack +:= Tags.Tag(indent, tagType, Some(det)) stack +:= Tags.Tag(indent, tagType, Some(det))
} else { } else {

View File

@ -305,7 +305,7 @@ object DocParserHTMLGenerator {
generateHTMLForEveryDocumented(elem, path, cssFileName) generateHTMLForEveryDocumented(elem, path, cssFileName)
} }
elem elem
} } : Unit
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////

View File

@ -2,16 +2,14 @@ package org.enso.syntax.text
import java.util.UUID import java.util.UUID
import cats.{Foldable, Monoid} import cats.Foldable
import org.enso.data.{Index, List1, Shifted, Span} import org.enso.data.{List1, Span}
import org.enso.flexer import org.enso.flexer
import org.enso.flexer.Reader import org.enso.flexer.Reader
import org.enso.syntax.text.AST.Block.{Line, OptLine} import org.enso.syntax.text.AST.Block.{Line, OptLine}
import org.enso.syntax.text.AST.Macro.Match.SegmentOps import org.enso.syntax.text.AST.Macro.Match.SegmentOps
import org.enso.syntax.text.AST.{App, Module} import org.enso.syntax.text.AST.App
import org.enso.syntax.text.ast.meta.Builtin import org.enso.syntax.text.ast.meta.Builtin
import org.enso.syntax.text.ast.opr.Prec
import org.enso.syntax.text.prec.Distance
import org.enso.syntax.text.prec.Macro import org.enso.syntax.text.prec.Macro
import org.enso.syntax.text.spec.ParserDef import org.enso.syntax.text.spec.ParserDef
import cats.implicits._ import cats.implicits._
@ -398,24 +396,24 @@ object Main extends scala.App {
| UPCOMING | UPCOMING
| ALAMAKOTA a kot ma Ale | ALAMAKOTA a kot ma Ale
| This is a test of Enso Documentation Parser. This is a short synopsis. | This is a test of Enso Documentation Parser. This is a short synopsis.
| |
| Here you can write the body of documentation. On top you can see tags | Here you can write the body of documentation. On top you can see tags
| added to this piece of code. You can customise your text with _Italic_ | added to this piece of code. You can customise your text with _Italic_
| ~Strikethrough~ or *Bold*. ~_*Combined*_~ is funny | ~Strikethrough~ or *Bold*. ~_*Combined*_~ is funny
| |
| |
| There are 3 kinds of sections | There are 3 kinds of sections
| - Important | - Important
| - Info | - Info
| - Example | - Example
| * You can use example to add multiline code to your documentation | * You can use example to add multiline code to your documentation
| |
| ! Important | ! Important
| Here is a small test of Important Section | Here is a small test of Important Section
| |
| ? Info | ? Info
| Here is a small test of Info Section | Here is a small test of Info Section
| |
| > Example | > Example
| Here is a small test of Example Section | Here is a small test of Example Section
| Import Foo | Import Foo
@ -426,7 +424,7 @@ object Main extends scala.App {
| ##DEPRECATED | ##DEPRECATED
| foo bar baz | foo bar baz
| type Nothing | type Nothing
| |
| ## The pow function calculates power of integers. | ## The pow function calculates power of integers.
| pow x y = x ** y | pow x y = x ** y
|""".stripMargin |""".stripMargin
@ -461,7 +459,7 @@ object Main extends scala.App {
| Also, `None` is the return value of functions which do not return an | Also, `None` is the return value of functions which do not return an
| explicit value. | explicit value.
| type None | type None
| |
| ## The pow function calculates power of integers. | ## The pow function calculates power of integers.
| pow x y = x ** y | pow x y = x ** y
|""".stripMargin |""".stripMargin

View File

@ -7,11 +7,11 @@ import org.enso.Logger
import org.enso.flexer.Parser.Result import org.enso.flexer.Parser.Result
import org.enso.flexer.Reader import org.enso.flexer.Reader
import org.enso.syntax.text.ast.Doc.Tags.Tag import org.enso.syntax.text.ast.Doc.Tags.Tag
import org.scalatest.FlatSpec
import org.scalatest.Matchers
import org.scalatest.Assertion import org.scalatest.Assertion
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class DocParserTests extends FlatSpec with Matchers { class DocParserTests extends AnyFlatSpec with Matchers {
val logger = new Logger() val logger = new Logger()
def assertExpr(input: String, result: Doc): Assertion = { def assertExpr(input: String, result: Doc): Assertion = {

View File

@ -9,8 +9,10 @@ import org.enso.syntax.text.AST._
import org.enso.syntax.text.AST.conversions._ import org.enso.syntax.text.AST.conversions._
import org.enso.syntax.text.ast.DSL._ import org.enso.syntax.text.ast.DSL._
import org.scalatest._ import org.scalatest._
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ParserTest extends FlatSpec with Matchers { class ParserTest extends AnyFlatSpec with Matchers {
def assertSpan(input: String, ast: AST): Assertion = { def assertSpan(input: String, ast: AST): Assertion = {
val gotSpan = ast.span val gotSpan = ast.span
@ -65,7 +67,7 @@ class ParserTest extends FlatSpec with Matchers {
def ?=(out: AST) = testBase in { assertExpr(input, out) } def ?=(out: AST) = testBase in { assertExpr(input, out) }
def ??=(out: Module) = testBase in { assertModule(input, out) } def ??=(out: Module) = testBase in { assertModule(input, out) }
def testIdentity = testBase in { assertIdentity(input) } def testIdentity() = testBase in { assertIdentity(input) }
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
@ -181,9 +183,9 @@ class ParserTest extends FlatSpec with Matchers {
import Shape.SegmentPlain.txtFromString import Shape.SegmentPlain.txtFromString
def line(s: String, empty: Int*) = def line(s: String, empty: Int*) =
Shape.TextBlockLine(empty.to[List], List(txtFromString[AST](s))) Shape.TextBlockLine(empty.toList, List(txtFromString[AST](s)))
def line(segment: AST.Text.Segment.Fmt, empty: Int*) = def line(segment: AST.Text.Segment.Fmt, empty: Int*) =
Shape.TextBlockLine(empty.to[List], List(segment)) Shape.TextBlockLine(empty.toList, List(segment))
"'" ?= Text.Unclosed() "'" ?= Text.Unclosed()
"''" ?= Text() "''" ?= Text()
@ -398,20 +400,20 @@ class ParserTest extends FlatSpec with Matchers {
//// Large Input ///////////////////////////////////////////////////////////// //// Large Input /////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// ("(" * 33000).testIdentity // FIXME Stack Overflow // ("(" * 33000).testIdentity() // FIXME Stack Overflow
// ("OVERFLOW " * 5000).testIdentity // ("OVERFLOW " * 5000).testIdentity()
// ("\uD800\uDF1E " * 10000).testIdentity // ("\uD800\uDF1E " * 10000).testIdentity()
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//// OTHER (TO BE PARTITIONED)//////////////////////////////////////////////// //// OTHER (TO BE PARTITIONED)////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
"\na \nb \n".testIdentity "\na \nb \n".testIdentity()
"f = \n\n\n".testIdentity "f = \n\n\n".testIdentity()
" \n\n\n f\nf".testIdentity " \n\n\n f\nf".testIdentity()
"f = \n\n x ".testIdentity "f = \n\n x ".testIdentity()
" a\n b\n c".testIdentity " a\n b\n c".testIdentity()
"f =\n\n x\n\n y".testIdentity "f =\n\n x\n\n y".testIdentity()
""" """
a a
@ -420,7 +422,7 @@ class ParserTest extends FlatSpec with Matchers {
d d
e e
f g h f g h
""".testIdentity """.testIdentity()
""" """
# adults: old population # adults: old population
@ -438,7 +440,7 @@ class ParserTest extends FlatSpec with Matchers {
isUnique xs i #### isUnique xs i ####
= xs.at(i).score != xs.at(i-1).score = xs.at(i).score != xs.at(i-1).score
adults++children++mutants . sorted . unique . take (length pop1) . pure adults++children++mutants . sorted . unique . take (length pop1) . pure
""".testIdentity """.testIdentity()
/////////////////////// ///////////////////////
//// Preprocessing //// //// Preprocessing ////

View File

@ -7,7 +7,6 @@ import akka.http.scaladsl.Http
import akka.http.scaladsl.model.ws.{BinaryMessage, Message, TextMessage} import akka.http.scaladsl.model.ws.{BinaryMessage, Message, TextMessage}
import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route import akka.http.scaladsl.server.Route
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.Flow import akka.stream.scaladsl.Flow
import akka.stream.scaladsl.Sink import akka.stream.scaladsl.Sink
import akka.stream.scaladsl.Source import akka.stream.scaladsl.Source
@ -32,9 +31,7 @@ import scala.util.Success
* @param config Server config. * @param config Server config.
*/ */
class Server(jsonRpcController: JsonRpcController, config: Config)( class Server(jsonRpcController: JsonRpcController, config: Config)(
implicit implicit system: ActorSystem
system: ActorSystem,
materializer: ActorMaterializer
) { ) {
import system.dispatcher import system.dispatcher
@ -57,7 +54,7 @@ class Server(jsonRpcController: JsonRpcController, config: Config)(
.flatMapConcat( .flatMapConcat(
input => input =>
Source Source
.fromFuture( .future(
jsonRpcController.getTextOutput(input) jsonRpcController.getTextOutput(input)
) )
) )

View File

@ -4,25 +4,20 @@ import akka.NotUsed
import akka.actor.{ActorRef, ActorSystem} import akka.actor.{ActorRef, ActorSystem}
import akka.http.scaladsl.Http import akka.http.scaladsl.Http
import akka.http.scaladsl.model.ws.{Message, TextMessage, WebSocketRequest} import akka.http.scaladsl.model.ws.{Message, TextMessage, WebSocketRequest}
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Flow, Keep, Sink, Source} import akka.stream.scaladsl.{Flow, Keep, Sink, Source}
import io.circe.Json import io.circe.Json
import io.circe.parser.parse
import org.enso.{Gateway, LanguageServer}
import org.enso.gateway.TestJson.{ import org.enso.gateway.TestJson.{
Initialize, Initialize,
Shutdown, Shutdown,
WrongJsonrpc, WrongJsonrpc,
WrongMethod WrongMethod
} }
import org.enso.{Gateway, LanguageServer}
import org.scalatest.{
Assertion,
AsyncFlatSpec,
BeforeAndAfterAll,
GivenWhenThen,
Matchers
}
import io.circe.parser.parse
import org.enso.gateway.server.Config import org.enso.gateway.server.Config
import org.scalatest.{Assertion, BeforeAndAfterAll, GivenWhenThen}
import org.scalatest.flatspec.AsyncFlatSpec
import org.scalatest.matchers.should.Matchers
import scala.concurrent.{Await, Future} import scala.concurrent.{Await, Future}
import scala.concurrent.duration._ import scala.concurrent.duration._
@ -33,8 +28,6 @@ class GatewayJsonSpec
with BeforeAndAfterAll with BeforeAndAfterAll
with GivenWhenThen { with GivenWhenThen {
implicit private val system: ActorSystem = ActorSystem() implicit private val system: ActorSystem = ActorSystem()
implicit private val materializer: ActorMaterializer =
ActorMaterializer.create(system)
import system.dispatcher import system.dispatcher

View File

@ -3,14 +3,16 @@ package org.enso.gateway
import akka.actor.{ActorRef, ActorSystem} import akka.actor.{ActorRef, ActorSystem}
import akka.testkit.{ImplicitSender, TestKit} import akka.testkit.{ImplicitSender, TestKit}
import org.enso.{Gateway, LanguageServer} import org.enso.{Gateway, LanguageServer}
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike}
import org.enso.gateway.TestMessage.{Initialize, Shutdown} import org.enso.gateway.TestMessage.{Initialize, Shutdown}
import org.enso.gateway.TestNotification.{Exit, Initialized} import org.enso.gateway.TestNotification.{Exit, Initialized}
import org.scalatest.BeforeAndAfterAll
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
class GatewayMessageSpec() class GatewayMessageSpec()
extends TestKit(ActorSystem("GatewayMessageSpec")) extends TestKit(ActorSystem("GatewayMessageSpec"))
with ImplicitSender with ImplicitSender
with WordSpecLike with AnyWordSpecLike
with Matchers with Matchers
with BeforeAndAfterAll { with BeforeAndAfterAll {

View File

@ -2,7 +2,9 @@ package org.enso.jsonrpcserver
import akka.actor.{ActorRef, ActorSystem, Props} import akka.actor.{ActorRef, ActorSystem, Props}
import akka.testkit.{ImplicitSender, TestKit, TestProbe} import akka.testkit.{ImplicitSender, TestKit, TestProbe}
import io.circe.{Decoder, Encoder, Json} import io.circe.{Decoder, Encoder, Json}
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import org.scalatest.EitherValues
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
import scala.concurrent.duration._ import scala.concurrent.duration._
import io.circe.parser._ import io.circe.parser._
@ -12,7 +14,7 @@ import org.enso.jsonrpcserver.MessageHandler.{Connected, WebMessage}
class MessageHandlerTest class MessageHandlerTest
extends TestKit(ActorSystem("TestSystem")) extends TestKit(ActorSystem("TestSystem"))
with ImplicitSender with ImplicitSender
with WordSpecLike with AnyWordSpecLike
with Matchers with Matchers
with BeforeAndAfterAll { with BeforeAndAfterAll {
@ -240,7 +242,7 @@ class MessageHandlerTest
msg shouldBe an[WebMessage] msg shouldBe an[WebMessage]
val contents = msg.asInstanceOf[WebMessage].message val contents = msg.asInstanceOf[WebMessage].message
val maybeJson = parse(contents) val maybeJson = parse(contents)
maybeJson shouldBe 'right maybeJson shouldBe Symbol("right")
maybeJson.right.get shouldEqual expectedJson maybeJson.foreach(_ shouldEqual expectedJson)
} }
} }

View File

@ -5,12 +5,14 @@ import akka.testkit.{ImplicitSender, TestKit, TestProbe}
import org.enso.LanguageServer import org.enso.LanguageServer
import org.enso.languageserver.Notifications.{Exit, Initialized} import org.enso.languageserver.Notifications.{Exit, Initialized}
import org.enso.languageserver.Requests.{Initialize, Shutdown} import org.enso.languageserver.Requests.{Initialize, Shutdown}
import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import org.scalatest.BeforeAndAfterAll
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
class LanguageServerSpec() class LanguageServerSpec()
extends TestKit(ActorSystem("LanguageServerSpec")) extends TestKit(ActorSystem("LanguageServerSpec"))
with ImplicitSender with ImplicitSender
with WordSpecLike with AnyWordSpecLike
with Matchers with Matchers
with BeforeAndAfterAll { with BeforeAndAfterAll {

View File

@ -1,7 +1,5 @@
package org.enso.polyglot package org.enso.polyglot
import java.io.File
import org.graalvm.polyglot.Value import org.graalvm.polyglot.Value
/** /**
@ -45,7 +43,7 @@ class Module(private val value: Value) {
* @param additionalSource the new source to parse * @param additionalSource the new source to parse
*/ */
def patch(additionalSource: String): Unit = def patch(additionalSource: String): Unit =
value.invokeMember(PATCH, additionalSource) value.invokeMember(PATCH, additionalSource): Unit
/** /**
* Evaluates an arbitrary expression as if it were placed in a function * Evaluates an arbitrary expression as if it were placed in a function
@ -60,13 +58,15 @@ class Module(private val value: Value) {
* Triggers reparsing of module sources. Used to notify the module that * Triggers reparsing of module sources. Used to notify the module that
* sources have changed. * sources have changed.
*/ */
def reparse(): Unit = { value.invokeMember(REPARSE) } def reparse(): Unit = {
value.invokeMember(REPARSE): Unit
}
def setSource(source: String): Unit = { def setSource(source: String): Unit = {
value.invokeMember(SET_SOURCE, source) value.invokeMember(SET_SOURCE, source): Unit
} }
def setSourceFile(file: String): Unit = { def setSourceFile(file: String): Unit = {
value.invokeMember(SET_SOURCE_FILE, file) value.invokeMember(SET_SOURCE_FILE, file): Unit
} }
} }

View File

@ -1,6 +1,6 @@
package org.enso.polyglot package org.enso.polyglot
import org.graalvm.polyglot.{Context, Value} import org.graalvm.polyglot.Value
/** /**
* Represents the top scope of Enso execution context * Represents the top scope of Enso execution context
@ -33,6 +33,6 @@ class TopScope(private val value: Value) {
new Module(value.invokeMember(REGISTER_MODULE, qualifiedName, filePath)) new Module(value.invokeMember(REGISTER_MODULE, qualifiedName, filePath))
def unregisterModule(qualifiedName: String): Unit = { def unregisterModule(qualifiedName: String): Unit = {
value.invokeMember(UNREGISTER_MODULE, qualifiedName) value.invokeMember(UNREGISTER_MODULE, qualifiedName): Unit
} }
} }

View File

@ -1,8 +1,10 @@
package org.enso.polyglot package org.enso.polyglot
import org.graalvm.polyglot.Context
import org.scalatest.{FlatSpec, Matchers}
class ApiTest extends FlatSpec with Matchers { import org.graalvm.polyglot.Context
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ApiTest extends AnyFlatSpec with Matchers {
import LanguageInfo._ import LanguageInfo._
val executionContext = new ExecutionContext(Context.newBuilder(ID).build()) val executionContext = new ExecutionContext(Context.newBuilder(ID).build())

View File

@ -1,14 +1,14 @@
package org.enso.polyglot package org.enso.polyglot
import java.io.File import java.io.File
import java.nio.file.Files import java.nio.file.Files
import org.enso.pkg.Package
import org.graalvm.polyglot.{Context, PolyglotException} import org.graalvm.polyglot.{Context, PolyglotException}
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.enso.pkg.{Package, QualifiedName} import org.scalatest.matchers.should.Matchers
import scala.util.Try class ModuleManagementTest extends AnyFlatSpec with Matchers {
class ModuleManagementTest extends FlatSpec with Matchers {
class TestContext(packageName: String) { class TestContext(packageName: String) {
val tmpDir: File = Files.createTempDirectory("enso-test-packages").toFile val tmpDir: File = Files.createTempDirectory("enso-test-packages").toFile
val pkg: Package = Package.create(tmpDir, packageName) val pkg: Package = Package.create(tmpDir, packageName)
@ -24,11 +24,11 @@ class ModuleManagementTest extends FlatSpec with Matchers {
def mkFile(name: String): File = new File(tmpDir, name) def mkFile(name: String): File = new File(tmpDir, name)
def writeFile(name: String, contents: String): Unit = { def writeFile(name: String, contents: String): Unit = {
Files.write(mkFile(name).toPath, contents.getBytes) Files.write(mkFile(name).toPath, contents.getBytes): Unit
} }
def writeMain(contents: String): Unit = { def writeMain(contents: String): Unit = {
Files.write(pkg.mainFile.toPath, contents.getBytes) Files.write(pkg.mainFile.toPath, contents.getBytes): Unit
} }
} }

View File

@ -3,7 +3,6 @@ package org.enso.runner
import java.io.InputStream import java.io.InputStream
import java.io.OutputStream import java.io.OutputStream
import org.enso.interpreter.Constants
import org.enso.interpreter.instrument.ReplDebuggerInstrument import org.enso.interpreter.instrument.ReplDebuggerInstrument
import org.enso.polyglot.{ExecutionContext, LanguageInfo, RuntimeOptions} import org.enso.polyglot.{ExecutionContext, LanguageInfo, RuntimeOptions}
import org.graalvm.polyglot.Context import org.graalvm.polyglot.Context

View File

@ -11,8 +11,8 @@ import io.github.spencerpark.jupyter.kernel.KernelConnectionProperties
import io.github.spencerpark.jupyter.kernel import io.github.spencerpark.jupyter.kernel
import io.github.spencerpark.jupyter.kernel.display.DisplayData import io.github.spencerpark.jupyter.kernel.display.DisplayData
import org.enso.polyglot import org.enso.polyglot
import org.enso.polyglot.{ExecutionContext, LanguageInfo, Module, TopScope} import org.enso.polyglot.{ExecutionContext, LanguageInfo, Module}
import org.graalvm.polyglot.{Context, Value} import org.graalvm.polyglot.Value
/** /**
* A wrapper for Enso interpreter for use by Jupyter * A wrapper for Enso interpreter for use by Jupyter

View File

@ -9,7 +9,6 @@ import org.enso
import org.enso.polyglot.{ExecutionContext, LanguageInfo, Module} import org.enso.polyglot.{ExecutionContext, LanguageInfo, Module}
import org.enso.{Gateway, LanguageServer} import org.enso.{Gateway, LanguageServer}
import akka.actor.{ActorRef, ActorSystem} import akka.actor.{ActorRef, ActorSystem}
import akka.stream.ActorMaterializer
import org.enso.gateway.JsonRpcController import org.enso.gateway.JsonRpcController
import scala.io.StdIn import scala.io.StdIn
@ -97,7 +96,7 @@ object Main {
* *
* @param path root path of the newly created project * @param path root path of the newly created project
*/ */
private def createNew(path: String) { private def createNew(path: String): Unit = {
Package.getOrCreate(new File(path)) Package.getOrCreate(new File(path))
exitSuccess() exitSuccess()
} }
@ -145,12 +144,12 @@ object Main {
): Unit = { ): Unit = {
val topScope = context.getTopScope val topScope = context.getTopScope
val mainModule = topScope.getModule(mainModuleName) val mainModule = topScope.getModule(mainModuleName)
runMain(mainModule) runMain(mainModule): Unit
} }
private def runSingleFile(context: ExecutionContext, file: File): Unit = { private def runSingleFile(context: ExecutionContext, file: File): Unit = {
val mainModule = context.evalModule(file) val mainModule = context.evalModule(file)
runMain(mainModule) runMain(mainModule): Unit
} }
private def runMain(mainModule: Module): Value = { private def runMain(mainModule: Module): Value = {
@ -185,8 +184,6 @@ object Main {
) )
implicit val system: ActorSystem = ActorSystem() implicit val system: ActorSystem = ActorSystem()
implicit val materializer: ActorMaterializer =
ActorMaterializer.create(system)
import system.dispatcher import system.dispatcher
val languageServerActorName = "languageServer" val languageServerActorName = "languageServer"

View File

@ -7,7 +7,7 @@ import org.enso.interpreter.instrument.ReplDebuggerInstrument
import org.jline.reader.{LineReader, LineReaderBuilder} import org.jline.reader.{LineReader, LineReaderBuilder}
import org.jline.terminal.{Terminal, TerminalBuilder} import org.jline.terminal.{Terminal, TerminalBuilder}
import collection.JavaConverters._ import scala.jdk.CollectionConverters._
import scala.util.Try import scala.util.Try
/** /**

View File

@ -1,15 +1,17 @@
package org.enso.interpreter.bench package org.enso.interpreter.bench
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import scala.collection.JavaConverters._ import scala.jdk.CollectionConverters._
import scala.math.Ordering.Double.IeeeOrdering
class RegressionTest extends FlatSpec with Matchers { class RegressionTest extends AnyFlatSpec with Matchers {
// This tolerance may be adjusted depending on the stability of CI // This tolerance may be adjusted depending on the stability of CI
final val TOLERANCE = 0.2 final val TOLERANCE = 0.2
val runner = new BenchmarksRunner val runner = new BenchmarksRunner
val benchmarks = List(runner.getAvailable.asScala: _*) val benchmarks = runner.getAvailable.asScala
benchmarks.foreach { benchmark => benchmarks.foreach { benchmark =>
benchmark should "not be slower than before" in { benchmark should "not be slower than before" in {

View File

@ -1,12 +1,8 @@
package org.enso.interpreter.bench.fixtures.semantic package org.enso.interpreter.bench.fixtures.semantic
import org.enso.interpreter.Constants
import org.enso.interpreter.runtime.Builtins import org.enso.interpreter.runtime.Builtins
import org.enso.interpreter.runtime.scope.TopLevelScope import org.enso.interpreter.test.InterpreterRunner
import org.enso.interpreter.test.{InterpreterException, InterpreterRunner} import org.graalvm.polyglot.Value
import org.graalvm.polyglot.{PolyglotException, Value}
import scala.util.Try
class AtomFixtures extends InterpreterRunner { class AtomFixtures extends InterpreterRunner {
val million: Long = 1000000 val million: Long = 1000000

View File

@ -1,7 +1,9 @@
package org.enso.interpreter.util; package org.enso.interpreter.util;
import scala.Option; import scala.Option;
import scala.collection.JavaConverters; import scala.jdk.javaapi.CollectionConverters;
import scala.jdk.javaapi.OptionConverters;
import scala.collection.Seq; import scala.collection.Seq;
import java.util.List; import java.util.List;
@ -16,7 +18,7 @@ public class ScalaConversions {
* @return the corresponding java optional * @return the corresponding java optional
*/ */
public static <T> Optional<T> asJava(Option<T> option) { public static <T> Optional<T> asJava(Option<T> option) {
return Optional.ofNullable(option.getOrElse(() -> null)); return OptionConverters.toJava(option);
} }
/** /**
@ -26,6 +28,6 @@ public class ScalaConversions {
* @return the corresponding java list * @return the corresponding java list
*/ */
public static <T> List<T> asJava(Seq<T> list) { public static <T> List<T> asJava(Seq<T> list) {
return JavaConverters.seqAsJavaList(list); return CollectionConverters.asJava(list);
} }
} }

View File

@ -1,7 +1,6 @@
package org.enso.compiler package org.enso.compiler
import java.io.StringReader import java.io.StringReader
import java.util.Optional
import com.oracle.truffle.api.TruffleFile import com.oracle.truffle.api.TruffleFile
import com.oracle.truffle.api.source.Source import com.oracle.truffle.api.source.Source
@ -10,17 +9,13 @@ import org.enso.compiler.generate.AstToAstExpression
import org.enso.flexer.Reader import org.enso.flexer.Reader
import org.enso.interpreter.builder.{ExpressionFactory, ModuleScopeExpressionFactory} import org.enso.interpreter.builder.{ExpressionFactory, ModuleScopeExpressionFactory}
import org.enso.interpreter.node.ExpressionNode import org.enso.interpreter.node.ExpressionNode
import org.enso.interpreter.runtime.callable.function.Function
import org.enso.interpreter.runtime.error.ModuleDoesNotExistException import org.enso.interpreter.runtime.error.ModuleDoesNotExistException
import org.enso.interpreter.runtime.scope.{LocalScope, ModuleScope, TopLevelScope} import org.enso.interpreter.runtime.scope.{LocalScope, ModuleScope, TopLevelScope}
import org.enso.interpreter.runtime.{Context, Module} import org.enso.interpreter.runtime.Context
import org.enso.interpreter.{Constants, Language} import org.enso.interpreter.Language
import org.enso.polyglot.LanguageInfo import org.enso.polyglot.LanguageInfo
import org.enso.syntax.text.{AST, Parser} import org.enso.syntax.text.{AST, Parser}
import scala.collection.JavaConverters._
import scala.collection.mutable
/** /**
* This class encapsulates the static transformation processes that take place * This class encapsulates the static transformation processes that take place
* on source code, including parsing, desugaring, type-checking, static * on source code, including parsing, desugaring, type-checking, static

View File

@ -4,8 +4,7 @@ import java.util.Optional
import org.enso.syntax.text.Location import org.enso.syntax.text.Location
import scala.collection.JavaConverters._ import scala.jdk.CollectionConverters._
import scala.language.postfixOps
trait AstExpressionVisitor[+T] { trait AstExpressionVisitor[+T] {
def visitLong(l: AstLong): T def visitLong(l: AstLong): T

View File

@ -6,7 +6,6 @@ import org.enso.compiler.core
import org.enso.compiler.core._ import org.enso.compiler.core._
import org.enso.compiler.exception.UnhandledEntity import org.enso.compiler.exception.UnhandledEntity
import org.enso.interpreter.Constants import org.enso.interpreter.Constants
import org.enso.interpreter.Constants.Names
import org.enso.syntax.text.{AST, Location} import org.enso.syntax.text.{AST, Location}
// FIXME [AA] All places where we currently throw a `RuntimeException` should // FIXME [AA] All places where we currently throw a `RuntimeException` should
@ -307,7 +306,7 @@ object AstToAstExpression {
case _ => true case _ => true
} }
val suspendPositions = args.view.zipWithIndex.collect { val suspendPositions = args.zipWithIndex.collect {
case (AstView.SuspendDefaultsOperator(_), ix) => ix case (AstView.SuspendDefaultsOperator(_), ix) => ix
} }

View File

@ -1,7 +1,8 @@
package org.enso.compiler.test package org.enso.compiler.test
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
trait CompilerRunner {} trait CompilerRunner {}
trait CompilerTest extends FlatSpec with Matchers with CompilerRunner trait CompilerTest extends AnyFlatSpec with Matchers with CompilerRunner

View File

@ -7,10 +7,12 @@ import org.enso.core.CoreGraph.DefinitionGen.Node.{Shape => NodeShape}
import org.enso.core.CoreGraph.{DefinitionGen => CoreDef} import org.enso.core.CoreGraph.{DefinitionGen => CoreDef}
import org.enso.graph.{Graph => PrimGraph} import org.enso.graph.{Graph => PrimGraph}
import org.enso.syntax.text.{AST, Location => AstLocation} import org.enso.syntax.text.{AST, Location => AstLocation}
import org.scalatest.{Assertion, BeforeAndAfterEach, Matchers, WordSpec} import org.scalatest.{Assertion, BeforeAndAfterEach}
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
class SmartConstructorsTest class SmartConstructorsTest
extends WordSpec extends AnyWordSpecLike
with Matchers with Matchers
with BeforeAndAfterEach { with BeforeAndAfterEach {

View File

@ -12,7 +12,9 @@ import org.enso.interpreter.instrument.{
import org.enso.interpreter.test.CodeLocationsTestInstrument.LocationsEventListener import org.enso.interpreter.test.CodeLocationsTestInstrument.LocationsEventListener
import org.enso.polyglot.{ExecutionContext, Function, LanguageInfo} import org.enso.polyglot.{ExecutionContext, Function, LanguageInfo}
import org.graalvm.polyglot.{Context, Value} import org.graalvm.polyglot.{Context, Value}
import org.scalatest.{Assertions, FlatSpec, Matchers} import org.scalatest.Assertions
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
case class LocationsInstrumenter(instrument: CodeLocationsTestInstrument) { case class LocationsInstrumenter(instrument: CodeLocationsTestInstrument) {
var bindings: List[EventBinding[LocationsEventListener]] = List() var bindings: List[EventBinding[LocationsEventListener]] = List()
@ -87,7 +89,7 @@ trait InterpreterRunner {
def consumeOut: List[String] = { def consumeOut: List[String] = {
val result = output.toString val result = output.toString
output.reset() output.reset()
result.lines.toList result.linesIterator.toList
} }
def getReplInstrument: ReplDebuggerInstrument = { def getReplInstrument: ReplDebuggerInstrument = {
@ -119,7 +121,7 @@ trait InterpreterRunner {
} }
trait InterpreterTest trait InterpreterTest
extends FlatSpec extends AnyFlatSpec
with Matchers with Matchers
with InterpreterRunner with InterpreterRunner
with ValueEquality with ValueEquality

View File

@ -5,9 +5,10 @@ import java.io.File
import org.enso.pkg.Package import org.enso.pkg.Package
import org.enso.polyglot.{ExecutionContext, LanguageInfo, RuntimeOptions} import org.enso.polyglot.{ExecutionContext, LanguageInfo, RuntimeOptions}
import org.graalvm.polyglot.{Context, Value} import org.graalvm.polyglot.{Context, Value}
import org.scalatest.{FlatSpec, Matchers} import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
trait PackageTest extends FlatSpec with Matchers with ValueEquality { trait PackageTest extends AnyFlatSpec with Matchers with ValueEquality {
def evalTestProject(name: String): Value = { def evalTestProject(name: String): Value = {
val pkgPath = val pkgPath =

View File

@ -1,7 +1,7 @@
package org.enso.interpreter.test.instrument package org.enso.interpreter.test.instrument
import org.enso.interpreter.test.InterpreterTest import org.enso.interpreter.test.InterpreterTest
import collection.JavaConverters._ import scala.jdk.CollectionConverters._
class ReplTest extends InterpreterTest { class ReplTest extends InterpreterTest {
"Repl" should "be able to list local variables in its scope" in { "Repl" should "be able to list local variables in its scope" in {
@ -20,7 +20,7 @@ class ReplTest extends InterpreterTest {
executor.exit() executor.exit()
} }
eval(code) eval(code)
scopeResult.mapValues(_.toString) shouldEqual Map( scopeResult.view.mapValues(_.toString).toMap shouldEqual Map(
"this" -> "Test", "this" -> "Test",
"x" -> "10", "x" -> "10",
"y" -> "20", "y" -> "20",

View File

@ -131,9 +131,9 @@ class ValueExtractorTest extends InterpreterTest {
val visualizationExpr = "val -> here.foo val * 3" val visualizationExpr = "val -> here.foo val * 3"
val visualization = module.evalExpression(visualizationExpr) val visualization = module.evalExpression(visualizationExpr)
val results = val results =
values.mapValues( values.view.mapValues(
v => visualization.execute(v.asInstanceOf[AnyRef]).asLong v => visualization.execute(v.asInstanceOf[AnyRef]).asLong
) ).toMap
results shouldEqual Map("x" -> 33L, "y" -> 153L) results shouldEqual Map("x" -> 33L, "y" -> 153L)
} }

View File

@ -11,7 +11,7 @@ import org.enso.interpreter.test.InterpreterTest
class CodeLocationsTest extends InterpreterTest { class CodeLocationsTest extends InterpreterTest {
def debugPrintCodeLocations(code: String): Unit = { def debugPrintCodeLocations(code: String): Unit = {
var off = 0 var off = 0
code.lines.toList.foreach { line => code.linesIterator.toList.foreach { line =>
val chars: List[Any] = line.toList.map { c => val chars: List[Any] = line.toList.map { c =>
s" ${if (c == ' ') '_' else c} " s" ${if (c == ' ') '_' else c} "
} :+ '' } :+ ''