🧪

Elixir標準モジュールの数を数えてみた

2022/03/18に公開

はじめに

ふと、"Elixirは標準モジュールをどれくらい提供しているのだろう?"と疑問に思ったので調査してみました。

TL;DR

$ ag '^defmodule [a-zA-Z.]* do' --stats-only --elixir--ignore-dir=test lib/
290 matches
242 files contained matches
249 files searched
3736169 bytes searched
0.663903 seconds

Elixir言語の標準モジュール数は、290個でした。

検索対象と条件

以下の対象について調べます。

  • Elixir言語のGitHubリポジトリに含まれる開発のためのモジュールのことを標準モジュールとする
  • defmoduleで始まる行の数をモジュールの数とする
  • 標準モジュールをテストするためのモジュールはカウントしない(testディレクトリ)
  • 検索対象ファイルは .exs.ex に絞る

対象バージョンは Elixir v1.13.3 とします。
https://github.com/elixir-lang/elixir/tree/v1.13.3

やり方

今回はgrepツールとしてthe_silver_searcher(ag)を使います。

the_silver_searcherはgrepツールの一種で、grepツールの1種であるackよりも高速かつ高機能であることを売りにしています。
the_silver_searcherでdefmoduleで始まる行を数え、その検索ヒット数をモジュール数とします。
コマンドはagです。
バージョンは 2.2.0 を使います。

$ ag --version
ag version 2.2.0

コマンド解説

モジュール数を調べるためのagコマンドを説明します。

# 実行したコマンド(リポジトリルートから)
$ ag '^defmodule [a-zA-Z.]* do' --stats-only --elixir --ignore-dir=test lib/

'^defmodule [a-zA-Z.]* do'

defmoduleから始まる行を検索対象に取る正規表現です。
正規表現はコチラのサイトが参考になると思います。
https://userweb.mnet.ne.jp/nakama/

--stats-only

--statsオプションを付けると、結果の末尾にヒット数や捜査ファイル数など検索結果のレポートを表示します。
--stats-onlyを設定するとレポートだけが表示されなくなります。
今回はヒット数だけ必要なので設定しました。

$ ag --help | ag stats
     --stats              Print stats (files scanned, time taken, etc.)
     --stats-only         Print stats and nothing else.

--elixir

the_silver_searcherは、特定のプログラミング言語の拡張子ファイルだけを検索するオプションを提供しています。
--elixirオプションを設定すると、.ex.exx.exsだけを検索対象にします。

$ ag --list-file-types | ag -A 1 elixir
  --elixir
      .ex  .eex  .exs

他にどんな言語があるのかは、--list-file-typesオプションで調べることができます。

--ignore-dir=test

--ignore-dirは検索対象から除外するディレクトリ名のパターンを指定可能です。
Elixirはtest/ディレクトリにテストファイルを入れているためtest完全一致で除外しました。

lib/

検索対象にするディレクトリです。
Elixirはlib/以外には.ex.exsは配置していないため実行時間を短くするため指定しています。

検索結果

--stats-onlyを除外したコマンドの実行結果を掲載しておきます。

検索にヒットしたファイル名とヒットした行
$ ag '^defmodule [a-zA-Z.]* do' --elixir --ignore-dir=test lib/
lib/eex/lib/eex/smart_engine.ex
1:defmodule EEx.SmartEngine do

lib/eex/lib/eex/engine.ex
1:defmodule EEx.Engine do

lib/eex/lib/eex/compiler.ex
1:defmodule EEx.Compiler do

lib/eex/lib/eex/tokenizer.ex
1:defmodule EEx.Tokenizer do

lib/eex/mix.exs
1:defmodule EEx.MixProject do

lib/eex/lib/eex.ex
1:defmodule EEx.SyntaxError do
10:defmodule EEx do

lib/elixir/diff.exs
1:defmodule Diff do

lib/elixir/lib/access.ex
1:defmodule Access do

lib/elixir/lib/atom.ex
1:defmodule Atom do

lib/elixir/lib/agent.ex
1:defmodule Agent do

lib/elixir/lib/agent/server.ex
1:defmodule Agent.Server do

lib/elixir/lib/application.ex
1:defmodule Application do

lib/elixir/lib/behaviour.ex
1:defmodule Behaviour do

lib/elixir/lib/bitwise.ex
1:defmodule Bitwise do

lib/elixir/lib/base.ex
1:defmodule Base do

lib/elixir/lib/calendar/date_range.ex
1:defmodule Date.Range do

lib/elixir/lib/calendar/date.ex
1:defmodule Date do

lib/elixir/lib/calendar/datetime.ex
1:defmodule DateTime do

lib/elixir/lib/calendar/iso.ex
1:defmodule Calendar.ISO do

lib/elixir/lib/calendar/naive_datetime.ex
1:defmodule NaiveDateTime do

lib/elixir/lib/calendar/time.ex
1:defmodule Time do

lib/elixir/lib/calendar/time_zone_database.ex
1:defmodule Calendar.TimeZoneDatabase do
74:defmodule Calendar.UTCOnlyTimeZoneDatabase do

lib/elixir/lib/calendar.ex
1:defmodule Calendar do

lib/elixir/lib/code/identifier.ex
1:defmodule Code.Identifier do

lib/elixir/lib/code/fragment.ex
1:defmodule Code.Fragment do

lib/elixir/lib/code/normalizer.ex
1:defmodule Code.Normalizer do

lib/elixir/lib/code/formatter.ex
1:defmodule Code.Formatter do

lib/elixir/lib/code/typespec.ex
1:defmodule Code.Typespec do

lib/elixir/lib/code.ex
1:defmodule Code do

lib/elixir/lib/config/provider.ex
1:defmodule Config.Provider do

lib/elixir/lib/config/reader.ex
1:defmodule Config.Reader do

lib/elixir/lib/config.ex
1:defmodule Config do

lib/elixir/lib/dict.ex
1:defmodule Dict do

lib/elixir/lib/dynamic_supervisor.ex
1:defmodule DynamicSupervisor do

lib/elixir/lib/file/stat.ex
3:defmodule File.Stat do

lib/elixir/lib/exception.ex
1:defmodule Exception do
721:defmodule RuntimeError do
725:defmodule ArgumentError do
767:defmodule ArithmeticError do
807:defmodule SystemLimitError do
811:defmodule SyntaxError do
839:defmodule TokenMissingError do
867:defmodule CompileError do
876:defmodule BadFunctionError do
889:defmodule BadStructError do
898:defmodule BadMapError do
907:defmodule BadBooleanError do
916:defmodule MatchError do
925:defmodule CaseClauseError do
934:defmodule WithClauseError do
943:defmodule CondClauseError do
952:defmodule TryClauseError do
961:defmodule BadArityError do
978:defmodule UndefinedFunctionError do
1156:defmodule FunctionClauseError do
1256:defmodule Code.LoadError do
1265:defmodule Protocol.UndefinedError do
1305:defmodule KeyError do
1378:defmodule UnicodeConversionError do
1401:defmodule Enum.OutOfBoundsError do
1405:defmodule Enum.EmptyError do
1409:defmodule File.Error do
1427:defmodule File.CopyError do
1445:defmodule File.RenameError do
1463:defmodule File.LinkError do
1475:defmodule ErlangError do

lib/elixir/lib/file/stream.ex
1:defmodule File.Stream do

lib/elixir/lib/file.ex
1:defmodule File do

lib/elixir/lib/enum.ex
202:defmodule Enum do

lib/elixir/lib/float.ex
3:defmodule Float do

lib/elixir/lib/function.ex
1:defmodule Function do

lib/elixir/lib/gen_event/stream.ex
1:defmodule GenEvent.Stream do

lib/elixir/lib/hash_set.ex
1:defmodule HashSet do

lib/elixir/lib/hash_dict.ex
1:defmodule HashDict do

lib/elixir/lib/gen_event.ex
1:defmodule GenEvent do

lib/elixir/lib/gen_server.ex
1:defmodule GenServer do

lib/elixir/lib/integer.ex
1:defmodule Integer do

lib/elixir/lib/inspect/algebra.ex
1:defmodule Inspect.Opts do
166:defmodule Inspect.Error do
173:defmodule Inspect.Algebra do

lib/elixir/lib/io.ex
1:defmodule IO do

lib/elixir/lib/io/stream.ex
1:defmodule IO.StreamError do
12:defmodule IO.Stream do

lib/elixir/lib/io/ansi.ex
1:defmodule IO.ANSI.Sequence do
17:defmodule IO.ANSI do

lib/elixir/lib/io/ansi/docs.ex
1:defmodule IO.ANSI.Docs do

lib/elixir/lib/kernel/error_handler.ex
3:defmodule Kernel.ErrorHandler do

lib/elixir/lib/kernel/lexical_tracker.ex
7:defmodule Kernel.LexicalTracker do

lib/elixir/lib/kernel/cli.ex
1:defmodule Kernel.CLI do

lib/elixir/lib/kernel/parallel_compiler.ex
1:defmodule Kernel.ParallelCompiler do

lib/elixir/lib/kernel/parallel_require.ex
1:defmodule Kernel.ParallelRequire do

lib/elixir/lib/kernel/utils.ex
3:defmodule Kernel.Utils do

lib/elixir/lib/kernel/typespec.ex
1:defmodule Kernel.Typespec do

lib/elixir/lib/kernel/special_forms.ex
1:defmodule Kernel.SpecialForms do

lib/elixir/lib/keyword.ex
1:defmodule Keyword do

lib/elixir/lib/kernel.ex
9:defmodule Kernel do

lib/elixir/lib/list.ex
1:defmodule List do

lib/elixir/lib/macro/env.ex
1:defmodule Macro.Env do

lib/elixir/lib/map.ex
1:defmodule Map do

lib/elixir/lib/map_set.ex
1:defmodule MapSet do

lib/elixir/lib/macro.ex
3:defmodule Macro do

lib/elixir/lib/module/locals_tracker.ex
15:defmodule Module.LocalsTracker do

lib/elixir/lib/module/parallel_checker.ex
1:defmodule Module.ParallelChecker do

lib/elixir/lib/module/types/helpers.ex
1:defmodule Module.Types.Helpers do

lib/elixir/lib/module/types/of.ex
1:defmodule Module.Types.Of do

lib/elixir/lib/module/types/expr.ex
1:defmodule Module.Types.Expr do

lib/elixir/lib/module/types/pattern.ex
1:defmodule Module.Types.Pattern do

lib/elixir/lib/module/types/unify.ex
1:defmodule Module.Types.Unify do

lib/elixir/lib/module/types.ex
1:defmodule Module.Types do

lib/elixir/lib/node.ex
1:defmodule Node do

lib/elixir/lib/option_parser.ex
1:defmodule OptionParser do

lib/elixir/lib/module.ex
1:defmodule Module do

lib/elixir/lib/path.ex
1:defmodule Path do

lib/elixir/lib/port.ex
1:defmodule Port do

lib/elixir/lib/process.ex
1:defmodule Process do

lib/elixir/lib/range.ex
1:defmodule Range do

lib/elixir/lib/record/extractor.ex
1:defmodule Record.Extractor do

lib/elixir/lib/protocol.ex
1:defmodule Protocol do

lib/elixir/lib/record.ex
1:defmodule Record do

lib/elixir/lib/regex.ex
1:defmodule Regex do

lib/elixir/lib/set.ex
1:defmodule Set do

lib/elixir/lib/stream/reducers.ex
1:defmodule Stream.Reducers do

lib/elixir/lib/registry.ex
1:defmodule Registry do
1405:defmodule Registry.Supervisor do
1444:defmodule Registry.Partition do

lib/elixir/lib/stream.ex
1:defmodule Stream do

lib/elixir/lib/string_io.ex
1:defmodule StringIO do

lib/elixir/lib/supervisor/default.ex
1:defmodule Supervisor.Default do

lib/elixir/lib/supervisor/spec.ex
1:defmodule Supervisor.Spec do

lib/elixir/lib/string.ex
3:defmodule String do

lib/elixir/lib/supervisor.ex
1:defmodule Supervisor do

lib/elixir/lib/system.ex
1:defmodule System do

lib/elixir/lib/task/supervised.ex
1:defmodule Task.Supervised do

lib/elixir/lib/task/supervisor.ex
1:defmodule Task.Supervisor do

lib/elixir/lib/task.ex
1:defmodule Task do

lib/elixir/lib/tuple.ex
1:defmodule Tuple do

lib/elixir/lib/uri.ex
1:defmodule URI do

lib/elixir/mix.exs
1:defmodule Elixir.MixProject do

lib/elixir/lib/version.ex
1:defmodule Version do

lib/elixir/unicode/tokenizer.ex
1:defmodule String.Tokenizer do

lib/elixir/unicode/unicode.ex
143:defmodule String.Unicode do
420:defmodule String.Break do

lib/ex_unit/examples/difference.exs
3:defmodule Difference do

lib/ex_unit/examples/one_of_each.exs
3:defmodule TestOneOfEach do

lib/ex_unit/lib/ex_unit/capture_log.ex
1:defmodule ExUnit.CaptureLog do

lib/ex_unit/lib/ex_unit/capture_io.ex
1:defmodule ExUnit.CaptureIO do

lib/ex_unit/lib/ex_unit/assertions.ex
1:defmodule ExUnit.AssertionError do
29:defmodule ExUnit.MultiError do
45:defmodule ExUnit.Assertions do

lib/ex_unit/lib/ex_unit/callbacks.ex
1:defmodule ExUnit.Callbacks do

lib/ex_unit/lib/ex_unit/capture_server.ex
1:defmodule ExUnit.CaptureServer do

lib/ex_unit/lib/ex_unit/case_template.ex
1:defmodule ExUnit.CaseTemplate do

lib/ex_unit/lib/ex_unit/cli_formatter.ex
1:defmodule ExUnit.CLIFormatter do

lib/ex_unit/lib/ex_unit/case.ex
1:defmodule ExUnit.DuplicateTestError do
5:defmodule ExUnit.DuplicateDescribeError do
9:defmodule ExUnit.Case do

lib/ex_unit/lib/ex_unit/event_manager.ex
1:defmodule ExUnit.EventManager do

lib/ex_unit/lib/ex_unit/diff.ex
1:defmodule ExUnit.Diff do

lib/ex_unit/lib/ex_unit/failures_manifest.ex
1:defmodule ExUnit.FailuresManifest do

lib/ex_unit/lib/ex_unit/doc_test.ex
1:defmodule ExUnit.DocTest do

lib/ex_unit/lib/ex_unit/filters.ex
1:defmodule ExUnit.Filters do

lib/ex_unit/lib/ex_unit/on_exit_handler.ex
1:defmodule ExUnit.OnExitHandler do

lib/ex_unit/lib/ex_unit/formatter.ex
1:defmodule ExUnit.Formatter do

lib/ex_unit/lib/ex_unit/runner.ex
1:defmodule ExUnit.Runner do

lib/ex_unit/lib/ex_unit/server.ex
1:defmodule ExUnit.Server do

lib/ex_unit/lib/ex_unit/runner_stats.ex
1:defmodule ExUnit.RunnerStats do

lib/ex_unit/lib/ex_unit.ex
1:defmodule ExUnit do

lib/ex_unit/mix.exs
1:defmodule ExUnit.MixProject do

lib/iex/lib/iex/app.ex
1:defmodule IEx.App do

lib/iex/lib/iex/broker.ex
1:defmodule IEx.Broker do

lib/iex/lib/iex/cli.ex
37:defmodule IEx.CLI do

lib/iex/lib/iex/autocomplete.ex
1:defmodule IEx.Autocomplete do

lib/iex/lib/iex/config.ex
1:defmodule IEx.Config do

lib/iex/lib/iex/evaluator.ex
1:defmodule IEx.Evaluator do

lib/iex/lib/iex/history.ex
1:defmodule IEx.History do

lib/iex/lib/iex/helpers.ex
1:defmodule IEx.Helpers do

lib/iex/lib/iex/introspection.ex
3:defmodule IEx.Introspection do

lib/iex/lib/iex/pry.ex
1:defmodule IEx.Pry do

lib/iex/lib/iex/server.ex
1:defmodule IEx.State do
15:defmodule IEx.Server do

lib/iex/mix.exs
1:defmodule IEx.MixProject do

lib/iex/lib/iex.ex
1:defmodule IEx do

lib/logger/lib/logger/app.ex
1:defmodule Logger.App do

lib/logger/lib/logger/backend_supervisor.ex
1:defmodule Logger.BackendSupervisor do

lib/logger/lib/logger/filter.ex
1:defmodule Logger.Filter do

lib/logger/lib/logger/config.ex
1:defmodule Logger.Config do

lib/logger/lib/logger/backends/console.ex
1:defmodule Logger.Backends.Console do

lib/logger/lib/logger/formatter.ex
3:defmodule Logger.Formatter do

lib/logger/lib/logger/handler.ex
1:defmodule Logger.Handler do

lib/logger/lib/logger/utils.ex
1:defmodule Logger.Utils do

lib/logger/lib/logger/translator.ex
1:defmodule Logger.Translator do

lib/logger/lib/logger/watcher.ex
1:defmodule Logger.Watcher do

lib/logger/mix.exs
1:defmodule Logger.MixProject do

lib/logger/lib/logger.ex
1:defmodule Logger do

lib/mix/lib/mix/cli.ex
1:defmodule Mix.CLI do

lib/mix/lib/mix/compilers/test.ex
1:defmodule Mix.Compilers.Test do

lib/mix/lib/mix/compilers/application_tracer.ex
1:defmodule Mix.Compilers.ApplicationTracer do

lib/mix/lib/mix/compilers/erlang.ex
1:defmodule Mix.Compilers.Erlang do

lib/mix/lib/mix/compilers/elixir.ex
1:defmodule Mix.Compilers.Elixir do

lib/mix/lib/mix/config.ex
1:defmodule Mix.Config do

lib/mix/lib/mix/dep/elixir_scm.ex
2:defmodule Mix.Dep.ElixirSCM do

lib/mix/lib/mix/dep/fetcher.ex
7:defmodule Mix.Dep.Fetcher do

lib/mix/lib/mix/dep/loader.ex
4:defmodule Mix.Dep.Loader do

lib/mix/lib/mix/dep/converger.ex
4:defmodule Mix.Dep.Converger do

lib/mix/lib/mix/dep/lock.ex
5:defmodule Mix.Dep.Lock do

lib/mix/lib/mix/dep/umbrella.ex
1:defmodule Mix.Dep.Umbrella do

lib/mix/lib/mix/exceptions.ex
1:defmodule Mix.NoTaskError do
54:defmodule Mix.InvalidTaskError do
64:defmodule Mix.ElixirVersionError do
81:defmodule Mix.NoProjectError do
88:defmodule Mix.Error do

lib/mix/lib/mix/dep.ex
1:defmodule Mix.Dep do

lib/mix/lib/mix/generator.ex
1:defmodule Mix.Generator do

lib/mix/lib/mix/hex.ex
1:defmodule Mix.Hex do

lib/mix/lib/mix/local.ex
1:defmodule Mix.Local do

lib/mix/lib/mix/local/installer.ex
1:defmodule Mix.Local.Installer do

lib/mix/lib/mix/project_stack.ex
1:defmodule Mix.ProjectStack do

lib/mix/lib/mix/project.ex
1:defmodule Mix.Project do

lib/mix/lib/mix/public_key.ex
1:defmodule Mix.PublicKey do

lib/mix/lib/mix/rebar.ex
1:defmodule Mix.Rebar do

lib/mix/lib/mix/remote_converger.ex
1:defmodule Mix.RemoteConverger do

lib/mix/lib/mix/release.ex
1:defmodule Mix.Release do

lib/mix/lib/mix/scm/path.ex
1:defmodule Mix.SCM.Path do

lib/mix/lib/mix/scm/git.ex
1:defmodule Mix.SCM.Git do

lib/mix/lib/mix/scm.ex
1:defmodule Mix.SCM do

lib/mix/lib/mix/shell.ex
1:defmodule Mix.Shell do

lib/mix/lib/mix/shell/quiet.ex
1:defmodule Mix.Shell.Quiet do

lib/mix/lib/mix/shell/io.ex
1:defmodule Mix.Shell.IO do

lib/mix/lib/mix/shell/process.ex
1:defmodule Mix.Shell.Process do

lib/mix/lib/mix/state.ex
1:defmodule Mix.State do

lib/mix/lib/mix/task.compiler.ex
1:defmodule Mix.Task.Compiler do

lib/mix/lib/mix/task.ex
1:defmodule Mix.Task do

lib/mix/lib/mix/tasks/app.tree.ex
1:defmodule Mix.Tasks.App.Tree do

lib/mix/lib/mix/tasks/app.start.ex
1:defmodule Mix.Tasks.App.Start do

lib/mix/lib/mix/tasks/app.config.ex
1:defmodule Mix.Tasks.App.Config do

lib/mix/lib/mix/tasks/archive.build.ex
1:defmodule Mix.Tasks.Archive.Build do

lib/mix/lib/mix/tasks/archive.ex
1:defmodule Mix.Tasks.Archive do

lib/mix/lib/mix/tasks/archive.uninstall.ex
1:defmodule Mix.Tasks.Archive.Uninstall do

lib/mix/lib/mix/tasks/archive.check.ex
1:defmodule Mix.Tasks.Archive.Check do

lib/mix/lib/mix/tasks/archive.install.ex
1:defmodule Mix.Tasks.Archive.Install do

lib/mix/lib/mix/tasks/clean.ex
1:defmodule Mix.Tasks.Clean do

lib/mix/lib/mix/tasks/cmd.ex
1:defmodule Mix.Tasks.Cmd do

lib/mix/lib/mix/tasks/compile.all.ex
1:defmodule Mix.Tasks.Compile.All do

lib/mix/lib/mix/tasks/compile.app.ex
1:defmodule Mix.Tasks.Compile.App do

lib/mix/lib/mix/tasks/compile.elixir.ex
1:defmodule Mix.Tasks.Compile.Elixir do

lib/mix/lib/mix/tasks/compile.erlang.ex
1:defmodule Mix.Tasks.Compile.Erlang do

lib/mix/lib/mix/tasks/compile.ex
1:defmodule Mix.Tasks.Compile do

lib/mix/lib/mix/tasks/compile.leex.ex
1:defmodule Mix.Tasks.Compile.Leex do

lib/mix/lib/mix/tasks/compile.protocols.ex
1:defmodule Mix.Tasks.Compile.Protocols do

lib/mix/lib/mix/tasks/compile.yecc.ex
1:defmodule Mix.Tasks.Compile.Yecc do

lib/mix/lib/mix/tasks/deps.clean.ex
1:defmodule Mix.Tasks.Deps.Clean do

lib/mix/lib/mix/tasks/deps.ex
1:defmodule Mix.Tasks.Deps do

lib/mix/lib/mix/tasks/deps.compile.ex
1:defmodule Mix.Tasks.Deps.Compile do

lib/mix/lib/mix/tasks/deps.loadpaths.ex
1:defmodule Mix.Tasks.Deps.Loadpaths do

lib/mix/lib/mix/tasks/deps.get.ex
1:defmodule Mix.Tasks.Deps.Get do

lib/mix/lib/mix/tasks/deps.precompile.ex
1:defmodule Mix.Tasks.Deps.Precompile do

lib/mix/lib/mix/tasks/do.ex
1:defmodule Mix.Tasks.Do do

lib/mix/lib/mix/tasks/deps.tree.ex
1:defmodule Mix.Tasks.Deps.Tree do

lib/mix/lib/mix/tasks/deps.unlock.ex
1:defmodule Mix.Tasks.Deps.Unlock do

lib/mix/lib/mix/tasks/deps.update.ex
1:defmodule Mix.Tasks.Deps.Update do

lib/mix/lib/mix/tasks/escript.build.ex
1:defmodule Mix.Tasks.Escript.Build do

lib/mix/lib/mix/tasks/escript.ex
1:defmodule Mix.Tasks.Escript do

lib/mix/lib/mix/tasks/escript.install.ex
1:defmodule Mix.Tasks.Escript.Install do

lib/mix/lib/mix/tasks/escript.uninstall.ex
1:defmodule Mix.Tasks.Escript.Uninstall do

lib/mix/lib/mix/tasks/format.ex
1:defmodule Mix.Tasks.Format do

lib/mix/lib/mix/tasks/help.ex
1:defmodule Mix.Tasks.Help do

lib/mix/lib/mix/tasks/loadpaths.ex
1:defmodule Mix.Tasks.Loadpaths do

lib/mix/lib/mix/tasks/iex.ex
1:defmodule Mix.Tasks.Iex do

lib/mix/lib/mix/tasks/loadconfig.ex
1:defmodule Mix.Tasks.Loadconfig do

lib/mix/lib/mix/tasks/local.ex
1:defmodule Mix.Tasks.Local do

lib/mix/lib/mix/tasks/local.hex.ex
1:defmodule Mix.Tasks.Local.Hex do

lib/mix/lib/mix/tasks/local.public_keys.ex
1:defmodule Mix.Tasks.Local.PublicKeys do

lib/mix/lib/mix/tasks/local.rebar.ex
1:defmodule Mix.Tasks.Local.Rebar do

lib/mix/lib/mix/tasks/new.ex
1:defmodule Mix.Tasks.New do

lib/mix/lib/mix/tasks/profile.eprof.ex
1:defmodule Mix.Tasks.Profile.Eprof do

lib/mix/lib/mix/tasks/profile.cprof.ex
1:defmodule Mix.Tasks.Profile.Cprof do

lib/mix/lib/mix/tasks/profile.fprof.ex
1:defmodule Mix.Tasks.Profile.Fprof do

lib/mix/lib/mix/tasks/run.ex
1:defmodule Mix.Tasks.Run do

lib/mix/lib/mix/tasks/release.ex
1:defmodule Mix.Tasks.Release do

lib/mix/lib/mix/tasks/release.init.ex
1:defmodule Mix.Tasks.Release.Init do

lib/mix/lib/mix/tasks/test.coverage.ex
1:defmodule Mix.Tasks.Test.Coverage do

lib/mix/lib/mix/tasks/will_recompile.ex
1:defmodule Mix.Tasks.WillRecompile do

lib/mix/lib/mix/tasks/test.ex
1:defmodule Mix.Tasks.Test do

lib/mix/lib/mix/tasks_server.ex
1:defmodule Mix.TasksServer do

lib/mix/lib/mix/tasks/xref.ex
1:defmodule Mix.Tasks.Xref do

lib/mix/lib/mix/utils.ex
1:defmodule Mix.Utils do

lib/mix/mix.exs
1:defmodule Mix.MixProject do

lib/mix/lib/mix.ex
1:defmodule Mix do

まとめ

the_silver_searcherを利用してElixir公式リポジトリで定義されているモジュールの数を調べました。
提供されているモジュールが290個もあり、予想よりも数が多く驚きました(他の言語と比べると少ないかも知れませんが)

また、Mix.Utilsなど、hexdocsに掲載されていないモジュールも知ることができました。
https://github.com/elixir-lang/elixir/blob/v1.13.3/lib/mix/lib/mix/utils.ex

hexdocsで検索しても出てきません。
https://hexdocs.pm/mix/1.13.3/search.html?q=Mix.Utils

件数や調査方法に間違い等あればコメントいただけると嬉しいです。

Discussion