Библиотека sourcecode основана на макросах и предоставляет метаданные во время компиляции.
Пример (взят со страницы):
object Main extends App {
def log(message: String)(implicit line: sourcecode.Line, file: sourcecode.File) =
println(s"${file.value}:${line.value} $message")
log("foo")
}
Это напечатает:
/ Users / jhoffmann / Development / sourcecode / src / main / scala / Main.scala: 5 foo
Вы можете использовать импликации в любом месте своего кода.