From a3238988e472bdcf49ea8f31f38a33e61944d334 Mon Sep 17 00:00:00 2001 From: Christian Blavier Date: Fri, 31 Jan 2025 15:48:51 +0100 Subject: [PATCH] fixed support of non elixir code blocks --- CHANGELOG.md | 4 ++++ lib/phoenix_storybook/rendering/code_renderer.ex | 6 +++--- lib/phoenix_storybook/stories/doc.ex | 1 + test/fixtures/components/event_component.ex | 13 +++++++++++++ test/phoenix_storybook/stories/doc_test.exs | 10 ++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17ef5b67..60ef5069 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ > - You can also [buy me a coffee](https://ko-fi.com/C0C316P9FN), as it would encourage me spending > more of my free time to fixing bugs and developing new features 🤗 +## v0.8.2 (not released) + +- **bugfix**: [fixed support of non elixir code blocks](https://github.com/phenixdigital/phoenix_storybook/issues/570) + ## v0.8.1 (2025-01-20) - **improvement**: [better formatting of playground's HTML](https://github.com/phenixdigital/phoenix_storybook/pull/562) - 🙏 [@xxdavid](https://github.com/xxdavid) diff --git a/lib/phoenix_storybook/rendering/code_renderer.ex b/lib/phoenix_storybook/rendering/code_renderer.ex index 549f6270..8a0bd33a 100644 --- a/lib/phoenix_storybook/rendering/code_renderer.ex +++ b/lib/phoenix_storybook/rendering/code_renderer.ex @@ -271,10 +271,10 @@ defmodule PhoenixStorybook.Rendering.CodeRenderer do code = if format? do case lang do - :elixir -> ElixirLexer.lex(code) - :heex -> HEExLexer.lex(code) + :elixir -> code |> ElixirLexer.lex() |> HTMLFormatter.format_inner_as_binary([]) + :heex -> code |> HEExLexer.lex() |> HTMLFormatter.format_inner_as_binary([]) + _ -> code end - |> HTMLFormatter.format_inner_as_binary([]) else code end diff --git a/lib/phoenix_storybook/stories/doc.ex b/lib/phoenix_storybook/stories/doc.ex index 4346682d..7cd01739 100644 --- a/lib/phoenix_storybook/stories/doc.ex +++ b/lib/phoenix_storybook/stories/doc.ex @@ -113,6 +113,7 @@ defmodule PhoenixStorybook.Stories.Doc do "elixir" -> :elixir "heex" -> :heex "" -> code |> String.trim_leading() |> guess_lang() + _ -> :unknown end CodeRenderer.render_code_block(code, lang, trim: false) diff --git a/test/fixtures/components/event_component.ex b/test/fixtures/components/event_component.ex index 216b55ff..467939b3 100644 --- a/test/fixtures/components/event_component.ex +++ b/test/fixtures/components/event_component.ex @@ -1,6 +1,19 @@ defmodule EventComponent do use Phoenix.Component + @doc """ + Component doc + + ``` + Some code + ``` + + ```css + .my-class { + margin: 0; + } + ``` + """ def component(assigns) do assigns = assigns diff --git a/test/phoenix_storybook/stories/doc_test.exs b/test/phoenix_storybook/stories/doc_test.exs index 396e1c28..24f9ded7 100644 --- a/test/phoenix_storybook/stories/doc_test.exs +++ b/test/phoenix_storybook/stories/doc_test.exs @@ -81,6 +81,16 @@ defmodule PhoenixStorybook.Stories.DocTest do assert log =~ "could not fetch module doc from PhoenixStorybook.Stories.DocTest.NoDocLiveComponent" end + + test "it does not crash with css and untyped code blocks" do + %Doc{header: header, body: body} = + "event/event_component.story.exs" + |> compile_story() + |> Doc.fetch_doc_as_html() + + refute is_nil(header) + refute is_nil(body) + end end defp compile_story(path) do