From 8eb4b0f33c0e5b9214fcd007d05c839106179c25 Mon Sep 17 00:00:00 2001 From: Steffen Deusch Date: Thu, 14 Nov 2024 13:55:11 +0100 Subject: [PATCH] allow to configure lexer options for sigil lexers --- lib/makeup/lexers/elixir_lexer.ex | 8 ++++---- .../lexers/elixir_lexer/elixir_lexer_sigil_lexer_test.exs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/makeup/lexers/elixir_lexer.ex b/lib/makeup/lexers/elixir_lexer.ex index 0262b34..4535cab 100644 --- a/lib/makeup/lexers/elixir_lexer.ex +++ b/lib/makeup/lexers/elixir_lexer.ex @@ -511,14 +511,14 @@ defmodule Makeup.Lexers.ElixirLexer do |> List.wrap() |> List.to_string() - lexer = Map.get(get_sigil_lexers(), sigil) + {lexer, options} = Map.get(get_sigil_lexers(), sigil, {nil, []}) if lexer do ["~", _sigil, separator | content_with_end_separator] = content end_separator = Enum.at(content_with_end_separator, -1) content = Enum.slice(content_with_end_separator, 0..-2//1) |> List.to_string() - inner_tokens = lexer.lex(content) + inner_tokens = lexer.lex(content, options) List.flatten([ {:string_sigil, attrs, "~#{sigil}#{separator}"}, @@ -659,9 +659,9 @@ defmodule Makeup.Lexers.ElixirLexer do > Makeup.Lexers.ElixirLexer.register_sigil_lexer("H", Makeup.Lexers.HEExLexer) """ - def register_sigil_lexer(sigil, lexer) do + def register_sigil_lexer(sigil, lexer, options \\ []) do lexers = get_sigil_lexers() - Application.put_env(:makeup_elixir, :sigil_lexers, Map.put(lexers, sigil, lexer)) + Application.put_env(:makeup_elixir, :sigil_lexers, Map.put(lexers, sigil, {lexer, options})) end defp get_sigil_lexers() do diff --git a/test/makeup/lexers/elixir_lexer/elixir_lexer_sigil_lexer_test.exs b/test/makeup/lexers/elixir_lexer/elixir_lexer_sigil_lexer_test.exs index c64f01d..d3b2789 100644 --- a/test/makeup/lexers/elixir_lexer/elixir_lexer_sigil_lexer_test.exs +++ b/test/makeup/lexers/elixir_lexer/elixir_lexer_sigil_lexer_test.exs @@ -5,16 +5,16 @@ defmodule ElixirLexerSigilLexerTest do describe "custom lexers for sigils" do test "can register a custom lexer" do defmodule MyCustomLexer do - def lex(input) do - [{:keyword, %{}, input}] + def lex(input, opts) do + [{:keyword, %{opts: opts}, input}] end end - Makeup.Lexers.ElixirLexer.register_sigil_lexer("H", MyCustomLexer) + Makeup.Lexers.ElixirLexer.register_sigil_lexer("H", MyCustomLexer, foo: :bar) assert lex("~H|Hello, world!|") == [ {:string_sigil, %{}, "~H|"}, - {:keyword, %{}, "Hello, world!"}, + {:keyword, %{opts: [foo: :bar]}, "Hello, world!"}, {:string_sigil, %{}, "|"} ] after