I agree with your points. A PR with your additional tests and specs will be
very welcome! Thank you!

On Mon, Jul 18, 2022 at 7:25 PM Quentin Crain <czrp...@gmail.com> wrote:

> Hi!
>
> I hope to not draw this out .. afaict the goal of the PR is to preserve
> the method the developer used in providing options. So, I am a bit confused
> by possibly doing any converting (presumably from options as atoms to their
> binary char equivalents). This is what I had in mind though and what I
> implemented locally.
>
> This seems to me to be so by the change in the type of opts field in the
> structure to OR with a list/list(atom); with the change to how Regexs are
> inspected being a 2nd evidence.
>
> I have added the following test which seems to show this:
>
> --- a/lib/elixir/test/elixir/inspect_test.exs
> +++ b/lib/elixir/test/elixir/inspect_test.exs
> @@ -864,6 +864,7 @@ test "regex" do
>      assert inspect(~r" \\/ ") == "~r/ \\\\\\/ /"
>      assert inspect(~r/hi/, syntax_colors: [regex: :red]) ==
> "\e[31m~r/hi/\e[0m"
>
> +    assert inspect(Regex.compile!("foo", "i")) == ~S'~r/foo/i'
>      assert inspect(Regex.compile!("foo", [:caseless])) ==
> ~S'Regex.compile!("foo", [:caseless])'
>    end
>
> Finally, I also added some tests for Regex.opts which show options' type
> are preserved:
>
>    test "opts/1" do
>      assert Regex.opts(Regex.compile!("foo", "i")) == "i"
> +    assert Regex.opts(Regex.compile!("foo", [:caseless])) == [:caseless]
>    end
>
> Though, reviewing the type spec for opts, I believe it should be updated
> to reflect that options are a binary OR atom list:
>
> -  @spec opts(t) :: String.t()
> +  @spec opts(t) :: String.t() | [term]
>    def opts(%Regex{opts: opts}) do
>      opts
>    end
>
> I apologize for the length of this reply but it does seem the present
> implementation is contra to my thoughts on preferring the binary
> representation of options over a list.
>
> Respectfully,
>
>    Q (Quentin)
>
> On Monday, July 18, 2022 at 7:04:51 AM UTC José Valim wrote:
>
>> The PR does not attempt to do a conversion back to known cases, so adding
>> such feature is still welcome!
>>
>> On Mon, Jul 18, 2022 at 9:02 AM José Valim <jose....@dashbit.co> wrote:
>>
>>> Actually, a PR was already sent here:
>>> https://github.com/elixir-lang/elixir/pull/11991 :)
>>>
>>>
>>> On Mon, Jul 18, 2022 at 8:57 AM José Valim <jose....@dashbit.co> wrote:
>>>
>>>> Yes. And if any unknown option is given, perhaps we should store the
>>>> underlying options in the struct and change the inspect representation to
>>>> output Regex.compile!(…)
>>>>
>>>> Please open up an issue and PRs welcome too!
>>>>
>>>> On Mon, Jul 18, 2022 at 05:41 Quentin Crain <czr...@gmail.com> wrote:
>>>>
>>>>> Hi!
>>>>>
>>>>> I hope I am acting appropriately here!
>>>>>
>>>>> Per this elixirforum post:
>>>>> https://elixirforum.com/t/is-it-normal-that-regex-compile-2-does-not-print-regex-modifiers-when-atoms-are-passed-in-options/48992
>>>>>
>>>>> When atoms are used as options to Regex.compile, they are not
>>>>> translated into their character equivalents and added to the Regex struct:
>>>>>
>>>>> iex(6)> Regex.compile("foo", "i")
>>>>> {:ok, ~r/foo/i}
>>>>> iex(7)> Regex.compile("foo", [:caseless])
>>>>> {:ok, ~r/foo/}
>>>>>
>>>>> Should they be? I have an initial implementation waiting if so . . .
>>>>>
>>>>> Respectfully,
>>>>>
>>>>>    Quentin (Q)
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "elixir-lang-core" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to elixir-lang-co...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/30477ff6-7eca-4e66-a118-2bf3920abd34n%40googlegroups.com
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/30477ff6-7eca-4e66-a118-2bf3920abd34n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elixir-lang-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/5ff85784-a306-4c8c-879a-e55d62eb4d91n%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/5ff85784-a306-4c8c-879a-e55d62eb4d91n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LdEtT%3DLQAxyKktRwh2sqFrObr3mLSn3X8C194GNAjLNw%40mail.gmail.com.

Reply via email to