diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..b8b7d8276 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Scala Steward: Reformat with scalafmt 3.11.2 +90735c8649b6785127d12ad2dab1e2eeb1b13923 diff --git a/.scalafmt.conf b/.scalafmt.conf index ef514177e..23432593d 100755 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.11.1 +version = 3.11.2 runner.dialect = scala3 maxColumn = 100 diff --git a/compiler/stages/src/main/scala/dfhdl/compiler/stages/ConnectUnused.scala b/compiler/stages/src/main/scala/dfhdl/compiler/stages/ConnectUnused.scala index 96e625732..05141ed2c 100644 --- a/compiler/stages/src/main/scala/dfhdl/compiler/stages/ConnectUnused.scala +++ b/compiler/stages/src/main/scala/dfhdl/compiler/stages/ConnectUnused.scala @@ -28,17 +28,18 @@ case object ConnectUnused extends HierarchyStage: case designInst: DFDesignInst => val design = designInst.getDesignBlock val subDB = rootDB.subDBs(design.ownerRef) - val unusedPorts = subDB.atGetSet { // getSet must be the outer flat-DB getSet for ref resolution to work - subDB.members.view - .collect { - case port: DFVal.Dcl if port.isPort => port - }.filter { - _.meta.annotations.exists { - case _: annotation.Unused => true - case _ => false - } - }.toList - } + val unusedPorts = + subDB.atGetSet { // getSet must be the outer flat-DB getSet for ref resolution to work + subDB.members.view + .collect { + case port: DFVal.Dcl if port.isPort => port + }.filter { + _.meta.annotations.exists { + case _: annotation.Unused => true + case _ => false + } + }.toList + } if (unusedPorts.nonEmpty) val dsn = new MetaDesign(designInst, Patch.Add.Config.After): for (unusedPort <- unusedPorts) do @@ -46,7 +47,7 @@ case object ConnectUnused extends HierarchyStage: unusedPort.dfType, unusedPort.modifier.dir, designInst, - subDB.atGetSet{unusedPort.getRelativeName(design)} + subDB.atGetSet { unusedPort.getRelativeName(design) } ).asDclAny pbns <> OPEN Some(dsn.patch) diff --git a/compiler/stages/src/test/scala/StagesSpec/ExplicitNamedVarsSpec.scala b/compiler/stages/src/test/scala/StagesSpec/ExplicitNamedVarsSpec.scala index c35aaafc5..3cdae9269 100644 --- a/compiler/stages/src/test/scala/StagesSpec/ExplicitNamedVarsSpec.scala +++ b/compiler/stages/src/test/scala/StagesSpec/ExplicitNamedVarsSpec.scala @@ -278,7 +278,7 @@ class ExplicitNamedVarsSpec extends StageSpec: // shifted ^ o // else shifted // o <> anon.as(AESByte) - // end xtime + // end xtime // val top = (new xtime).explicitNamedVars // assertCodeString( diff --git a/compiler/stages/src/test/scala/StagesSpec/ReduplicateDesignSpec.scala b/compiler/stages/src/test/scala/StagesSpec/ReduplicateDesignSpec.scala index 7d37199e8..dc2196ae8 100644 --- a/compiler/stages/src/test/scala/StagesSpec/ReduplicateDesignSpec.scala +++ b/compiler/stages/src/test/scala/StagesSpec/ReduplicateDesignSpec.scala @@ -39,6 +39,7 @@ class ReduplicateDesignSpec extends StageSpec: dup_b.y <> out_b dup_c.x <> in_c dup_c.y <> out_c + end Top val id = (new Top).reduplicateNamedDup assertCodeString( @@ -98,12 +99,13 @@ class ReduplicateDesignSpec extends StageSpec: val a = Inner() val dup_b = Inner() val c = Inner() - a.x <> in_a - a.y <> out_a + a.x <> in_a + a.y <> out_a dup_b.x <> in_b dup_b.y <> out_b - c.x <> in_c - c.y <> out_c + c.x <> in_c + c.y <> out_c + end Top val id = (new Top).reduplicateNamedDup assertCodeString( diff --git a/core/src/main/scala/dfhdl/core/DFEnum.scala b/core/src/main/scala/dfhdl/core/DFEnum.scala index 468d8dc1a..65102d386 100644 --- a/core/src/main/scala/dfhdl/core/DFEnum.scala +++ b/core/src/main/scala/dfhdl/core/DFEnum.scala @@ -19,13 +19,11 @@ object DFEncoding: abstract class Default extends StartAt(0) abstract class Gray extends Auto: - final def calcWidth(entryCount: Int): Int = - (entryCount - 1).bitsWidth(false) + final def calcWidth(entryCount: Int): Int = (entryCount - 1).bitsWidth(false) final def encode(idx: Int): BigInt = BigInt(idx ^ (idx >>> 1)) abstract class StartAt[V <: Int & Singleton](value: V) extends Auto: - final def calcWidth(entryCount: Int): Int = - (entryCount - 1 + value).bitsWidth(false) + final def calcWidth(entryCount: Int): Int = (entryCount - 1 + value).bitsWidth(false) final def encode(idx: Int): BigInt = BigInt(idx + value) abstract class OneHot extends Auto: diff --git a/core/src/main/scala/dfhdl/core/DFIf.scala b/core/src/main/scala/dfhdl/core/DFIf.scala index 50623b624..17a0b77d8 100644 --- a/core/src/main/scala/dfhdl/core/DFIf.scala +++ b/core/src/main/scala/dfhdl/core/DFIf.scala @@ -166,6 +166,7 @@ object DFIf: dfc.logEvent(err) err.asVal[DFTypeAny, ModifierAny].asInstanceOf[R] end if + end match catch case e: DFError => DFVal(DFError.Derived(e)).asInstanceOf[R] end fromBranches diff --git a/core/src/main/scala/dfhdl/core/SimplifyFunc.scala b/core/src/main/scala/dfhdl/core/SimplifyFunc.scala index 24779cc56..0e477eada 100644 --- a/core/src/main/scala/dfhdl/core/SimplifyFunc.scala +++ b/core/src/main/scala/dfhdl/core/SimplifyFunc.scala @@ -16,12 +16,12 @@ private object SimplifyFunc: // TODO: maybe drop this limitation, if we can make DropStructsVecs work in // global context. case _ if dfc.ownerOption.isEmpty => None - case NegateDecimalConst(v) => Some(v) - case IdentityOps(v) => Some(v) - case SelfCancelling(v) => Some(v) - case MaxMinWithOffset(v) => Some(v) - case AdditiveCancellation(v) => Some(v) - case _ => None + case NegateDecimalConst(v) => Some(v) + case IdentityOps(v) => Some(v) + case SelfCancelling(v) => Some(v) + case MaxMinWithOffset(v) => Some(v) + case AdditiveCancellation(v) => Some(v) + case _ => None // Checks if an intermediate Func can be merged into the current one. // + and * are only merged when the intermediate has the same dfType (non-carry). @@ -180,6 +180,7 @@ private object SimplifyFunc: getSet.remove(absorbable) Some(func) case _ => None + end match end unapply end MergeAssocFunc @@ -203,6 +204,7 @@ private object SimplifyFunc: ) ) case _ => None + end match end unapply end NegateDecimalConst @@ -230,6 +232,7 @@ private object SimplifyFunc: dfc.mutableDB.setMember(c, _.copy(meta = dfc.getMeta)) ) case _ => None + end match end unapply end IdentityOps @@ -277,7 +280,7 @@ private object SimplifyFunc: offsetFromBase(b, a) match case Some(c) if c > 0 => Some(pick(b, a)) case Some(c) if c < 0 => Some(pick(a, b)) - case _ => + case _ => // a = b + c offsetFromBase(a, b) match case Some(c) if c > 0 => Some(pick(a, b)) @@ -327,6 +330,7 @@ private object SimplifyFunc: val remaining = indexed.collect { case (term, k) if k != i && k != j => term } rebuildChain(remaining) } + end if case _ => None end match end unapply diff --git a/core/src/main/scala/dfhdl/hw/annotation.scala b/core/src/main/scala/dfhdl/hw/annotation.scala index e85ddc219..ebb50f421 100644 --- a/core/src/main/scala/dfhdl/hw/annotation.scala +++ b/core/src/main/scala/dfhdl/hw/annotation.scala @@ -103,7 +103,10 @@ object constraints: ) extends GlobalConstraint: val asIR: ir.constraints.DeviceConfig = ir.constraints.DeviceConfig( - flashPartName, interface(deviceConfig.interface), sizeLimitMb, masterRate + flashPartName, + interface(deviceConfig.interface), + sizeLimitMb, + masterRate ) object deviceConfig: import ir.constraints.DeviceConfig.Interface @@ -163,6 +166,7 @@ object constraints: import ir.constraints.IO.PullMode export PullMode.UP as up export PullMode.DOWN as down + end io object timing: type InclusionPolicy = ir.ClkRstInclusionPolicy diff --git a/core/src/test/scala/CoreSpec/DFMatchSpec.scala b/core/src/test/scala/CoreSpec/DFMatchSpec.scala index 34e5f3f0d..7b27c904a 100644 --- a/core/src/test/scala/CoreSpec/DFMatchSpec.scala +++ b/core/src/test/scala/CoreSpec/DFMatchSpec.scala @@ -178,10 +178,10 @@ class DFMatchSpec extends DFSpec: test("Trivial tuple match skip") { import dfhdl.hw.flag.scalaRanges assertCodeString("") { - val (ret, _) = - (0 until 8).foldLeft[(Byte <> VAL, Byte <> VAL)]((all(0), all(0))) { case ((p, a), _) => + val (ret, _) = (0 until 8).foldLeft[(Byte <> VAL, Byte <> VAL)]((all(0), all(0))) { + case ((p, a), _) => (p, a) - } + } } } diff --git a/docs/getting-started/hello-world/scala-project/.scalafmt.conf b/docs/getting-started/hello-world/scala-project/.scalafmt.conf index 4268e4502..4687f11b8 100644 --- a/docs/getting-started/hello-world/scala-project/.scalafmt.conf +++ b/docs/getting-started/hello-world/scala-project/.scalafmt.conf @@ -1,4 +1,4 @@ -version = 3.11.1 +version = 3.11.2 runner.dialect = scala3 maxColumn = 100 diff --git a/internals/src/main/scala/dfhdl/internals/Checked.scala b/internals/src/main/scala/dfhdl/internals/Checked.scala index f9ea808d4..f8342654d 100644 --- a/internals/src/main/scala/dfhdl/internals/Checked.scala +++ b/internals/src/main/scala/dfhdl/internals/Checked.scala @@ -57,9 +57,9 @@ private class MacroClass[Q <: Quotes](using val quotes: Q)( case "S" => '{ ${ arg0.asExprOf[Int] } + 1 } case "!" => - '{ !${ arg0.asExprOf[Boolean] } } + '{ ! ${ arg0.asExprOf[Boolean] } } case "Negate" => - '{ -${ arg0.asExprOf[Int] } } + '{ - ${ arg0.asExprOf[Int] } } case "ITE" => // if-then-else '{ if (${ arg0.asExprOf[Boolean] }) ${ arg1.asExpr } else ${ arg2.asExpr } diff --git a/internals/src/main/scala/dfhdl/internals/helpers.scala b/internals/src/main/scala/dfhdl/internals/helpers.scala index 86f421a75..a1e5af28c 100644 --- a/internals/src/main/scala/dfhdl/internals/helpers.scala +++ b/internals/src/main/scala/dfhdl/internals/helpers.scala @@ -491,7 +491,7 @@ object AnnotatedWith: // alive so the annotation's downstream implicits (option defaults, etc.) can // still resolve at the broadest bound — callers that depend on a specific Out // will surface the mismatch later. - case None => '{ annotWith[T, UB, UB] } + case None => '{ annotWith[T, UB, UB] } end annotWithMacro end AnnotatedWith diff --git a/lib/src/main/scala/dfhdl/tools/toolsCore/Tool.scala b/lib/src/main/scala/dfhdl/tools/toolsCore/Tool.scala index c0895b037..c1b238947 100644 --- a/lib/src/main/scala/dfhdl/tools/toolsCore/Tool.scala +++ b/lib/src/main/scala/dfhdl/tools/toolsCore/Tool.scala @@ -213,7 +213,10 @@ trait Tool: // killing only the direct child (`gw_sh`, `vsim` -> `vsimk`, ...) leaves the real workers // running, hence the descendants walk. Best-effort and idempotent: safe to call repeatedly. def destroyToolTree(): Unit = - try process.wrapped.toHandle.descendants().forEach(p => { p.destroyForcibly(); () }) + try + process.wrapped.toHandle.descendants().forEach(p => + p.destroyForcibly(); () + ) catch case _: Throwable => () process.wrapped.destroyForcibly() diff --git a/plugin/src/main/scala/plugin/FlattenInlinedPhase.scala b/plugin/src/main/scala/plugin/FlattenInlinedPhase.scala index 37c9f82e8..5431abcd7 100644 --- a/plugin/src/main/scala/plugin/FlattenInlinedPhase.scala +++ b/plugin/src/main/scala/plugin/FlattenInlinedPhase.scala @@ -39,7 +39,9 @@ class FlattenInlinedPhase(setting: Setting) extends PluginPhase: val topLevelCls = callSym.topLevelClass if !topLevelCls.exists then call else if callSym.is(Macro) then - ref(topLevelCls.owner).select(topLevelCls.name)(using ctx.withOwner(topLevelCls.owner)).withSpan(call.span) + ref(topLevelCls.owner).select(topLevelCls.name)(using + ctx.withOwner(topLevelCls.owner) + ).withSpan(call.span) else Ident(topLevelCls.typeRef).withSpan(call.span) diff --git a/plugin/src/main/scala/plugin/PreTyperPhase.scala b/plugin/src/main/scala/plugin/PreTyperPhase.scala index 8d88cce25..2bf993e4c 100644 --- a/plugin/src/main/scala/plugin/PreTyperPhase.scala +++ b/plugin/src/main/scala/plugin/PreTyperPhase.scala @@ -45,8 +45,8 @@ end CustomReporter * - auto-add `@top` annotation to concrete classes that look like DFHDL designs (extend * EDDesign/RTDesign/DFDesign, have `type <> CONST` parameters, or use `<>` in their body), * provided `import dfhdl.*` is in lexical scope and no `@top` annotation is already present. - * Classes extending `Interface` are excluded, since they are never entry points and - * must not receive `@top`. + * Classes extending `Interface` are excluded, since they are never entry points and must not + * receive `@top`. */ class PreTyperPhase(setting: Setting) extends CommonPhase: import untpd.* @@ -246,6 +246,7 @@ class PreTyperPhase(setting: Setting) extends CommonPhase: (hasDesignParent(tmpl.parents) || hasConstParam(tmpl.constr.paramss) || bodyUsesConnect(tmpl.body)) + end shouldAddTop private inline def withScope[A](stats: List[Tree])(body: => A): A = val prev = dfhdlImported diff --git a/plugin/src/main/scala/plugin/TopAnnotPhase.scala b/plugin/src/main/scala/plugin/TopAnnotPhase.scala index 2ac39b665..f334baf55 100644 --- a/plugin/src/main/scala/plugin/TopAnnotPhase.scala +++ b/plugin/src/main/scala/plugin/TopAnnotPhase.scala @@ -366,4 +366,5 @@ class TopAnnotPhase(setting: Setting) extends CommonPhase: defaultsSIntSym = requiredMethod("dfhdl.core.r__For_Plugin.defaults.sint") emptyNoEODFCSym = requiredMethod("dfhdl.core.DFC.emptyNoEO") ctx + end prepareForUnit end TopAnnotPhase