csadewa
Tools/tips for easily change a module/function namespace
Hi, i am currently in the middle of refactoring effort, and part of that effort was changing file/schema/module namespace into a more proper namespace, for example changing a module from LoadService.V2.Loads.Schema.JobPreassignedTransporterCompanyData to LoadService.V2.DeliveryOrderManagement.Schema.JobPreassignedTransporterCompanyData.
I found a lot of difficulties in trying to find out which file / module that call LoadService.V2.Loads.Schema.JobPreassignedTransporterCompanyData previously, especially because there is a lot of way to alias a module and call it in Elixir, for example:
- direct call (easiest to find):
LoadService.V2.Loads.Schema.JobPreassignedTransporterCompanyData.some_function
- alias direct module:
alias LoadService.V2.Loads.Schema.JobPreassignedTransporterCompanyData
JobPreassignedTransporterCompanyData.some_function
- alias parent module
alias LoadService.V2.Loads.Schema
Schema.JobPreassignedTransporterCompanyData.some_function
What better ways i could do to make this process of finding & renaming module namespace better?
Most Liked
csadewa
Oh, turn out warning emitted by compiler is useful for catching when refactoring namespace if there’s any missed rename. i currently would
mix clean
mix test &> mix_test_result.txt
# wait a bit + check mix_test_result.txt periodically to ensure all code + test code get compiled, but skip actual testing execution to get compiler warning
if i miss some renaming, it would show up in mix_test_result.txt like
warning: LoadService.V2.DeliveryOrderManagement.Schema.JobPreassignedTransporterCompanyData.btms_send_transporter_exclusive_shipment_notifications/2 is undefined or private
lib/load_service/v2/loads/api/delivery_order.ex:2614: LoadService.V2.Loads.API.DeliveryOrder.save_delivery_order/3
csadewa
A bit of update, turn out that mix has a functionality for tracking caller of a particular module via xref, it can be used to note which file that need to be changed, though it does require full recompilation of code from every invocation, like
mix xref callers LoadService.V2.Loads.JobPreassignedTransporterCompanyData
(..recompile whole application)
lib/load_service/v2/delivery_order_management/jobs.ex (runtime)
lib/load_service/v2/loads/api/delivery_order.ex (runtime)
lib/load_service/v2/oban/job.ex (runtime)
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex









