clj-commons / lein-marginalia Goto Github PK
View Code? Open in Web Editor NEWA Marginalia plugin to Leiningen
A Marginalia plugin to Leiningen
To ensure consistent runs of marginalia, it would be useful to have lein-marginalia read configuration from the project.clj file, using a :marginalia
key or similar.
There was an issue with a change in arity for the LispReader functions in Clojure 1.7. This was simple fix but the current maintainer of marginalia is inactive. See clj-commons/marginalia#153
MichaelBlume has forked Marginalia and this plugin. If you want a working version hosted off Clojars, please take a look at the forked repo for updated dependency information.
I mean no offense to the current maintainers of this plugin, but I burned some time updating it myself before I realize MichaelBlume had also forked lein-marginalia (which wasn't mentioned in #153.)
Using clojure 1.8 and marginalia 0.8.0 I get the following error when I run "lein marge" on my project https://github.com/davidplumpton/homeworldsai
Exception in thread "main" java.lang.RuntimeException: Problem parsing near line 1 <gen-class))> original reported cause is clojure.lang.ArityException: Wrong number of args (4)
passed to: parser/read-keyword -- clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword, compiling:(/private/var/folders/h_/tj7s1cyn0wb49fcnhc660gb
w1b_4z4/T/form-init5895226127987567712.clj:1:125)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$init_opt.invokeStatic(main.clj:277)
at clojure.main$init_opt.invoke(main.clj:277)
at clojure.main$initialize.invokeStatic(main.clj:308)
at clojure.main$null_opt.invokeStatic(main.clj:342)
at clojure.main$null_opt.invoke(main.clj:339)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Problem parsing near line 1 <gen-class))> original reported cause is clojure.lang.ArityException: Wrong number of args (4) passed to: parse
r/read-keyword -- clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword
at clojure.lang.LispReader.read(LispReader.java:292)
at clojure.lang.LispReader.read(LispReader.java:196)
at clojure.lang.LispReader.read(LispReader.java:190)
at marginalia.parser$parse_STAR_$fn__422$fn__425.invoke(parser.clj:153)
at marginalia.parser$parse_STAR_$fn__422.invoke(parser.clj:152)
at clojure.core$repeatedly$fn__5339.invoke(core.clj:4945)
Steps to reproduce:
lein new marg17
cd marg17
mkdir sub
In marg17/sub/a.clj
:
(ns marg17.sub.a)
In marg17/sub/b.clj
:
(ns marg17.sub.b
(:require [marg17.sub.a]))
In project.clj
: change Clojure 1.6 to 1.7.
Result:
marg17 (master) lein marg
Generating Marginalia documentation for the following source files:
/Users/jjacobsen/ol-dev/ng-salt/dev2/projects/marg17/src/marg17/core.clj
/Users/jjacobsen/ol-dev/ng-salt/dev2/projects/marg17/src/marg17/sub/a.clj
/Users/jjacobsen/ol-dev/ng-salt/dev2/projects/marg17/src/marg17/sub/b.clj
Exception in thread "main" java.lang.RuntimeException: Problem parsing near line 1 <require [marg17.sub.a]))> original reported cause is clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword -- clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword, compiling:(/private/var/folders/qt/x00tk_5100d9vv6p3ffldy740000gp/T/form-init3410464737499441527.clj:1:125)
at clojure.lang.Compiler.load(Compiler.java:7239)
at clojure.lang.Compiler.loadFile(Compiler.java:7165)
at clojure.main$load_script.invoke(main.clj:275)
at clojure.main$init_opt.invoke(main.clj:280)
at clojure.main$initialize.invoke(main.clj:308)
at clojure.main$null_opt.invoke(main.clj:343)
at clojure.main$main.doInvoke(main.clj:421)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Problem parsing near line 1 <require [marg17.sub.a]))> original reported cause is clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword -- clojure.lang.ArityException: Wrong number of args (4) passed to: parser/read-keyword
at clojure.lang.LispReader.read(LispReader.java:292)
at clojure.lang.LispReader.read(LispReader.java:196)
at clojure.lang.LispReader.read(LispReader.java:190)
at marginalia.parser$parse_STAR_$fn__418$fn__421.invoke(parser.clj:153)
at marginalia.parser$parse_STAR_$fn__418.invoke(parser.clj:152)
at clojure.core$repeatedly$fn__5111.invoke(core.clj:4921)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$tree_seq$walk__5045$fn__5046.invoke(core.clj:4739)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.LazySeq.more(LazySeq.java:85)
at clojure.lang.RT.more(RT.java:683)
at clojure.core$rest__4114.invoke(core.clj:73)
at clojure.core$flatten.invoke(core.clj:6851)
at marginalia.parser$parse_STAR_.invoke(parser.clj:146)
at marginalia.parser$parse.invoke(parser.clj:382)
at marginalia.parser$parse_file.invoke(parser.clj:400)
at marginalia.core$path_to_doc.invoke(core.clj:177)
at clojure.core$map$fn__4553.invoke(core.clj:2624)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$map$fn__4553.invoke(core.clj:2616)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$map$fn__4553.invoke(core.clj:2616)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.Cons.next(Cons.java:39)
at clojure.lang.RT.boundedLength(RT.java:1735)
at clojure.lang.RestFn.applyTo(RestFn.java:130)
at clojure.core$apply.invoke(core.clj:630)
at marginalia.hiccup$eval57$fn__58.invoke(hiccup.clj:99)
at clojure.lang.MultiFn.invoke(MultiFn.java:229)
at clojure.lang.Var.invoke(Var.java:379)
at marginalia.html$toc_html.invoke(html.clj:189)
at marginalia.html$uberdoc_html.invoke(html.clj:400)
at marginalia.core$uberdoc_BANG_.invoke(core.clj:208)
at marginalia.core$run_marginalia.doInvoke(core.clj:293)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at user$eval792.invoke(form-init3410464737499441527.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6782)
at clojure.lang.Compiler.eval(Compiler.java:6772)
at clojure.lang.Compiler.load(Compiler.java:7227)
... 11 more
Subprocess failed
marg17 (master)
Change it back to 1.6.0 and it works fine.
$ lein version
Leiningen 2.0.0-preview8 on Java 1.7.0_04 Java HotSpot(TM) 64-Bit Server VM
$ lein marg
WARNING: conj-dependencies is deprecated.
...
conj-dependency got deprecated in 2.0.0-preview3. The warning has plural form, but the actual function name is singular.
Project stats:
:plugins
entry in the project.clj
with entry [lein-marginalia "0.7.0"]
When I run lein help
, I see the marg
task. When I run lein marg
, I get the following:
WARNING: conj-dependencies is deprecated.
All namespaces already :aot compiled.
Exception in thread "main" java.lang.IllegalAccessError: escape-html does not exist
at clojure.core$refer.doInvoke(core.clj:3778)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_lib.doInvoke(core.clj:5279)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at marginalia.html$eval11$loading__4784__auto____12.invoke(html.clj:1)
at marginalia.html$eval11.invoke(html.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5302)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:605)
at clojure.core$use.doInvoke(core.clj:5392)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at marginalia.core$eval5$loading__4784__auto____6.invoke(core.clj:34)
at marginalia.core$eval5.invoke(core.clj:34)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.load(Compiler.java:6952)
at clojure.lang.RT.loadResourceScript(RT.java:359)
at clojure.lang.RT.loadResourceScript(RT.java:350)
at clojure.lang.RT.load(RT.java:429)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$load_lib.doInvoke(core.clj:5264)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$load_libs.doInvoke(core.clj:5298)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:603)
at clojure.core$require.doInvoke(core.clj:5381)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at user$eval1.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6500)
at clojure.lang.Compiler.eval(Compiler.java:6477)
at clojure.core$eval.invoke(core.clj:2797)
at clojure.main$eval_opt.invoke(main.clj:297)
at clojure.main$initialize.invoke(main.clj:316)
at clojure.main$null_opt.invoke(main.clj:349)
at clojure.main$main.doInvoke(main.clj:427)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Hey fogus,
Thanks for this doc tool! While using lein marg, I keep finding myself having to reference the marginalia readme. It would be great if we could get the command usage on the commandline. Would you take a pull request that transports what's in marginalia.core/run-marginalia into the doc string of the marg command? If so, I would provide a core/usage fn that provides a string for lein-marg to spit out
When I run lein marg
it generates the documentation, displays
Done generating your documentation in ./docs
and then locks up. It doesn't terminate, and I have to use Ctrl-C to terminate Leiningen.
This fails (with lein marg src/test_fail.clj
):
(ns test-fail)
(def test {:xmlns:test "http://example.com/"})
output is:
Problem parsing near line 2 <)> original reported cause is java.lang.RuntimeException: Map literal must contain an even number of forms
This passes (lein marg src/test_pass.clj
, in the same project):
(ns test-pass)
(def test {:xmlns_test "http://example.com/"})
(Clojure itself has no problem with keywords with inner :
.)
I can't seem to get it to work at all for me -- am I doing it wrong? I have a simple hello world project. I do:
lein marg
...which gives the uberdoc you can see here
I have multimethod calls that use :: type keywords, so I can do this:
;; multimethod definition
(ns sandbox.multi)
(def impls (atom {}))
(defmulti foo (fn [arg] (@impls arg)))
(defn set-impl! [arg impl] (swap! impls assoc arg impl))
;; multimethod implementation
(ns sandbox.backend
(:use sandbox.multi))
(defmethod foo ::backend [arg] (println "backend:" arg))
;; binding namespace for multi and backend
(ns sandbox.core
(:require [sandbox.multi :as multi]
[sandbox.backend :as backend])
(:gen-class))
(defn init []
(multi/set-impl! :user ::backend/backend)
(multi/foo :user))
When feeding this code to marginalia, I get a multitude of reader errors "Invalid token: ::backend/backend", which is weird since the reader is able to parse it within the context of the namespace where it is called:
sandbox.core=> (read-string "::backend/backend") :sandbox.backend/backend
Even more disturbing is that using the full namespace notation (:sandbox.backend/backend) unbreaks marginalia, which seems to stem from the fact that the reader accepts arbitrary namespaces for that notation, not for the :: notation:
sandbox.core=> (read-string ":sandbox.foo/bar") :sandbox.foo/bar sandbox.core=> (read-string "::foo/bar") java.lang.RuntimeException: java.lang.Exception: Invalid token: ::foo/bar (NO_SOURCE_FILE:0)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.