feat: add repomap support for Scala

Resolves #3578
This commit is contained in:
Vasil Markoukin 2025-03-25 12:53:13 +03:00
parent fb23b6c26f
commit 5af73b1dcf
3 changed files with 129 additions and 0 deletions

View file

@ -0,0 +1,65 @@
; Definitions
(package_clause
name: (package_identifier) @name.definition.module) @definition.module
(trait_definition
name: (identifier) @name.definition.interface) @definition.interface
(enum_definition
name: (identifier) @name.definition.enum) @definition.enum
(simple_enum_case
name: (identifier) @name.definition.class) @definition.class
(full_enum_case
name: (identifier) @name.definition.class) @definition.class
(class_definition
name: (identifier) @name.definition.class) @definition.class
(object_definition
name: (identifier) @name.definition.object) @definition.object
(function_definition
name: (identifier) @name.definition.function) @definition.function
(val_definition
pattern: (identifier) @name.definition.variable) @definition.variable
(given_definition
name: (identifier) @name.definition.variable) @definition.variable
(var_definition
pattern: (identifier) @name.definition.variable) @definition.variable
(val_declaration
name: (identifier) @name.definition.variable) @definition.variable
(var_declaration
name: (identifier) @name.definition.variable) @definition.variable
(type_definition
name: (type_identifier) @name.definition.type) @definition.type
(class_parameter
name: (identifier) @name.definition.property) @definition.property
; References
(call_expression
(identifier) @name.reference.call) @reference.call
(instance_expression
(type_identifier) @name.reference.interface) @reference.interface
(instance_expression
(generic_type
(type_identifier) @name.reference.interface)) @reference.interface
(extends_clause
(type_identifier) @name.reference.class) @reference.class
(extends_clause
(generic_type
(type_identifier) @name.reference.class)) @reference.class

View file

@ -381,6 +381,9 @@ class TestRepoMapAllLanguages(unittest.TestCase):
def test_language_udev(self): def test_language_udev(self):
self._test_language_repo_map("udev", "rules", "USB_DRIVER") self._test_language_repo_map("udev", "rules", "USB_DRIVER")
def test_language_scala(self):
self._test_language_repo_map("scala", "scala", "Greeter")
def _test_language_repo_map(self, lang, key, symbol): def _test_language_repo_map(self, lang, key, symbol):
"""Helper method to test repo map generation for a specific language.""" """Helper method to test repo map generation for a specific language."""
# Get the fixture file path and name based on language # Get the fixture file path and name based on language

View file

@ -0,0 +1,61 @@
package com.example.test
// A trait definition
trait Greeter {
def greet(name: String): String
}
// A class definition with parameters
class FormalGreeter(prefix: String) extends Greeter {
// A method definition
override def greet(name: String): String = {
s"$prefix, $name!"
}
// A val definition
val defaultPrefix: String = "Hello"
// A var definition
var counter: Int = 0
}
// An object definition
object GreeterFactory {
// A function definition
def createGreeter(formal: Boolean): Greeter = {
if (formal) {
new FormalGreeter("Good day")
} else {
new CasualGreeter
}
}
// A type definition
type GreeterType = Greeter
}
// An enum definition
enum Greeting {
// Simple enum cases
case Hello, Hi, Hey
// Full enum case with parameters
case Custom(text: String)
}
// A class that uses generics
class Container[T](val value: T) {
def map[U](f: T => U): Container[U] = new Container(f(value))
}
// A case class
case class Person(name: String, age: Int) {
def introduce(): String = {
val greeter = GreeterFactory.createGreeter(age > 30)
greeter.greet(name) + s" I am $age years old."
}
}
class CasualGreeter extends Greeter {
override def greet(name: String): String = s"Hey, $name!"
}