Skip to content

Commit

Permalink
NIT Refactor
Browse files Browse the repository at this point in the history
- add missing type annotations
- update syntax
- simplify calls to ConfigDb
- extend ShardOptionsUtil with CommandsHelper and apply its abstractions
- misc fixes
  • Loading branch information
Gedochao committed Aug 5, 2022
1 parent 342c073 commit 127a476
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,26 @@ import dependency.AnyDependency
import dependency.parser.DependencyParser

import java.io.{File, InputStream}

import scala.build._
import scala.build.*
import scala.build.blooprifle.BloopRifleConfig
import scala.build.compiler.{BloopCompilerMaker, ScalaCompilerMaker, SimpleScalaCompilerMaker}
import scala.build.errors.BuildException
import scala.build.interactive.Interactive
import scala.build.interactive.Interactive.{InteractiveAsk, InteractiveNop}
import scala.build.internal.CsLoggerUtil._
import scala.build.internal.CsLoggerUtil.*
import scala.build.internal.{Constants, FetchExternalBinary, OsLibc, Util}
import scala.build.options.{Platform, ScalacOpt, ShadowingSeq}
import scala.build.{options => bo}
import scala.build.options as bo
import scala.cli.commands.ScalaJsOptions
import scala.cli.commands.util.CommonOps._
import scala.cli.commands.util.SharedCompilationServerOptionsUtil._
import scala.cli.commands.util.CommonOps.*
import scala.cli.commands.util.SharedCompilationServerOptionsUtil.*
import scala.cli.config.{ConfigDb, Keys}
import scala.concurrent.duration._
import scala.concurrent.ExecutionContextExecutorService
import scala.concurrent.duration.*
import scala.util.Properties
import scala.util.control.NonFatal

object SharedOptionsUtil {
object SharedOptionsUtil extends CommandHelpers {

private def downloadInputs(cache: FileCache[Task]): String => Either[String, Array[Byte]] = {
url =>
Expand Down Expand Up @@ -65,7 +65,7 @@ object SharedOptionsUtil {
logger.message(s"WARNING: provided resource directory path doesn't exist: $path")
path
}
.map(Inputs.ResourceDirectory(_))
.map(Inputs.ResourceDirectory)
val maybeInputs = Inputs(
args,
Os.pwd,
Expand Down Expand Up @@ -94,7 +94,7 @@ object SharedOptionsUtil {
implicit class SharedOptionsOps(v: SharedOptions) {
import v._

def logger = logging.logger
def logger: Logger = logging.logger

private def scalaJsOptions(opts: ScalaJsOptions): options.ScalaJsOptions = {
import opts._
Expand Down Expand Up @@ -168,11 +168,11 @@ object SharedOptionsUtil {
scalac.scalacOption
.filter(_.nonEmpty)
.map(ScalacOpt(_))
.map(Positioned.commandLine(_))
.map(Positioned.commandLine)
),
compilerPlugins =
SharedOptionsUtil.parseDependencies(
dependencies.compilerPlugin.map(Positioned.none(_)),
dependencies.compilerPlugin.map(Positioned.none),
ignoreErrors
),
platform = platformOpt.map(o => Positioned(List(Position.CommandLine()), o))
Expand Down Expand Up @@ -205,7 +205,7 @@ object SharedOptionsUtil {
extraRepositories = dependencies.repository.map(_.trim).filter(_.nonEmpty),
extraDependencies = ShadowingSeq.from(
SharedOptionsUtil.parseDependencies(
dependencies.dependency.map(Positioned.none(_)),
dependencies.dependency.map(Positioned.none),
ignoreErrors
)
)
Expand All @@ -224,12 +224,10 @@ object SharedOptionsUtil {
}

def globalInteractiveWasSuggested: Option[Boolean] =
configDb.get(Keys.globalInteractiveWasSuggested).getOrElse(None)
configDb.getOrNone(Keys.globalInteractiveWasSuggested, logger)

def interactive: Interactive = logging.verbosityOptions.interactive
.orElse(
configDb.get(Keys.interactive).getOrElse(None)
) -> globalInteractiveWasSuggested match {
.orElse(configDb.getOrNone(Keys.interactive, logger)) -> globalInteractiveWasSuggested match {
case (Some(true), Some(true)) => InteractiveAsk
case (Some(true), _) =>
val answers @ List(yesAnswer, _) = List("Yes", "No")
Expand Down Expand Up @@ -263,13 +261,10 @@ object SharedOptionsUtil {
case _ => InteractiveNop
}

def configDb: ConfigDb =
ConfigDb.open(v) match
case Left(ex) => logger.exit(ex)
case Right(configDb) => configDb
def configDb: ConfigDb = ConfigDb.open(v).orExit(logger)

def downloadJvm(jvmId: String, options: bo.BuildOptions): String = {
implicit val ec = options.finalCache.ec
implicit val ec: ExecutionContextExecutorService = options.finalCache.ec
val javaHomeManager = options.javaHomeManager
.withMessage(s"Downloading JVM $jvmId")
val logger = javaHomeManager.cache
Expand Down Expand Up @@ -354,7 +349,7 @@ object SharedOptionsUtil {
!Properties.isWin
)

def strictBloopJsonCheckOrDefault =
def strictBloopJsonCheckOrDefault: Boolean =
strictBloopJsonCheck.getOrElse(bo.InternalOptions.defaultStrictBloopJsonCheck)
}

Expand Down
20 changes: 16 additions & 4 deletions modules/cli/src/main/scala/scala/cli/config/ConfigDb.scala
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package scala.cli.config

import com.github.plokhotnyuk.jsoniter_scala.core.{Key => _, _}
import com.github.plokhotnyuk.jsoniter_scala.macros._
import com.github.plokhotnyuk.jsoniter_scala.core.{Key as _, *}
import com.github.plokhotnyuk.jsoniter_scala.macros.*
import coursier.parse.RawJson

import java.nio.file.attribute.PosixFilePermission

import scala.build.Directories
import scala.build.{Directories, Logger}
import scala.build.errors.BuildException
import scala.cli.commands.SharedOptions
import scala.cli.commands.util.CommonOps.SharedDirectoriesOptionsOps
Expand Down Expand Up @@ -44,6 +43,19 @@ final class ConfigDb private (
.map(Some(_))
}

/** Gets an entry.
*
* If the value cannot be decoded or the key isn't in the DB, None is returned.
*
* Otherwise, the value is returned wrapped in Some.
*/
def getOrNone[T](key: Key[T], logger: Logger): Option[T] = get[T](key) match {
case Right(maybeValue) => maybeValue
case Left(ex) =>
logger.debug(ex)
None
}

/** Sets an entry in memory */
def set[T](key: Key[T], value: T): this.type = {
val b = key.write(value)
Expand Down
4 changes: 2 additions & 2 deletions modules/cli/src/main/scala/scala/cli/config/Keys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ object Keys {
// setting indicating if the global interactive mode was suggested
val globalInteractiveWasSuggested = new Key.BooleanEntry(Seq.empty, "interactive-was-suggested")

def all = Seq[Key[_]](
def all: Seq[Key[_]] = Seq[Key[_]](
interactive,
globalInteractiveWasSuggested,
actions,
Expand All @@ -37,6 +37,6 @@ object Keys {
sonatypePassword
)

lazy val map = all.map(e => e.fullName -> e).toMap
lazy val map: Map[String, Key[_]] = all.map(e => e.fullName -> e).toMap

}
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,10 @@ final case class BuildOptions(
else None
}

lazy val finalCache = internal.cache.getOrElse(FileCache())
lazy val finalCache: FileCache[Task] = internal.cache.getOrElse(FileCache())
// This might download a JVM if --jvm … is passed or no system JVM is installed

lazy val archiveCache = ArchiveCache().withCache(finalCache)
lazy val archiveCache: ArchiveCache[Task] = ArchiveCache().withCache(finalCache)

private lazy val javaCommand0: Positioned[JavaHomeInfo] = javaHomeLocation().map { javaHome =>
val (javaVersion, javaCmd) = OsLibc.javaHomeVersion(javaHome)
Expand Down

0 comments on commit 127a476

Please sign in to comment.