Skip to content

Commit

Permalink
Policy.Proxy: optionally add own expiration policy
Browse files Browse the repository at this point in the history
  • Loading branch information
kitbellew committed Jul 20, 2020
1 parent 96b0c87 commit ab45d79
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -978,14 +978,9 @@ class FormatOps(
)
}

def delayedBreakPolicyFactory(
leftCheck: Option[Token => Boolean] = None
)(onBreakPolicy: Policy): Policy.Pf = {
def delayedBreakPolicyFactory(onBreakPolicy: Policy): Policy.Pf = {
object OnBreakDecision {
def unapply(d: Decision): Option[Seq[Split]] =
if (leftCheck.exists(!_(d.formatToken.left))) None
else unapplyImpl(d)
private def unapplyImpl(d: Decision): Option[Seq[Split]] = {
def unapply(d: Decision): Option[Seq[Split]] = {
var replaced = false
def decisionPf(s: Split): Split =
if (!s.isNL) s
Expand All @@ -1003,9 +998,14 @@ class FormatOps(
}

def delayedBreakPolicy(
leftCheck: Option[Token => Boolean] = None
end: Policy.End.WithPos
)(onBreakPolicy: Policy)(implicit line: sourcecode.Line): Policy =
Policy.Proxy(onBreakPolicy)(delayedBreakPolicyFactory(leftCheck))
delayedBreakPolicy(Option(end))(onBreakPolicy)

def delayedBreakPolicy(
end: Option[Policy.End.WithPos] = None
)(onBreakPolicy: Policy)(implicit line: sourcecode.Line): Policy =
Policy.Proxy(onBreakPolicy, end)(delayedBreakPolicyFactory)

def decideNewlinesOnlyBeforeClose(
close: Token
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,15 +147,17 @@ object Policy {

object Proxy {
def apply(
policy: Policy
policy: Policy,
end: Option[End.WithPos] = None
)(factory: Policy => Pf)(implicit line: sourcecode.Line): Policy =
if (policy.isEmpty) NoPolicy
else new Proxy(policy, factory)
else new Proxy(policy, factory, end)
}

private class Proxy(
policy: Policy,
factory: Policy => Policy.Pf
factory: Policy => Policy.Pf,
end: Option[End.WithPos] = None
)(implicit line: sourcecode.Line)
extends Policy {
override val f: Pf = factory(policy)
Expand All @@ -166,11 +168,12 @@ object Policy {
Proxy(policy.filter(pred))(factory)

override def unexpired(ft: FormatToken): Policy =
Proxy(policy.unexpired(ft))(factory)
if (!end.forall(_.notExpiredBy(ft))) NoPolicy
else Proxy(policy.unexpired(ft), end)(factory)

override def noDequeue: Boolean = policy.noDequeue

override def toString: String = s"*($policy)"
override def toString: String = s"*($policy)${end.getOrElse("")}"
}

sealed trait End extends (Token => End.WithPos) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -582,8 +582,9 @@ class Router(formatOps: FormatOps) {
if t.meta.rightOwner == leftOwner =>
s.filter(x => x.isNL && !x.isActiveFor(SplitTag.OnelineWithChain))
}
val policyEnd = defnBeforeTemplate(leftOwner).fold(r)(_.tokens.last)
val policy = delayedBreakPolicy()(forceNewlineBeforeExtends)
val policyExpire = defnBeforeTemplate(leftOwner).fold(r)(_.tokens.last)
val policyEnd = Policy.End.After(policyExpire)
val policy = delayedBreakPolicy(policyEnd)(forceNewlineBeforeExtends)
Seq(Split(Space, 0).withPolicy(policy))
// DefDef
case tok @ FormatToken(T.KwDef(), name @ T.Ident(_), _) =>
Expand Down Expand Up @@ -624,9 +625,7 @@ class Router(formatOps: FormatOps) {
val spacePolicy = SingleLineBlock(lambdaToken) | {
if (lambdaIsABlock) None
else
newlinePolicy.map(
delayedBreakPolicy(lambdaLeft.map(x => _.end < x.end))
)
newlinePolicy.map(delayedBreakPolicy(lambdaLeft.map(Policy.End.On)))
}

val noSplitMod = getNoSplit(formatToken, true)
Expand Down

0 comments on commit ab45d79

Please # to comment.