Skip to content

Commit

Permalink
ScalafmtRunner: extract Dialect as NamedDialect
Browse files Browse the repository at this point in the history
  • Loading branch information
kitbellew committed Nov 21, 2021
1 parent 2055d89 commit 10bdb29
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ object Scalafmt {
parsed.fold(
_.details match {
case ed: ParseException =>
val dialect = runner.dialect.source
val dialect = runner.dialect.name
val msg = s"[dialect $dialect] ${ed.shortMessage}"
Failure(new ParseException(ed.pos, msg))
case ed => Failure(ed)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ object Config {
case Configured.Ok(x)
if default.eq(ScalafmtConfig.uncheckedDefault) &&
x.runner.isDefaultDialect =>
Configured.error(ScalafmtRunner.Dialect.getUnknownError)
Configured.error(NamedDialect.getUnknownError)
case x => x
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.scalafmt.config

import scala.meta.Dialect
import scala.meta.dialects._

case class NamedDialect(name: String, dialect: Dialect)

object NamedDialect {

def apply(pair: sourcecode.Text[Dialect]): NamedDialect = {
apply(pair.source.toLowerCase, pair.value)
}

val scala212 = Scala212
.withAllowTrailingCommas(true) // SIP-27, 2.12.2
val scala213 = Scala213
.withAllowTrailingCommas(true)
val scala3 = Scala3

private[config] val known = Seq[sourcecode.Text[Dialect]](
Scala211,
scala212,
Scala212Source3,
scala213,
Scala213Source3,
Sbt0137,
Sbt1,
scala3
).map(apply).sortBy(_.name)

private[config] val defaultName = "default"
// current default is 213
private[config] val default = apply(defaultName, scala213)

def getName(dialect: Dialect): Option[String] =
known.find(_.dialect eq dialect).map(_.name)

def getUnknownError = {
val knownStr = known.map(_.name).mkString(",")
s"""Default dialect is deprecated; use explicit: [$knownStr]
|Also see https://scalameta.org/scalafmt/docs/configuration.html#scala-dialects"
|""".stripMargin
}

implicit val codec =
ReaderUtil.oneOf(known.map(x => sourcecode.Text(x, x.name)): _*)

}
Original file line number Diff line number Diff line change
Expand Up @@ -144,16 +144,16 @@ case class ScalafmtConfig(
}

private[scalafmt] def withDialect(
dialect: ScalafmtRunner.Dialect.WithName
dialect: NamedDialect
): ScalafmtConfig =
copy(runner = runner.copy(dialect = dialect))

def withDialect(dialect: Dialect, name: String): ScalafmtConfig =
withDialect(ScalafmtRunner.Dialect.withName(name, dialect))
withDialect(NamedDialect(name, dialect))

def withDialect(dialect: Dialect): ScalafmtConfig = withDialect(
dialect,
ScalafmtRunner.Dialect.getName(dialect).getOrElse("unknown dialect")
NamedDialect.getName(dialect).getOrElse("unknown dialect")
)

def forSbt: ScalafmtConfig = copy(runner = runner.forSbt)
Expand Down Expand Up @@ -288,7 +288,7 @@ object ScalafmtConfig {
// scalafmt: { maxColumn = 200 }
import cfg._
import ValidationOps._
val errDialect = " (no support in Scala dialect)"
val errDialect = s" (no support in Scala dialect ${runner.dialect.name})"
val allErrors = new mutable.ArrayBuffer[String]
locally {
implicit val errors = new mutable.ArrayBuffer[String]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.scalafmt.config

import metaconfig._
import scala.meta.Dialect
import scala.meta.Tree
import scala.meta.parsers.Parsed

Expand All @@ -21,14 +20,14 @@ case class ScalafmtRunner(
parser: ScalafmtParser = ScalafmtParser.Source,
optimizer: ScalafmtOptimizer = ScalafmtOptimizer.default,
maxStateVisits: Int = 1000000,
dialect: ScalafmtRunner.Dialect.WithName = ScalafmtRunner.Dialect.default,
dialect: NamedDialect = NamedDialect.default,
ignoreWarnings: Boolean = false,
fatalWarnings: Boolean = false
) {
@inline def getDialect = dialect.value
@inline def getDialect = dialect.dialect

def topLevelDialect = dialect.copy(
value = getDialect
@inline def topLevelDialect = dialect.copy(
dialect = getDialect
.withAllowToplevelTerms(true)
.withToplevelSeparator("")
)
Expand All @@ -44,7 +43,7 @@ case class ScalafmtRunner(
def parse(input: meta.inputs.Input): Parsed[_ <: Tree] =
parser.parse(input, getDialect)

def isDefaultDialect = dialect.source == ScalafmtRunner.Dialect.defaultName
@inline def isDefaultDialect = dialect.name == NamedDialect.defaultName

}

Expand All @@ -65,50 +64,6 @@ object ScalafmtRunner {

val sbt = default.forSbt

object Dialect {
type WithName = sourcecode.Text[Dialect]
def withName(name: String, dialect: Dialect): WithName =
sourcecode.Text(dialect, name)

import scala.meta.dialects._

val scala212 = Scala212
.withAllowTrailingCommas(true) // SIP-27, 2.12.2
val scala213 = Scala213
.withAllowTrailingCommas(true)
val scala3 = Scala3

private[ScalafmtRunner] val known: Seq[WithName] = Seq[WithName](
Scala211,
scala212,
Scala212Source3,
scala213,
Scala213Source3,
Sbt0137,
Sbt1,
scala3
).map(x => withName(x.source.toLowerCase, x.value)).sortBy(_.source)

private[ScalafmtRunner] val defaultName = "default"
// current default is 213
private[ScalafmtRunner] val default = withName(defaultName, scala213)

def getName(dialect: Dialect): Option[String] =
known.find(_.value eq dialect).map(_.source)

def getUnknownError = {
val knownStr = known.map(_.source).mkString(",")
s"""Default dialect is deprecated; use explicit: [$knownStr]
|Also see https://scalameta.org/scalafmt/docs/configuration.html#scala-dialects"
|""".stripMargin
}
}

implicit val dialectCodec = {
val dialects = Dialect.known.map(x => sourcecode.Text(x, x.source))
ReaderUtil.oneOf(dialects: _*)
}

implicit val codec: ConfCodecEx[ScalafmtRunner] =
generic.deriveCodecEx(default).noTypos

Expand Down
5 changes: 2 additions & 3 deletions scalafmt-docs/src/main/scala/docs/ScalafmtModifier.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package docs

import metaconfig.Configured
import org.scalafmt.Scalafmt
import org.scalafmt.config.Config
import org.scalafmt.config.NamedDialect
import org.scalafmt.config.ScalafmtConfig
import org.scalafmt.config.ScalafmtRunner
import scala.meta.inputs.Input
import scala.meta.inputs.Position
import scala.meta.parsers.ParseException
Expand Down Expand Up @@ -71,7 +70,7 @@ object ScalafmtModifier {

private val defaultConfig = ScalafmtConfig.default
.copy(maxColumn = 40)
.withDialect(ScalafmtRunner.Dialect.scala213, "scala213")
.withDialect(NamedDialect.scala213, "scala213")

private val defaultSbtConfig = defaultConfig.forSbt

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import org.scalafmt.config.{
Config,
DanglingParentheses,
Indents,
NamedDialect,
ScalafmtConfig,
ScalafmtParser,
ScalafmtRunner
Expand Down Expand Up @@ -153,8 +154,7 @@ trait HasTests extends FormatAssertions {
case "scalajs" =>
ScalafmtConfig.scalaJs.copy(maxColumn = 79).withDialect(defaultDialect)
case "scala3" =>
ScalafmtConfig.default
.withDialect(ScalafmtRunner.Dialect.scala3, "scala3")
ScalafmtConfig.default.withDialect(NamedDialect.scala3, "scala3")
case _ =>
ScalafmtConfig.default.withDialect(defaultDialect)
}
Expand Down Expand Up @@ -209,8 +209,7 @@ trait HasTests extends FormatAssertions {

object HasTests {

private val defaultDialect =
ScalafmtRunner.Dialect.withName("scala213", ScalafmtRunner.Dialect.scala213)
private val defaultDialect = NamedDialect("scala213", NamedDialect.scala213)

private val testing = ScalafmtConfig.default.copy(
maxColumn = 79,
Expand Down

0 comments on commit 10bdb29

Please sign in to comment.