View Source ExFactor

ExFactor is a refactoring helper. Given a module, function name, and arity, it will locate all uses of that function, change the callers to a new module and/or function name, and move the function from the original location to a new file/module. At this time, ExFactor cannot change the function arity.

beta-warning

BETA Warning

ExFactor is still in active development and the API can and may change frequently!

Use at your peril, for now.

example

Example

 mix ex_factor --module TestModule.Here --function my_func --arity 1 --target NewModule.There

roadmap-todone

Roadmap TODONE

  • [X] Write a mix task to invoke the Refactorer
  • [X] dry-run option
  • [X] CLI output, list files changed and created.
  • [X] format changes
  • [X] github actions, run test suite
  • [X] Add Mix.Task tests
  • [X] Add CLI tests
  • [X] Support opt-out of format-ing
  • [X] Option to only change the module name throughout the project
  • [X] update code to rely on compilation tracers, instead of XREF
  • [X] With module-only option, ensure we remove changed aliases
  • [X] Add and configure CHANGELOG tracking.
  • [X] defdelegate

roadmap-todo

Roadmap TODO

  • [] require as:
  • [] find private functions references in refactored fn bodies.
  • [] Add test for one file containing more than one defmodule
  • [] Add test for nested defmodules.
  • [] update test file refs by CLI option
  • [] find dead functions
  • [] find module attrs and also move them?
  • [] find types referenced in the moved specs
  • [] git stage all changes?
  • [] How does this work with macro code? Does that even make sense as a case to handle?
  • [] Write tests to ensure we can find modules across umbrella apps.
  • [] Add configuration hooks?
  • [] ElixirLS integration for VSCode?
  • [] Write the module code to rename usages of the refactored function

updates

Updates

See CHANGELOG.md

Updating the changelog. (Uses auto-changelog) https://github.com/cookpete/auto-changelog

auto-changelog --breaking-pattern "BREAKING CHANGE"

tagging-by-version-in-mix-exs

Tagging by version in mix.exs

    git tag `egrep '@version \"\d\.\d\.\d\".*' mix.exs | awk '{gsub(/"/, "", $2); print $2}'`

installation

Installation

Hex, the package can be installed by adding ex_factor to your list of dependencies in mix.exs:

def deps do
  [
    {:ex_factor, "~> 0.3", only: [:dev]}
  ]
end

Documentation is published on HexDocs. The docs can be found at https://hexdocs.pm/ex_factor.

Alternate name: REFACTORY, just in case.

license

License

See LICENSE

miscellaneous-resources

Miscellaneous resources