Skip to content

Commit c8ef86a

Browse files
committed
Add resilience for whitespaces before and after Matchable and adapt test
Signed-off-by: subhramit <[email protected]>
1 parent 7b733a4 commit c8ef86a

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

scalafix-rules/src/main/scala/scalafix/internal/rule/DisableSyntax.scala

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,16 @@ final class DisableSyntax(config: DisableSyntaxConfig)
116116
val isMatchableCast = {
117117
val tokenIndex = doc.tree.tokens.indexOf(token)
118118
if (tokenIndex >= 0) {
119-
val tokens = doc.tree.tokens.slice(tokenIndex + 1, tokenIndex + 4)
120-
tokens.size >= 3 &&
121-
tokens(0).is[Token.LeftBracket] &&
122-
tokens(1).is[Token.Ident] && tokens(1)
123-
.asInstanceOf[Token.Ident]
124-
.value == "Matchable" &&
125-
tokens(2).is[Token.RightBracket]
119+
val subsequentTokens = doc.tree.tokens.drop(tokenIndex + 1)
120+
val nonSpaceTokens = subsequentTokens.filterNot(_.is[Token.Space])
121+
122+
nonSpaceTokens.take(3).toList match {
123+
case (leftBracket: Token.LeftBracket) ::
124+
(ident: Token.Ident) ::
125+
(rightBracket: Token.RightBracket) :: Nil
126+
if ident.value == "Matchable" => true
127+
case _ => false
128+
}
126129
} else false
127130
}
128131

scalafix-tests/input/src/main/scala-3/test/disableSyntax/MatchableDisableSyntax.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ object MatchableAsInstanceOf {
2525
// whitespace between tokens
2626
class WhitespaceExample {
2727
override def equals(obj: Any): Boolean =
28-
obj.asInstanceOf [ Matchable ] match { /* assert: DisableSyntax.asInstanceOf
28+
obj.asInstanceOf [ Matchable ] match { /* assert: DisableSyntax.asInstanceOfMatchable
2929
^^^^^^^^^^^^
30-
asInstanceOf casts are disabled, use pattern matching instead
30+
asInstanceOf[Matchable] is used here to enable pattern matching on Any. Consider using the .asMatchable extension method instead for better readability.
3131
*/
3232
case _ => true
3333
}
3434
}
35-
}
35+
}

0 commit comments

Comments
 (0)