#-*- mode: org -*- #+startup: overview #+startup: hidestars #+TODO: TODO | INPROGRESS | DONE Leiningen TODOs See also https://github.com/technomancy/leiningen/issues * For 2.0.0 ** Big Picture - [X] Finish designing and implement profiles - [ ] Further design on Project Middleware - [ ] In-process eval-in-project - [ ] Dynamic recalculating of classpath via pomegranate - [ ] Redesign repl task, possibly around nREPL - [ ] Honor :plugins as separate from :dependencies ** Other stuff - [ ] Move pom generation to pomegranate or leiningen - [ ] Better consistency/docs around user/settings - [ ] Non-transitive AOT - [ ] lint/check mode for lein compile - [X] More flexibility for jarring - [ ] Mirror/proxy support, also for search indices - [ ] Allow disabling of all injected code - [ ] Drop clojars snapshots from default repos ** Adapt existing tasks to new API *** Tasks for 2.0.0-preview - [X] classpath - [X] clean - [X] compile (minus transitive cleaning) - [X] deps (minus native-deps and certain :repositories options) - [X] test - [X] jar (minus shell wrappers) - [X] retest - [X] run - [X] new (merge from lein-newnew) - [X] help (needs tests) - [ ] pom (steal from depot) - [ ] install (minus shell wrappers) - [ ] uberjar - [ ] repl (figure out nrepl integration) *** Tasks for full release (currently tagged :busted) - [ ] deps (native-deps and :repositories options) - [ ] compile (transitive cleaning) - [ ] shell wrappers - [ ] deploy - [ ] javac (can we do this without ant?) - [ ] search - [ ] trampoline * 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?