Skip to content

Commit

Permalink
Policy: add a Split parameter to unexpired()
Browse files Browse the repository at this point in the history
Also, emphasize that the `FormatToken` parameter is for the token after
the split, not at the split.
  • Loading branch information
kitbellew committed May 18, 2024
1 parent a39716d commit 6270ced
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ abstract class Policy {
def rank: Int

def filter(pred: Policy.Clause => Boolean): Policy
def unexpired(ft: FormatToken): Policy
def unexpired(split: Split, nextft: FormatToken): Policy
def noDequeue: Boolean
def switch(trigger: Token, on: Boolean): Policy

Expand All @@ -24,8 +24,8 @@ abstract class Policy {
if (other.isEmpty) this else new Policy.OrElse(this, other)

@inline
final def unexpiredOpt(ft: FormatToken): Option[Policy] = Some(unexpired(ft))
.filter(_.nonEmpty)
final def unexpiredOpt(split: Split, nextft: FormatToken): Option[Policy] =
Some(unexpired(split, nextft)).filter(_.nonEmpty)

@inline
final def &(other: Option[Policy]): Policy = other.fold(this)(&)
Expand Down Expand Up @@ -53,7 +53,7 @@ object Policy {
override def &(other: Policy): Policy = other

override def rank: Int = 0
override def unexpired(ft: FormatToken): Policy = this
override def unexpired(split: Split, nextft: FormatToken): Policy = this
override def filter(pred: Clause => Boolean): Policy = this
override def switch(trigger: Token, on: Boolean): Policy = this
override def noDequeue: Boolean = false
Expand Down Expand Up @@ -92,8 +92,8 @@ object Policy {
s"[$fileLine]$endPolicy${noDeqPrefix}d"
}

override def unexpired(ft: FormatToken): Policy =
if (endPolicy.notExpiredBy(ft)) this else NoPolicy
override def unexpired(split: Split, nextft: FormatToken): Policy =
if (endPolicy.notExpiredBy(nextft)) this else NoPolicy

override def filter(pred: Clause => Boolean): Policy =
if (pred(this)) this else NoPolicy
Expand All @@ -114,7 +114,8 @@ object Policy {

override def rank: Int = math.min(p1.rank, p2.rank)

override def unexpired(ft: FormatToken): Policy = conv(_.unexpired(ft))
override def unexpired(split: Split, nextft: FormatToken): Policy =
conv(_.unexpired(split, nextft))

override def filter(pred: Clause => Boolean): Policy = conv(_.filter(pred))

Expand Down Expand Up @@ -142,7 +143,8 @@ object Policy {

override def rank: Int = math.min(p1.rank, p2.rank)

override def unexpired(ft: FormatToken): Policy = conv(_.unexpired(ft))
override def unexpired(split: Split, nextft: FormatToken): Policy =
conv(_.unexpired(split, nextft))

override def filter(pred: Clause => Boolean): Policy = conv(_.filter(pred))

Expand All @@ -165,8 +167,9 @@ object Policy {
override def rank: Int = 0
override def filter(pred: Clause => Boolean): Policy = this
override def switch(trigger: Token, on: Boolean): Policy = this
override def unexpired(ft: FormatToken): Policy =
if (begPolicy.notExpiredBy(ft)) this else policy.unexpired(ft)
override def unexpired(split: Split, nextft: FormatToken): Policy =
if (begPolicy.notExpiredBy(nextft)) this
else policy.unexpired(split, nextft)
override def noDequeue: Boolean = policy.noDequeue
override def toString: String = s"$begPolicy:$policy"
}
Expand All @@ -183,7 +186,8 @@ object Policy {
override def filter(pred: Clause => Boolean): Policy = conv(_.filter(pred))
override def switch(trigger: Token, on: Boolean): Policy =
conv(_.switch(trigger, on))
override def unexpired(ft: FormatToken): Policy = conv(_.unexpired(ft))
override def unexpired(split: Split, nextft: FormatToken): Policy =
conv(_.unexpired(split, nextft))
override def noDequeue: Boolean = before.noDequeue
override def toString: String = s"REL:[$fileLine]($before,$after)"

Expand Down Expand Up @@ -214,7 +218,8 @@ object Policy {
if (trigger ne this.trigger) conv(_.switch(trigger, on))
else if (on) before
else after.switch(trigger, false)
override def unexpired(ft: FormatToken): Policy = conv(_.unexpired(ft))
override def unexpired(split: Split, nextft: FormatToken): Policy =
conv(_.unexpired(split, nextft))
override def noDequeue: Boolean = before.noDequeue
override def toString: String = s"SW:[$fileLine]($before,$trigger,$after)"

Expand Down Expand Up @@ -249,9 +254,9 @@ object Policy {
if (switched eq policy) this else Proxy(switched, endPolicy)(factory)
}

override def unexpired(ft: FormatToken): Policy =
if (!endPolicy.notExpiredBy(ft)) NoPolicy
else Proxy(policy.unexpired(ft), endPolicy)(factory)
override def unexpired(split: Split, nextft: FormatToken): Policy =
if (!endPolicy.notExpiredBy(nextft)) NoPolicy
else Proxy(policy.unexpired(split, nextft), endPolicy)(factory)

override def noDequeue: Boolean = policy.noDequeue

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ class PolicySummary(val policies: Seq[Policy]) extends AnyVal {
@inline
def noDequeue = policies.exists(_.noDequeue)

def combine(other: Policy, ft: FormatToken): PolicySummary =
if (ft.right.is[Token.EOF]) PolicySummary.empty
def combine(split: Split, nextft: FormatToken): PolicySummary =
if (nextft.right.is[Token.EOF]) PolicySummary.empty
else new PolicySummary(
(other +: policies).flatMap(_.unexpiredOpt(ft)).sortBy(_.rank),
(split.policy +: policies).flatMap(_.unexpiredOpt(split, nextft))
.sortBy(_.rank),
)

def execute(decision: Decision, debug: Boolean = false): Decision = policies
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ final case class State(
.getColumns(tok, nextIndent, startColumn)

val nextTok = tokens.next(tok)
val nextPolicy: PolicySummary = policy.combine(nextSplit.policy, nextTok)
val nextPolicy: PolicySummary = policy.combine(nextSplit, nextTok)

def noOverflowPenalties = (math.max(0, delayedPenalty), 0) // fits inside column

Expand Down

0 comments on commit 6270ced

Please sign in to comment.