├── .gitignore ├── project.clj ├── sample ├── .gitignore ├── project.clj └── src │ └── sample │ └── core.clj └── src └── leiningen └── skummet.clj /.gitignore: -------------------------------------------------------------------------------- 1 | pom.xml 2 | *jar 3 | /lib/ 4 | /classes/ 5 | .lein-deps-sum 6 | docs 7 | target 8 | -------------------------------------------------------------------------------- /project.clj: -------------------------------------------------------------------------------- 1 | (defproject org.skummet/lein-skummet "0.2.3-SNAPSHOT" 2 | :description "Leiningen plugin for Project Skummet" 3 | :url "https://github.com/alexander-yakushev/lein-skummet" 4 | :dependencies [] 5 | :eval-in :leiningen) 6 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /checkouts 3 | pom.xml 4 | pom.xml.asc 5 | *.jar 6 | *.class 7 | /.lein-* 8 | /.nrepl-port 9 | -------------------------------------------------------------------------------- /sample/project.clj: -------------------------------------------------------------------------------- 1 | (defproject lein-skummet-sample "0.0.1-SNAPSHOT" 2 | :dependencies [[org.skummet/clojure "1.7.0-r1"] 3 | [org.clojure/core.async "0.1.346.0-17112a-alpha"]] 4 | :exclusions [org.clojure/clojure] 5 | :profiles {:default []} 6 | :plugins [[org.skummet/lein-skummet "0.2.2"]] 7 | :main sample.core 8 | :aot :all 9 | :skummet-skip-vars ["#'leantest.core/wont-be-lean"]) 10 | -------------------------------------------------------------------------------- /sample/src/sample/core.clj: -------------------------------------------------------------------------------- 1 | (ns sample.core 2 | ;; (:require [clojure.core.async :as a]) 3 | (:gen-class)) 4 | 5 | (defn wont-be-lean [] 6 | (str "foo" "bar")) 7 | 8 | (defn foo 9 | "I don't do a whole lot." 10 | [x] 11 | (println "Hello, World!" x) 12 | (println (wont-be-lean)) 13 | ;; (let [c (a/chan)] 14 | ;; (a/put! c x) 15 | ;; (a/go (println "Ultimate answer is" (a/ project 26 | ;; (pr/read "sample/project.clj") 27 | (vary-meta assoc-in [:profiles ::skummet] 28 | {:prep-tasks [] 29 | :auto-clean false 30 | :jvm-opts ["-Dclojure.compile.ignore-lean-classes=true"]}) 31 | (pr/merge-profiles [::skummet]))] 32 | (cond 33 | (= subtask "compile") 34 | (do 35 | (if-let [namespaces (seq (leiningen.compile/stale-namespaces project))] 36 | (let [form `(let [lean-var?# (fn [var#] (not (#{~@(:skummet-skip-vars project)} 37 | (str var#))))] 38 | (binding [~'clojure.core/*lean-var?* lean-var?# 39 | ~'clojure.core/*lean-compile* true 40 | 41 | ~'clojure.core/*compiler-options* 42 | {:elide-meta [:doc :file :line :added :arglists 43 | :column :static :author :added]}] 44 | (doseq [namespace# '~namespaces] 45 | (println "Compiling" namespace#) 46 | (compile namespace#))))] 47 | (try (eval-in-project project form) 48 | (catch Exception e 49 | (main/abort "Compilation failed:" (.getMessage e))))) 50 | (main/debug "All namespaces already AOT compiled."))) 51 | 52 | (= subtask "run") 53 | (let [deps-line (->> (cp/resolve-dependencies :dependencies project) 54 | (cons (jio/file (:target-path project) "classes")) 55 | (interpose ":") (apply str))] 56 | (main/debug "Running" "java" "-cp" deps-line (str (:main project)) args) 57 | (apply eval/sh "java" "-cp" deps-line (str (:main project)) args)) 58 | 59 | (= subtask "jar") 60 | (leiningen.uberjar/uberjar project) 61 | 62 | :else 63 | (main/abort "Wrong subtask:" subtask)))) 64 | --------------------------------------------------------------------------------