Giter Club home page Giter Club logo

olical / conjure Goto Github PK

View Code? Open in Web Editor NEW
1.6K 24.0 102.0 5.46 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 Introduction

Discord

Conjure is an interactive environment for evaluating code within your running program.

The core features of Conjure are language agnostic (although it’s targeted at Lisps for now), with each language client providing their own extra tools. Here’s the currently supported languages, contributions and 3rd party plugins that add clients are highly encouraged! You can find a comparison table for all clients and supported features in the wiki.

You can learn more about the mappings and configuration inside Neovim with :help conjure. Each language client also has it’s own specific help text under :help conjure-client-{LANGUAGE}-{TRANSPORT}, such as :help conjure-client-clojure-nrepl, which contains specific mappings and configuration for that client.

You can also get an interactive guide to the core principals and mappings by executing :ConjureSchool or by using the "try before you install" script as described further down this page.

User experience

What does wielding Conjure actually look like? What can you do with it?

asciicast

  • Open a file of a supported file type such as clojure or racket.

  • Some languages, such as Clojure, will automatically connect to your REPL or give you the commands and mappings to do so yourself.

  • Use various mappings to execute the code you’re interested in such as the current form, file, buffer or even form at a Neovim mark.

  • Every result is kept in a log buffer that you can access at any time.

  • Support for multiple asynchronous autocompletion frameworks, with deoplete built in (<C-x><C-o> also works!).

Conjure allows you to send the right part of your code off for evaluation, see the results, wrap the results in more code and evaluate that. It keeps a log of your actions and results so you don’t have to remember them, that context is extremely helpful when you’re down the rabbit hole of a bug hunt.

Evaluating a form under your cursor is as simple as <prefix>ee, where <prefix> defaults to <localleader>. Be sure to set your your <localleader> key or configure Conjure to use a different mapping prefix, see :h maplocalleader and :h g:conjure#mapping#prefix for more information.

The goal is to give you a tool that lets you effortlessly run whatever you need to while keeping out of your way (but there with context and more information if you need it).

Once installed you can run :ConjureSchool to begin an interactive tutorial.

Try without installing

You can trial run Conjure with the interactive :ConjureSchool tutorial without actually installing it! The only prerequisites are curl and an up to date nvim.

curl -fL conjure.fun/school | sh

This will temporarily download the plugin, launch Neovim with :ConjureSchool running and then clean up after itself. You get to try out what Conjure has to offer without having to edit your Neovim configuration.

Installation

Requires Neovim 0.7 or newer.

Alternatively you can use Magic Kit, an opinionated starter kit that includes all sorts of essential tools.

use 'Olical/conjure'
Plug 'Olical/conjure'
return { "Olical/conjure" }

To take advantage of lazy loading, a bit more involved configuration is required:

Details
return {
    "Olical/conjure",
    ft = { "clojure", "fennel", "python" }, -- etc
    -- [Optional] cmp-conjure for cmp
    dependencies = {
        {
            "PaterJason/cmp-conjure",
            config = function()
                local cmp = require("cmp")
                local config = cmp.get_config()
                table.insert(config.sources, {
                    name = "buffer",
                    option = {
                        sources = {
                            { name = "conjure" },
                        },
                    },
                })
                cmp.setup(config)
            end,
        },
    },
    config = function(_, opts)
        require("conjure.main").main()
        require("conjure.mapping")["on-filetype"]()
    end,
    init = function()
	       -- Set configuration options here
        vim.g["conjure#debug"] = true
    end,
}

Configuration

All configuration is performed through global Neovim variables, this may change to a .setup(…​) Lua first approach some day but for now you can configure things by setting variables early, before Conjure loads. For example, if you wish to rebind or disable the default documentation lookup key (K) because you don’t need it or it conflicts with your LSP configuration you can do so like this:

-- Disable the documentation mapping
vim.g["conjure#mapping#doc_word"] = false

-- Rebind it from K to <prefix>gk
vim.g["conjure#mapping#doc_word"] = "gk"

-- Reset it to the default unprefixed K (note the special table wrapped syntax)
vim.g["conjure#mapping#doc_word"] = {"K"}
# And the same disabling but in Vim Script
# Note the v:false in Vim Script!
let g:conjure#mapping#doc_word = v:false

Please see :help conjure for the full list of possible configuration variables and values.

Mods

Modifications or mods are extra plugins that improve Conjure in various ways. They may add completion plugin support, entire language clients or new mappings that do fun and interesting things. You can learn about creating your own by reading the source code of the projects listed below as well as "Using Conjure programatically (API)" and "Client features".

Tree sitter support

Warning! If you want to work with ANY language that isn’t a Lisp dialect you will need to use tree sitter. If you do not use tree sitter only visual selection and vim motion based evaluations will work. You need tree sitter if you wish to evaluate non Lisp languages with <prefix>ee and other such form based evaluation mappings.

When you ask Conjure to evaluate the form under your cursor it has to understand the code enough to be able to find the boundaries and extract the right characters from the buffer. This used to be done using Neovim’s built in findpairpos, syntax highlighting regexes and exhaustive searching of the buffer. This is error prone, gets slow as the buffer grows and doesn’t work with non-Lisp languages which lack clear boundaries.

I highly recommend you set up tree sitter inside your Neovim configuration and :TSInstall [language] every language you’re interested in working with. You should then keep those tree sitter modules up to date as you upgrade Neovim since the API seems to change slightly over time.

Tree sitter allows you to work with non-Lisp languages like Julia as well as get far more accurate, smart and performant evaluations in languages like Clojure. You can learn more and get everything set up using the nvim-treesitter repository.

It’s technically optional since Conjure contains legacy fallback code, but I highly recommend tree sitter when using Conjure, it’s how you get cool things like smart comment block evaluations in Clojure and form based evaluations in Julia and Lua.

Getting started

The majority of the documentation can be found within :help conjure. You can also use :ConjureSchool to get an interactive introduction to the workflow and mappings Conjure provides. Refer to the list at the top of this file for links to the various quickstart guides for each language.

Please do get in touch via Discord or Twitter if you have any questions or issues.

Broader documentation can be found in the Conjure wiki, there you’ll find blog posts and guides that will help you get common workflows up and running. Contributions are encouraged!

Behind the curtain

Conjure is written entirely in Lua (no VimL or external processes!) which is compiled from Fennel by Aniseed ahead of time. Check out CONTRIBUTING.adoc for more on how to work on Conjure using itself.

Historically, Conjure was Clojure specific with an entirely different implementation, you can still find that version on the legacy-jvm branch.

Unlicenced

Find the full unlicense in the UNLICENSE file, but here’s a snippet.

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.

conjure's People

Contributors

austinmlv avatar chiefnoah avatar dotrar avatar giodamelio avatar glyh avatar grazfather avatar gregcline avatar hi-im-buggy avatar jlesquembre avatar jsn avatar justone avatar kyazdani42 avatar mamapitufo avatar monkoose avatar nickcellino avatar nicopap avatar olical avatar p00f avatar peaceamongworlds avatar philomates avatar pyrmont avatar qnkhuat avatar rafaeldelboni avatar raymond-w-ko avatar russtoku avatar seantwie03 avatar stefanvanburen avatar stelcodes avatar taw10 avatar tersetears avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conjure's Issues

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}

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 🤔

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.

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

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.

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.

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.

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

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

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.

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.

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

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.

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.

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

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.

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.

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!

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.

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.

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.

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.

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.

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

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.

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

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.

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

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}}

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 :)

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!$%&+/:<=>?@^_~-.#]'})

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. :)

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?

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

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.

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.

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.

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.

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.

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!

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.

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

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.

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.

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

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}

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.