Skip to content

Instantly share code, notes, and snippets.

@dralletje
Last active September 15, 2020 04:39
Show Gist options
  • Save dralletje/0080229395c9bf128f7ac4dc110b5e40 to your computer and use it in GitHub Desktop.
Save dralletje/0080229395c9bf128f7ac4dc110b5e40 to your computer and use it in GitHub Desktop.
### A Pluto.jl notebook ###
# v0.11.14
using Markdown
using InteractiveUtils
# ╔═╡ afc4f67e-f705-11ea-3cfc-116b0cdb70c3
begin
macro_expression = quote
@a
@nested(things: @use(z)),
a_call_or_something(1, @assign(a))
@assign(define)
@use(d)
end
end
# ╔═╡ 84d92d3e-f70c-11ea-04bc-7d3d941cc04a
macro assign(x) x end
# ╔═╡ 889dd848-f70c-11ea-0611-b3ea5dd9aeef
macro use(x) x end
# ╔═╡ 5fcdd7a6-f707-11ea-0d8a-8ffc9aca902f
struct Assignment
symbol
end
# ╔═╡ b03fbf6a-f707-11ea-1d94-9bb086e881af
struct Usage
symbol
end
# ╔═╡ 3860bc96-f706-11ea-11fc-c5a842f7e1e5
get_symbols(expression) = begin
filter(node -> node isa Symbol, expression.args[2:end])
end
# ╔═╡ f2fd499c-f709-11ea-177d-2ba6c16f0725
md"""
## Appendix
"""
# ╔═╡ c21ab05a-f707-11ea-05d9-81c5ade56fcc
flatten(xs) = collect(Iterators.flatten(xs))
# ╔═╡ 52faa626-f702-11ea-331d-4f9f559b9f11
get_macros(expression) = begin
if !(expression isa Expr)
return []
end
if expression.head == :macrocall && expression.args[1] == (Symbol("@assign"))
map(Assignment, get_symbols(expression))
elseif expression.head == :macrocall && expression.args[1] == (Symbol("@use"))
map(Usage, get_symbols(expression))
else
flatten(get_macros.(expression.args))
end
end
# ╔═╡ 00d4551c-f703-11ea-0da8-39a062615624
pluto_info = flatten(get_macros.(macro_expression.args[2:end]))
# ╔═╡ 6ea89f8e-f6ff-11ea-2abe-fbb3e54537c6
dumphere(x) = begin
buffer = IOBuffer()
dump(buffer, x)
string_result = String(take!(buffer))
HTML("<pre>$(string_result)</pre>")
end
# ╔═╡ Cell order:
# ╠═afc4f67e-f705-11ea-3cfc-116b0cdb70c3
# ╠═00d4551c-f703-11ea-0da8-39a062615624
# ╟─84d92d3e-f70c-11ea-04bc-7d3d941cc04a
# ╟─889dd848-f70c-11ea-0611-b3ea5dd9aeef
# ╠═5fcdd7a6-f707-11ea-0d8a-8ffc9aca902f
# ╠═b03fbf6a-f707-11ea-1d94-9bb086e881af
# ╠═52faa626-f702-11ea-331d-4f9f559b9f11
# ╠═3860bc96-f706-11ea-11fc-c5a842f7e1e5
# ╟─f2fd499c-f709-11ea-177d-2ba6c16f0725
# ╟─c21ab05a-f707-11ea-05d9-81c5ade56fcc
# ╟─6ea89f8e-f6ff-11ea-2abe-fbb3e54537c6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment