Fetching contributors…
Cannot retrieve contributors at this time
211 lines (207 sloc) 8.78 KB

#-*- mode: org -*-

Leiningen TODOs

See also

For 2.0.0

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
  • [ ] Use ordered map for :dependencies and :repositories?
  • [ ] Look for :java-cmd in project map

Other stuff (post-preview)

  • [ ] Offline mode
  • [ ] Honor hooks declared in plugin jar metadata?
  • [ ] Task-level profiles (nrepl dep comes from repl profile, etc) Better visibility than either :default profile or associng straight in
  • [ ] Investigate issues with :eval-in :classloader and bootclasspath Need to ensure we’re able to put Clojure on the bootstrap classpath
  • [ ] Address chaining issues in with-profile
  • [ ] Use pomegranate to dynamically resolve missing “lein new” templates
  • [ ] Install task outside projects
  • [ ] Project middleware
  • [ ] Non-transitive AOT
  • [ ] Mirror/proxy support, also for search indices
  • [ ] Drop clojars snapshots from default repos
  • [ ] compile (transitive cleaning)
  • [ ] shell wrappers


  • [X] readme
  • [X] plugin guide
  • [X] tutorial
  • [X] hacking guide (moved to leiningen-core readme)
  • [ ] migration guide
  • [ ] user settings (how much of this is necessary with profiles?) used for :no-project-needed tasks like repl and search; hmmm…
  • [ ] deploy guide
  • [ ] sample project.clj
  • [ ] document adding javadoc/java source as deps

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.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 :Phil:
  • Use -Xbootclasspath where possible :Dan:
  • Don’t write manifest, pom, etc. to disk when jarring :Dan:
  • Don’t put uberjar in ~/.m2 :Phil:
  • 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)

Plugin ideas

  • metrics
    • LOC
    • complexity
    • time logs

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?