diff --git a/aider/queries/tree-sitter-languages/scala-tags.scm b/aider/queries/tree-sitter-languages/scala-tags.scm new file mode 100644 index 000000000..4bf3953ff --- /dev/null +++ b/aider/queries/tree-sitter-languages/scala-tags.scm @@ -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 diff --git a/tests/basic/test_repomap.py b/tests/basic/test_repomap.py index 062bb45e6..17a5753c3 100644 --- a/tests/basic/test_repomap.py +++ b/tests/basic/test_repomap.py @@ -381,6 +381,9 @@ class TestRepoMapAllLanguages(unittest.TestCase): def test_language_udev(self): 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): """Helper method to test repo map generation for a specific language.""" # Get the fixture file path and name based on language diff --git a/tests/fixtures/languages/scala/test.scala b/tests/fixtures/languages/scala/test.scala new file mode 100644 index 000000000..3300aa299 --- /dev/null +++ b/tests/fixtures/languages/scala/test.scala @@ -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!" +}