// SYNTAX TEST "Packages/Scala/Scala.sublime-syntax" // <- source.scala comment.line.double-slash.scala package fubar // ^^^^ keyword.control // ^^^^^ entity.name.namespace.header.scala package fubar { // ^^^^ keyword.control.scala // ^^^^^ entity.name.namespace.scoped.scala // <- meta.namespace.scala } import fubar.{Unit, Foo} // ^^^ keyword.other.import // <- meta.import.scala // ^^^^^ variable.package.scala // ^^^^ variable.import.scala def foo: Baz = 42 //^ storage.type.function.scala // ^^^ entity.name.function.scala // ^^^ support.class // ^ keyword.operator.assignment.scala // ^^ constant.numeric.integer.scala def foo: Baz => Bar = 42 // ^^^ support.class // ^^^ support.class // ^ keyword.operator.assignment.scala def foo(a: Int, b: Bar): Baz = 42 //^ storage.type.function.scala // ^^^ entity.name.function.scala // ^ variable.parameter // ^^^ storage.type.primitive.scala // ^^^ support.class // ^^^ support.class // ^ keyword.operator.assignment.scala // ^^ constant.numeric.integer.scala def +(a: Int) // ^^^ storage.type.function.scala // ^ entity.name.function.scala def `this is a test`(a: Int) // ^^^ storage.type.function.scala // ^^^^^^^^^^^^^^^^ entity.name.function.scala def ::(a: Int) // ^^^ storage.type.function.scala // ^^ entity.name.function.scala def foo_+(a: Int) // ^^^ storage.type.function.scala // ^^^^^ entity.name.function.scala def foo_2(a: Int) // ^^^ storage.type.function.scala // ^^^^^ entity.name.function.scala def foo42_+(a: Int) // ^^^ storage.type.function.scala // ^^^^^^^ entity.name.function.scala def __many_underscores__+(a: Int) // ^^^ storage.type.function.scala // ^^^^^^^^^^^^^^^^^^^^^ entity.name.function.scala def foo42_+_abc(a: Int) // ^^^ storage.type.function.scala // ^^^^^^^ entity.name.function.scala // ^^^^ - entity.name.function def +_foo() // ^^^^ - entity.name.function def foo[A] // ^^^ storage.type.function.scala // ^^^ entity.name.function.scala // ^ support.class def foo(implicit bar: Int): Unit // ^^^^^^^^ storage.modifier.other val foo: Unit // ^^^ storage.type.stable.scala // ^^^ entity.name.val // ^^^^ storage.type.primitive.scala var foo: Unit // ^^^ storage.type.volatile.scala // ^^^ entity.name.var // ^^^^ storage.type.primitive.scala class Foo[A](a: Bar) extends Baz with Bin // ^^^^^^^^^ meta.class.identifier.scala // ^^ storage.type.class.scala // ^^^ entity.name.class // ^ support.class // ^ variable.parameter // ^^^ support.class // ^^^^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala // ^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala class Foo private[this] (a: Int)(b: String) // ^^^^^^^ storage.modifier.access // ^^^^ variable.language.scala // ^ variable.parameter // ^ variable.parameter class Foo(x: Int = 42) // ^ - support // ^ keyword.operator.assignment.scala // ^^ constant.numeric def foo(x: Int = 42) // ^ - support // ^ keyword.operator.assignment.scala // ^^ constant.numeric trait Foo // ^^ storage.type.class.scala // ^^^ entity.name.class object Foo // ^^^ storage.type.class.scala // ^^^ entity.name.class type Foo = Bar // ^^^^ storage.type.scala // ^^^ entity.name.type.scala // ^ keyword.operator.assignment.scala // ^^^ support.class.scala type Foo = Bar => Baz // ^^^^ storage.type.scala // ^^^ entity.name.type.scala // ^ keyword.operator.assignment.scala // ^^^ support.class.scala // ^^^ support.class.scala type Foo[A, B, C] = Bar // ^ support.class // ^ support.class // ^ support.class // ^ keyword.operator.assignment.scala type Foo = Bar { def baz: Int // ^^^ entity.name.function } type Foo = Bar[A] forSome { type A } // ^^^^^^^ keyword.declaration.scala type Foo Bar // ^^^ support.constant 42 // ^^ constant.numeric.integer.scala .421 // ^^^^ constant.numeric.float.scala 42D // ^^^ constant.numeric.float.scala 42d // ^^^ constant.numeric.float.scala 42F // ^^^ constant.numeric.float.scala 42f // ^^^ constant.numeric.float.scala 42L // ^^^ constant.numeric.integer.scala 42l // ^^^ constant.numeric.integer.scala 0x0aF9123 // ^^^^^^^^^ constant.numeric.hex.scala 0.045e-2 // ^^^^^^^^ constant.numeric.float.scala 'a' // ^^^ constant.character.literal.scala '\u1221' // ^^^^^^^^ constant.character.literal.scala true // ^^^^ constant.language.scala false // ^^^^^ constant.language.scala null // ^^^^ constant.language.scala Nil // ^^^ support.constant.scala None // ^^^^ support.constant.scala this // ^^^^ variable.language.scala super // ^^^^^ variable.language.scala "testing" // ^ punctuation.definition.string.begin.scala // ^^^^^^^^^ string.quoted.double.scala // ^ punctuation.definition.string.end.scala "escaped chars: \u1221 \125 \n" // ^^^^^^ constant.character.escape.scala // ^^^ constant.character.escape.scala // ^^ constant.character.escape.scala "bad escaping: \p" // ^ invalid.illegal.lone-escape.scala """escaped in triple: \u1221 \125 \n""" //^^^ punctuation.definition.string.begin.scala // ^^^^^^ constant.character.escape.scala // ^^^ - constant.character.escape.scala // ^^ - constant.character.escape.scala // ^^^ punctuation.definition.string.end.scala """testing""" // ^^^^^^^^^^^^^ string.quoted.triple.scala s"testing $a ${42}" // ^^^^^^^^^ string.quoted.interpolated.scala // ^ support.function // ^^ variable.other // ^^ punctuation.definition.expression // ^^ constant.numeric.integer.scala // ^ punctuation.definition.expression s"""testing $a ${42}""" // ^^^^^^^^^^^ string.quoted.triple.interpolated.scala // ^ support.function // ^^ variable.other // ^^ punctuation.definition.expression // ^^ constant.numeric.integer.scala // ^ punctuation.definition.expression // ^^^ string.quoted.triple.interpolated.scala f"formatted: x: $x%+,.3f ca" // ^ support.function // ^ variable.other.scala // ^^^^^^ constant.other.formatting.scala f"formatted: date: $x%T " // ^ support.function // ^ variable.other.scala // ^^ constant.other.formatting.scala Unit // ^^^^ storage.type.primitive.scala Byte // ^^^^ storage.type.primitive.scala Short // ^^^^^ storage.type.primitive.scala Int // ^^^ storage.type.primitive.scala Long // ^^^^ storage.type.primitive.scala Float // ^^^^^ storage.type.primitive.scala Double // ^^^^^^ storage.type.primitive.scala Boolean // ^^^^^^^ storage.type.primitive.scala String // ^^^^^^ support.constant // this is a comment // ^^^^^^^^^^^^^^^^^^^^ comment.line.double-slash.scala /* // <- comment.block.scala */ /** // <- comment.block.documentation.scala */ /**/0xff //^^^^ comment.block.empty.scala // ^^^^ - comment if // ^^ keyword.control.flow.scala else // ^^^^ keyword.control.flow.scala do // ^^ keyword.control.flow.scala while // ^^^^^ keyword.control.flow.scala for // ^^^ keyword.control.flow.scala yield // ^^^^^ keyword.control.flow.scala match // ^^^^^ keyword.control.flow.scala { case => // ^^^^ keyword.other.declaration.scala } macro // ^^^^^ keyword.other.scala type // ^^^^ storage.type.scala return // ^^^^^^ keyword.control.flow.jump.scala throw // ^^^^^ keyword.control.flow.jump.scala catch // ^^^^^ keyword.control.exception.scala finally // ^^^^^^^ keyword.control.exception.scala ??? // ^^^ keyword.other.scala try // ^^^ keyword.control.exception.scala forSome // ^^^^^^^ keyword.declaration.scala new // ^^^ keyword.other.scala extends // ^^^^^^^ invalid.keyword.dangling-extends.scala with // ^^^^ invalid.keyword.dangling-with.scala class // ^^^^^ storage.type.class.scala trait // ^^^^^ storage.type.class.scala object // ^^^^^^ storage.type.class.scala def // ^^^ storage.type.function.scala val // ^^^ storage.type.stable.scala var // ^^^ storage.type.volatile.scala import // ^^^^^^ keyword.other.import.scala package // ^^^^^^^ keyword.control.scala private // ^^^^^^^ storage.modifier.access protected // ^^^^^^^^^ storage.modifier.access abstract // ^^^^^^^^ storage.modifier.other final // ^^^^^ storage.modifier.other lazy // ^^^^ storage.modifier.other sealed // ^^^^^^ storage.modifier.other implicit // ^^^^^^^^ storage.modifier.other override // ^^^^^^^^ storage.modifier.other val t: ({ type λ[α] = Foo[α] })#λ // ^^^^^^^^^^^^^^ comment.block.scala // ^^^ support.class // ^ comment.block.empty.scala // ^^^^ comment.block.scala val t: ({ type λ[α, β] = Foo[α, β] })#λ // ^^^^^^^^^^^^^^^^^ comment.block.scala // ^^^ support.class // ^ comment.block.empty.scala // ^ comment.block.empty.scala // ^^^^ comment.block.scala a :: b :: Nil // ^^^^^^^^^ source.scala // ^^^ support.constant.scala (a :: b :: Nil) // ^^^^^^^^^ source.scala // ^^^ support.constant.scala a: Int // ^^ source.scala // ^^^ storage.type.primitive.scala (a: Int) // ^ source.scala // ^^^ storage.type.primitive.scala a: Foo // ^^^ support.class { case (abc: Foo, cba @ _) => // ^^^^ keyword.other.declaration.scala // ^^^ variable.parameter // ^^^ support.class // ^^^ variable.parameter // ^ variable.language.underscore.scala // ^^ keyword.operator.arrow.scala case abc @ `abc` => // ^^^ variable.parameter // ^ keyword.operator.at.scala // ^ punctuation.definition.identifier.scala // ^ punctuation.definition.identifier.scala // ^^ keyword.operator.arrow.scala // ^^^^^ - variable.parameter case foo: (Int => Boolean) :: _ => // ^ variable.language.underscore.scala case /* testing */ => // ^^^^^^^^^^^^^ comment.block.scala case // testing // ^^^^^^^^^^ comment.line.double-slash.scala => case 42 => // ^^ constant.numeric.integer.scala case 'a' => // ^^^ constant.character.literal.scala case 'foo => // ^^^^ constant.other.symbol case "foo" => // ^^^^^ string.quoted.double.scala case """foo""" => // ^^^^^^^^^ string.quoted.triple.scala case q"""..$foo""" => // ^^^^^^ string.quoted.triple.interpolated.scala // ^^^^ variable.other // ^^^ string.quoted.triple.interpolated.scala case => // ^^^^^^ text.xml // ^^^ entity.name.tag case true => // ^^^ constant.language.scala case _ ⇒ _ // ^ - keyword case _ if stuff => // ^^ keyword.control.flow.scala // ^^^^^ - entity.name } val abc @ `abc` // ^^^ storage.type.stable.scala // ^^^ entity.name.val // ^ keyword.operator.at.scala // ^ punctuation.definition.identifier.scala // ^ punctuation.definition.identifier.scala // ^^^^^ - entity.name _ // ^ - keyword val ble @ `abc` = _ // ^^^ storage.type.stable.scala // ^^^ entity.name.val // ^ keyword.operator.at.scala // ^^^^^ - entity.name // ^ keyword.operator.assignment.scala // ^ - keyword case object Thingy extends Other // ^^^^ storage.type.class.scala // ^^^^^^ storage.type.class.scala // ^^^^^^ entity.name.class.scala // ^^^^^^^ keyword.declaration.scala // ^^^^^ entity.other.inherited-class.scala case object Thingy extends (Foo => Bar) // ^^^^ storage.type.class.scala // ^^^^^^ storage.type.class.scala // ^^^^^^ entity.name.class.scala // ^^^^^^^ keyword.declaration.scala // ^^^ support.class { case class // ^^^^ storage.type.class.scala // ^^^^^ storage.type.class.scala } case class Thingy(abc: Int) extends Other // ^^^^^^^^^^^^^^^^^ meta.class.identifier.scala // ^^^^ storage.type.class.scala // ^^^^^ storage.type.class.scala // ^^^^^^ entity.name.class.scala // ^^^ variable.parameter // ^^^^^^^ keyword.declaration.scala // ^^^^^ entity.other.inherited-class.scala // for { // ^^^ keyword.control.flow.scala a <- _ // ^ variable.parameter // ^^ keyword.operator.assignment.scala // ^ - keyword a ← _ // ^ variable.parameter // ^ keyword.operator.assignment.scala // ^ - entity.name (b, c @ _) <- _ // ^ variable.parameter // ^ variable.parameter // ^ keyword.operator.at.scala // ^ variable.language.underscore.scala // ^^ keyword.operator.assignment.scala // ^ - keyword _ // ^ - entity.name testing = _ // ^^^^^^^ variable.parameter // ^ keyword.operator.assignment.scala // ^ - variable.operator.scala testing = { // ^^^^^^^ variable.parameter testing = false // ^^^^^^^ - entity.name // ^ keyword.operator.assignment.scala } testing = ( // ^^^^^^^ variable.parameter testing = false // ^^^^^^^ - variable.parameter ) val testing = 42 // ^^^ storage.type.stable.scala // ^^^^^^^ variable.parameter } abc // ^^^ - variable.parameter for (a <- _; (b, c @ _) ← d; val abc = e) f // ^^^ keyword.control.flow.scala // ^ variable.parameter // ^ - keyword // ^ variable.parameter // ^ variable.parameter // ^ keyword.operator.at.scala // ^ variable.language.underscore.scala // ^ keyword.operator.assignment.scala // ^ - variable.parameter // ^^^ storage.type.stable.scala // ^^^ variable.parameter // ^ - variable.parameter // ^ - variable.parameter for { sss <- { {} } // ^^^ variable.parameter qqq <- stuff // ^^^ variable.parameter } for { back <- Traverse[Option] // ^^^^ variable.parameter // ^^^^^^^^ support.constant // ^^^^^^ support.class .traverse[Free, Stuff](res) { r => } // ^^^^^^^^ - entity.name // ^^^ - entity.name // ^ - entity.name } val baseSettings: Seq[Def.Setting[_]] = _ // ^^^^^^^^^^^^ entity.name.val.scala // ^^^ support.class // ^ - keyword for { r <- blah } yield r.copy(foo = a) // ^ - entity.name // ^^^^ - entity.name // ^^^ - entity.name { case foo.Bar => 42 // ^^^ - variable // ^ punctuation.accessor.scala case Bar.foo => 42 // ^^^ - variable // ^ punctuation.accessor.scala } val Foo = 42 // ^^^ entity.name.val val (Foo, x) = 42 // ^^^ support.constant.scala // ^ entity.name.val { Set[Foo[A, A] forSome { type A }, A] // ^ support.class } def foo: Int // ^^^ entity.name.function // fubar // <- source.scala comment.line.double-slash new Foo // ^^^ support.class.scala new (Foo ~> Bar) // ^^^ support.class.scala // ^^ support.type.scala // ^^^ support.class.scala class Foo(val bar: Baz) extends AnyVal // ^^^ storage.type.scala // ^^^^^^^ keyword.declaration.scala // ^^^^^^ entity.other.inherited-class.scala class Foo(implicit bar: Baz) extends AnyVal // ^^^^^^^^ storage.modifier.other // ^^^^^^^ keyword.declaration.scala // ^^^^^^ entity.other.inherited-class.scala val Stuff(f1, v1) = ??? // ^^^^^ support.constant.scala new Foo(new Foo) // ^^^ keyword.other.scala new Foo.Bar.Baz // ^ punctuation.accessor.scala // ^^^ support.class.scala // ^ punctuation.accessor.scala // ^^^ support.class.scala new Foo#Bar#Baz // ^ punctuation.accessor.scala // ^^^ support.class.scala // ^ punctuation.accessor.scala // ^^^ support.class.scala type Foo = Foo.Bar // ^ punctuation.accessor.scala type Foo = Foo#Bar // ^ punctuation.accessor.scala val x: OptionT[({ type λ[α] = Foo[α, Int] })#λ, String] = ??? // ^^^^^^^^^^^^^^ comment.block // ^ comment.block.empty // ^^^^ comment.block class Foo[+A] // ^ keyword.operator class Foo[-A] // ^ keyword.operator class Foo[A <: Int] // ^^ keyword.operator class Foo[A >: Int] // ^^ keyword.operator class Foo[A <% Int] // ^^ keyword.operator class Foo[A: Int] // ^ keyword.operator type Foo <: Bar // ^^ keyword.operator // ^^^ support.class type Foo >: Bar // ^^ keyword.operator // ^^^ support.class { a => ??? } // ^ variable.parameter { (a, b) => ??? } // ^ variable.parameter // ^ variable.parameter { a: Int => ??? } // ^ variable.parameter // ^^^ storage.type.primitive.scala { (a: Int, b: Int) => ??? } // ^ variable.parameter // ^^^ storage.type.primitive.scala // ^ variable.parameter // ^^^ storage.type.primitive.scala (a) => ??? // ^ variable.parameter (a, b) => ??? // ^ variable.parameter // ^ variable.parameter (a: Int) => ??? // ^ variable.parameter // ^^^ storage.type.primitive.scala (a: Int, b: Int) => ??? // ^ variable.parameter // ^^^ storage.type.primitive.scala // ^ variable.parameter // ^^^ storage.type.primitive.scala (a: Int, b: Int) ⇒ ??? // ^ variable.parameter // ^^^ storage.type.primitive.scala // ^ variable.parameter // ^^^ storage.type.primitive.scala // ^ storage.type.function.arrow a => ??? // ^ variable.parameter a: Int => ??? // ^ variable.parameter // ^^^ storage.type.primitive.scala { case _ if thing => // ^^^^ keyword.other.declaration.scala // ^^^^^ - variable.parameter // ^^ - storage.type.function.arrow } a =>a // ^ variable.parameter a =>42 // ^ variable.parameter // ^^ constant.numeric.integer.scala (a: Int => Boolean) => 42 // ^^ keyword.operator.arrow.scala // ^^^^^^^ storage.type (a: Foo[A] forSome { type A }) => 42 // ^ variable.parameter // ^^^ support.class // ^^^^^^^ keyword.declaration.scala () // ^^ constant.language.scala Foo() // ^^^ support.constant.scala // ^^ - constant.language.scala Foo[A]() // ^^ - constant.language.scala foo[A]() // ^^ - constant.language.scala foo() bar () // ^^ - constant.language.scala // ^^ constant.language.scala foo()() // ^^ - constant.language.scala foo(())() // ^^ constant.language.scala // ^^ - constant.language.scala () => 42 // ^^ - constant.language.scala // ^^ storage.type.function.arrow "testing /*comments*/" // ^^^^^^^^^^^^ string.quoted.double // ^^^^^^^^^^^^ - comment cb: ((Throwable \/ Unit) => Unit) => 42 // ^^ variable.parameter // ^^ support.type.scala // ^^ storage.type.function.arrow def foo(a: A <:< B) // ^^^ support.type.scala def foo(a: A >:> B) // ^^^ support.type.scala def foo(a: A =:= B) // ^^^ support.type.scala def foo(a: A =:= B = null) // ^ keyword.operator.assignment.scala // ^^^^ constant.language.scala def foo(a: A :: B) // ^^ support.type.scala class Foo(a: A <:< B) // ^^^ support.type.scala class Foo(a: A >:> B) // ^^^ support.type.scala class Foo(a: A =:= B) // ^^^ support.type.scala class Foo(a: A =:= B = null) // ^ keyword.operator.assignment.scala // ^^^^ constant.language.scala class Foo(a: A :: B) // ^^ support.type.scala import foo // <- meta.import.scala // ^^^ variable.import.scala import foo; import bar // ^^^ variable.import.scala // ^^^^^^ keyword.other.import.scala // ^^^ variable.import.scala import foo.bar // ^^^^^^^ variable.package.scala import foo.{bar, bar => baz, bar=>baz} // ^^^^^^^^^^^^^^^^^ meta.import.selector.scala // ^^^ variable.import.scala // ^^^ variable.import.renamed-from.scala // ^^ keyword.operator.arrow.scala // ^^^ variable.import.renamed-to.scala // ^^^ variable.import.renamed-from.scala // ^^ keyword.operator.arrow.scala // ^^^ variable.import.renamed-to.scala import foo.{ bar => bin // ^^^ variable.import.renamed-from.scala // ^^^ variable.import.renamed-to.scala } import foo._ // ^ variable.language.underscore.scala import foo.{Foo => _} // ^ variable.language.underscore.scala for {} yield () // ^^^^^ keyword.control.flow.scala // ^^ constant.language.scala 42.bar // ^ - constant.numeric.scala baz[m.type] // ^^^^ keyword.other.scala foo: m.type // ^^^^ keyword.other.scala == // ^^ - keyword offset >= 0 // ^^ - keyword { case chunk #: h => // ^ variable.parameter } val chunk #: h = ??? // ^ entity.name.val for { if things >= stuff // ^^^^^^ - variable.parameter // ^^^^^ - variable.parameter } for (if things >= stuff) // ^^^^^^ - variable.parameter // ^^^^^ - variable.parameter _ // ^ variable.language.underscore.scala foo._1 // ^ - variable.language.scala foo_= // ^ - keyword foo_ // ^ - variable.language foo({ _ => () }) // ^ variable.language.underscore.scala // ^^ storage.type.function.arrow foo({ _: Unit => () }) // ^ variable.language.underscore.scala // ^^ storage.type.function.arrow stuff: _* // ^^ keyword.operator.varargs.scala { case _ @ _* => // ^^ keyword.operator.varargs.scala } val _ @ _* = things // ^^ keyword.operator.varargs.scala s"testing ${things} and more!" // ^^^^^^ - string // ^^^^^^ source.scala.embedded foo.bar // ^ punctuation.accessor.scala (foo, bar) // ^ punctuation.separator.scala { case (foo, bar) => // ^ punctuation.separator.scala } val (foo, bar) = ??? // ^ punctuation.separator.scala foo eq bar // ^^ keyword.operator.word.scala new Config() // ^^ - constant val A: Foo = stuff // ^ entity.name.val.scala type Maybe[A] = { type Inner = A; def x: Int } // ^^ storage.type.function.scala // ^ entity.name.function.scala for { // ^^^ keyword.control.flow.scala stuff = sequenceU.map(_.flatten) // thingy _ <- fooinConns.map(_.map(t => { })) // ^^ keyword.operator.assignment.scala } yield () new Foo with Bar with Baz // ^^^^ keyword.declaration.scala // ^^^ support.class.scala // ^^^^ keyword.declaration.scala // ^^^ support.class.scala type Thing = Foo with Bar with Baz // ^^^^ keyword.declaration.scala // ^^^ support.class.scala Foo[Foo with Bar] // ^^^^ keyword.declaration.scala // ^^^ support.class.scala xs: Foo with Bar // ^^^^ keyword.declaration.scala // ^^^ support.class.scala classTag[U] // ^^^^^ - storage.type s"before ${classTag[U] stuff} after" // ^^^^^^ string.quoted.interpolated.scala // ^^^^^ - storage.type // ^^^^^ string.quoted.interpolated.scala { case Stuff(thing, other) => // ^^^^^ variable.parameter.scala // ^^^^^ variable.parameter.scala } { case (x, y: Int => String) => () // ^^ keyword.operator.arrow.scala // ^^^^^^ support.class.scala } { case (foo.bar, _) => () // ^^^ - variable } val Stuff(thing, other) = ??? // ^^^^^ entity.name.val.scala // ^^^^^ entity.name.val.scala x: List[Int] => () // ^ variable.parameter.scala // ^^ storage.type.function.arrow.scala /** private */ class Foo // ^^^^^ storage.type.class foo // ^^^ - comment /* /* test // ^^^^ comment.block.scala */ test // ^^^^ comment.block.scala */ test // ^^^^ - comment /** /** test // ^^^^ comment.block.documentation.scala */ test // ^^^^ comment.block.documentation.scala */ test // ^^^^ - comment def <(a: Int) = 42 // ^ entity.name.function.scala // ^ variable.parameter.scala // ^^^^^ text.xml entity.name.tag.xml // ^^^ text.xml entity.other.attribute-name.localname.xml // ^ text.xml string.quoted.double.xml punctuation.definition.string.begin.xml // ^^ text.xml string.quoted.double.xml // ^ text.xml string.quoted.double.xml punctuation.definition.string.end.xml // ^^^^^^^^^^^^^^^^^^^^^^ - comment // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.xml meta.tag.xml // ^ text.xml meta.tag.xml // ^ text.xml string.quoted.single.xml punctuation.definition.string.begin.xml // ^ text.xml string.quoted.single.xml punctuation.definition.string.end.xml // ^^ source.scala constant.numeric.integer.scala { 42 + "thing" // ^^^^^^^^^^^^ - text.xml // ^^ source.scala constant.numeric.integer.scala // ^^^^^^^ source.scala string.quoted.double.scala // comments! // ^^^^^^^^^^^^ source.scala comment.line.double-slash.scala // ^^^^^^^^^ - text.xml text.xml // ^^^^^^^^^ text.xml meta.tag.xml // ^^^^^^ entity.name.tag.xml } "stuff" // ^^^^^^^ - string // ^^^^^^^^^^^^^^^^^ comment.block.xml more tags! /* not a comment */ // ^^^^^^^^^^^^^^^^^^^ - comment // invalid.illegal.bad-closing-tag.xml // ^^^^^^^^^^^^^^^^^^^^^ invalid.illegal.reserved-proc-instr.xml // ^^^^^^^^ - invalid // ^^ punctuation.definition.tag.begin.xml // ^^^ entity.name.tag.xml // ^^^^^^^ string.quoted.double.xml // ^^ punctuation.definition.tag.end.xml // ^^^^^^^^^^^^^^^^^^^^^^ - comment // ^^^^^^^^^^^^^^^^^^^^^^^^ text.xml meta.tag.xml // ^ punctuation.definition.tag.begin.xml // ^ invalid.illegal.bad-ampersand.xml // ^ invalid.illegal.missing-entity.xml // ^ invalid.illegal.missing-entity.xml // ^^ punctuation.definition.tag.end.xml // ^^^^^^^^^^^^^^^^ text.xml meta.tag.xml // ^ punctuation.definition.tag.begin.xml // ^^^ constant.character.entity.xml // ^ punctuation.definition.tag.begin.xml & // ^^^^^ constant.character.entity.xml - meta.tag.xml class Test1 (a: String) // ^ variable.parameter.scala class Test1 (a: String) // ^ - variable class Test1 (val a: String) { "string" // ^^^^^^^^ string.quoted.double.scala } def test (arg: String) = arg // ^^^ variable.parameter.scala def test (arg: String) (arg: String) = arg // ^^^ variable.parameter.scala // the following test is paired together def foo: Map[Bar] def connectionMap: Unit // ^^^ storage.type.function.scala def foo: Map[Bar]=42 // ^^ constant.numeric.integer.scala x: Foo.Bar => () // ^ variable.parameter.scala // ^^ storage.type.function.arrow.scala x: Foo#Bar => () // ^ variable.parameter.scala // ^^ storage.type.function.arrow.scala object Stuff { case } thing // ^^^^^ - variable s"thingy " // ^ punctuation.definition.string.begin.scala def thing(): Other def boo: Int // ^^^ storage.type.function.scala // ^^^ entity.name.function.scala for { abc = () => 42 // ^^ storage.type.function.arrow.scala } for ( abc = () => 42 // ^^ storage.type.function.arrow.scala ) new { "foo" // ^^^^^ string.quoted.double.scala } def foo(a: String*, b: (Int => String)*, c: Int*): Negative* // ^ keyword.operator.varargs.scala // ^ keyword.operator.varargs.scala // ^ keyword.operator.varargs.scala // ^ support.type.scala - keyword def foo(a: Int * String): Unit // ^ support.type.scala - keyword class Foo(a: String*) // ^ keyword.operator.varargs.scala class Foo(a: String* ) // ^ - keyword def foo(a: String* ) // ^ - keyword trait AlgebraF[F[_]] { type f[x] = Algebra[F,x] } // ^^^^ storage.type.scala // ^ keyword.operator.assignment.scala // annotation examples from: http://www.scala-lang.org/files/archive/spec/2.11/11-annotations.html @deprecated("Use D", "1.0") class C { ... } // <- meta.annotation // ^^ variable.annotation // ^^ string // ^ meta.annotation // ^ - meta.annotation @transient @volatile var m: Int // ^^ variable.annotation // ^ variable.annotation String @local // ^ punctuation.definition.annotation // ^^ variable.annotation (e: @unchecked) match { ... } // ^^ variable.annotation // ^^^^^ keyword.control.flow // more complex: @scala.beans.BeanProperty // <- meta.annotation // <- meta.annotation.identifier //^^^^^^^^^^^^^^^^^^^^^^^ meta.annotation.identifier // ^^^^^^^^^^^^ variable.annotation // ^ punctuation.accessor (e: Int @unchecked) match { ... } // ^^ storage.type.primitive // ^^ variable.annotation // ^^^^^ keyword.control.flow @obsolete("this class is horrible don't use it", alpha=3) // ^^ variable.annotation // ^ string // ^ constant.numeric.integer trait Function0[@specialized(Unit, Int, Double) T] { // ^^ variable.annotation // ^^ storage.type.primitive // ^ support.class // ^ punctuation.definition.annotation // ^ meta.annotation // ^ meta.annotation.parameters // ^ - meta.annotation // ^ punctuation.separator.arguments.annotation def apply: T } x: Foo @volatile with Bar @foo.bar @bar with Baz // ^^ variable.annotation // ^^ keyword.declaration // ^^^ support.class // ^^^^^ - variable.annotation // ^^^ variable.annotation // ^^^ variable.annotation // ^^^ support.class extends // ^^^^^^^ invalid.keyword.dangling-extends.scala with // ^^^^ invalid.keyword.dangling-with.scala class Foo with Bar // ^^^^ invalid.keyword.with-before-extends.scala class Foo extends Bar extends Baz // ^^^^^^^ invalid.keyword.extends-after-extends.scala class Foo extends Bar[A with B](42) // ^ support.class.scala // ^^^^ keyword.declaration.scala // ^ support.class.scala // ^^ constant.numeric.integer.scala class Foo extends Bar { val x = 42 } with Baz // ^ punctuation.section.braces.begin.scala // ^ punctuation.section.braces.end.scala // ^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala class Foo { val x = 42 } extends Bar with Baz // ^ punctuation.section.braces.begin.scala // ^ punctuation.section.braces.end.scala // ^^^^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala class Foo { // <- meta.class.body.scala } class Foo extends Bar { // <- meta.class.body.scala } { // ^ punctuation.section.block.begin.scala // <- meta.block.scala } // ^ punctuation.section.block.end.scala ( // ^ punctuation.section.group.begin.scala // <- meta.group.scala ) // ^ punctuation.section.group.end.scala [ // ^ punctuation.definition.generic.begin.scala // <- meta.generic.scala ] // ^ punctuation.definition.generic.end.scala class Foo extends Bar(42) // ^ punctuation.section.parens.begin.scala // ^ punctuation.section.parens.end.scala class Foo extends (Int => String) // ^ punctuation.section.parens.begin.scala // ^ punctuation.section.parens.end.scala class Foo extends Bar[Int] // ^ punctuation.section.brackets.begin.scala // ^ punctuation.section.brackets.end.scala object Underscore_ // ^^^^^^ storage.type.class.scala // ^^^^^^^^^^^ entity.name.class.scala match { case _ //^^^^ - meta.pattern // ^ meta.pattern.scala => 42 // ^^ - meta.block.case.first // ^^ - meta.pattern // ^^ meta.block.case.first.scala { // <- - meta.block.case } case _ => 42 // ^^ - meta.block.case.non-first // ^^ - meta.pattern // ^^ meta.block.case.non-first.scala case _ => 42 // ^^ - meta.block.case.non-first // ^^ meta.block.case.non-first.scala } class Foo extends Bar // ^^^^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala class Foo extends Bar with Baz // ^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala class Foo extends Bar with Baz with Bin // ^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala def foo 42 // ^^ constant.numeric.integer.scala def foo() 42 // ^^ constant.numeric.integer.scala def foo(): 42 // ^^ constant.numeric.integer.scala val foo: Thing =42 // ^^ constant.numeric.integer.scala var foo: Thing =42 // ^^ constant.numeric.integer.scala class Foo extends Bar with { import Thing._ // ^^^^^^ keyword.other.import.scala // ^^^^^ variable.package.scala } class Foo extends Bar.Baz with bin.Baz // ^^^^^^^ entity.other.inherited-class.scala // ^ punctuation.accessor.scala // ^^^^^^^ entity.other.inherited-class.scala // ^ punctuation.accessor.scala final case class { final case => // ^^^^^ - variable } val ~ = 42 // ^ entity.name.val.scala val \/- = 42 // ^^^ entity.name.val.scala type ~[+A] = A // ^ keyword.operator type ~[A <: B] = A // ^^ keyword.operator type ~[A >: B] = A // ^^ keyword.operator +() // ^^ - constant for { // abc <- } yield thing // ^^^^^ - variable for ( // abc <- ) yield thing // ^^^^^ - variable for { abc /* <- */ } yield thing // ^^^^^ - variable for { "abc <-" } yield thing // ^^^^^ - variable for { abc /* abc */ <- // ^^^ variable.parameter.scala } yield thing // ^^^^^ - variable John Smith]]> // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string.unquoted.cdata.xml // ^ - invalid // ^^^^^^^^^ punctuation.definition.string.begin.xml // ^^^^^^ - entity // ^^^ punctuation.definition.string.end.xml // ^ - invalid //^^^^^ text.xml meta.tag.xml //^ punctuation.definition.tag.begin // ^^^ entity.name.tag // ^ punctuation.definition.tag.end // ^ - text.xml text.xml John Smith]]> // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.xml string.unquoted.cdata.xml // ^ - invalid // ^^^^^^^^^ punctuation.definition.string.begin.xml // ^^^^^^ - entity // ^^^ punctuation.definition.string.end.xml // ^ - invalid //^^^^^^ text.xml meta.tag.xml //^^ punctuation.definition.tag.begin // ^^^ entity.name.tag // ^ punctuation.definition.tag.end case class // ^^^^ storage.type.class.scala new Monad[Catenable] with Traverse // ^ punctuation.definition.generic.begin.scala // ^^^^^^^^^^^ meta.generic.scala // ^ punctuation.definition.generic.end.scala // ^^^^ keyword.declaration.scala // ^^^^^^^^ support.class.scala final class A final class B // ^^^^^ storage.modifier.other.scala // ^^^^^ storage.type.class.scala // ^ entity.name.class.scala abc match { case $foo(bar) => () // ^^^^ - variable } sealed trait Foo sealed trait Bar // ^^^^^^ storage.modifier.other.scala // ^^^^^ storage.type.class.scala // ^^^ entity.name.class.scala package object foo extends Bar with Baz // ^^^^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala // ^^^^ keyword.declaration.scala // ^^^ entity.other.inherited-class.scala new RangeColumn(range) with LongColumn { def apply(row: Int) = a + row } // ^^^^ keyword.declaration.scala // ^^^^^^^^^^ support.class.scala // ^^^ storage.type.function.scala implicit def M: Monad[M] implicit def Monad // ^^^^^^^^ storage.modifier.other.scala // ^^^ storage.type.function.scala // ^ entity.name.function.scala type Foo = Bar // ^^^ support.class.scala type Foo = Bar // ^^^ support.constant.scala type Foo = Unit type Bar = Unit // ^^^ entity.name.type.scala // ^ keyword.operator.assignment.scala