lib/test_iex/matcher.ex

defmodule TestIex.Matcher do
  @moduledoc """
  File matching logic in a separate module for easier testing
  """
  @line_matcher_rgx ~r/\:\d+$/

  def match(matcher, files) do
    cond do
      Regex.match?(@line_matcher_rgx, matcher) ->
        [file, line] = matcher |> String.split(":")
        match(file, line, files)

      true ->
        {for_matcher(matcher, files), nil}
    end
  end

  def match(matcher, line, files) do
    file = List.first(for_matcher(matcher, files))
    {file, line}
  end

  defp for_matcher(matcher, files) do
    files |> Enum.filter(fn x -> String.contains?(x, matcher) end)
  end
end