Skip to content

Commit

Permalink
chore: Update scalameta to 4.9.3
Browse files Browse the repository at this point in the history
I inlined usages of Chars since that part of scalameta is internal and not checked, so better to have these few small methods inside Metals.

I also updated scalafix to latest snapshot to avoid OOM
  • Loading branch information
tgodzik committed Apr 2, 2024
1 parent 73a272e commit 0981edd
Show file tree
Hide file tree
Showing 10 changed files with 57 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,11 @@ final class Diagnostics(
diag.getRange() == d.getRange() && diag.getMessage() == d.getMessage()
)
isDuplicate =
d.getMessage.startsWith("identifier expected but") &&
d.getMessage.replace("`", "").startsWith("identifier expected but") &&
all.asScala.exists { other =>
other.getMessage.startsWith("identifier expected") &&
other.getMessage
.replace("`", "")
.startsWith("identifier expected") &&
other.getRange().getStart() == d.getRange().getStart()
}
if !isDuplicate && !isSameMessage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import java.util.logging.Level

import scala.collection.immutable.Nil
import scala.collection.mutable
import scala.reflect.internal.Chars
import scala.util.control.NonFatal

import scala.meta.internal.jdk.CollectionConverters._
Expand All @@ -16,7 +17,6 @@ import scala.meta.internal.pc.InterpolationSplice
import scala.meta.internal.pc.MemberOrdering
import scala.meta.internal.pc.MetalsGlobal
import scala.meta.internal.semanticdb.Scala._
import scala.meta.internal.tokenizers.Chars

import org.eclipse.{lsp4j => l}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import java.net.URI
import scala.annotation.tailrec

import scala.meta.internal.mtags.MtagsEnrichments.*
import scala.meta.internal.tokenizers.Chars
import scala.meta.pc.OffsetParams

import dotty.tools.dotc.ast.tpd.*
import dotty.tools.dotc.ast.untpd.ImportSelector
import dotty.tools.dotc.core.Contexts.*
import dotty.tools.dotc.core.StdNames.*
import dotty.tools.dotc.util.Chars
import dotty.tools.dotc.util.SourcePosition
import dotty.tools.dotc.util.Spans
import org.eclipse.lsp4j as l
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package scala.meta.internal.docstrings

import scala.meta.internal.tokenizers.Chars._
import scala.meta.internal.mtags.Chars

/**
* Utility methods for doc comment strings
Expand All @@ -9,7 +9,7 @@ object ScaladocUtils {

/** Is character a whitespace character (but not a new line)? */
def isWhitespace(c: Char): Boolean =
c == ' ' || c == '\t' || c == CR
c == ' ' || c == '\t' || c == Chars.CR

/**
* Returns index of string `str` following `start` skipping longest
Expand All @@ -25,7 +25,7 @@ object ScaladocUtils {
* sequence of identifier characters.
*/
def skipIdent(str: String, start: Int): Int =
if (start < str.length && isIdentifierPart(str charAt start))
if (start < str.length && Chars.isIdentifierPart(str charAt start))
skipIdent(str, start + 1)
else start

Expand Down Expand Up @@ -143,7 +143,7 @@ object ScaladocUtils {
startsWithTag(str, section._1, tag)

def startsWithTag(str: String, start: Int, tag: String): Boolean =
str.startsWith(tag, start) && !isIdentifierPart(
str.startsWith(tag, start) && !Chars.isIdentifierPart(
str charAt (start + tag.length)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ package scala.meta.internal.mtags

import scala.meta.Dialect
import scala.meta.inputs._
import scala.meta.internal.tokenizers.Chars._
import scala.meta.internal.tokenizers.Reporter

private[meta] case class CharArrayReader private (
buf: Array[Char],
dialect: Dialect,
reporter: Reporter,
/** the last read character */
var ch: Int = SU,
var ch: Int = Chars.SU,
/** The offset one past the last read character */
var begCharOffset: Int = -1, // included
var endCharOffset: Int = 0, // excluded
Expand Down Expand Up @@ -42,7 +41,7 @@ private[meta] case class CharArrayReader private (

final def nextCommentChar(): Unit = {
if (endCharOffset >= buf.length) {
ch = SU
ch = Chars.SU
} else {
ch = buf(endCharOffset)
begCharOffset = endCharOffset
Expand All @@ -57,7 +56,7 @@ private[meta] case class CharArrayReader private (
*/
final def nextRawChar(): Unit = {
if (endCharOffset >= buf.length) {
ch = SU
ch = Chars.SU
} else {
begCharOffset = endCharOffset
val (hi, hiEnd) = readUnicodeChar(endCharOffset)
Expand Down Expand Up @@ -113,7 +112,7 @@ private[meta] case class CharArrayReader private (
return (c, firstOffset)

def udigit: Int =
try digit2int(buf(escapedOffset), 16)
try Chars.digit2int(buf(escapedOffset), 16)
finally escapedOffset += 1

val code = udigit << 12 | udigit << 8 | udigit << 4 | udigit
Expand All @@ -122,10 +121,12 @@ private[meta] case class CharArrayReader private (

/** replace CR;LF by LF */
private def skipCR() =
if (ch == CR && endCharOffset < buf.length && buf(endCharOffset) == '\\') {
if (
ch == Chars.CR && endCharOffset < buf.length && buf(endCharOffset) == '\\'
) {
val (c, nextOffset) = readUnicodeChar(endCharOffset)
if (c == LF) {
ch = LF
if (c == Chars.LF) {
ch = Chars.LF
endCharOffset = nextOffset
}
}
Expand All @@ -141,7 +142,7 @@ private[meta] case class CharArrayReader private (
}

private def checkLineEnd(): Boolean = {
val ok = ch == LF || ch == FF
val ok = ch == Chars.LF || ch == Chars.FF
if (ok) {
lastLineStartOffset = lineStartOffset
lineStartOffset = endCharOffset
Expand Down
27 changes: 27 additions & 0 deletions mtags/src/main/scala/scala/meta/internal/mtags/Chars.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package scala.meta.internal.mtags

object Chars {
final val LF = '\u000A'
final val FF = '\u000C'
final val CR = '\u000D'
final val SU = '\u001A'

/**
* Convert a character digit to an Int according to given base, -1 if no success
*/
def digit2int(ch: Int, base: Int): Int = {
val num =
(
if (ch <= '9') ch - '0'
else if ('a' <= ch && ch <= 'z') ch - 'a' + 10
else if ('A' <= ch && ch <= 'Z') ch - 'A' + 10
else -1
)
if (0 <= num && num < base) num else -1
}

/** Can character form part of an alphanumeric Scala identifier? */
def isIdentifierPart(c: Int): Boolean =
(c == '$') || Character.isUnicodeIdentifierPart(c)

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import scala.meta.inputs.Input
import scala.meta.inputs.Position
import scala.meta.internal.semanticdb.Language
import scala.meta.internal.semanticdb.SymbolInformation
import scala.meta.internal.tokenizers.Chars._
import scala.meta.internal.tokenizers.Reporter

class JavaToplevelMtags(
Expand Down Expand Up @@ -159,7 +158,7 @@ class JavaToplevelMtags(
@tailrec
def kwOrIdent(start: Int, builder: StringBuilder): Token = {
val ch = reader.ch
if (ch != SU && Character.isJavaIdentifierPart(ch)) {
if (ch != Chars.SU && Character.isJavaIdentifierPart(ch)) {
reader.nextChar()
kwOrIdent(start, builder.append(ch.toChar))
} else if (builder.isEmpty) {
Expand Down Expand Up @@ -190,7 +189,7 @@ class JavaToplevelMtags(
case ',' | '&' | '|' | '!' | '=' | '+' | '-' | '*' | '@' | ':' | '?' |
'%' | '^' | '~' =>
(Token.SpecialSym, false)
case SU => (Token.EOF, false)
case Chars.SU => (Token.EOF, false)
case '.' => (Token.Dot, false)
case '{' => (Token.LBrace, false)
case '}' => (Token.RBrace, false)
Expand Down Expand Up @@ -252,7 +251,7 @@ class JavaToplevelMtags(

private def isWhitespace(ch: Char): Boolean = {
ch match {
case ' ' | '\t' | CR | LF | FF => true
case ' ' | '\t' | Chars.CR | Chars.LF | Chars.FF => true
case _ => false
}
}
Expand Down Expand Up @@ -289,7 +288,8 @@ class JavaToplevelMtags(
}

private def skipLine: Unit =
while ({ val ch = reader.ch; ch != SU && ch != '\n' }) reader.nextChar()
while ({ val ch = reader.ch; ch != Chars.SU && ch != '\n' })
reader.nextChar()

@tailrec
private def toNextNonWhiteSpace(): Unit = {
Expand All @@ -302,7 +302,7 @@ class JavaToplevelMtags(
private def readCurrentLine: String = {
def loop(builder: StringBuilder): String = {
val ch = reader.ch.toChar
if (ch == '\n' || ch == SU)
if (ch == '\n' || ch == Chars.SU)
builder.mkString
else {
val next = builder.append(ch)
Expand Down
2 changes: 1 addition & 1 deletion project/V.scala
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ object V {
val scalaCli = "1.2.0"
val scalafix = "0.12.0"
val scalafmt = "3.7.15"
val scalameta = "4.9.1"
val scalameta = "4.9.3"
val scribe = "3.13.0"
val qdox = "2.1.0"

Expand Down
2 changes: 1 addition & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.4.7")
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.0")
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.0+5-aba10632-SNAPSHOT")
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")
addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.5.2")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class SyntaxErrorLspSuite extends BaseLspSuite("syntax-error") {
_ = assertNoDiff(
client.workspaceDiagnostics,
"""
|Main.scala:1:8: error: identifier expected but object found
|Main.scala:1:8: error: `identifier` expected but `object` found
|object object A
| ^^^^^^
|project/plugins.sbt:1:6: error: repeated modifier
Expand Down Expand Up @@ -247,7 +247,7 @@ class SyntaxErrorLspSuite extends BaseLspSuite("syntax-error") {
| required: Int
| "".
| ^
|a/src/main/scala/A.scala:3:1: error: identifier expected but } found
|a/src/main/scala/A.scala:3:1: error: `identifier` expected but `}` found
|}
|^
|""".stripMargin,
Expand Down

0 comments on commit 0981edd

Please sign in to comment.