#-*- mode: org -*- #+startup: overview #+startup: hidestars #+TODO: TODO | INPROGRESS | DONE Leiningen TODOs See also https://github.com/technomancy/leiningen/issues * 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 - [ ] Honor hooks declared in plugin jar metadata? - [ ] Pass user-level repository auth settings on to pomegranate. - [ ] Investigate issues with :eval-in :classloader and bootclasspath - [ ] Address chaining issues in with-profile - [ ] Use ordered map for :dependencies and :repositories? ** Other stuff (post-preview) - [ ] Install task outside projects - [ ] Project middleware - [ ] Add :dynamic metadata to clucy (bablien has patches for this) - [ ] Non-transitive AOT - [ ] Mirror/proxy support, also for search indices - [ ] Drop clojars snapshots from default repos - [ ] compile (transitive cleaning) - [ ] shell wrappers - [X] javac (can we do this without ant?) ** Documentation - [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 ** TODO - [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?