Giter VIP home page Giter VIP logo

olical / conjure Goto Github PK

View Code? Open in Web Editor NEW
1.6K 24.0 104.0 5.52 MB

Interactive evaluation for Neovim (Clojure, Fennel, Janet, Racket, Hy, MIT Scheme, Guile, Python and more!)

Home Page: https://conjure.fun

License: The Unlicense

Clojure 1.20% Python 0.47% Shell 0.63% Makefile 0.22% Lua 0.58% HTML 0.06% Scheme 0.96% Hy 1.84% Racket 0.05% Fennel 92.51% Common Lisp 0.70% Dockerfile 0.07% Janet 0.13% Julia 0.41% Vim Script 0.03% Rust 0.14%
clojure clojurescript clojure-repl neovim unlicense deoplete-source nrepl cider janet-lang racket

conjure's Issues

Support Vim and Neovim

I think it's doable. Vim 8's channels look like a simplified version of what Neovim offers but we would lose Lua support which isn't the end of the world. All in all it's not too different but it would require a fairly significant refactor off of the sizeable Neovim API calls.

Maybe it's just not worth it but I thought I'd raise the idea for future discussion.

Namespace is not detected if (ns ...) is too long

So I detect your current namespace by reading the first few lines of your buffer and parsing out the first form. I can then read the second symbol which should always be the current namespace. I just realised that if your ns form spans too many lines it won't all be read from the buffer to be parsed though.

This means that I try to parse a namespace that doesn't have a closing paren, resulting in nil. I need some way to always pull the first form... maybe just the whole buffer on every eval? It's not soooo bad. Or keep trying to pull larger and larger amounts of lines until I reach the end of the file.

That way small ns forms will only pull a few lines across RPC. I'll double the length every time (capped at the length of the buffer). So files with super long ns forms will have to make a couple of RPC calls to get the full ns form.

Not possible to evaluate forms after (specific) error

deps.edn:

{:deps {org.clojure/test.check {:mvn/version "0.10.0-alpha4"}}}

If I evaluate this code:

(require '[clojure.test.check.generators :as gen])
(gen/sample (gen/bind gen/int #(gen/tuple %)))

I don't see any error on Conjure's buffer, and Conjure blocks. I cannot evaluate more forms, unless I reconnect with the command :ConjureAdd {:tag :jvm :port 5555}

If I evaluate the same code with clj shell I get the proper error:

user=> (gen/sample (gen/bind gen/int #(gen/tuple %)))
Error printing return value (AssertionError) at clojure.test.check.generators/tuple (generators.cljc:516).
Assert failed: Args to tuple must be generators
(every? generator? generators)

Logs

19-05-10 16:02:48 beta INFO [conjure.dev:15] - Logging initialised
19-05-10 16:02:48 beta INFO [conjure.rpc:142] - Starting RPC TCP server on port 41415
19-05-10 16:02:48 beta INFO [conjure.rpc:160] - Starting RPC loops
19-05-10 16:02:48 beta INFO [conjure.prepl:183] - Started prepl server on port 35713
19-05-10 16:02:48 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-set-var, :params ["conjure_ready" 1]}
19-05-10 16:02:48 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}
19-05-10 16:02:48 beta INFO [conjure.main:32] - Everything's ready! Let's perform some magic.
19-05-10 16:02:50 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :add, :params ["{:tag :jvm :port 5555}"], :client :stdio}
19-05-10 16:02:50 beta INFO [conjure.prepl:111] - Adding :jvm 127.0.0.1 5555
19-05-10 16:02:50 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:02:50 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:02:50 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:02:50 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 1, :client :stdio}
19-05-10 16:02:50 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 0 1 false ["; conjure/out | Welcome to Conjure!"]]] ["nvim_buf_set_lines" [3 -1 -1 false ("; conjure/out | Adding :jvm")]] ["nvim_win_set_cursor" [1001 [2 0]]])]}
19-05-10 16:02:50 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil nil] nil], :client :stdio}
19-05-10 16:02:50 beta INFO [conjure.prepl:66] - Connecting through remote-prepl :jvm
19-05-10 16:02:50 beta TRACE [conjure.prepl:129] - Sending prelude:  (require 'clojure.repl 'clojure.string 'clojure.j…
19-05-10 16:02:50 beta TRACE [conjure.prepl:89] - Writing to tag: :jvm -  (require 'clojure.repl 'clojure.string 'clojure.j…
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "user", :ms 0, :form "(require 'clojure.repl 'clojure.string 'clojure.ja…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources", :ms 5, :form "(ns conjure-compliment.sources \"Tools for defining…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources/sources", :ns "conjure-compliment.sources", :ms 0, :form "(def ^{:doc \"Stores defined sources.\" :private tru…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources/all-sources", :ns "conjure-compliment.sources", :ms 1, :form "(defn all-sources \"Returns the list of all complet…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources/defsource", :ns "conjure-compliment.sources", :ms 2, :form "(defn defsource \"Defines a source with the given n…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.utils", :ms 6, :form "(ns conjure-compliment.utils \"Functions and utilit…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/*extra-metadata*", :ns "conjure-compliment.utils", :ms 0, :form "(def ^:dynamic *extra-metadata* \"Signals to downst…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/fuzzy-matches?", :ns "conjure-compliment.utils", :ms 2, :form "(defn fuzzy-matches? \"Tests if symbol matches the …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/fuzzy-matches-no-skip?", :ns "conjure-compliment.utils", :ms 2, :form "(defn fuzzy-matches-no-skip? \"Tests if symbol matc…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/resolve-class", :ns "conjure-compliment.utils", :ms 2, :form "(defn resolve-class \"Tries to resolve a classname …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/resolve-namespace", :ns "conjure-compliment.utils", :ms 1, :form "(defn resolve-namespace \"Tries to resolve a namesp…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/defmemoized", :ns "conjure-compliment.utils", :ms 3, :form "(defmacro ^{:doc \"Defines a memoized function.\" :f…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/primitive-cache", :ns "conjure-compliment.utils", :ms 0, :form "(def primitive-cache (atom {}))"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/cache-last-result", :ns "conjure-compliment.utils", :ms 3, :form "(defmacro cache-last-result \"If cache for `name` i…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/flush-caches", :ns "conjure-compliment.utils", :ms 0, :form "(defn flush-caches \"Removes all cached values, for…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/android-vm?", :ns "conjure-compliment.utils", :ms 0, :form ";; Classpath inspection (def android-vm? \"Signifie…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/jdk9+?", :ns "conjure-compliment.utils", :ms 1, :form "(def jdk9+? \"Signifies if the application is runni…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/classpath", :ns "conjure-compliment.utils", :ms 1, :form "(defn- classpath \"Returns a sequence of File objec…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/symlink?", :ns "conjure-compliment.utils", :ms 1, :form "(defn- symlink? \"Checks if the given file is a sym…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/file-seq-nonr", :ns "conjure-compliment.utils", :ms 2, :form "(defn- file-seq-nonr \"A tree seq on java.io.Files,…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/list-files", :ns "conjure-compliment.utils", :ms 15, :form "(defn- list-files \"Given a path (either a jar file…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/list-jdk9-base-classfiles", :ns "conjure-compliment.utils", :ms 5, :form "(defn- list-jdk9-base-classfiles \"Because on JDK9+…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/all-files-on-classpath", :ns "conjure-compliment.utils", :ms 3, :form "(defn- all-files-on-classpath \"Given a list of fil…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/classes-on-classpath", :ns "conjure-compliment.utils", :ms 8, :form "(defn classes-on-classpath \"Returns a map of all c…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/namespaces-on-classpath", :ns "conjure-compliment.utils", :ms 7, :form "(defn namespaces-on-classpath \"Returns the list of…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.utils/project-resources", :ns "conjure-compliment.utils", :ms 12, :form "(defn project-resources \"Returns a list of all non…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.context", :ms 4, :form "(ns conjure-compliment.context \"Utilities for pars…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/restore-map-literals", :ns "conjure-compliment.context", :ms 1, :form "(defn- restore-map-literals [context] (walk/postwa…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/try-read-replacing-maps", :ns "conjure-compliment.context", :ms 1, :form "(defn- try-read-replacing-maps [s] (try (binding […"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/dumb-read-form", :ns "conjure-compliment.context", :ms 2, :form "(defn- dumb-read-form \"Take a presumably unfinishe…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/safe-read-context-string", :ns "conjure-compliment.context", :ms 0, :form "#_(dumb-read-form \"(let [a {:b 1}, c {__prefix__\")…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/previous-context", :ns "conjure-compliment.context", :ms 0, :form "(def ^{:doc \"Stores the last completion context.\" …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/prefix-placeholder", :ns "conjure-compliment.context", :ms 0, :form "(def ^{:doc \"Special symbol which substitutes pref…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/parse-context", :ns "conjure-compliment.context", :ms 4, :form "(defn parse-context \"Takes a context which is a Li…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.context/cache-context", :ns "conjure-compliment.context", :ms 1, :form "(defn cache-context \"Parses the context, or return…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.resources", :ms 5, :form "(ns conjure-compliment.sources.resources \"Completi…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.resources/inside-resource-call?", :ns "conjure-compliment.sources.resources", :ms 1, :form "(defn inside-resource-call? \"If context is not nil…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.resources/candidates", :ns "conjure-compliment.sources.resources", :ms 3, :form "(defn candidates \"Returns list of completions for …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.resources/doc", :ns "conjure-compliment.sources.resources", :ms 1, :form "(defn doc \"Documentation function for project reso…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#:conjure-compliment.sources.resources{:resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}}", :ns "conjure-compliment.sources.resources", :ms 0, :form "(defsource ::resources :candidates #'candidates :d…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.ns-mappings", :ms 6, :form "(ns conjure-compliment.sources.ns-mappings \"Comple…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/var-symbol?", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defn var-symbol? \"Test if prefix resembles a var …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/dash-matches?", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defn dash-matches? \"Tests if prefix partially mat…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/get-scope-and-prefix", :ns "conjure-compliment.sources.ns-mappings", :ms 1, :form "(defn get-scope-and-prefix \"Tries to get take apar…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/try-get-ns-from-context", :ns "conjure-compliment.sources.ns-mappings", :ms 2, :form "(defn try-get-ns-from-context \"Tries to extract a …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/generate-docstring", :ns "conjure-compliment.sources.ns-mappings", :ms 3, :form "(defn generate-docstring \"Generates a docstring fr…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/candidates", :ns "conjure-compliment.sources.ns-mappings", :ms 7, :form "(defn candidates \"Returns a list of namespace-boun…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/doc", :ns "conjure-compliment.sources.ns-mappings", :ms 1, :form "(defn doc \"Documentation function for this sources…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}}", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defsource ::ns-mappings :candidates #'candidates …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.local-bindings", :ms 5, :form "(ns conjure-compliment.sources.local-bindings \"Com…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/let-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def let-like-forms '#{let if-let when-let if-some…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/defn-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def defn-like-forms '#{defn defn- fn defmacro})"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/doseq-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def doseq-like-forms '#{doseq for})"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/letfn-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def letfn-like-forms '#{letfn})"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/parse-binding", :ns "conjure-compliment.sources.local-bindings", :ms 1, :form "(defn parse-binding \"Given a binding node returns …"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/parse-fn-body", :ns "conjure-compliment.sources.local-bindings", :ms 2, :form "(defn parse-fn-body \"Extract function name and arg…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/extract-local-bindings", :ns "conjure-compliment.sources.local-bindings", :ms 2, :form "(defn extract-local-bindings \"When given a form th…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/distinct-preserve-tags", :ns "conjure-compliment.sources.local-bindings", :ms 1, :form "(defn- distinct-preserve-tags \"Like `distinct` but…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/bindings-from-context", :ns "conjure-compliment.sources.local-bindings", :ms 1, :form "(defn bindings-from-context \"Returns all local bin…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/candidates", :ns "conjure-compliment.sources.local-bindings", :ms 3, :form "(defn candidates \"Returns a list of local bindings…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}}", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(defsource ::local-bindings :candidates #'candidat…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.class-members", :ms 7, :form "(ns conjure-compliment.sources.class-members \"Comp…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static?", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn static? \"Tests if class member is static.\" […"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form ";; ## Regular (non-static) members (def members-ca…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/populate-members-cache", :ns "conjure-compliment.sources.class-members", :ms 5, :form "(defn populate-members-cache \"Populate members cac…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/update-cache", :ns "conjure-compliment.sources.class-members", :ms 2, :form "(defn update-cache \"Updates members cache for a gi…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/get-all-members", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn get-all-members \"Returns all non-static memb…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/class-member-symbol?", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn class-member-symbol? \"Tests if a symbol name…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/camel-case-matches?", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn camel-case-matches? \"Tests if prefix matches…"}
19-05-10 16:02:50 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/try-get-object-class", :ns "conjure-compliment.sources.class-members", :ms 2, :form "(defn try-get-object-class \"Tries to get the type …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-candidates", :ns "conjure-compliment.sources.class-members", :ms 5, :form "(defn members-candidates \"Returns a list of Java n…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/type-to-pretty-string", :ns "conjure-compliment.sources.class-members", :ms 1, :form ";; ### Member documentation (defn type-to-pretty-s…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/doc-method-parameters", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn doc-method-parameters \"Takes a list of metho…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/create-members-doc", :ns "conjure-compliment.sources.class-members", :ms 3, :form "(defn create-members-doc \"Takes a list of members …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-doc", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn members-doc \"Documentation function for non-…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/classname-doc", :ns "conjure-compliment.sources.class-members", :ms 8, :form "(defn classname-doc [^Class class] (let [members (…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}}", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defsource ::members :candidates #'members-candida…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-member-symbol?", :ns "conjure-compliment.sources.class-members", :ms 0, :form ";; ## Static members (defn static-member-symbol? \"…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(def ^{:doc \"Stores cache of all static members fo…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/populate-static-members-cache", :ns "conjure-compliment.sources.class-members", :ms 2, :form "(defn populate-static-members-cache \"Populates sta…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/update-static-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn update-static-cache \"Updates static members …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn static-members \"Returns all static members f…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members-candidates", :ns "conjure-compliment.sources.class-members", :ms 4, :form "(defn static-members-candidates \"Returns a list of…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/resolve-static-member", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn resolve-static-member \"Given a string repres…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-member-doc", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn static-member-doc \"Given a member name and c…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}}", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defsource ::static-members :candidates #'static-m…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.keywords", :ms 6, :form "(ns conjure-compliment.sources.keywords \"Completio…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/keywords-table", :ns "conjure-compliment.sources.keywords", :ms 1, :form "(defmemoized ^:private keywords-table [] (let [^Fi…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/tagged-candidate", :ns "conjure-compliment.sources.keywords", :ms 1, :form "(defn- tagged-candidate [c] {:candidate c, :type :…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/qualified-candidates", :ns "conjure-compliment.sources.keywords", :ms 4, :form "(defn qualified-candidates \"Returns a list of name…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/namespace-alias-candidates", :ns "conjure-compliment.sources.keywords", :ms 4, :form "(defn namespace-alias-candidates \"Returns a list o…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/aliased-candidates", :ns "conjure-compliment.sources.keywords", :ms 4, :form "(defn aliased-candidates \"Returns a list of alias-…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.keywords/candidates", :ns "conjure-compliment.sources.keywords", :ms 4, :form "(defn candidates [^String prefix, ns _] (let [sing…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x77e02d5b \"clojure.core$constantly$fn__5657@77e02d5b\"], :enabled true}}", :ns "conjure-compliment.sources.keywords", :ms 0, :form "(defsource ::keywords :candidates #'candidates :do…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 6, :form "(ns conjure-compliment.sources.namespaces-and-clas…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/nscl-symbol?", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn nscl-symbol? \"Tests if prefix looks like a n…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/nscl-matches?", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn nscl-matches? \"Tests if prefix partially mat…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/imported-classes", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 3, :form ";;; Obtaining the list of classes (defn imported-c…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/all-classes-short-names", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 2, :form "(defn all-classes-short-names \"Returns a map where…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/analyze-import-context", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 2, :form "(defn- analyze-import-context \"Checks if the compl…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/get-all-full-names", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn- get-all-full-names \"Returns a list of packa…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/get-classes-by-package-name", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn- get-classes-by-package-name \"Returns simple…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/candidates", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 17, :form "(defn candidates \"Returns a list of namespace and …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/doc", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 2, :form "(defn doc [ns-or-class-str curr-ns] (when (nscl-sy…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x77e02d5b \"clojure.core$constantly$fn__5657@77e02d5b\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}}", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 0, :form "(defsource ::namespaces-and-classes :candidates #'…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.special-forms", :ms 5, :form "(ns conjure-compliment.sources.special-forms \"Comp…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/special-forms", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(def ^:private special-forms (set (map name '[def …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/first-item-in-list?", :ns "conjure-compliment.sources.special-forms", :ms 1, :form "(defn first-item-in-list? \"If context is not nil, …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/candidates", :ns "conjure-compliment.sources.special-forms", :ms 3, :form "(defn candidates \"Returns list of completions for …"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/doc", :ns "conjure-compliment.sources.special-forms", :ms 1, :form "(defn doc \"Documentation function for special form…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x77e02d5b \"clojure.core$constantly$fn__5657@77e02d5b\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}, :conjure-compliment.sources.special-forms/special-forms {:candidates #'conjure-compliment.sources.special-forms/candidates, :doc #'conjure-compliment.sources.special-forms/doc, :enabled true}}", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(defsource ::special-forms :candidates #'candidate…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/literal-candidates", :ns "conjure-compliment.sources.special-forms", :ms 1, :form "(defn literal-candidates \"We define `true`, `false…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "{:conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__5832 0x2cc32358 \"conjure_compliment.sources.class_members$fn__5832@2cc32358\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x77e02d5b \"clojure.core$constantly$fn__5657@77e02d5b\"], :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x2e37b16b \"clojure.core$constantly$fn__5657@2e37b16b\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}, :conjure-compliment.sources.special-forms/special-forms {:candidates #'conjure-compliment.sources.special-forms/candidates, :doc #'conjure-compliment.sources.special-forms/doc, :enabled true}, :conjure-compliment.sources.special-forms/literals {:candidates #'conjure-compliment.sources.special-forms/literal-candidates, :doc #object[clojure.core$constantly$fn__5657 0x1c82e6b5 \"clojure.core$constantly$fn__5657@1c82e6b5\"], :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}}", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(defsource ::literals :candidates #'literal-candid…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "nil", :ns "conjure-compliment.core", :ms 7, :form ";; ## Compliment - a completion library you deserv…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/all-files", :ns "conjure-compliment.core", :ms 0, :form "(def all-files \"List of all Compliment files in an…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/by-length-comparator", :ns "conjure-compliment.core", :ms 1, :form "(def ^:private by-length-comparator (reify Compara…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/sort-by-length", :ns "conjure-compliment.core", :ms 0, :form "(defn sort-by-length \"Sorts list of strings by the…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/ensure-ns", :ns "conjure-compliment.core", :ms 2, :form "(defn ensure-ns \"Takes either a namespace object o…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/completions", :ns "conjure-compliment.core", :ms 4, :form "(defn completions \"Returns a list of completions f…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "#'conjure-compliment.core/documentation", :ns "conjure-compliment.core", :ms 6, :form "(defn documentation \"Returns a documentation strin…"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val ":ready", :ns "conjure-compliment.core", :ms 0, :form ":ready"}
19-05-10 16:02:51 beta TRACE [conjure.prepl:134] - Prelude loaded
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :eval-current-form, :params [], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_get_current_buf" []] ["nvim_get_current_win" []] ["nvim_eval" ["matchstr(getline('.'), '\\%'.col('.').'c.')"]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "nzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "nzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "nzW")]])]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[#msgpack.core.Ext{:type 0, :data #object["[B" 0x2d5215d5 "[B@2d5215d5"]} #msgpack.core.Ext{:type 1, :data #object["[B" 0x7875e55e "[B@7875e55e"]} "r" [3 1] [3 50] [0 0] [0 0] [0 0] [0 0]] nil], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-win-get-cursor, :params [#msgpack.core.Ext{:type 1, :data #object["[B" 0x7875e55e "[B@7875e55e"]}]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [3 1], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x2d5215d5 "[B@2d5215d5"]} 2 3 false]])]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[["(require '[clojure.test.check.generators :as gen])"]] nil], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-current-buf, :params nil}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x553b032d "[B@553b032d"]}, :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x553b032d "[B@553b032d"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x553b032d "[B@553b032d"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x553b032d "[B@553b032d"]} 0 25 false]] ["nvim_get_current_win" []])]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [["/home/jlle/tmp/foo/foo.clj" 6 ["(ns foo)" "" "(require '[clojure.test.check.generators :as gen])" "" "" "(gen/sample (gen/bind gen/int #(gen/tuple %)))"] #msgpack.core.Ext{:type 1, :data #object["[B" 0x29d95242 "[B@29d95242"]}] nil], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 2, :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; jvm/eval | (require '[clojure.test.check.generators :as gen])")]] ["nvim_win_set_cursor" [1001 [3 0]]])]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.prepl:89] - Writing to tag: :jvm -  (try (ns foo) (let [rdr (-> (java.io.StringReader…
19-05-10 16:02:53 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val "[:ok nil]", :ns "foo", :ms 9, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…"}
19-05-10 16:02:53 beta TRACE [conjure.prepl:141] - Read value from :jvm - {:tag :ret, :val "[:ok nil]", :ns "foo", :ms 9, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…"}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 3, :client :stdio}
19-05-10 16:02:53 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; jvm/ret ⤸" "nil")]] ["nvim_win_set_cursor" [1001 [5 0]]])]}
19-05-10 16:02:53 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :eval-current-form, :params [], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_get_current_buf" []] ["nvim_get_current_win" []] ["nvim_eval" ["matchstr(getline('.'), '\\%'.col('.').'c.')"]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "nzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "nzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "nzW")]])]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[#msgpack.core.Ext{:type 0, :data #object["[B" 0x14181611 "[B@14181611"]} #msgpack.core.Ext{:type 1, :data #object["[B" 0x43905ed9 "[B@43905ed9"]} "g" [6 1] [6 46] [0 0] [0 0] [0 0] [0 0]] nil], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-win-get-cursor, :params [#msgpack.core.Ext{:type 1, :data #object["[B" 0x43905ed9 "[B@43905ed9"]}]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [6 1], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x14181611 "[B@14181611"]} 5 6 false]])]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[["(gen/sample (gen/bind gen/int #(gen/tuple %)))"]] nil], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-current-buf, :params nil}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x4e3f0fed "[B@4e3f0fed"]}, :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x4e3f0fed "[B@4e3f0fed"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x4e3f0fed "[B@4e3f0fed"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x4e3f0fed "[B@4e3f0fed"]} 0 25 false]] ["nvim_get_current_win" []])]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [["/home/jlle/tmp/foo/foo.clj" 6 ["(ns foo)" "" "(require '[clojure.test.check.generators :as gen])" "" "" "(gen/sample (gen/bind gen/int #(gen/tuple %)))"] #msgpack.core.Ext{:type 1, :data #object["[B" 0x2d970f2a "[B@2d970f2a"]}] nil], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 5, :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; jvm/eval | (gen/sample (gen/bind gen/int #(gen/tuple %)))")]] ["nvim_win_set_cursor" [1001 [6 0]]])]}
19-05-10 16:02:57 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:02:57 beta TRACE [conjure.prepl:89] - Writing to tag: :jvm -  (try (ns foo) (let [rdr (-> (java.io.StringReader…
19-05-10 16:02:57 beta TRACE [conjure.prepl:70] - Read from remote-prepl :jvm - {:tag :ret, :val {:via [{:type java.lang.AssertionError, :message "Assert failed: Args to tuple must be generators\n(every? generator? generators)", :at [clojure.test.check.generators$tuple invokeStatic "generators.cljc" 516]}], :trace [[clojure.test.check.generators$tuple invokeStatic "generators.cljc" 516] [clojure.test.check.generators$tuple doInvoke "generators.cljc" 504] [clojure.lang.RestFn invoke "RestFn.java" 408] [foo$eval6267$fn__6268 invoke "foo.clj" 6] [clojure.test.check.generators$bind_helper$fn__4787$fn__4788$fn__4789 invoke "generators.cljc" 121] [clojure.test.check.rose_tree$fmap invokeStatic "rose_tree.cljc" 77] [clojure.test.check.rose_tree$fmap invoke "rose_tree.cljc" 73] [clojure.test.check.generators$bind_helper$fn__4787$fn__4788 invoke "generators.cljc" 121] [clojure.test.check.generators$gen_fmap$fn__4756 invoke "generators.cljc" 59] [clojure.test.check.generators$gen_bind$fn__4761 invoke "generators.cljc" 70] [clojure.test.check.generators$call_gen invokeStatic "generators.cljc" 43] [clojure.test.check.generators$call_gen invoke "generators.cljc" 39] [clojure.test.check.generators$sample_seq$fn__4798 invoke "generators.cljc" 158] [clojure.core$map$fn__5855 invoke "core.clj" 2760] [clojure.lang.LazySeq sval "LazySeq.java" 42] [clojure.lang.LazySeq seq "LazySeq.java" 51] [clojure.lang.RT seq "RT.java" 531] [clojure.core$seq__5387 invokeStatic "core.clj" 137] [clojure.core$take$fn__5894 invoke "core.clj" 2884] [clojure.lang.LazySeq sval "LazySeq.java" 42] [clojure.lang.LazySeq seq "LazySeq.java" 51] [clojure.lang.RT seq "RT.java" 531] [clojure.core$seq__5387 invokeStatic "core.clj" 137] [clojure.core$print_sequential invokeStatic "core_print.clj" 53] [clojure.core$fn__7295 invokeStatic "core_print.clj" 174] [clojure.core$fn__7295 invoke "core_print.clj" 174] [clojure.lang.MultiFn invoke "MultiFn.java" 234] [clojure.core$pr_on invokeStatic "core.clj" 3674] [clojure.core$pr_on invoke "core.clj" 3668] [clojure.core$print_sequential invokeStatic "core_print.clj" 66] [clojure.core$fn__7315 invokeStatic "core_print.clj" 225] [clojure.core$fn__7315 invoke "core_print.clj" 225] [clojure.lang.MultiFn invoke "MultiFn.java" 234] [clojure.core$pr_on invokeStatic "core.clj" 3674] [clojure.core$pr invokeStatic "core.clj" 3677] [clojure.core$pr invoke "core.clj" 3677] [clojure.lang.AFn applyToHelper "AFn.java" 154] [clojure.lang.RestFn applyTo "RestFn.java" 132] [clojure.core$apply invokeStatic "core.clj" 665] [clojure.core$pr_str invokeStatic "core.clj" 4736] [clojure.core$pr_str doInvoke "core.clj" 4736] [clojure.lang.RestFn invoke "RestFn.java" 408] [clojure.core.server$io_prepl$fn__8940$fn__8941 invoke "server.clj" 289] [clojure.core.server$io_prepl$fn__8940 invoke "server.clj" 288] [clojure.core.server$prepl$fn__8926 invoke "server.clj" 239] [clojure.core.server$prepl invokeStatic "server.clj" 228] [clojure.core.server$prepl doInvoke "server.clj" 191] [clojure.lang.RestFn invoke "RestFn.java" 425] [clojure.core.server$io_prepl invokeStatic "server.clj" 283] [clojure.core.server$io_prepl doInvoke "server.clj" 272] [clojure.lang.RestFn invoke "RestFn.java" 397] [clojure.lang.AFn applyToHelper "AFn.java" 152] [clojure.lang.RestFn applyTo "RestFn.java" 132] [clojure.lang.Var applyTo "Var.java" 705] [clojure.core$apply invokeStatic "core.clj" 665] [clojure.core.server$accept_connection invokeStatic "server.clj" 73] [clojure.core.server$start_server$fn__8864$fn__8865$fn__8867 invoke "server.clj" 117] [clojure.lang.AFn run "AFn.java" 22] [java.lang.Thread run "Thread.java" 748]], :cause "Assert failed: Args to tuple must be generators\n(every? generator? generators)", :phase :print-eval-result}, :ns "foo", :ms 6, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…", :exception true}
19-05-10 16:02:57 beta TRACE [conjure.prepl:141] - Read value from :jvm - {:tag :ret, :val {:via [{:type java.lang.AssertionError, :message "Assert failed: Args to tuple must be generators\n(every? generator? generators)", :at [clojure.test.check.generators$tuple invokeStatic "generators.cljc" 516]}], :trace [[clojure.test.check.generators$tuple invokeStatic "generators.cljc" 516] [clojure.test.check.generators$tuple doInvoke "generators.cljc" 504] [clojure.lang.RestFn invoke "RestFn.java" 408] [foo$eval6267$fn__6268 invoke "foo.clj" 6] [clojure.test.check.generators$bind_helper$fn__4787$fn__4788$fn__4789 invoke "generators.cljc" 121] [clojure.test.check.rose_tree$fmap invokeStatic "rose_tree.cljc" 77] [clojure.test.check.rose_tree$fmap invoke "rose_tree.cljc" 73] [clojure.test.check.generators$bind_helper$fn__4787$fn__4788 invoke "generators.cljc" 121] [clojure.test.check.generators$gen_fmap$fn__4756 invoke "generators.cljc" 59] [clojure.test.check.generators$gen_bind$fn__4761 invoke "generators.cljc" 70] [clojure.test.check.generators$call_gen invokeStatic "generators.cljc" 43] [clojure.test.check.generators$call_gen invoke "generators.cljc" 39] [clojure.test.check.generators$sample_seq$fn__4798 invoke "generators.cljc" 158] [clojure.core$map$fn__5855 invoke "core.clj" 2760] [clojure.lang.LazySeq sval "LazySeq.java" 42] [clojure.lang.LazySeq seq "LazySeq.java" 51] [clojure.lang.RT seq "RT.java" 531] [clojure.core$seq__5387 invokeStatic "core.clj" 137] [clojure.core$take$fn__5894 invoke "core.clj" 2884] [clojure.lang.LazySeq sval "LazySeq.java" 42] [clojure.lang.LazySeq seq "LazySeq.java" 51] [clojure.lang.RT seq "RT.java" 531] [clojure.core$seq__5387 invokeStatic "core.clj" 137] [clojure.core$print_sequential invokeStatic "core_print.clj" 53] [clojure.core$fn__7295 invokeStatic "core_print.clj" 174] [clojure.core$fn__7295 invoke "core_print.clj" 174] [clojure.lang.MultiFn invoke "MultiFn.java" 234] [clojure.core$pr_on invokeStatic "core.clj" 3674] [clojure.core$pr_on invoke "core.clj" 3668] [clojure.core$print_sequential invokeStatic "core_print.clj" 66] [clojure.core$fn__7315 invokeStatic "core_print.clj" 225] [clojure.core$fn__7315 invoke "core_print.clj" 225] [clojure.lang.MultiFn invoke "MultiFn.java" 234] [clojure.core$pr_on invokeStatic "core.clj" 3674] [clojure.core$pr invokeStatic "core.clj" 3677] [clojure.core$pr invoke "core.clj" 3677] [clojure.lang.AFn applyToHelper "AFn.java" 154] [clojure.lang.RestFn applyTo "RestFn.java" 132] [clojure.core$apply invokeStatic "core.clj" 665] [clojure.core$pr_str invokeStatic "core.clj" 4736] [clojure.core$pr_str doInvoke "core.clj" 4736] [clojure.lang.RestFn invoke "RestFn.java" 408] [clojure.core.server$io_prepl$fn__8940$fn__8941 invoke "server.clj" 289] [clojure.core.server$io_prepl$fn__8940 invoke "server.clj" 288] [clojure.core.server$prepl$fn__8926 invoke "server.clj" 239] [clojure.core.server$prepl invokeStatic "server.clj" 228] [clojure.core.server$prepl doInvoke "server.clj" 191] [clojure.lang.RestFn invoke "RestFn.java" 425] [clojure.core.server$io_prepl invokeStatic "server.clj" 283] [clojure.core.server$io_prepl doInvoke "server.clj" 272] [clojure.lang.RestFn invoke "RestFn.java" 397] [clojure.lang.AFn applyToHelper "AFn.java" 152] [clojure.lang.RestFn applyTo "RestFn.java" 132] [clojure.lang.Var applyTo "Var.java" 705] [clojure.core$apply invokeStatic "core.clj" 665] [clojure.core.server$accept_connection invokeStatic "server.clj" 73] [clojure.core.server$start_server$fn__8864$fn__8865$fn__8867 invoke "server.clj" 117] [clojure.lang.AFn run "AFn.java" 22] [java.lang.Thread run "Thread.java" 748]], :cause "Assert failed: Args to tuple must be generators\n(every? generator? generators)", :phase :print-eval-result}, :ns "foo", :ms 6, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…", :exception true}
19-05-10 16:02:57 beta ERROR [conjure.prepl:?] - Error from thread 'read-chan handler': java.lang.ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.String
19-05-10 16:03:32 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :close-log, :params [], :client :stdio}
19-05-10 16:03:32 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').close_log(...)" ("/tmp/conjure.cljc")]}
19-05-10 16:03:32 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}

load-file when nvim and prepl CWD differ errors

So if you start nvim in a but your prepl is running in a/b then try to load-file with ,rF it'll error. This is because nvim is reporting a path with an extra segment, it doesn't need b/foo.clj, it just wants foo.clj, the prepl is already in b.

Should be able to fix this by mapping it through io/resource a bit like how the go to definition works I think. A rare error but an annoying one and easy enough to fix.

Add closing parens to every eval to prevent parens getting unbalanced in the prepl

So if you eval ((( all of your subsequent evals will behave weirdly and return odd things because a bunch of open forms in a previous eval are messing with them. I can think of two ways around this:

  • Try to parse the inputs to ensure they're balanced before sending them to the prepl. (may throw errors because we can't parse some new syntax or something)
  • Just send a bunch of closing parens with every eval, enough to at least balance the parens. (kinda hacky, but might work fine)

Just putting this issue here for ideas for now, need a good way to make this safer.

Test suite

No, there isn't one yet but I'd like to write one with kaocha. I'm not sure if it should be "integration" style or not though. So should it spin up a prepl and neovim instance to be driven? Or should I stub out everything. I kinda think stub since that's much more predictable, it just might require quite a few ^:dynamic functions.

Show current function signature

Not sure how or when, maybe on CursorHold and CursorHoldI it should echo the signature. Showing the signature in completion results would be nice too, I'll have to see if that's possible.

The main point being: The function signature for what you're currently working with should just be there, the doc lookup binding should be for when you need even more information. I find myself calling doc repeatedly just to get the argument order, I need to make that process smoother.

Add conjure to neovim wiki

Hey, seems your project is coming along well :) I noted you did not add conjure to the page of related projects in the neovim wiki. I pondered doing so, but felt this might not be in your best interest... so I just wanted to ask, should I add it? Would you want to do it yourself at some later time?

Cheers!

Issues with evaling a new ns form in clojurescript

Hello, I am super excited about conjure. It looks like a pretty sweet plugin for integrating prepl (especially clojurescript) into neovim. Everything seems to be working like a charm except for this weird edge case I ran into.

The issue happens when I try to eval a ns form in clojurescript that hasn't been eval'd before. I found eval-str and noticed that conjure unconditionally wraps all code in a do form.

This probably works in almost all use cases except the one I mentioned above. The clojurescript compiler seems to be emitting different code if ns is wrapped in a do form. This causes issues resolving the ns dependencies unlinke if it were a top level form.

I would be open to providing a PR but wanted to bring up the issue for discussion first, thanks.

Go to defintion

I can rip this out of my Rust iteration of Conjure essentially, it's not that hard. It's a tad harder for ClojureScript but I found a way to do it without dependencies.

conjure/src/clojure.rs

Lines 41 to 64 in ff0f4a1

pub fn definition(name: &str) -> String {
format!(
"
(if-let [loc (if-let [sym (and (not (find-ns '{})) (resolve '{}))]
(mapv (meta sym) [:file :line :column])
(when-let [syms #?(:cljs (ns-interns '{})
:clj (some-> (find-ns '{}) ns-interns))]
(when-let [file (:file (meta (-> syms first val)))]
[file 1 1])))]
(-> loc
(update
0
#?(:cljs identity
:clj #(-> (clojure.java.io/resource %)
(str)
(clojure.string/replace #\"^file:\" \"\")
(clojure.string/replace #\"^jar:file\" \"zipfile\")
(clojure.string/replace #\"\\.jar!/\" \".jar::\"))))
(update 2 dec))
:unknown)
",
name, name, name, name
)
}

It's gross but it works. Stop judging me.

Question: Working with cljs and Fulcro app

First of all, thanks for this plugin!

I've been a couple of days using it with my company backend services written in Clojure and is super great!

Now I would like some help to setup an environment to play around with some cljs and fulcro.

Here is what I'm doing:

  1. lein new fulcro app
  2. npm install and npx shadow-cljs server
  3. Turn On building and watching the main and workspaces
  4. lein repl :connect 9000
  5. Execute the following command in the repl:
(clojure.core.server/start-server {:accept 'clojure.core.server/io-prepl :address "localhost" :port 55555 :name "lein"})
(clojure.core.server/start-server {:accept 'cljs.server.node/prepl :address "localhost" :port 55556 :name "node"})
  1. Open nvim

When I open a .clj file like server_main.clj everything is working great, but for any .cljs file I lost all the benefits like Go To Definiton, Documentation and Auto Complete.

Here is my conjure.edn file

{:conns
 {:lein {:port 55555}
  :node {:port 55556 :lang :cljs}}}

Can someone help me to find out what I'm doing wrong?

Log

conjure.log

Render ANSI terminal color codes in log buffer

Hello, I was pointed to conjure the other day and am really excited about the prospects of having a nvim clojure plugin mostly written in clojure itself, so really nice work on this!

I noticed that when I use conjure to run tests, ANSI color codes aren't rendered in the log buffer. This is probably due to the fact that a normal text buffer is used for the logs. Using https://github.com/chrisbra/Colorizer I was able to render the colors. I tried a bit to automatically toggle this colorizer plugin on the results of test runs, but couldn't figure it out after a few attempts.

I mainly use iron.nvim + trex.nvim to run clojure tests. This setup uses nvim's terminal feature, which handles ANSI color codes. Investigating a bit how nvim terminal buffers work, I couldn't see how it could be used for this setup.

I'm opening this issue to share my attempt at fixing this and hear if you have any ideas to on how to address this. Feel free to close it if it isn't a main goal of the plugin.

uncolored

colored

Cheers

EOF error if unbalance parenthesis in comment

This works:

(inc
 ; (1)
 5)

But I get an EOF error with this form:

(inc
 ; )
 5)

I hope the logs are not too noisy, only the last lines are relevant, I think.

Logs

19-05-10 16:28:58 beta INFO [conjure.dev:15] - Logging initialised
19-05-10 16:28:58 beta INFO [conjure.rpc:142] - Starting RPC TCP server on port 46541
19-05-10 16:28:58 beta INFO [conjure.rpc:160] - Starting RPC loops
19-05-10 16:28:58 beta INFO [conjure.prepl:183] - Started prepl server on port 41427
19-05-10 16:28:58 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-set-var, :params ["conjure_ready" 1]}
19-05-10 16:28:58 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}
19-05-10 16:28:58 beta INFO [conjure.main:32] - Everything's ready! Let's perform some magic.
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :eval-current-form, :params [], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_get_current_buf" []] ["nvim_get_current_win" []] ["nvim_eval" ["matchstr(getline('.'), '\\%'.col('.').'c.')"]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("(" "" ")" "nzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("\\[" "" "\\]" "nzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "bnzW")]] ["nvim_call_function" ["searchpairpos" ("{" "" "}" "nzW")]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[#msgpack.core.Ext{:type 0, :data #object["[B" 0x68332396 "[B@68332396"]} #msgpack.core.Ext{:type 1, :data #object["[B" 0x2d31a0f4 "[B@2d31a0f4"]} "(" [0 0] [10 4] [0 0] [0 0] [0 0] [0 0]] nil], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-win-get-cursor, :params [#msgpack.core.Ext{:type 1, :data #object["[B" 0x2d31a0f4 "[B@2d31a0f4"]}]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [9 0], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x68332396 "[B@68332396"]} 8 10 false]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[["(+" " ; )"]] nil], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 1, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 0 1 false ["; conjure/out | Welcome to Conjure!"]]] ["nvim_buf_set_lines" [3 -1 -1 false ("; conjure/out | Warning: Connecting to Conjure's own JVM by default." "; conjure/out | You should start your own prepl and connect to that.")]] ["nvim_win_set_cursor" [1001 [3 0]]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil nil] nil], :client :stdio}
19-05-10 16:29:04 beta INFO [conjure.prepl:111] - Adding :conjure 127.0.0.1 41427
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 3, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; conjure/out | Adding :conjure")]] ["nvim_win_set_cursor" [1001 [4 0]]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:29:04 beta INFO [conjure.prepl:66] - Connecting through remote-prepl :conjure
19-05-10 16:29:04 beta TRACE [conjure.prepl:129] - Sending prelude:  (require 'clojure.repl 'clojure.string 'clojure.j…
19-05-10 16:29:04 beta TRACE [conjure.prepl:89] - Writing to tag: :conjure -  (require 'clojure.repl 'clojure.string 'clojure.j…
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "user", :ms 9, :form "(require 'clojure.repl 'clojure.string 'clojure.ja…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources", :ms 31, :form "(ns conjure-compliment.sources \"Tools for defining…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources/sources", :ns "conjure-compliment.sources", :ms 0, :form "(def ^{:doc \"Stores defined sources.\" :private tru…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources/all-sources", :ns "conjure-compliment.sources", :ms 4, :form "(defn all-sources \"Returns the list of all complet…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources/defsource", :ns "conjure-compliment.sources", :ms 10, :form "(defn defsource \"Defines a source with the given n…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.utils", :ms 9, :form "(ns conjure-compliment.utils \"Functions and utilit…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/*extra-metadata*", :ns "conjure-compliment.utils", :ms 0, :form "(def ^:dynamic *extra-metadata* \"Signals to downst…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/fuzzy-matches?", :ns "conjure-compliment.utils", :ms 5, :form "(defn fuzzy-matches? \"Tests if symbol matches the …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/fuzzy-matches-no-skip?", :ns "conjure-compliment.utils", :ms 3, :form "(defn fuzzy-matches-no-skip? \"Tests if symbol matc…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/resolve-class", :ns "conjure-compliment.utils", :ms 2, :form "(defn resolve-class \"Tries to resolve a classname …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/resolve-namespace", :ns "conjure-compliment.utils", :ms 1, :form "(defn resolve-namespace \"Tries to resolve a namesp…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/defmemoized", :ns "conjure-compliment.utils", :ms 5, :form "(defmacro ^{:doc \"Defines a memoized function.\" :f…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/primitive-cache", :ns "conjure-compliment.utils", :ms 0, :form "(def primitive-cache (atom {}))"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/cache-last-result", :ns "conjure-compliment.utils", :ms 4, :form "(defmacro cache-last-result \"If cache for `name` i…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/flush-caches", :ns "conjure-compliment.utils", :ms 1, :form "(defn flush-caches \"Removes all cached values, for…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/android-vm?", :ns "conjure-compliment.utils", :ms 0, :form ";; Classpath inspection (def android-vm? \"Signifie…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/jdk9+?", :ns "conjure-compliment.utils", :ms 1, :form "(def jdk9+? \"Signifies if the application is runni…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/classpath", :ns "conjure-compliment.utils", :ms 1, :form "(defn- classpath \"Returns a sequence of File objec…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/symlink?", :ns "conjure-compliment.utils", :ms 1, :form "(defn- symlink? \"Checks if the given file is a sym…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/file-seq-nonr", :ns "conjure-compliment.utils", :ms 2, :form "(defn- file-seq-nonr \"A tree seq on java.io.Files,…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/list-files", :ns "conjure-compliment.utils", :ms 27, :form "(defn- list-files \"Given a path (either a jar file…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/list-jdk9-base-classfiles", :ns "conjure-compliment.utils", :ms 9, :form "(defn- list-jdk9-base-classfiles \"Because on JDK9+…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/all-files-on-classpath", :ns "conjure-compliment.utils", :ms 3, :form "(defn- all-files-on-classpath \"Given a list of fil…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/classes-on-classpath", :ns "conjure-compliment.utils", :ms 7, :form "(defn classes-on-classpath \"Returns a map of all c…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/namespaces-on-classpath", :ns "conjure-compliment.utils", :ms 6, :form "(defn namespaces-on-classpath \"Returns the list of…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.utils/project-resources", :ns "conjure-compliment.utils", :ms 7, :form "(defn project-resources \"Returns a list of all non…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.context", :ms 5, :form "(ns conjure-compliment.context \"Utilities for pars…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/restore-map-literals", :ns "conjure-compliment.context", :ms 1, :form "(defn- restore-map-literals [context] (walk/postwa…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/try-read-replacing-maps", :ns "conjure-compliment.context", :ms 1, :form "(defn- try-read-replacing-maps [s] (try (binding […"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/dumb-read-form", :ns "conjure-compliment.context", :ms 2, :form "(defn- dumb-read-form \"Take a presumably unfinishe…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/safe-read-context-string", :ns "conjure-compliment.context", :ms 1, :form "#_(dumb-read-form \"(let [a {:b 1}, c {__prefix__\")…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/previous-context", :ns "conjure-compliment.context", :ms 0, :form "(def ^{:doc \"Stores the last completion context.\" …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/prefix-placeholder", :ns "conjure-compliment.context", :ms 0, :form "(def ^{:doc \"Special symbol which substitutes pref…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/parse-context", :ns "conjure-compliment.context", :ms 5, :form "(defn parse-context \"Takes a context which is a Li…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.context/cache-context", :ns "conjure-compliment.context", :ms 1, :form "(defn cache-context \"Parses the context, or return…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.resources", :ms 6, :form "(ns conjure-compliment.sources.resources \"Completi…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.resources/inside-resource-call?", :ns "conjure-compliment.sources.resources", :ms 2, :form "(defn inside-resource-call? \"If context is not nil…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.resources/candidates", :ns "conjure-compliment.sources.resources", :ms 4, :form "(defn candidates \"Returns list of completions for …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.resources/doc", :ns "conjure-compliment.sources.resources", :ms 1, :form "(defn doc \"Documentation function for project reso…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#:conjure-compliment.sources.resources{:resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}}", :ns "conjure-compliment.sources.resources", :ms 0, :form "(defsource ::resources :candidates #'candidates :d…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.ns-mappings", :ms 5, :form "(ns conjure-compliment.sources.ns-mappings \"Comple…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/var-symbol?", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defn var-symbol? \"Test if prefix resembles a var …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/dash-matches?", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defn dash-matches? \"Tests if prefix partially mat…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/get-scope-and-prefix", :ns "conjure-compliment.sources.ns-mappings", :ms 1, :form "(defn get-scope-and-prefix \"Tries to get take apar…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/try-get-ns-from-context", :ns "conjure-compliment.sources.ns-mappings", :ms 2, :form "(defn try-get-ns-from-context \"Tries to extract a …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/generate-docstring", :ns "conjure-compliment.sources.ns-mappings", :ms 3, :form "(defn generate-docstring \"Generates a docstring fr…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/candidates", :ns "conjure-compliment.sources.ns-mappings", :ms 10, :form "(defn candidates \"Returns a list of namespace-boun…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.ns-mappings/doc", :ns "conjure-compliment.sources.ns-mappings", :ms 1, :form "(defn doc \"Documentation function for this sources…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}}", :ns "conjure-compliment.sources.ns-mappings", :ms 0, :form "(defsource ::ns-mappings :candidates #'candidates …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.local-bindings", :ms 5, :form "(ns conjure-compliment.sources.local-bindings \"Com…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/let-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def let-like-forms '#{let if-let when-let if-some…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/defn-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def defn-like-forms '#{defn defn- fn defmacro})"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/doseq-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def doseq-like-forms '#{doseq for})"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/letfn-like-forms", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(def letfn-like-forms '#{letfn})"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/parse-binding", :ns "conjure-compliment.sources.local-bindings", :ms 2, :form "(defn parse-binding \"Given a binding node returns …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/parse-fn-body", :ns "conjure-compliment.sources.local-bindings", :ms 2, :form "(defn parse-fn-body \"Extract function name and arg…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/extract-local-bindings", :ns "conjure-compliment.sources.local-bindings", :ms 2, :form "(defn extract-local-bindings \"When given a form th…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/distinct-preserve-tags", :ns "conjure-compliment.sources.local-bindings", :ms 1, :form "(defn- distinct-preserve-tags \"Like `distinct` but…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/bindings-from-context", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(defn bindings-from-context \"Returns all local bin…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.local-bindings/candidates", :ns "conjure-compliment.sources.local-bindings", :ms 6, :form "(defn candidates \"Returns a list of local bindings…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}}", :ns "conjure-compliment.sources.local-bindings", :ms 0, :form "(defsource ::local-bindings :candidates #'candidat…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.class-members", :ms 7, :form "(ns conjure-compliment.sources.class-members \"Comp…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static?", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn static? \"Tests if class member is static.\" […"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form ";; ## Regular (non-static) members (def members-ca…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/populate-members-cache", :ns "conjure-compliment.sources.class-members", :ms 7, :form "(defn populate-members-cache \"Populate members cac…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/update-cache", :ns "conjure-compliment.sources.class-members", :ms 2, :form "(defn update-cache \"Updates members cache for a gi…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/get-all-members", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn get-all-members \"Returns all non-static memb…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/class-member-symbol?", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn class-member-symbol? \"Tests if a symbol name…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/camel-case-matches?", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn camel-case-matches? \"Tests if prefix matches…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/try-get-object-class", :ns "conjure-compliment.sources.class-members", :ms 2, :form "(defn try-get-object-class \"Tries to get the type …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-candidates", :ns "conjure-compliment.sources.class-members", :ms 5, :form "(defn members-candidates \"Returns a list of Java n…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/type-to-pretty-string", :ns "conjure-compliment.sources.class-members", :ms 1, :form ";; ### Member documentation (defn type-to-pretty-s…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/doc-method-parameters", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn doc-method-parameters \"Takes a list of metho…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/create-members-doc", :ns "conjure-compliment.sources.class-members", :ms 3, :form "(defn create-members-doc \"Takes a list of members …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/members-doc", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn members-doc \"Documentation function for non-…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/classname-doc", :ns "conjure-compliment.sources.class-members", :ms 8, :form "(defn classname-doc [^Class class] (let [members (…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}}", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defsource ::members :candidates #'members-candida…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-member-symbol?", :ns "conjure-compliment.sources.class-members", :ms 0, :form ";; ## Static members (defn static-member-symbol? \"…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(def ^{:doc \"Stores cache of all static members fo…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/populate-static-members-cache", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn populate-static-members-cache \"Populates sta…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/update-static-cache", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn update-static-cache \"Updates static members …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn static-members \"Returns all static members f…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-members-candidates", :ns "conjure-compliment.sources.class-members", :ms 4, :form "(defn static-members-candidates \"Returns a list of…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/resolve-static-member", :ns "conjure-compliment.sources.class-members", :ms 1, :form "(defn resolve-static-member \"Given a string repres…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.class-members/static-member-doc", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defn static-member-doc \"Given a member name and c…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}}", :ns "conjure-compliment.sources.class-members", :ms 0, :form "(defsource ::static-members :candidates #'static-m…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.keywords", :ms 5, :form "(ns conjure-compliment.sources.keywords \"Completio…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/keywords-table", :ns "conjure-compliment.sources.keywords", :ms 0, :form "(defmemoized ^:private keywords-table [] (let [^Fi…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/tagged-candidate", :ns "conjure-compliment.sources.keywords", :ms 70, :form "(defn- tagged-candidate [c] {:candidate c, :type :…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/qualified-candidates", :ns "conjure-compliment.sources.keywords", :ms 3, :form "(defn qualified-candidates \"Returns a list of name…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/namespace-alias-candidates", :ns "conjure-compliment.sources.keywords", :ms 3, :form "(defn namespace-alias-candidates \"Returns a list o…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/aliased-candidates", :ns "conjure-compliment.sources.keywords", :ms 4, :form "(defn aliased-candidates \"Returns a list of alias-…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.keywords/candidates", :ns "conjure-compliment.sources.keywords", :ms 3, :form "(defn candidates [^String prefix, ns _] (let [sing…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x31fcd069 \"clojure.core$constantly$fn__5657@31fcd069\"], :enabled true}}", :ns "conjure-compliment.sources.keywords", :ms 0, :form "(defsource ::keywords :candidates #'candidates :do…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 5, :form "(ns conjure-compliment.sources.namespaces-and-clas…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/nscl-symbol?", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 0, :form "(defn nscl-symbol? \"Tests if prefix looks like a n…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/nscl-matches?", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 0, :form "(defn nscl-matches? \"Tests if prefix partially mat…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/imported-classes", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 3, :form ";;; Obtaining the list of classes (defn imported-c…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/all-classes-short-names", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 2, :form "(defn all-classes-short-names \"Returns a map where…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/analyze-import-context", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn- analyze-import-context \"Checks if the compl…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/get-all-full-names", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn- get-all-full-names \"Returns a list of packa…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/get-classes-by-package-name", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn- get-classes-by-package-name \"Returns simple…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/candidates", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 15, :form "(defn candidates \"Returns a list of namespace and …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.namespaces-and-classes/doc", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 1, :form "(defn doc [ns-or-class-str curr-ns] (when (nscl-sy…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x31fcd069 \"clojure.core$constantly$fn__5657@31fcd069\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}}", :ns "conjure-compliment.sources.namespaces-and-classes", :ms 0, :form "(defsource ::namespaces-and-classes :candidates #'…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.sources.special-forms", :ms 4, :form "(ns conjure-compliment.sources.special-forms \"Comp…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/special-forms", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(def ^:private special-forms (set (map name '[def …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/first-item-in-list?", :ns "conjure-compliment.sources.special-forms", :ms 1, :form "(defn first-item-in-list? \"If context is not nil, …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/candidates", :ns "conjure-compliment.sources.special-forms", :ms 3, :form "(defn candidates \"Returns list of completions for …"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/doc", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(defn doc \"Documentation function for special form…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x31fcd069 \"clojure.core$constantly$fn__5657@31fcd069\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}, :conjure-compliment.sources.special-forms/special-forms {:candidates #'conjure-compliment.sources.special-forms/candidates, :doc #'conjure-compliment.sources.special-forms/doc, :enabled true}}", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(defsource ::special-forms :candidates #'candidate…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.sources.special-forms/literal-candidates", :ns "conjure-compliment.sources.special-forms", :ms 1, :form "(defn literal-candidates \"We define `true`, `false…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "{:conjure-compliment.sources.class-members/members {:candidates #'conjure-compliment.sources.class-members/members-candidates, :tag-fn #object[conjure_compliment.sources.class_members$fn__618 0x1065732e \"conjure_compliment.sources.class_members$fn__618@1065732e\"], :doc #'conjure-compliment.sources.class-members/members-doc, :enabled true}, :conjure-compliment.sources.resources/resources {:candidates #'conjure-compliment.sources.resources/candidates, :doc #'conjure-compliment.sources.resources/doc, :enabled true}, :conjure-compliment.sources.keywords/keywords {:candidates #'conjure-compliment.sources.keywords/candidates, :doc #object[clojure.core$constantly$fn__5657 0x31fcd069 \"clojure.core$constantly$fn__5657@31fcd069\"], :enabled true}, :conjure-compliment.sources.local-bindings/local-bindings {:candidates #'conjure-compliment.sources.local-bindings/candidates, :doc #object[clojure.core$constantly$fn__5657 0x63e35a0d \"clojure.core$constantly$fn__5657@63e35a0d\"], :enabled true}, :conjure-compliment.sources.namespaces-and-classes/namespaces-and-classes {:candidates #'conjure-compliment.sources.namespaces-and-classes/candidates, :doc #'conjure-compliment.sources.namespaces-and-classes/doc, :enabled true}, :conjure-compliment.sources.special-forms/special-forms {:candidates #'conjure-compliment.sources.special-forms/candidates, :doc #'conjure-compliment.sources.special-forms/doc, :enabled true}, :conjure-compliment.sources.special-forms/literals {:candidates #'conjure-compliment.sources.special-forms/literal-candidates, :doc #object[clojure.core$constantly$fn__5657 0x21dba236 \"clojure.core$constantly$fn__5657@21dba236\"], :enabled true}, :conjure-compliment.sources.class-members/static-members {:candidates #'conjure-compliment.sources.class-members/static-members-candidates, :doc #'conjure-compliment.sources.class-members/static-member-doc, :enabled true}, :conjure-compliment.sources.ns-mappings/ns-mappings {:candidates #'conjure-compliment.sources.ns-mappings/candidates, :doc #'conjure-compliment.sources.ns-mappings/doc, :enabled true}}", :ns "conjure-compliment.sources.special-forms", :ms 0, :form "(defsource ::literals :candidates #'literal-candid…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "nil", :ns "conjure-compliment.core", :ms 5, :form ";; ## Compliment - a completion library you deserv…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/all-files", :ns "conjure-compliment.core", :ms 0, :form "(def all-files \"List of all Compliment files in an…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/by-length-comparator", :ns "conjure-compliment.core", :ms 1, :form "(def ^:private by-length-comparator (reify Compara…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/sort-by-length", :ns "conjure-compliment.core", :ms 0, :form "(defn sort-by-length \"Sorts list of strings by the…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/ensure-ns", :ns "conjure-compliment.core", :ms 0, :form "(defn ensure-ns \"Takes either a namespace object o…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/completions", :ns "conjure-compliment.core", :ms 3, :form "(defn completions \"Returns a list of completions f…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "#'conjure-compliment.core/documentation", :ns "conjure-compliment.core", :ms 4, :form "(defn documentation \"Returns a documentation strin…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val ":ready", :ns "conjure-compliment.core", :ms 0, :form ":ready"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:134] - Prelude loaded
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-current-buf, :params nil}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x6d8864fe "[B@6d8864fe"]}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x6d8864fe "[B@6d8864fe"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x6d8864fe "[B@6d8864fe"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x6d8864fe "[B@6d8864fe"]} 0 25 false]] ["nvim_get_current_win" []])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [["/home/jlle/tmp/foo/foo.clj" 12 ["(ns foo)" "" "(require '[clojure.test.check.generators :as gen])" "" "(gen/sample (gen/bind gen/int #(gen/tuple %)))" "" "(inc 1)" "" "(+" " ; )" " 5)" ""] #msgpack.core.Ext{:type 1, :data #object["[B" 0x4d1e5fbb "[B@4d1e5fbb"]}] nil], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 4, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; conjure/eval | (+ ; )")]] ["nvim_win_set_cursor" [1001 [5 0]]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.prepl:89] - Writing to tag: :conjure -  (try (ns foo) (let [rdr (-> (java.io.StringReader…
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :err, :val "Syntax error reading source at (foo.clj:11:1).\nEOF while reading, starting at line 9\n\n", :form nil}
19-05-10 16:29:04 beta TRACE [conjure.prepl:141] - Read value from :conjure - {:tag :err, :val "Syntax error reading source at (foo.clj:11:1).\nEOF while reading, starting at line 9\n\n", :form nil}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 5, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; conjure/err | Syntax error reading source at (foo.clj:11:1)." "; conjure/err | EOF while reading, starting at line 9")]] ["nvim_win_set_cursor" [1001 [7 0]]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.prepl:70] - Read from remote-prepl :conjure - {:tag :ret, :val "[:error {:via [{:type clojure.lang.Compiler$CompilerException, :message \"Syntax error reading source at (/home/jlle/tmp/foo/foo.clj:11:1).\", :data #:clojure.error{:phase :read-source, :line 11, :column 1, :source \"/home/jlle/tmp/foo/foo.clj\"}, :at [clojure.lang.Compiler load \"Compiler.java\" 7642]} {:type java.lang.RuntimeException, :message \"EOF while reading, starting at line 9\", :at [clojure.lang.Util runtimeException \"Util.java\" 221]}], :trace [[clojure.lang.Util runtimeException \"Util.java\" 221] [clojure.lang.LispReader readDelimitedList \"LispReader.java\" 1405] [clojure.lang.LispReader$ListReader invoke \"LispReader.java\" 1243] [clojure.lang.LispReader read \"LispReader.java\" 285] [clojure.lang.LispReader read \"LispReader.java\" 216] [clojure.lang.Compiler load \"Compiler.java\" 7629] [conjure_compliment.core$eval1032 invokeStatic \"NO_SOURCE_FILE\" 1250] [conjure_compliment.core$eval1032 invoke \"NO_SOURCE_FILE\" 1242] [clojure.lang.Compiler eval \"Compiler.java\" 7176] [clojure.lang.Compiler eval \"Compiler.java\" 7131] [clojure.core$eval invokeStatic \"core.clj\" 3214] [clojure.core.server$prepl$fn__8926 invoke \"server.clj\" 232] [clojure.core.server$prepl invokeStatic \"server.clj\" 228] [clojure.core.server$prepl doInvoke \"server.clj\" 191] [clojure.lang.RestFn invoke \"RestFn.java\" 425] [clojure.core.server$io_prepl invokeStatic \"server.clj\" 283] [clojure.core.server$io_prepl doInvoke \"server.clj\" 272] [clojure.lang.RestFn invoke \"RestFn.java\" 397] [clojure.lang.AFn applyToHelper \"AFn.java\" 152] [clojure.lang.RestFn applyTo \"RestFn.java\" 132] [clojure.lang.Var applyTo \"Var.java\" 705] [clojure.core$apply invokeStatic \"core.clj\" 665] [clojure.core.server$accept_connection invokeStatic \"server.clj\" 73] [clojure.core.server$start_server$fn__8864$fn__8865$fn__8867 invoke \"server.clj\" 117] [clojure.lang.AFn run \"AFn.java\" 22] [java.lang.Thread run \"Thread.java\" 748]], :cause \"EOF while reading, starting at line 9\", :phase :read-source}]", :ns "foo", :ms 6, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…"}
19-05-10 16:29:04 beta TRACE [conjure.prepl:141] - Read value from :conjure - {:tag :ret, :val "[:error {:via [{:type clojure.lang.Compiler$CompilerException, :message \"Syntax error reading source at (/home/jlle/tmp/foo/foo.clj:11:1).\", :data #:clojure.error{:phase :read-source, :line 11, :column 1, :source \"/home/jlle/tmp/foo/foo.clj\"}, :at [clojure.lang.Compiler load \"Compiler.java\" 7642]} {:type java.lang.RuntimeException, :message \"EOF while reading, starting at line 9\", :at [clojure.lang.Util runtimeException \"Util.java\" 221]}], :trace [[clojure.lang.Util runtimeException \"Util.java\" 221] [clojure.lang.LispReader readDelimitedList \"LispReader.java\" 1405] [clojure.lang.LispReader$ListReader invoke \"LispReader.java\" 1243] [clojure.lang.LispReader read \"LispReader.java\" 285] [clojure.lang.LispReader read \"LispReader.java\" 216] [clojure.lang.Compiler load \"Compiler.java\" 7629] [conjure_compliment.core$eval1032 invokeStatic \"NO_SOURCE_FILE\" 1250] [conjure_compliment.core$eval1032 invoke \"NO_SOURCE_FILE\" 1242] [clojure.lang.Compiler eval \"Compiler.java\" 7176] [clojure.lang.Compiler eval \"Compiler.java\" 7131] [clojure.core$eval invokeStatic \"core.clj\" 3214] [clojure.core.server$prepl$fn__8926 invoke \"server.clj\" 232] [clojure.core.server$prepl invokeStatic \"server.clj\" 228] [clojure.core.server$prepl doInvoke \"server.clj\" 191] [clojure.lang.RestFn invoke \"RestFn.java\" 425] [clojure.core.server$io_prepl invokeStatic \"server.clj\" 283] [clojure.core.server$io_prepl doInvoke \"server.clj\" 272] [clojure.lang.RestFn invoke \"RestFn.java\" 397] [clojure.lang.AFn applyToHelper \"AFn.java\" 152] [clojure.lang.RestFn applyTo \"RestFn.java\" 132] [clojure.lang.Var applyTo \"Var.java\" 705] [clojure.core$apply invokeStatic \"core.clj\" 665] [clojure.core.server$accept_connection invokeStatic \"server.clj\" 73] [clojure.core.server$start_server$fn__8864$fn__8865$fn__8867 invoke \"server.clj\" 117] [clojure.lang.AFn run \"AFn.java\" 22] [java.lang.Thread run \"Thread.java\" 748]], :cause \"EOF while reading, starting at line 9\", :phase :read-source}]", :ns "foo", :ms 6, :form "(try (ns foo) (let [rdr (-> (java.io.StringReader.…"}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" 40 false false)]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result {"win" 1001, "buf" 3}, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [3]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result 7, :client :stdio}
19-05-10 16:29:04 beta TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_set_lines" [3 -1 -1 false ("; Error folded, use `zo` to reveal {{{1" "; conjure/ret ⤸" "{:cause \"EOF while reading, starting at line 9\"," " :phase :read-source," " :trace [[clojure.lang.Util runtimeException \"Util.java\" 221]" "         [clojure.lang.LispReader readDelimitedList \"LispReader.java\" 1405]" "         [clojure.lang.LispReader$ListReader invoke \"LispReader.java\" 1243]" "         [clojure.lang.LispReader read \"LispReader.java\" 285]" "         [clojure.lang.LispReader read \"LispReader.java\" 216]" "         [clojure.lang.Compiler load \"Compiler.java\" 7629]" "         [conjure_compliment.core$eval1032 invokeStatic \"NO_SOURCE_FILE\" 1250]" "         [conjure_compliment.core$eval1032 invoke \"NO_SOURCE_FILE\" 1242]" "         [clojure.lang.Compiler eval \"Compiler.java\" 7176]" "         [clojure.lang.Compiler eval \"Compiler.java\" 7131]" "         [clojure.core$eval invokeStatic \"core.clj\" 3214]" "         [clojure.core.server$prepl$fn__8926 invoke \"server.clj\" 232]" "         [clojure.core.server$prepl invokeStatic \"server.clj\" 228]" "         [clojure.core.server$prepl doInvoke \"server.clj\" 191]" "         [clojure.lang.RestFn invoke \"RestFn.java\" 425]" "         [clojure.core.server$io_prepl invokeStatic \"server.clj\" 283]" "         [clojure.core.server$io_prepl doInvoke \"server.clj\" 272]" "         [clojure.lang.RestFn invoke \"RestFn.java\" 397]" "         [clojure.lang.AFn applyToHelper \"AFn.java\" 152]" "         [clojure.lang.RestFn applyTo \"RestFn.java\" 132]" "         [clojure.lang.Var applyTo \"Var.java\" 705]" "         [clojure.core$apply invokeStatic \"core.clj\" 665]" "         [clojure.core.server$accept_connection invokeStatic \"server.clj\" 73]" "         [clojure.core.server$start_server$fn__8864$fn__8865$fn__8867 invoke" "          \"server.clj\" 117] [clojure.lang.AFn run \"AFn.java\" 22]" "         [java.lang.Thread run \"Thread.java\" 748]]," " :via [{:at [clojure.lang.Compiler load \"Compiler.java\" 7642]," "        :data #:clojure.error{:column 1," "               :line 11," "               :phase :read-source," "               :source \"/home/jlle/tmp/foo/foo.clj\"}," "        :message" "          \"Syntax error reading source at (/home/jlle/tmp/foo/foo.clj:11:1).\"," "        :type clojure.lang.Compiler$CompilerException}" "       {:at [clojure.lang.Util runtimeException \"Util.java\" 221]," "        :message \"EOF while reading, starting at line 9\"," "        :type java.lang.RuntimeException}]}" "; }}}1")]] ["nvim_win_set_cursor" [1001 [49 0]]])]}
19-05-10 16:29:04 beta TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result [[nil nil] nil], :client :stdio}

Write a better README / docs

I'm not happy with the current one, it's a rough first draft after all. Things I want out of a README:

  • Logo
  • Clear example of the work flow (elevator pitch).
  • Rationale, because it's tradition in the Clojure world now I guess.
  • Getting started guide.
  • Community information such as contributing guidelines and code of conduct. These exist, they could just do with a nod in the README.
  • Potentially a more subjective and hand-holding post on my blog that could be linked to from the README, like the prepl guide.

I should also make that prepl guide a lot more obvious. The asciinema video also takes up way too much real estate at the moment.

As part of this I think a bunch of the more detailed documentation intended for when you've already installed it and want to dig a little deeper should go into Neovim help files. That way you can still browse them in GitHub but the canonical source of information on commands etc is accessible within your editor.

Lazy sequences and printing seem to get mixed up

I've been seeing :out values in my lazy-sequence :ret if I (prn ...) from inside them. I think this is a Clojure bug but I've got to prove it first. I don't think this is a Conjure bug but I'm raising it here for visibility.

Evaluating the current form throws when cursor is on a paren

This was working but appears to have broken. Possibly to do with AOT scarily enough, just making this issue so that others are aware.

,rr (eval outer form) is fine, ,re (eval current form) is okay as long as you're not on a paren or trying to eval a [] pair. I've got some hunches.

Enhancement: Toggle Quick Doc using key map

I personally don't like the quickdoc showing up all time, but would nice to have a way to show it using some key mapping or when I try to get the doc of a function that doesn't have one.

Feature request: fallback connections

Conjure continues to be excellent, but I've noticed one minor pain point: there is no way for me to configure Conjure to use its own prepl whenever I don't have mine running.

I like that there is a default behavior where, if you don't have any connections configured in a conjure.edn in your project or home config directory, Conjure will fall back to using its own prepl so that you still get some good basic functionality. If I don't have a ~/.config/conjure/conjure.edn file, I can edit a one-off Clojure file (i.e. vim /tmp/foo.clj) and automatically get docstrings for Clojure core functions, evaluate forms, and so on.

The trouble is that I do have a ~/.config/conjure/conjure.edn in my home directory for general things that I want available everywhere, like a :cwd connection that connects to a prepl server that I've started in the current directory on a port specified in a .socket-port file. Because I have that, if I go to edit a one-off file like /tmp/foo.clj, Conjure fails to connect to the :cwd connection (because I haven't bothered to start a prepl server in /tmp) and I'm left with no active connections. I think it would be great if there were some way that I could still get the fallback Conjure prepl behavior in the scenario.


A couple of ideas:

  1. We could consider this always being the fallback behavior when all of your connections fail to connect. Although, you would probably want to know that that's happening, so a warning would be in order, like you mentioned in #31.

  2. We could go the explicit route and add an optional configuration key like :fallback, where you could specify another connection to use in the event that this one fails. Assuming the Conjure prepl has a publicly usable connection name like :conjure, then my :cwd connection config could look like: {:port #slurp-edn ".socket-port", :fallback :conjure}.

Either way, the idea is that when I run vim /tmp/foo.clj, once Conjure starts up, I see a warning that Conjure can't connect to :cwd, and it's using :conjure as a fallback.

Records can't be serialised and deserialised by Conjure

mynomoto over on Slack pointed out that if you try to return a record from an eval Conjure explodes.

(defrecord Foo [bar])
(->Foo "bar")

Because that evaluates to the string

#conjure.code.Foo{:bar \"bar\"}

Which Conjure tries to read because it reads all prepl responses (for better or worse...). I think the main need to read responses is because I want to check if it was an error or not. That will go away when I overhaul how errors and exceptions work.

Would be cool to fix this ASAP, but if you hit this before then just (into {} r) where r is your record. It'll get around this issue until I can patch it out or it vanishes on it's own when I improve errors.

Changed namespace reloading

This depends on your project including tools.namespace (a pretty common dependency) Again, there's some old code from the legacy branch that can be used to learn from.

function! s:RefreshTemplate(body)
let dirs = join(map(copy(g:conjure_refresh_dirs), '"\"" . v:val . "\""'), " ")
return printf("
\#?(:clj (do
\ (require 'clojure.tools.namespace.repl)
\ ((resolve 'clojure.tools.namespace.repl/set-refresh-dirs) %s)
\ %s)
\ :cljs (prn \"ClojureScript doesn't support refreshing, sorry!\"))
\", dirs, a:body)
endfunction
function! conjure#refresh()
call conjure#eval(<SID>RefreshTemplate(printf("
\((resolve 'clojure.tools.namespace.repl/refresh) %s)
\", g:conjure_refresh_args)))
endfunction
function! conjure#refresh_all()
call conjure#eval(<SID>RefreshTemplate(printf("
\((resolve 'clojure.tools.namespace.repl/clear))
\((resolve 'clojure.tools.namespace.repl/refresh-all) %s)
\", g:conjure_refresh_args)))
endfunction

Deoplete Config

The configuration for deoplete keyword_pattern in the readme is out of date.

rather than

let g:deoplete#keyword_patterns = {}
let g:deoplete#keyword_patterns.clojure = '[\w!$%&+/:<=>?@^_~-.#]'

it should be:

call deoplete#custom#option('keyword_patterns', {'clojure': '[\w!$%&+/:<=>?@^_~-.#]'})

Benchmarks

Conjure is pretty damn snappy, if I do say so myself. I'd like to add some benchmarks to make it easier to reason about changes and optimisations in the future. I'd probably add them to the following areas:

  • RPC IO
  • prepl IO
  • Log buffer updating
  • User input end to end. (when I hit doc, how long does it take to render)

A lot of this requires a running Neovim and prepl though, so maybe it wouldn't be automated but easy for you to kick off within a make dev session.

Configuration and mappings

  1. Work out how best to configure things.
  2. Configure things.

Things like horizontal splitting and only showing the last result as mentioned in #4 would be easy to add. I guess like let g:conjure_default_mappings = 0, just define global variables and Conjure will look for them.

What else could be configured easily enough 🤔

Using #slurp-edn reader without full path throws exception

I have this in my .conjure.edn file:

{:conns
 {:dev {:port #slurp-edn ".socket-port"}}}

and the .socket-port file has:

5052

When Conjure connects, I get an error in :messages:

Error from thread 'RPC message handler':
 {:cause ".socket-port (No such file or directory)",
 :trace [[java.io.FileInputStream open0 "FileInputStream.java" -2]
         [java.io.FileInputStream open "FileInputStream.java" 195]
         [java.io.FileInputStream <init> "FileInputStream.java" 138]
         [clojure.java.io$fn__11496 invokeStatic "io.clj" 229]
         [clojure.java.io$fn__11496 invoke "io.clj" 229]
         [clojure.java.io$fn__11409$G__11402__11416 invoke "io.clj" 69]
         [clojure.java.io$fn__11508 invokeStatic "io.clj" 258]
         [clojure.java.io$fn__11508 invoke "io.clj" 254]
         [clojure.java.io$fn__11409$G__11402__11416 invoke "io.clj" 69]
         [clojure.java.io$fn__11470 invokeStatic "io.clj" 165]
         [clojure.java.io$fn__11470 invoke "io.clj" 165]
         [clojure.java.io$fn__11422$G__11398__11429 invoke "io.clj" 69]
         [clojure.java.io$reader invokeStatic "io.clj" 102]
         [clojure.java.io$reader doInvoke "io.clj" 86]
         [clojure.lang.RestFn invoke "RestFn.java" 410]
         [clojure.lang.AFn applyToHelper "AFn.java" 154]
         [clojure.lang.RestFn applyTo "RestFn.java" 132]
         [clojure.core$apply invokeStatic "core.clj" 667]
         [clojure.core$slurp invokeStatic "core.clj" 6942]
         [clojure.core$slurp doInvoke "core.clj" 6942]
         [clojure.lang.RestFn invoke "RestFn.java" 410]
         [clojure.core$comp$fn__5807 invoke "core.clj" 2569]
         [clojure.lang.EdnReader$TaggedReader readTagged "EdnReader.java" 804]
         [clojure.lang.EdnReader$TaggedReader invoke "EdnReader.java" 783]
         [clojure.lang.EdnReader$DispatchReader invoke "EdnReader.java" 549]
         [clojure.lang.EdnReader readDelimitedList "EdnReader.java" 757]
         [clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
         [clojure.lang.EdnReader readDelimitedList "EdnReader.java" 757]
         [clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
         [clojure.lang.EdnReader readDelimitedList "EdnReader.java" 757]
         [clojure.lang.EdnReader$MapReader invoke "EdnReader.java" 680]
         [clojure.lang.EdnReader read "EdnReader.java" 145]
         [clojure.lang.EdnReader read "EdnReader.java" 111]
         [clojure.lang.EdnReader readString "EdnReader.java" 67]
         [clojure.edn$read_string invokeStatic "edn.clj" 46]
         [conjure.config$gather$fn__16378 invoke "config.clj" 47]
         [clojure.core$map$fn__5862$fn__5863 invoke "core.clj" 2742]
         [clojure.core$map$fn__5862$fn__5863 invoke "core.clj" 2742]
         [clojure.core$filter$fn__5889$fn__5890 invoke "core.clj" 2806]
         [clojure.core$preserving_reduced$fn__8758 invoke "core.clj" 7614]
         [clojure.lang.PersistentVector reduce "PersistentVector.java" 343]
         [clojure.core$reduce invokeStatic "core.clj" 6827]
         [clojure.core$cat$fn__8761 invoke "core.clj" 7625]
         [clojure.core$map$fn__5862$fn__5863 invoke "core.clj" 2742]
         [clojure.lang.PersistentList reduce "PersistentList.java" 141]

I found that if I put the full path to the socket file it works.

{:conns
 {:dev {:port #slurp-edn "/home/nate/projects/app/.socket-port"}}}

Logs

19-06-13 00:12:02 devvm INFO [conjure.main:35] - Logging initialised
19-06-13 00:12:02 devvm INFO [conjure.main:37] - System versions
-e === Conjure ===
v0.18.0-15-ge14aae561f
-e 
=== OS ===

-e 
=== Neovim ===
NVIM v0.4.0-dev
Build type: RelWithDebInfo
Lua 5.1
Compilation: /usr/bin/x86_64-linux-gnu-gcc -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2 -g -DMIN_LOG_LEVEL=3 -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wvla -fstack-protector-strong -fdiagnostics-color=auto -Wno-array-bounds -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim-zzOmEQ/neovim-0.4.0+ubuntu1+git201903042020-2816bc8-eada8be/build/config -I/build/neovim-zzOmEQ/neovim-0.4.0+ubuntu1+git201903042020-2816bc8-eada8be/src -I/build/neovim-zzOmEQ/neovim-0.4.0+ubuntu1+git201903042020-2816bc8-eada8be/.deps/usr/include -I/usr/include -I/build/neovim-zzOmEQ/neovim-0.4.0+ubuntu1+git201903042020-2816bc8-eada8be/build/src/nvim/auto -I/build/neovim-zzOmEQ/neovim-0.4.0+ubuntu1+git201903042020-2816bc8-eada8be/build/include
Compiled by buildd@lgw01-amd64-059

Features: +acl +iconv +tui 
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info
-e 
=== Java ===
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

19-06-13 00:12:02 devvm INFO [conjure.rpc:142] - Starting RPC TCP server on port 45245
19-06-13 00:12:02 devvm INFO [conjure.rpc:160] - Starting RPC loops
19-06-13 00:12:02 devvm INFO [conjure.prepl:195] - Started prepl server on port 34711
19-06-13 00:12:02 devvm TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :up, :params [""], :client :stdio}
19-06-13 00:12:02 devvm TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-set-var, :params ["conjure_ready" 1]}
19-06-13 00:12:02 devvm TRACE [conjure.rpc:179] - Sending RPC message: {:type :request, :client :stdio, :id 2, :method :nvim-call-function, :params ["getcwd" (0)]}
19-06-13 00:12:02 devvm TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}
19-06-13 00:12:02 devvm INFO [conjure.main:42] - Everything's ready! Let's perform some magic.
19-06-13 00:12:02 devvm TRACE [conjure.rpc:192] - Received RPC message: {:type :response, :id 2, :error nil, :result "/home/nate/projects/app", :client :stdio}
19-06-13 00:12:02 devvm ERROR [conjure.rpc:?] - Error from thread 'RPC message handler': java.io.FileNotFoundException: .socket-port (No such file or directory)
19-06-13 00:12:03 devvm TRACE [conjure.rpc:192] - Received RPC message: {:type :notify, :method :stop, :params [0], :client :stdio}
19-06-13 00:12:03 devvm INFO [conjure.main:17] - Shutting down

Interested in extra prepl messages?

I'm currently implemented the pREPL support in shadow-cljs and wonder if you'd be interested in receiving "extra" messages from the server for CLJS REPLs.

So in addition to the regular :tag :ret|:out|:err you'd get something like {:tag :shadow/info ...}. Those messages would basically be notifications of events happening with a CLJS build. These would mostly be about

  • a JS runtime connecting (eg. user opens browser output, new tab, different browser)
  • a JS runtime disconnecting (eg. tab closed, hard reload -> followed by new connect)

I already have the events available and currently have to decide if I should just discard them or put them on the socket. Regular CLJS REPLs don't report these events so you might not be interested in them at all?

Can Conjure be configured to be silent (i.e. no popup) when starting?

As I've been using Conjure, I've been noticing that I tend to reflexively press <localleader>cq to close the initial Conjure log that pops up and tells me the results of its trying to connect to any prepls as configured in conjure.edn:

; conjure/out | Welcome to Conjure! (v0.22.0-0-g0cbb94a56f)
; conjure/out | Adding :cwd

In practice, I don't care about these results upon starting Neovim, and I assume that it's just going to work when I'm ready to use it. (And if it doesn't work, I'll find out anyway!)

So I'm wondering, is there any way to configure Conjure not to pop up initially? I realize this is a bit complicated, because under the hood it's probably just doing what it always does with :out messages. And I do want the Conjure log to pop open for :out messages, in general, like if I evaluate something that prints to STDOUT, or if I run :ConjureUp. It would be nice, anyway. Thoughts welcome. :)

Tidy up errors (but still allow displaying more information)

Errors are currently raw, they're just data returned from clojure.core/Throwable->map and cljs.repl->Error->map. It'd be nice if we did the triage and str too so errors looked pretty like they do in the REPL. The problem is that this elides the stacktrace and a bunch of other information.

The Clojure REPL as of 1.10.1-beta1 (I think?) actually writes the full stacktrace to a file in /tmp now and prints the path. Maybe Conjure could do the same, you could gf to it. Or have something you can eval like (conjure-show-last-error) next to any error output. All you'd have to do is put your cursor on it and hit <localleader>re.

Feedback

I'm playing with Conjure, and it looks great, good job! Since I saw in twitter that you'd like some feedback, I'm writing it here, I hope it's ok.

  • Conjure log looks nice, I really like the comments before the evaluation result. But I think it would be better if:

    • You have an option to show only the last result. Usually I'm only interested in the last one.
    • You have an option to split the log window horizontally. It's just a personal preference, but it'd make easier to read the ConjureDoc results
  • ConjureEvalRootForm is nice, but it would be even better with support for "rich" comments. E.g., for

(comment
  (inc 1))

I'd expect to evaluate (inc 1), not (comment (inc 1))

I see a lot of potential on Conjure, looking forward to see how it evolves.

Formatting code

Since I can include something like zprint inside Conjure it'll mean we can run code through that within Conjure's JVM to format it. How neat! Not sure if I'll definitely use zprint yet but it's a good candidate.

All `ret` values seem to be multiline now

Logs

conjure.log

Issue

My g:conjure_log_blacklist includes ret, as I prefer for the log not to pop open for single-line ret values.

I noticed since a recent update that all ret values seem to be popping open the Conjure log now. It appears that there might be a newline prepended to all of them, making them all multiline. For example, if I eval (+ 1 2), the Conjure log pops open and I see:

; cwd/eval | (+ 1 2)
; cwd/ret ⤸
3

I noticed that there is no initial newline for out values, incidentally. If I eval (println (+ 1 2)), I get:

; cwd/eval | (println (+ 1 2))
; cwd/out | 3
; cwd/ret ⤸
nil

Markdown support

This one's kind of out there, but it just occurred to me as I was writing some Markdown notes. In short, it would be amazing to have Conjure within Clojure[Script] code blocks in Markdown files. I imagine most of the time I'd just be using the default Conjure connection, but I could certainly still see someone using the Conjure config to connect to their project and then write some docs about how to use it. In a way, this is a sort of interactive documentation for anyone using Clojure within NeoVim.

So, I could be writing some docs and then have an example:

We can use `sort-by` to help categorize the severity of these alligators, 
first by pulling out `:a`:

```clojure
(sort-by :a [{:a 5} {:a 3} {:a 1}]) => ({:a 1} {:a 3} {:a 5})
```

This may be well outside the scope of Conjure and I'm not exactly aching to have it, but I think it's a good wish list item.

Ensure initial make compile works

Hi, I just installed conjure and the make compile step failed.
I tried it manually then and got this:

$ make compile
rm -r classes
rm: classes: No such file or directory
make: *** [clean] Error 1

After running mkdir classes, I could compile without any issues.
Should be a quick fix.
Thank you for starting this projects! Great to see innovation in vim tooling for Clojure happening :)

Running on Windows

I was wondering if there has been any success running Conjure on Windows. I am running on Windows 10 enterprise in the PowerShell. When I run ConjureAdd nothing appears to happen. There are no buffers created etc. When I exit nvim, there is a message in the shell saying: "Conjure exited, restarting".

Unfortunately, it doesn't seem to create the log file. When I run an echo $CONJURE_LOG_PATH, it is correctly pointing to where i set that environment variable in the shell. There is also nothing in :messages

Please don't waste too much time on this if you can't spare it. I know the unknowns with Windows could be too much of a hassle. Just wondering if you have any quick thoughts or ideas.
Thanks Scott

REBL Setup

Thanks for the latest release.

I am trying to get REBL working and have it configured as follows on a Mac with clojure installed by homebrew and:

dep.edn from (https://github.com/cognitect-labs/REBL-distro/wiki/Java-11-Usage)

{:deps {}
 :aliases
       {:rebl
        {:extra-deps
         {org.clojure/clojure {:mvn/version "1.10.1"}
          org.clojure/core.async {:mvn/version "0.4.500"}
          com.cognitect/rebl {:local/root "resources/REBL-0.9.220.jar"}
          org.openjfx/javafx-fxml     {:mvn/version "11.0.1"}
          org.openjfx/javafx-controls {:mvn/version "11.0.1"}
          org.openjfx/javafx-swing    {:mvn/version "11.0.1"}
          org.openjfx/javafx-base     {:mvn/version "11.0.1"}
          org.openjfx/javafx-web      {:mvn/version "11.0.1"}}
         :main-opts  ["-m" "cognitect.rebl"]}}}

and run the command:

clj -J-Dclojure.server.jvm="{:port 5678 :accept clojure.core.server/io-prepl}" -R:rebl

along with a clojure.edn

{:conns
 {:dev  {:port 5678
         :hooks {:connect! (fn [conn]
                            #?(:clj
                               (do
                                 (require 'cognitect.rebl)
                                 ((resolve 'cognitect.rebl/ui)))))
                 :result! (fn [{:keys [code result]}]
                           #?(:clj (cognitect.rebl/submit code result)))}}}

The REBL gui is displayed when I edit a new test.clj in neovim but no results are displayed in the REBL.

Does the setup look correct ?

Incidentally I get the same problem from the prepl unless I start a rebl directly from the command line with:

clj -J-Dclojure.server.jvm="{:port 5678 :accept clojure.core.server/io-prepl}" -R:rebl -m cognitect.rebl

rather than from within the prepl with:

clj -J-Dclojure.server.jvm="{:port 5678 :accept clojure.core.server/io-prepl}" -R:rebl 
(cognitect.rebl/ui)

any advice welcome. cheers.

Evaluate in Conjure's JVM by default

So if no prepl connections match the current file or you don't have any connections at all it'll eval within Conjure's own JVM.

This means you can just open any random Clojure file and just evaluate it within a couple of seconds. Perfect for quickly trying something or scripting!

The only danger is that someone forgets to connect to their prepl and then sits there wondering "why aren't my dependencies here!?" but that could be mitigated with a warning. So on eval, if you have no connections it will warn once that it's falling back to Conjure's JVM.

Running on Mac OS X

I am attempting to run Conjure through nvim in the mac's Terminal bash, but I am getting an error when doing ConjureAdd. It probably isn't a bug and more likely it is that I am new to nvim and doing something wrong. But this plugin looks so good that it is finally pushing me to the vim side. I will understand if you deem it an issue with my setup and not a bug then please just close it.

I added this to my init.vim
`call plug#begin('~/.local/share/nvim/plugged')

Plug 'Olical/conjure', { 'tag': 'v0.8.2', 'do': 'make compile', 'for': 'clojure', 'on': 'ConjureAdd' }
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

" Initialize plugin system
call plug#end()`

I did a successful PlugInstall. I am running a prepl in another Terminal that I can successfully connect to with nc localhost port. However, in nvim when I do a ConjureAdd {:tag :dev, :port 40404}, it opens a vertical split window, but I get this error message:

Error from thread 'RPC message handler': #error {                                                                                                 
 :cause nil
 :via
 [{:type java.lang.NullPointerException
   :message nil
   :at [clojure.lang.Numbers ops Numbers.java 1068]}]
 :trace
 [[clojure.lang.Numbers ops Numbers.java 1068]
  [clojure.lang.Numbers gt Numbers.java 259]
  [conjure.ui$append invokeStatic ui.clj 48]
  [conjure.ui$info invokeStatic ui.clj 68]
  [conjure.prepl$add_BANG_ invokeStatic prepl.clj 102]
  [conjure.main$fn__12976 invokeStatic main.clj 34]
  [conjure.main$fn__12976 invoke main.clj 33]
  [clojure.lang.MultiFn invoke MultiFn.java 229]
  [conjure.rpc$init$fn__11386 invoke rpc.clj 168]
  [clojure.core$binding_conveyor_fn$fn__5756 invoke core.clj 2030]
  [clojure.lang.AFn call AFn.java 18]
  [java.util.concurrent.FutureTask run FutureTask.java 264]
  [java.util.concurrent.ThreadPoolExecutor runWorker ThreadPoolExecutor.java 1128]
  [java.util.concurrent.ThreadPoolExecutor$Worker run ThreadPoolExecutor.java 628]
  [java.lang.Thread run Thread.java 835]]}

When I quit out of nvim, I see this message: Conjure exited, restarting

Thanks for any assistance you may provide

Quickdoc virtualtext doesn't disappear when I expect it to

Overview

The conjure settings in my vimrc include:

let g:conjure_quick_doc_normal_mode = 0

I like seeing quickdoc virtualtext when I'm in insert mode, e.g. if I start typing (when , I see the docstring for clojure.core/when as expected.

When I go back into normal mode, I expect the quickdoc virtualtext to disappear, but it doesn't; instead, it sticks around until the next time I enter insert mode and start typing a form.

Screenshot

2019-07-01-164420_1244x188_scrot

Run tests through bindings

Does what it says on the tin. Add bindings to run tests.

  • All output should be captured and written to the log.
  • The return value shouldn't be displayed.
  • Have a custom log line like file loading.
  • Test the current NS as well as any matching -test ns.
  • Allow arguments to the commands for which NS and regext to test all with.
  • (maybe) Reload any namespaces before testing them.

Completion improvements

Omnicompletion is released but here's some things that should be improved at some point:

  • Full async support through various plugins.
  • Select the first matching Clojure connection to find completions, not ClojureScript which isn't supported.
  • Provide context to compliment.
  • Fire my own copy of compliment over the prepl so users don't need to depend on it.

Can't Connect: 'No reader function for tag regex'

I'm trying to run Conjure on a Debian installation with OpenJDK 13.

Neovim starts up fine but Conjure can't connect to the Java process. The error I get is No reader function for tag regex. I'm using a slightly older version of Neovim but it's the newest that's available for Debian Sid.

If I can give any more information, please let me know.

Logs

19-10-21 00:02:43 {{server}} INFO [conjure.main:39] - Logging initialised
19-10-21 00:02:43 {{server}} INFO [conjure.main:41] - System versions
=== Conjure ===
v2.0.0-0-ged91dbac0f

=== OS ===
Linux {{server}} 5.2.0-2-amd64 #1 SMP Debian 5.2.9-2 (2019-08-21) x86_64 GNU/Linux

=== Neovim ===
NVIM v0.3.8
Build type: Release
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/cc -g -O2 -fdebug-prefix-map=/build/neovim-zItjhS/neovim-0.3.8=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=1 -DDISABLE_LOG -Wdate-time -D_FORTIFY_SOURCE=1 -Wconversion -O2 -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -Wno-array-bounds -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim-zItjhS/neovim-0.3.8/build/config -I/build/neovim-zItjhS/neovim-0.3.8/src -I/usr/include -I/build/neovim-zItjhS/neovim-0.3.8/build/src/nvim/auto -I/build/neovim-zItjhS/neovim-0.3.8/build/include
Compiled by [email protected]

Features: +acl +iconv -jemalloc +tui 
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info

=== Java ===
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9-Debian-1)
OpenJDK 64-Bit Server VM (build 13.0.1+9-Debian-1, mixed mode)

19-10-21 00:02:43 {{server}} INFO [conjure.rpc:195] - Starting RPC TCP server on port 41483
19-10-21 00:02:43 {{server}} INFO [conjure.rpc:207] - Starting RPC loops
19-10-21 00:02:43 {{server}} INFO [conjure.prepl:243] - Started prepl server on port 33599
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:163] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-set-var, :params ["conjure_ready" 1]}
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :notify, :method :up, :params [""], :client :stdio}
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:163] - Sending RPC message: {:type :request, :client :stdio, :id 2, :method :nvim-get-current-buf, :params nil}
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :response, :id 2, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x5417c00 "[B@5417c00"]}, :client :stdio}
19-10-21 00:02:43 {{server}} INFO [conjure.main:46] - Everything's ready! Let's perform some magic.
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:163] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5417c00 "[B@5417c00"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5417c00 "[B@5417c00"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5417c00 "[B@5417c00"]} 0 25 false]] ["nvim_get_current_win" []] ["nvim_call_function" ["getcwd" (0)]])]}
19-10-21 00:02:43 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :response, :id 1, :error nil, :result [["/home/{{username}}/development/example/example.clj" 1 ["(+ 1 2)"] #msgpack.core.Ext{:type 1, :data #object["[B" 0xd3c785e "[B@d3c785e"]} "/home/{{username}}/development/example"] nil], :client :stdio}
19-10-21 00:02:43 {{server}} ERROR [conjure.rpc:?] - Error from thread 'RPC message handler': clojure.lang.ExceptionInfo: No reader function for tag regex. {:type :reader-exception, :ex-kind :reader-error}
19-10-21 00:02:46 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :notify, :method :stop, :params [0], :client :stdio}
19-10-21 00:02:46 {{server}} TRACE [conjure.rpc:163] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-current-buf, :params nil}
19-10-21 00:02:46 {{server}} TRACE [conjure.rpc:175] - Received RPC message: {:type :response, :id 1, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x69a132ea "[B@69a132ea"]}, :client :stdio}
19-10-21 00:02:46 {{server}} ERROR [conjure.rpc:?] - Error from thread 'RPC stdin handler': java.io.EOFException
19-10-21 00:02:46 {{server}} TRACE [conjure.rpc:163] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x69a132ea "[B@69a132ea"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x69a132ea "[B@69a132ea"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x69a132ea "[B@69a132ea"]} 0 25 false]] ["nvim_get_current_win" []] ["nvim_call_function" ["getcwd" (0)]])]}
19-10-21 00:02:46 {{server}} INFO [conjure.main:21] - Shutting down

Assorted refactoring

This issue is a catch all for any refactoring I want to do pre-v1.0.0.

  • Move conjure.code *-str functions into templates files so we don't have chunks of Clojure in strings. Makes it easier to write and maintain more complex tools too.
  • Split bloated namespaces up and name accordingly.

Completion

Although I wrote my own adhoc completion for a previous iteration of Conjure, I think I'll end up depending on compliment for this.

This does mean that you'll need to add compliment to your project dependencies though, I won't go magically injecting it for you, that lets you control which version of compliment you want. It'll be entirely optional.

It looks like it might get ClojureScript support soon too which would be lovely.

If you already have nREPL / CIDER in your project dependencies then I think that pulls in compliment anyway, so it will probably Just WorkTM for most people.

NullPointerException occurs after another plugin fails

Error

I ran into what looks like an edge case related to a different plugin (vista.vim) failing. Here's the :messages output:

2019-07-17-123252_1719x292_scrot

Conjure is working fine in general, I just run into this problem when vista fails. Here's the timeline that reliably produces the error condition:

  1. I have a prepl already started for my project. (Conjure will connect to it successfully if I don't attempt to open the vista.vim sidebar like I do below.)
  2. I start a Vim session, editing a .clj file in my project.
  3. I run :Vista!! to open the vista.vim sidebar.
  4. Vista throws an error. (the first error in the screenshot above)
  5. Conjure then does its usual startup routine where it tries to connect to prepls according to my conjure.edn settings.
  6. Conjure throws an error. (the second error in the screenshot above, starting with Error from thread 'RPC message handler')

Logs

19-07-17 16:29:59 moondog INFO [conjure.main:40] - Logging initialised
19-07-17 16:29:59 moondog INFO [conjure.main:42] - System versions
=== Conjure ===
v0.22.0-0-g0cbb94a56f

=== OS ===
Linux moondog 4.15.0-54-generic #58~16.04.1-Ubuntu SMP Mon Jun 24 13:21:41 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

=== Neovim ===
NVIM v0.4.0-dev
Build type: RelWithDebInfo
LuaJIT 2.0.4
Compilation: /usr/bin/x86_64-linux-gnu-gcc -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2 -g -DMIN_LOG_LEVEL=3 -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wvla -fstack-protector-strong -fdiagnostics-color=auto -Wno-array-bounds -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -I/build/neovim-Vk_ngi/neovim-0.4.0+ubuntu3+git201907152022-5193826-f1ec5d7/build/config -I/build/neovim-Vk_ngi/neovim-0.4.0+ubuntu3+git201907152022-5193826-f1ec5d7/src -I/build/neovim-Vk_ngi/neovim-0.4.0+ubuntu3+git201907152022-5193826-f1ec5d7/.deps/usr/include -I/usr/include -I/build/neovim-Vk_ngi/neovim-0.4.0+ubuntu3+git201907152022-5193826-f1ec5d7/build/src/nvim/auto -I/build/neovim-Vk_ngi/neovim-0.4.0+ubuntu3+git201907152022-5193826-f1ec5d7/build/include
Compiled by buildd@lgw01-amd64-005

Features: +acl +iconv +tui 
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/usr/share/nvim"

Run :checkhealth for more info

=== Java ===
openjdk version "11.0.4-ea" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4-ea+9-post-Ubuntu-1ubuntu116.04.1)
OpenJDK 64-Bit Server VM (build 11.0.4-ea+9-post-Ubuntu-1ubuntu116.04.1, mixed mode, sharing)

19-07-17 16:29:59 moondog INFO [conjure.rpc:149] - Starting RPC TCP server on port 35339
19-07-17 16:29:59 moondog INFO [conjure.rpc:167] - Starting RPC loops
19-07-17 16:29:59 moondog INFO [conjure.prepl:196] - Started prepl server on port 38857
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :notify, :method :up, :params [""], :client :stdio}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-set-var, :params ["conjure_ready" 1]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 2, :method :nvim-get-current-buf, :params nil}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error nil, :result nil, :client :stdio}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 2, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x5b37e33f "[B@5b37e33f"]}, :client :stdio}
19-07-17 16:29:59 moondog INFO [conjure.main:47] - Everything's ready! Let's perform some magic.
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 3, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5b37e33f "[B@5b37e33f"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5b37e33f "[B@5b37e33f"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x5b37e33f "[B@5b37e33f"]} 0 25 false]] ["nvim_get_current_win" []])]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 3, :error nil, :result [["/home/dave/code/api-proxy/src/adzerk/api_proxy_dev.clj" 13 ["(ns adzerk.api-proxy-dev" "  \"DEVELOPMENT-ONLY entrypoint that wraps the application with a wrap-reload handler.\"" "  (:require [adzerk.api-proxy :as api-proxy]" "            [ring.middleware.reload :refer [wrap-reload]]" "            [clojure.java.io :as io]))" "" "(def src-dirs" "  (filter #(not (.endsWith % \".jar\"))" "          (.split (System/getProperty \"fake.class.path\") \":\")))" "" "(def app" "  (-> #'api-proxy/app" "      (wrap-reload {:dirs src-dirs})))"] #msgpack.core.Ext{:type 1, :data #object["[B" 0x4101a8c5 "[B@4101a8c5"]}] nil], :client :stdio}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-function, :params ["getcwd" (0)]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error nil, :result "/home/dave/code/api-proxy", :client :stdio}
19-07-17 16:29:59 moondog INFO [conjure.prepl:121] - Adding :cwd 127.0.0.1 34829
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-var, :params ["conjure_log_auto_open"]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error nil, :result ["ret-multiline" "out" "err" "tap" "doc" "test"], :client :stdio}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" "small" false false true)]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error [0 "Error executing lua: /home/dave/.vim/bundle/conjure//lua/conjure.lua:87: Vim(if):E482: Can't open file /tmp/user/10007d12eecc0088a7ae6e413b2dd9867a4f3aabb0807309eacc4899826f7042e53a.clj for writing: permission denied"], :result nil, :client :stdio}
19-07-17 16:29:59 moondog ERROR [conjure.nvim.api:12] - Error while making nvim call {:method :nvim-execute-lua, :params ["return require('conjure').upsert_log(...)" ("/tmp/conjure.cljc" "small" false false true)]} -> {:error [0 "Error executing lua: /home/dave/.vim/bundle/conjure//lua/conjure.lua:87: Vim(if):E482: Can't open file /tmp/user/10007d12eecc0088a7ae6e413b2dd9867a4f3aabb0807309eacc4899826f7042e53a.clj for writing: permission denied"], :result nil}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-buf-line-count, :params [nil]}
19-07-17 16:29:59 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error [0 "Wrong type for argument 1, expecting Buffer"], :result nil, :client :stdio}
19-07-17 16:29:59 moondog ERROR [conjure.nvim.api:12] - Error while making nvim call {:method :nvim-buf-line-count, :params [nil]} -> {:error [0 "Wrong type for argument 1, expecting Buffer"], :result nil}
19-07-17 16:29:59 moondog ERROR [conjure.util:63] - Error while pretty printing java.lang.Exception: :parse-string-all? requires a string!
19-07-17 16:29:59 moondog ERROR [conjure.rpc:?] - Error from thread 'RPC message handler': java.lang.NullPointerException
19-07-17 16:30:24 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :notify, :method :stop, :params [0], :client :stdio}
19-07-17 16:30:24 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-get-current-buf, :params nil}
19-07-17 16:30:24 moondog TRACE [conjure.rpc:199] - Received RPC message: {:type :response, :id 1, :error nil, :result #msgpack.core.Ext{:type 0, :data #object["[B" 0x75fc5f53 "[B@75fc5f53"]}, :client :stdio}
19-07-17 16:30:24 moondog ERROR [conjure.util:63] - Error while pretty printing java.lang.Exception: :parse-string-all? requires a string!
19-07-17 16:30:24 moondog TRACE [conjure.rpc:186] - Sending RPC message: {:type :request, :client :stdio, :id 1, :method :nvim-call-atomic, :params [(["nvim_buf_get_name" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x75fc5f53 "[B@75fc5f53"]}]] ["nvim_buf_line_count" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x75fc5f53 "[B@75fc5f53"]}]] ["nvim_buf_get_lines" [#msgpack.core.Ext{:type 0, :data #object["[B" 0x75fc5f53 "[B@75fc5f53"]} 0 25 false]] ["nvim_get_current_win" []])]}
19-07-17 16:30:24 moondog ERROR [conjure.rpc:?] - Error from thread 'RPC stdin handler': java.io.EOFException
19-07-17 16:30:24 moondog INFO [conjure.main:22] - Shutting down

Restart loop when `classes` not compiled

Once I open any clojure file with conjure installed it enters a restart loop. Regular log file at CONJURE_LOG_PATH is not created; below is report from /var/folders/

{:clojure.main/message
 "Syntax error (ClassNotFoundException) compiling at (conjure/main.clj:1:1).\nclojure.core$map_QMARK___5397\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 1,
  :clojure.error/source "main.clj",
  :clojure.error/path "conjure/main.clj",
  :clojure.error/class java.lang.ClassNotFoundException,
  :clojure.error/cause "clojure.core$map_QMARK___5397"},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message "Syntax error compiling at (conjure/main.clj:1:1).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 1,
     :clojure.error/source "conjure/main.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.lang.NoClassDefFoundError,
    :message "clojure/core$map_QMARK___5397",
    :at
    [clojure.core.specs.alpha$fn__65$fn__69 invoke "alpha.clj" 129]}
   {:type java.lang.ClassNotFoundException,
    :message "clojure.core$map_QMARK___5397",
    :at
    [jdk.internal.loader.BuiltinClassLoader
     loadClass
     "BuiltinClassLoader.java"
     583]}],
  :trace
  [[jdk.internal.loader.BuiltinClassLoader
    loadClass
    "BuiltinClassLoader.java"
    583]
   [jdk.internal.loader.ClassLoaders$AppClassLoader
    loadClass
    "ClassLoaders.java"
    178]
   [java.lang.ClassLoader loadClass "ClassLoader.java" 521]
   [clojure.core.specs.alpha$fn__65$fn__69 invoke "alpha.clj" 129]
   [clojure.spec.alpha$map_spec_impl$reify__1997
    conform_STAR_
    "alpha.clj"
    831]
   [clojure.spec.alpha$conform invokeStatic "alpha.clj" 164]
   [clojure.spec.alpha$conform invoke "alpha.clj" 160]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 757]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 753]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$and_preds invokeStatic "alpha.clj" 1128]
   [clojure.spec.alpha$and_preds invoke "alpha.clj" 1123]
   [clojure.spec.alpha$accept_nil_QMARK_ invokeStatic "alpha.clj" 1464]
   [clojure.spec.alpha$accept_nil_QMARK_ invoke "alpha.clj" 1458]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1536]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$re_conform invokeStatic "alpha.clj" 1662]
   [clojure.spec.alpha$re_conform invoke "alpha.clj" 1653]
   [clojure.spec.alpha$regex_spec_impl$reify__2509
    conform_STAR_
    "alpha.clj"
    1703]
   [clojure.spec.alpha$conform invokeStatic "alpha.clj" 164]
   [clojure.spec.alpha$conform invoke "alpha.clj" 160]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 757]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 753]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1527]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv$fn__2425 invoke "alpha.clj" 1537]
   [clojure.core$map$fn__5866 invoke "core.clj" 2755]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5873 invoke "core.clj" 2763]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$filter$fn__5893 invoke "core.clj" 2809]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 58]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5866 invoke "core.clj" 2746]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$seq__5402 invoke "core.clj" 137]
   [clojure.spec.alpha$filter_alt invokeStatic "alpha.clj" 1424]
   [clojure.spec.alpha$filter_alt invoke "alpha.clj" 1418]
   [clojure.spec.alpha$alt_STAR_ invokeStatic "alpha.clj" 1428]
   [clojure.spec.alpha$alt_STAR_ invoke "alpha.clj" 1427]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1537]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv$fn__2425 invoke "alpha.clj" 1537]
   [clojure.core$map$fn__5866 invoke "core.clj" 2755]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5873 invoke "core.clj" 2763]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$filter$fn__5893 invoke "core.clj" 2809]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5866 invoke "core.clj" 2746]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$seq__5402 invoke "core.clj" 137]
   [clojure.spec.alpha$filter_alt invokeStatic "alpha.clj" 1424]
   [clojure.spec.alpha$filter_alt invoke "alpha.clj" 1418]
   [clojure.spec.alpha$alt_STAR_ invokeStatic "alpha.clj" 1428]
   [clojure.spec.alpha$alt_STAR_ invoke "alpha.clj" 1427]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1537]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1535]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1535]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$re_conform invokeStatic "alpha.clj" 1662]
   [clojure.spec.alpha$re_conform invoke "alpha.clj" 1653]
   [clojure.spec.alpha$regex_spec_impl$reify__2509
    conform_STAR_
    "alpha.clj"
    1703]
   [clojure.spec.alpha$conform invokeStatic "alpha.clj" 164]
   [clojure.spec.alpha$conform invoke "alpha.clj" 160]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 757]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$dt invokeStatic "alpha.clj" 753]
   [clojure.spec.alpha$dt invoke "alpha.clj" 752]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1527]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv$fn__2425 invoke "alpha.clj" 1537]
   [clojure.core$map$fn__5866 invoke "core.clj" 2755]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5873 invoke "core.clj" 2763]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$filter$fn__5893 invoke "core.clj" 2809]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 58]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5866 invoke "core.clj" 2746]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5402 invokeStatic "core.clj" 137]
   [clojure.core$seq__5402 invoke "core.clj" 137]
   [clojure.spec.alpha$filter_alt invokeStatic "alpha.clj" 1424]
   [clojure.spec.alpha$filter_alt invoke "alpha.clj" 1418]
   [clojure.spec.alpha$alt_STAR_ invokeStatic "alpha.clj" 1428]
   [clojure.spec.alpha$alt_STAR_ invoke "alpha.clj" 1427]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1537]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1538]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1535]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$deriv invokeStatic "alpha.clj" 1536]
   [clojure.spec.alpha$deriv invoke "alpha.clj" 1521]
   [clojure.spec.alpha$re_conform invokeStatic "alpha.clj" 1662]
   [clojure.spec.alpha$re_conform invoke "alpha.clj" 1653]
   [clojure.spec.alpha$regex_spec_impl$reify__2509
    conform_STAR_
    "alpha.clj"
    1703]
   [clojure.spec.alpha$conform invokeStatic "alpha.clj" 164]
   [clojure.spec.alpha$conform invoke "alpha.clj" 160]
   [clojure.spec.alpha$macroexpand_check invokeStatic "alpha.clj" 701]
   [clojure.spec.alpha$macroexpand_check invoke "alpha.clj" 697]
   [clojure.lang.AFn applyToHelper "AFn.java" 156]
   [clojure.lang.AFn applyTo "AFn.java" 144]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.lang.Compiler checkSpecs "Compiler.java" 6970]
   [clojure.lang.Compiler macroexpand1 "Compiler.java" 6988]
   [clojure.lang.Compiler macroexpand "Compiler.java" 7075]
   [clojure.lang.Compiler eval "Compiler.java" 7161]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.main$main_opt invokeStatic "main.clj" 514]
   [clojure.main$main_opt invoke "main.clj" 510]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause "clojure.core$map_QMARK___5397",
  :phase :compile-syntax-check}}

Declaritive prepl connections

A thought from today: When adding a connection, it shouldn't matter if you can't connect yet, when you eval it'll try to connect again. If you reboot your REPL it should disconnect and then reconnect when you eval.

My point being: The connection pool should contain instructions for connections then ensure those connections as and when they're required. This allows you to attempt things even when the REPL isn't up yet, or restart the REPL without having to reconnect.

Of course, if you eval and it can't connect it'll log an error, but the next eval will try again. This makes connections essentially declarative!

Small Build Issues on MacOs with fixes

  1. stat is still being used in bin/compile; change as for other stat statement
  2. error in building:
    Error building classpath. Could not transfer artifact leiningen:leiningen:jar:2.9.0 from/to clojars (https://repo.clojars.org/): Range Not Satisfiable (416)

Fixed it by changing 2.0.9 to 2.9.1 in deps.edn

cheers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.