Skip to content

Commit

Permalink
Router: use template to break before extends
Browse files Browse the repository at this point in the history
In older versions of scalameta, `extends` was not part of template, and
we had to identify the tree just preceding it.

Also, make sure to handle cases when the template is empty (in that case
there's no reason to break before a non-existent `extends`).
  • Loading branch information
kitbellew committed Jul 7, 2023
1 parent bb93f55 commit 5bfe04b
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,13 @@ class FormatOps(
new Policy.Delay(policy, Policy.End.Before(from))
}

val WithTemplateOnLeft = new ExtractFromMeta(ft =>
ft.meta.leftOwner match {
case lo: Stat.WithTemplate => Some(lo.templ)
case _ => None
}
)

def templateCurlyFt(template: Template): Option[FormatToken] =
getStartOfTemplateBody(template).map(tokenBefore)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -817,14 +817,10 @@ class Router(formatOps: FormatOps) {
case FormatToken(
_: T.KwObject | _: T.KwClass | _: T.KwTrait | _: T.KwEnum,
_,
_
WithTemplateOnLeft(template)
) =>
def expire = defnTemplate(leftOwner)
.flatMap {
getTemplateGroups(_).flatMap(
_.lastOption.flatMap(_.headOption.flatMap(_.tokens.headOption))
)
}
def expire = getTemplateGroups(template)
.flatMap(_.last.headOption.flatMap(_.tokens.headOption))
.getOrElse(getLastToken(leftOwner))
def forceNewlineBeforeExtends = Policy.before(expire) {
case Decision(FormatToken(_, soft.ExtendsOrDerives(), m), s)
Expand All @@ -834,8 +830,8 @@ class Router(formatOps: FormatOps) {
val policy =
if (style.binPack.keepParentConstructors) None
else
defnBeforeTemplate(leftOwner).map { x =>
val policyEnd = Policy.End.On(x.tokens.last)
template.tokens.headOption.map { head =>
val policyEnd = Policy.End.Before(head)
delayedBreakPolicy(policyEnd)(forceNewlineBeforeExtends)
}
Seq(Split(Space, 0).withPolicyOpt(policy))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,16 +123,6 @@ object TokenOps {
case _ => None
}

def defnBeforeTemplate(tree: Tree): Option[Tree] =
tree match {
case t: Defn.Object => Some(t.name)
case t: Defn.Class => Some(t.ctor)
case t: Defn.Trait => Some(t.ctor)
case t: Defn.Enum => Some(t.ctor)
case t: Pkg.Object => Some(t.name)
case _ => None
}

val formatOnCode = Set(
"@formatter:on", // IntelliJ
"format: on" // scalariform
Expand Down

0 comments on commit 5bfe04b

Please sign in to comment.