Skip to content

ckochx/ex_factor

Repository files navigation

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

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

Use at your peril, for now.

Example

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

Roadmap TODONE

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

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

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

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

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

See LICENSE

Miscellaneous resources

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages