Skip to content

unused_macro is very slow #69

@maco

Description

@maco

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions