Skip to content

Instantly share code, notes, and snippets.

@noprompt
Created June 12, 2020 19:50
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save noprompt/56d73411ce1adb4130b8a2255beba793 to your computer and use it in GitHub Desktop.
Save noprompt/56d73411ce1adb4130b8a2255beba793 to your computer and use it in GitHub Desktop.
(require '[meander.epsilon :as m])
(m/rewrite (read-string (slurp "project.clj"))
(defproject _ _ . !key !value ...)
(m/cata [:DEPS_EDN (m/map-of !key !value)])
[:DEPS_EDN {:dependencies ?dependencies
:profiles ?profiles
:source-paths !paths
:resource-paths !paths}]
{:paths (m/cata [:PATHS [!paths ...]])
:deps (m/cata [:DEPS ?dependencies])
:aliases (m/cata [:ALIASES ?profiles])}
[:PATHS [(m/or [!paths ...] _) ...]]
[!paths ...]
[:DEPS [!dep ...]]
{& [(m/cata [:DEP !dep]) ...]}
[:DEP [?artifact ?version & ?dep-tail]]
[?artifact {:mvn/version ?version & (m/cata [:DEP_TAIL ?dep-tail])}]
[:DEP_TAIL [:exclusions ?exclusions & _]]
{:exclusions ?exclusions}
[:DEP_TAIL [ & _]]
{}
[:ALIASES (m/map-of !profile-name !profile-data)]
(m/map-of !profile-name (m/cata [:PROFILE_DATA !profile-data]))
[:PROFILE_DATA {:dependencies ?dependencies
:source-paths !paths
:resource-paths !paths
:main ?main}]
{:extra-deps (m/cata [:DEPS ?dependencies])
:extra-paths (m/cata [:PATHS [!paths ...]])
:main-opts (m/cata [:MAIN_OPTS ?main])}
[:MAIN_OPTS (m/symbol _ ?name)]
["-m" ?name]
[:MAIN_OPTS _]
[])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment