unused_macro is very slow
Bug Description
I ran the unused_macro rule on exmld, and I hit ctrl+c after an hour and a half. I don't know how much longer it would've run for.
To Reproduce
Add meandro to the config in adroll/exmld and mix meandro
Expected Behavior
Complete in a few seconds. (For reference, all other rules finish in about 1.5 seconds.)
Additional Context
exmld on main +11 -2 [!?] via 💧 v1.12.3 (OTP 24) ❯ time mix meandro ==> meandro Compiling 1 file (.ex) Generated meandro app ==> exmld Looking for oxbow lakes to dry up... Meandro rules: [Meandro.Rule.UnusedMacros] Meandro will use 53 files for analysis: ["config/config.exs", "examples/elixir_processor/config/config.exs", "examples/elixir_processor/deps/exmld/config/config.exs", "examples/elixir_processor/deps/exmld/examples/elixir_processor/config/config.exs", "examples/elixir_processor/deps/exmld/examples/elixir_processor/lib/elixir_processor.ex", "examples/elixir_processor/deps/exmld/examples/elixir_processor/lib/elixir_processor/application.ex", "examples/elixir_processor/deps/exmld/examples/elixir_processor/mix.exs", "examples/elixir_processor/deps/exmld/lib/exmld.ex", "examples/elixir_processor/deps/exmld/lib/exmld/kinesis_stage.ex", "examples/elixir_processor/deps/exmld/lib/exmld/kinesis_worker.ex", "examples/elixir_processor/deps/exmld/mix.exs", "examples/elixir_processor/deps/flow/lib/flow.ex", "examples/elixir_processor/deps/flow/lib/flow/coordinator.ex", "examples/elixir_processor/deps/flow/lib/flow/map_reducer.ex", "examples/elixir_processor/deps/flow/lib/flow/materialize.ex", "examples/elixir_processor/deps/flow/lib/flow/window.ex", "examples/elixir_processor/deps/flow/lib/flow/window/count.ex", "examples/elixir_processor/deps/flow/lib/flow/window/fixed.ex", "examples/elixir_processor/deps/flow/lib/flow/window/global.ex", "examples/elixir_processor/deps/flow/lib/flow/window/periodic.ex", "examples/elixir_processor/deps/flow/mix.exs", "examples/elixir_processor/deps/gen_stage/lib/consumer_supervisor.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/buffer.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/dispatcher.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/dispatchers/broadcast_dispatcher.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/dispatchers/demand_dispatcher.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/dispatchers/partition_dispatcher.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/stream.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/streamer.ex", "examples/elixir_processor/deps/gen_stage/lib/gen_stage/utils.ex", "examples/elixir_processor/deps/gen_stage/mix.exs", "examples/elixir_processor/lib/elixir_processor.ex", "examples/elixir_processor/lib/elixir_processor/application.ex", "examples/elixir_processor/mix.exs", "examples/erlang_processor/_build/default/lib/exmld/config/config.exs", "examples/erlang_processor/_build/default/lib/exmld/examples/elixir_processor/config/config.exs", "examples/erlang_processor/_build/default/lib/exmld/examples/elixir_processor/lib/elixir_processor.ex", "examples/erlang_processor/_build/default/lib/exmld/examples/elixir_processor/lib/elixir_processor/application.ex", "examples/erlang_processor/_build/default/lib/exmld/examples/elixir_processor/mix.exs", "examples/erlang_processor/_build/default/lib/exmld/lib/exmld.ex", "examples/erlang_processor/_build/default/lib/exmld/lib/exmld/kinesis_stage.ex", "examples/erlang_processor/_build/default/lib/exmld/lib/exmld/kinesis_worker.ex", "examples/erlang_processor/_build/default/lib/exmld/mix.exs", "examples/erlang_processor/_build/default/plugins/rebar3_elixir_compile/examples/demo/elixir_libs/macro_app/config/config.exs", "examples/erlang_processor/_build/default/plugins/rebar3_elixir_compile/examples/demo/elixir_libs/macro_app/lib/macro_app.ex", "examples/erlang_processor/_build/default/plugins/rebar3_elixir_compile/examples/demo/elixir_libs/macro_app/mix.exs", "examples/erlang_processor/_build/default/plugins/rebar3_elixir_compile/examples/demo/elixir_libs/macro_app/test/macro_app_test.exs", "examples/erlang_processor/_build/default/plugins/rebar3_elixir_compile/examples/demo/elixir_libs/macro_app/test/test_helper.exs", "lib/exmld.ex", ...] ^C BREAK: (a)bort (A)bort with dump (c)ontinue (p)roc info (i)nfo (l)oaded (v)ersion (k)ill (D)b-tables (d)istribution ^C
Executed in 92.90 mins fish external usr time 160.40 mins 108.00 micros 160.40 mins sys time 4.34 mins 889.00 micros 4.34 mins