cover/Elixir.Snippet.html

1 defmodule Snippet do
2 import Code, only: [eval_string: 1]
3 import Enum, only: [map: 2, join: 2]
4 import List, only: [wrap: 1]
5 import Regex, only: [replace: 3]
6
7 @snippet ~r/(?<!`)`([^`\n]+)`(?!`)/
8
9
:-(
def snip(md, imports \\ []) do
10 189 imports = build(imports)
11 189 replace(@snippet, md, fn _, code -> eval(imports, code) end)
12 end
13
14 42 defp eval(imports, code) do
15 42 {result, _} = eval_string("#{imports}; #{code}")
16 6 to_string(result)
17 rescue
18 36 _ -> code
19 end
20
21 defp build(imports) do
22 189 wrap(imports) |> map(&"import #{&1}") |> join("; ")
23 end
24 end
Line Hits Source