Fetching contributors…
Cannot retrieve contributors at this time
224 lines (221 sloc) 9.36 KB

Leiningen TODOs

See also

For 2.0.0


  • [X] Allow trampoline to work with chaining in do task (#665)
  • [ ] Improve speed of trampoline restarts (#573)
  • [ ] Reduce Aether verbosity (#610)
  • [ ] Isolate target dir per profile (#468)
  • [ ] Honor mirror for search indices (#281)
  • [ ] Drop clojars snapshots from default repos (#241)


  • [X] Address chaining issues in with-profile (#632)
  • [X] Address gpg agent issues (#615)
  • [X] Stale directory clutter (#589)
  • [X] Fix de-dupe with :classifier/:extension (#645)
  • [X] Check project for :scm (#640)
  • [X] Mirror support (#271)
  • [X] Only look up repo credentials when necessary (#657)
  • [X] Allow jars to be signed, document in deploying guide. (#519)
  • [X] Fix javac to abort on failure (#658)


  • [X] Don’t re-extract native deps (#535)
  • [X] Make offline profile use dev profile (#514) (LHF)
  • [X] Fix $JVM_OPTS (#565)
  • [X] Move lein-newnew plugin into default profile (#540)
  • [X] Force checking of snapshots (#518) (LHF)


  • [X] Pretty-print pom
  • [X] deps :tree
  • [X] Use blocking instead of polling for repl task (#433)
  • [X] Show aliases in lein help (#407)
  • [X] Use pomegranate to dynamically resolve missing “lein new” templates (newnew #12)


  • [X] readme
  • [X] plugin guide
  • [X] tutorial
  • [X] hacking guide (moved to leiningen-core readme)
  • [X] migration guide
  • [X] sample project.clj
  • [X] deploy guide

Changes for preview release

  • [X] Finish designing and implement profiles
  • [X] Dynamic recalculating of classpath via pomegranate
  • [X] Honor :plugins as separate from :dependencies
  • [X] Rework prep function to ensure that AOT/javac happens when needed
  • [X] Move pom generation to pomegranate or leiningen
  • [X] More flexibility for jarring
  • [X] Allow tasks to add in their own injections
  • [X] Allow disabling of all injected code
  • [X] Activate :test profile in test task
  • [X] Resurrect native deps
  • [X] Trampoline
  • [X] Allow hooks to provide activate fn to avoid load-time side-effects
  • [X] Hook up reply to nrepl for new repl task
  • [X] Look for aliases in project.clj
  • [X] javac (can we do this without ant?)
  • [X] Get off snapshots (data.xml, reply)
  • [X] Pass user-level repository auth settings on to pomegranate
  • [X] Use ordered map for :dependencies and :repositories?
  • [X] Project middleware
  • [X] Top-level :exclusions
  • [X] Better error messages for misformatted :dependencies/:repositories
  • [X] Utility function for plugins to conditionally add dependencies
  • [X] Update new task
  • [X] Switch user-settings to checking :user profile sans project
  • [X] Offline mode

Adapt existing tasks to new API

  • [X] classpath
  • [X] clean
  • [X] compile (minus transitive cleaning)
  • [X] deps
  • [X] test
  • [X] jar (minus shell wrappers)
  • [X] retest
  • [X] run
  • [X] new (merge from lein-newnew)
  • [X] help (needs tests)
  • [X] search
  • [X] pom (steal from depot)
  • [X] install (minus shell wrappers)
  • [X] uberjar
  • [X] deploy

For 1.7.0

  • [X] System/exit in repl (#324)
  • [X] interactive task takes full CPU (#346)
  • [X] whole-namespace test selectors (#242)
  • [X] Auto-exclusions for dev-deps and plugins (#375)
  • [X] Investigate NPE on lein test (#388)
  • [X] Bring back rlwrap (#381)

For 1.6.2

  • [X] resources with eval-in-leiningen (#248)
  • [X] fix :omit-default-repositories wrt central (#211)
  • [X] deps should run an implicit clean
  • [X] don’t let multiple versions of a plugin interfere with each other (#301)
  • [X] non-jar deps on classpath (#244)
  • [X] recover from error in interactive (#234)
  • [X] use java class in run task (#249)
  • [X] fix deploy with new maven-ant-tasks

For 1.6.1

  • [X] upgrade hooke
  • [X] make it easier to use :repl-options [:print clojure.pprint/pprint]
  • [X] fix shutdown-agents with repl
  • [X] don’t clear out lib/dev upon jarring (221)
  • [X] support alternate main namespace for uberjar.

For 1.6.0

  • [X] Trampoline functionality
  • [X] move exit-after-tests check to eval-in-project (discuss on list?)
  • [X] don’t freak out when attempting to download non-existent indices
  • [X] improve error message for unconfigured deploy
  • [X] make search work outside project
  • [X] clear up home directory duality in Windows/MinGW
  • [X] show total result count in search results
  • [X] transitive native-deps support
  • [X] make :repl-init change initial ns of repl and swank
  • [X] more flexibility in search results
  • [X] support ns/name in run task
  • [X] add option to use ~/.m2-based classpath instead of copying to lib/
  • [X] Merge lein-search
  • [X] Merge lein-retest
  • [X] Merge native-deps
  • [X] Add leiningen.util.injected namespace

For 1.5.1

  • [X] Move ns docstrings to :help-summary to allow AOT given CLJ-130.
  • [X] Put :eval-in-lein deps in lib/dev for leiningen process access.
  • [X] Revert back to :warn on checksum failure.
  • [X] Fix LEIN_ROOT warning in bin/lein.
  • [X] Honor user-settings in more places.

For 1.5.0

  • unify auth options between :repositories and :deploy-to
  • suppress socket closed stacktrace in interactive task
  • checksum deps set; don’t re-download if unchanged
  • allow whitelist for post-compile class file deletion
  • fix warn-on-reflection for repl task (#176)
  • explain how to do manual self-install if it fails
  • failure to upgrade leaves lein as a zero-length file (#153)
  • ensure project jar is last in uberjar (#178)
  • investigate uberjar slowdown? (#160)

For 1.4.0

  • socket timing issues with interactive tests
  • connect to socket repl in interactive task
  • :uberjar-exclusions?
  • :all test-selector built-in
  • test selectors need to support things like constantly, complement
  • detect missing level of nesting in project.clj’s deps/dev-deps
  • clear out non-transitive .class files after AOT Luc Prefontaine has code for this.
  • plugin task for managing/upgrading plugins Manually copying jar files into ~/.lein/plugins is pretty lame. Let’s get a task to handle this. It could be implemented as a plugin at first, maybe.
  • merge lein-run task? Ditto; this is something useful that many projects need.
  • expose original pwd as property
  • merge lein-javac task Also make the compile task run it where appropriate.
  • test selectors using metadata; run a subset of tests We could have a :test-selectors key in project.clj that would map keywords to predicate functions. Then the test task could take a keyword argument and only run the subset of the tests for which calling the predicate on its metadata returns true.

For 1.3.0

  • specify min. lein version in project.clj
  • :omit-source
  • lein install $PROJECT (works outside project root)
  • write shell wrappers on install
  • include shell wrapper in jar file from template
  • set arbitrary jar metadata
  • errors in read-project should show filename
  • user-level plugin installation and activation
  • user-level config file (with hook list)
  • get no-project-needed from arglist
  • argument chaining
  • interactive task
  • resources in generated pom

For 1.2.0

  • Fix self-build clean problem
  • Don’t catch reader exceptions unless they are from ^D
  • document checkout dependencies
  • Re-enable rlwrap
  • Move the intro into a tutorial
  • bin script has stabilized; self-install for dev versions should work
  • accept list of namespaces to compile from command-line options
  • document version ranges
  • include lib/dev in find-lib-jars
  • document plugin creation
  • document all known project.clj keys
  • disable frickin [null] logging from ant (come on srsly)
  • recover from missing test exit map gracefully
  • Help task should display arglist
  • walk up the filesystem to find project.clj
  • make inter-task dependencies honor hooks
  • wire repl task up to socket repl
  • allow \*warn-on-reflection\* to be turned on in project.clj
  • Expose hooks in built-in tasks so plugins may extend them
  • make org.clojure implied for clojure/contrib deps
  • better way to force setFork in eval-in-project
  • rename :namespaces key in project.clj
  • include version in jar filenames
  • classpath task to just print configured classpath
  • move repl task from shell script to clojure code

For 1.1.0

  • upgrade task (patch submitted)
  • doc generation (autodoc plugin)

For 1.0

  • Remove install task dependency on having Maven installed
  • Use -Xbootclasspath where possible
  • Don’t write manifest, pom, etc. to disk when jarring
  • Don’t put uberjar in ~/.m2
  • Perform compilation in either a subprocess or with a separate classloader
  • Allow test task to take namespaces as an argument
  • Fix eval-in-project to let plugins pass in extra args
  • Resources directory added to classpath (for properties, etc)

Git-aware dependencies (experimental back-burner idea)

Talking with Rich after Emerging Langs day 1 Problem: you can pull in two versions of the same library transitively without realizing it if people fork on clojars. How do we detect this problem and de-dupe?

  • What if artifacts could be correlated with the git rev that produced them?
  • They have repository and sha1 metadata in their pom (but no history tree)
  • Cross-correlate with a separate revision metadata store?