diff --git a/lib/preview/package/local_updater.ex b/lib/preview/package/local_updater.ex index 284a6b5..92ed764 100644 --- a/lib/preview/package/local_updater.ex +++ b/lib/preview/package/local_updater.ex @@ -10,6 +10,7 @@ defmodule Preview.Package.LocalUpdater do Logger.debug("Skipping version updater") Preview.Package.Store.fill([ + {"phoenix_live_view", ["1.0.0"]}, {"decimal", ["2.0.0"]}, {"ecto", ["0.2.0"]}, {"telemetry", ["0.4.2"]} diff --git a/lib/preview_web/live/preview_live.ex b/lib/preview_web/live/preview_live.ex index 7c8c73d..5f3f201 100644 --- a/lib/preview_web/live/preview_live.ex +++ b/lib/preview_web/live/preview_live.ex @@ -101,10 +101,10 @@ defmodule PreviewWeb.PreviewLive do defp makeup_file_contents(package, version, filename, file_contents) do case makeup_lexer(filename) do - {:ok, lexer} -> + {:ok, {lexer, opts}} -> task = Task.Supervisor.async_nolink(Preview.Tasks, fn -> - Makeup.highlight(file_contents, lexer: lexer) + Makeup.highlight(file_contents, lexer: lexer, lexer_options: opts) end) case Task.yield(task, @makeup_timeout) || Task.shutdown(task, @makeup_timeout) do @@ -183,12 +183,29 @@ defmodule PreviewWeb.PreviewLive do defp makeup_lexer(filename) do cond do - Path.extname(filename) in [".ex", ".exs"] -> {:ok, ElixirLexer} - Path.extname(filename) in [".eex", ".heex"] -> {:ok, EExLexer} - Path.extname(filename) in [".erl", ".hrl", ".escript"] -> {:ok, ErlangLexer} - filename in ["rebar.config", "rebar.config.script"] -> {:ok, ErlangLexer} - String.ends_with?(filename, ".app.src") -> {:ok, ErlangLexer} - true -> :error + Path.extname(filename) in [".ex", ".exs"] -> + {:ok, {ElixirLexer, []}} + + Path.extname(filename) in [".eex", ".heex"] -> + {:ok, {EExLexer, []}} + + Path.extname(filename) in [".erl", ".hrl", ".escript"] -> + {:ok, {ErlangLexer, []}} + + filename in ["rebar.config", "rebar.config.script"] -> + {:ok, {ErlangLexer, []}} + + String.ends_with?(filename, ".app.src") -> + {:ok, {ErlangLexer, []}} + + true -> + extension = + case Path.extname(filename) do + "." <> ext -> ext + other -> other + end + + Makeup.Registry.fetch_lexer_by_extension(extension) end end diff --git a/mix.exs b/mix.exs index 98aa2ab..eae8900 100644 --- a/mix.exs +++ b/mix.exs @@ -40,6 +40,7 @@ defmodule Preview.MixProject do {:makeup_eex, "~> 1.0"}, {:makeup_elixir, "~> 1.0"}, {:makeup_erlang, "~> 1.0"}, + {:makeup_syntect, "~> 0.1"}, {:makeup, "~> 1.0"}, {:mint, "~> 1.1"}, {:phoenix_html, "~> 4.0"}, diff --git a/mix.lock b/mix.lock index 1e6d528..9d3450e 100644 --- a/mix.lock +++ b/mix.lock @@ -28,6 +28,7 @@ "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, "makeup_erlang": {:hex, :makeup_erlang, "1.0.1", "c7f58c120b2b5aa5fd80d540a89fdf866ed42f1f3994e4fe189abebeab610839", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "8a89a1eeccc2d798d6ea15496a6e4870b75e014d1af514b1b71fa33134f57814"}, "makeup_html": {:hex, :makeup_html, "0.1.2", "19d4050c0978a4f1618ffe43054c0049f91fe5feeb9ae8d845b5dc79c6008ae5", [:mix], [{:makeup, "~> 1.2", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "b7fb9afedd617d167e6644a0430e49c1279764bfd3153da716d4d2459b0998c5"}, + "makeup_syntect": {:hex, :makeup_syntect, "0.1.3", "ae2c3437f479ea50d08d794acaf02a2f3a8c338dd1f757f6b237c42eb27fcde1", [:mix], [{:makeup, "~> 1.2", [hex: :makeup, repo: "hexpm", optional: false]}, {:rustler, "~> 0.36.1", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.8.2", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "a27bd3bd8f7b87465d110295a33ed1022202bea78701bd2bbeadfb45d690cdbf"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, "mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"}, @@ -51,6 +52,7 @@ "plug_cowboy": {:hex, :plug_cowboy, "2.7.2", "fdadb973799ae691bf9ecad99125b16625b1c6039999da5fe544d99218e662e4", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "245d8a11ee2306094840c000e8816f0cbed69a23fc0ac2bcf8d7835ae019bb2f"}, "plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, + "rustler_precompiled": {:hex, :rustler_precompiled, "0.8.3", "4e741024b0b097fe783add06e53ae9a6f23ddc78df1010f215df0c02915ef5a8", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "c23f5f33cb6608542de4d04faf0f0291458c352a4648e4d28d17ee1098cddcc4"}, "saxy": {:hex, :saxy, "1.6.0", "02cb4e9bd045f25ac0c70fae8164754878327ee393c338a090288210b02317ee", [:mix], [], "hexpm", "ef42eb4ac983ca77d650fbdb68368b26570f6cc5895f0faa04d34a6f384abad3"}, "sentry": {:hex, :sentry, "10.8.1", "aa45309785e1521416225adb16e0b4d8b957578804527f3c7babb6fefbc5e456", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "495b3cdadad90ba72eef973aa3dec39b3b8b2a362fe87e2f4ef32133ac3b4097"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, diff --git a/priv/seeds.exs b/priv/seeds.exs index 106cadd..aaec0e1 100644 --- a/priv/seeds.exs +++ b/priv/seeds.exs @@ -9,6 +9,9 @@ Preview.Storage.put(repo_bucket, "tarballs/decimal-2.0.0.tar", data) {:ok, {200, _, data}} = :hex_repo.get_tarball(:hex_core.default_config(), "ecto", "0.2.0") Preview.Storage.put(repo_bucket, "tarballs/ecto-0.2.0.tar", data) +{:ok, {200, _, data}} = :hex_repo.get_tarball(:hex_core.default_config(), "phoenix_live_view", "1.0.0") +Preview.Storage.put(repo_bucket, "tarballs/phoenix_live_view-1.0.0.tar", data) + message = %{ "Records" => [ %{ @@ -22,6 +25,10 @@ message = %{ %{ "eventName" => "ObjectCreated:Put", "s3" => %{"object" => %{"key" => "tarballs/ecto-0.2.0.tar"}} + }, + %{ + "eventName" => "ObjectCreated:Put", + "s3" => %{"object" => %{"key" => "tarballs/phoenix_live_view-1.0.0.tar"}} } ] }