{"id":15541995,"url":"https://github.com/dwickern/scala-nameof","last_synced_at":"2025-09-12T18:31:41.347Z","repository":{"id":45348668,"uuid":"68971125","full_name":"dwickern/scala-nameof","owner":"dwickern","description":"Get the name of an variable, function, class member, or type as a string--at compile-time!","archived":false,"fork":false,"pushed_at":"2021-12-19T18:15:11.000Z","size":62,"stargazers_count":129,"open_issues_count":5,"forks_count":23,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-10-03T12:23:42.723Z","etag":null,"topics":["scala","scala-macros"],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dwickern.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-22T23:42:57.000Z","updated_at":"2024-09-22T23:37:13.000Z","dependencies_parsed_at":"2022-08-29T20:30:47.407Z","dependency_job_id":null,"html_url":"https://github.com/dwickern/scala-nameof","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwickern%2Fscala-nameof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwickern%2Fscala-nameof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwickern%2Fscala-nameof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dwickern%2Fscala-nameof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dwickern","download_url":"https://codeload.github.com/dwickern/scala-nameof/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232772648,"owners_count":18574371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["scala","scala-macros"],"created_at":"2024-10-02T12:20:18.348Z","updated_at":"2025-09-12T18:31:41.306Z","avatar_url":"https://github.com/dwickern.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"\"nameOf\" macro for scala\n========================\n\n[![Build](https://github.com/dwickern/scala-nameof/workflows/build/badge.svg)](https://github.com/dwickern/scala-nameof/actions)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.dwickern/scala-nameof_2.13/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.dwickern/scala-nameof_2.13)\n[![javadoc](https://javadoc.io/badge2/com.github.dwickern/scala-nameof_2.13/javadoc.svg)](https://javadoc.io/doc/com.github.dwickern/scala-nameof_2.13/latest/com/github/dwickern/macros/NameOf.html)\n\nGet the name of an variable, function, class member, or type as a string--at compile-time!\n\nInspired by the [nameof](https://msdn.microsoft.com/en-us/library/dn986596.aspx) operator in C#\n\n\u003e Used to obtain the simple (unqualified) string name of a variable, type, or member. When reporting errors in code, hooking up model-view-controller (MVC) links, firing property changed events, etc., you often want to capture the string name of a method. Using nameof helps keep your code valid when renaming definitions. Before you had to use string literals to refer to definitions, which is brittle when renaming code elements because tools do not know to check these string literals.\n\nUsage\n=====\n\nAdd the library as \"provided\", because it's only needed during compilation and not at runtime:\n```sbt\nlibraryDependencies += \"com.github.dwickern\" %% \"scala-nameof\" % \"4.0.0\" % \"provided\"\n```\n\nAnd import the package:\n```scala mdoc\nimport com.github.dwickern.macros.NameOf._\n```\n\nNow you can use `nameOf` to get the name of a variable or class member:\n```scala mdoc:nest\ncase class Person(name: String, age: Int)\n\ndef toMap(person: Person) = Map(\n  nameOf(person.name) -\u003e person.name,\n  nameOf(person.age) -\u003e person.age\n)\n```\n```scala mdoc:nest\n// compiles to:\n\ndef toMap(person: Person) = Map(\n  \"name\" -\u003e person.name,\n  \"age\" -\u003e person.age\n)\n```\n\nTo get the name of a function:\n```scala mdoc:nest\ndef startCalculation(value: Int): Unit = {\n  println(\"Entered \" + nameOf(startCalculation _))\n}\n```\n```scala mdoc:nest\n// compiles to:\n\ndef startCalculation(value: Int): Unit = {\n  println(\"Entered startCalculation\")\n}\n```\n\nWithout having an instance of the type:\n```scala mdoc:nest\ncase class Person(name: String, age: Int) {\n  def sayHello(other: Person) = s\"Hello ${other.name}!\"\n}\n\nprintln(nameOf[Person](_.age))\nprintln(nameOf[Person](_.sayHello(???)))\n```\n```scala mdoc:nest\n// compiles to:\n\nprintln(\"age\")\nprintln(\"sayHello\")\n```\n\nWithout having an instance of the type for nested case classes:\n```scala mdoc:nest\ncase class Pet(age: Int)\ncase class Person(name: String, pet: Pet)\n\nprintln(qualifiedNameOf[Person](_.pet.age))\n```\n```scala mdoc:nest\n// compiles to:\n\nprintln(\"pet.age\")\n```\n\nYou can also use `nameOfType` to get the unqualified name of a type:\n```scala mdoc:nest\nprintln(nameOfType[java.lang.String])\n```\n```scala mdoc:nest\n// compiles to:\n\nprintln(\"String\")\n```\n\nAnd `qualifiedNameOfType` to get the qualified name:\n```scala mdoc:nest\nprintln(qualifiedNameOfType[java.lang.String])\n```\n```scala mdoc:nest\n// compiles to:\n\nprintln(\"java.lang.String\")\n```\n\n\nDevelopment\n===========\n\nTo run tests for all compilation targets:\n\n    sbt +test\n\nTo publish to your local ivy repository:\n\n    sbt +publishLocal\n\nTo publish to maven central (requires authorization):\n\n    sbt release\n\n\nLicense\n=======\n\nSee [LICENSE](LICENSE.md) (MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdwickern%2Fscala-nameof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdwickern%2Fscala-nameof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdwickern%2Fscala-nameof/lists"}