Skip to content

Commit 64a5c17

Browse files
committed
Document why binary_part operation is safe
1 parent b98d823 commit 64a5c17

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

lib/iex/lib/iex/autocomplete.ex

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,14 +514,17 @@ defmodule IEx.Autocomplete do
514514
base = prefix <> hint
515515

516516
for mod <- match_modules(base, module == Elixir),
517-
rest = binary_part(mod, prefix_size, byte_size(mod) - prefix_size),
518-
name = elixir_submodule_name(rest),
517+
name = elixir_submodule_name(mod, prefix_size),
519518
valid_alias_piece?("." <> name),
520519
uniq: true,
521520
do: %{kind: :module, name: name}
522521
end
523522

524-
defp elixir_submodule_name(rest) do
523+
defp elixir_submodule_name(mod, prefix_size) do
524+
# All modules are checked to start with hint, which is larger
525+
# than prefix size, so the operation below is safe.
526+
rest = binary_part(mod, prefix_size, byte_size(mod) - prefix_size)
527+
525528
case :binary.match(rest, ".") do
526529
{pos, _} -> binary_part(rest, 0, pos)
527530
:nomatch -> rest

0 commit comments

Comments
 (0)