mirror of
https://github.com/tiennm99/serena.git
synced 2026-10-13 06:15:43 +00:00
fix(erlang): address functions by name/arity without the name path separator
Erlang LS identifies functions, types and parameterised macros as `name/arity`, but `/` separates the components of a Serena name path, so `create_user/4` was parsed as "symbol `4` nested inside `create_user`" and could never match -- not even via the name path Serena itself reported for the symbol. Browsing still worked, but find_referencing_symbols, replace_symbol_body and insert_after_symbol were unusable on Erlang functions. Normalize the name to `create_user#4` instead. `#` cannot occur in an unquoted Erlang atom, so it can never collide with a real name, unlike `@`. The arity is kept rather than stripped because it is part of a function's identity in Erlang: create_order/3 and create_order/2 are different functions and may coexist in one module. Also document the "no `/` in symbol names" rule on _normalize_symbol_name, which is what the next backend for such a language needs to know.
This commit is contained in:
1 parent
9fc8033ece
commit
29d07d4f6b
5 files changed
+148
-2
No files matched your search
@@ -68,7 +68,8 @@ Some languages require additional installations or setup steps, as noted.
|
||||
* **Elm**
|
||||
(requires Elm compiler)
|
||||
* **Erlang**
|
||||
(requires installation of beam and [erlang_ls](https://github.com/erlang-ls/erlang_ls); experimental, might be slow or hang)
|
||||
(requires installation of beam and [erlang_ls](https://github.com/erlang-ls/erlang_ls); experimental, might be slow or hang;
|
||||
note that functions are addressed as `name#arity`, e.g. `create_user#4`, because `/` is reserved as the name path separator)
|
||||
* **F#**
|
||||
(requires [.NET v8.0+](https://dotnet.microsoft.com/en-us/download/dotnet); uses FsAutoComplete/Ionide, which is auto-installed; for Homebrew .NET on macOS, set DOTNET_ROOT in your environment)
|
||||
* **Fortran**
|
||||
|
||||
Reference in new issue
Block a user