Skip to content

Releases: Olical/conjure

Auto REPL connect and minor quality of life improvements

08 Sep 17:22
566915c
Compare
Choose a tag to compare

Hello! I survived presenting at vimconf (Conversational Software Development: What, Why and How?) and can finally release some small improvements I've been sitting on for too long + some more things from yesterday.

I like to use the develop branch in anger at work for a day or two to make sure there's no obvious issues before I release which slows things down a little. Here's the changes!

  • The log wrapping option got a lot safer, you can pass falsy things to it now and it won't explode.
  • Don't load Conjure clients if you launch nvim in diff mode, this avoids the overhead of booting up and attempting connections when you're trying to fly through git conflict resolutions.
  • Link to the FAQ when Conjure's nREPL Clojure support encounters a weird environment that can't be identified as Clojure, ClojureScript or ClojureCLR.
  • Auto connect on eval and other actions when you don't have a connection for Janet and Clojure! This means you can just jump into a file, start your REPL then start evaluating code. Conjure will make a connection if it can / needs to.
  • Update the sponsors list (omg it keeps growing, you're all wonderful, thank you so much ❤️)
  • Improve port-file resolution for Clojure, it now checks the parents of the current file, then the current working directory and finally ~/.config/conjure. This means you can :cd to a directory containing a .nrepl-port file then open a file from a local library you're working on that's in another tree. Conjure will now successfully connect to the nREPL from your CWD!
  • Resolve the log buffer path fully before attempting to open a window, this ensures you don't see weird errors when performing evaluations, changing working directory and then running more. Before it would get into a weird state where it created a new log buffer under the new CWD. It'll reuse the original log buffer correctly now.
  • Make Clojure completion context optional (see the bottom of the Clojure help). I found this to be a source of heavy CPU slowdown on slower machines, so you can turn this off if you need to. I hope this will get massively faster (suddenly instant with low CPU) on the advent of tree-sitter.

And that's all for today! I hope you enjoy the changes and it works well for you! I hope the next update will be out quickly with a few more fixes 😄 enjoy!

Have a great rest of your week!

image

Fix .nrepl-port file hunting

12 Aug 20:31
db0de94
Compare
Choose a tag to compare

Sadly I broke the search for .nrepl-port files above your nvim current working directory. I'd accidentally added a second function called resolve to the conjure.fs module that behaved in a similar way to the function it was shadowing, this meant .nrepl-port files worked fine in your current directory but suddenly broke if you tried connecting from elsewhere.

I've also updated the sponsors list, two new amazingly generous people have started sponsoring me ❤️ I can't thank you enough.

Syntax completion for Janet and Fennel, small bug fixes, school improvements

09 Aug 11:48
278eb92
Compare
Choose a tag to compare

Hello! I hope you've had a wonderful weekend so far! I'm about to go out for a run in the sun so I thought I'd release the current fixes and improvements from the develop branch first. I hope you enjoy!

  • Use the syntaxcomplete#Complete omnifunc if the client isn't returning completions.
    • Janet and Fennel now have basic completion based on the syntax file.
    • It's hooked into omnicomplete seamlessly as well as all async completion frameworks that work with Conjure.
    • When you're in a Clojure buffer but you're not connected to an nREPL you'll also get syntax completion!
    • This is all configurable, see :helpg conjure#completion#omnifunc.
  • Updated the sponsor list, welcome @aleksandersumowski!
  • Sent out an update to all sponsors regarding sending of stickers 👀
  • Internal fixes around maintaining the filetype for async function calls across filetype boundaries. Basically fixed some edge cases where evaluating something then changing to another unsupported filetype could cause issues.
  • Worked out what's wrong with #111 (prompting for stdin for Clojure), haven't got a fix yet but it's understood now.
  • Tested on nREPL 0.8.0, working fine! Will add support for the new completion and info ops soon!
  • Improved a number of edge cases in the school, it should work consistently in any environment now 🤞
  • Attempting to not load the client if we're in diff mode (like while sorting through git conflicts) for thirut on Discord. I don't think it's quite there yet, but it might improve some user's workflows considerably. Will probably be polished off in the next patch.

And that's all from me! I still have so much on my todo list that I want to get out very soon, hopefully you'll be seeing these very soon!

image

Have a great rest of your Sunday! Get some rest, look after yourself, see you soon!

image

Multiple connections, more config, optimisations, refactoring

01 Aug 14:10
74d4e25
Compare
Choose a tag to compare

So much to cover! I couldn't release earlier and smaller really because the multiple connections required a LOT of coordinated refactoring, I hope you enjoy these changes and improvements!

  • Update Aniseed with a few small improvements.
  • Simplify how relative file root resolving works and disable it by default (you'll have to see :help conjure for more on this).
  • A huge amount of internal refactoring and tidying.
  • Support for multiple connections for any client based on any criteria such as your current working directory or the day of the week. It's entirely up to you! See :helpgrep ConjureClientState for more information.
  • Disabled advanced CLJS completion until it's fixed upstream (thanks, @freddy! #107).
  • Use test-vars over test for Clojure (thanks, @b-ryan! #106).
  • Optimise completion a little for HUGE lists.
  • README and doc tweaks.
  • Internal testing deps.edn cleanup by @penryu, thanks!
  • Allow toggling of line wrapping in the log and HUD (see :helpgrep conjure#log#wrap).

And I think that's everything worth mentioning! I have a LOT more on my todo list but hopefully I can release them a little more incrementally now this big multi-connection feature is out.

Have a wonderful weekend!

image

Relative file eval, Clojure result truncation, Janet file eval

09 Jul 11:56
ba93633
Compare
Choose a tag to compare

Hello you wonderful evaluators, I hope you're having a great week! This update brings improvements to file evaluation across all clients with a sprinkling of new things in Clojure and Janet. I've also removed the temporary config system shims that were designed to help people migrate to the new (better!) system.

Onto the change log!

  • Added @markwoodhall to the sponsors list, thank you so very much! You may have a session named after you in a Clojure project! (a range of nREPL session UUIDs are allocated to each person, as well as a bunch of cat and dog breeds).
  • Refined the README layout a little, just trying to make it easier to skim. This will probably lead onto having an official website some time in the hopefully near future. The website will be the elevator pitch and docs, the README should be technical information. Eventually.
  • Improved Janet's :ConjureConnect, more arguments are optional in the way you'd expect, just throw a host or a port at it and it'll probably do the right thing. Before it wanted you to be overly specific which would confuse some people.
  • Resolve "eval file" paths relative to the Neovim current working directory (:helpgrep relative_file_root). This means you can evaluate a file from your local disk even if the runtime you're connected to is within a Docker container that's mounted the source into it under a different path. Basically working with source mounted inside docker containers should just work as if it was on your local file system. Older versions of Conjure used to have this but it was lost in the rewrite, finally it's back!
  • Remove some dead code around the old "print session type" mapping that I was only keeping around with a deprecation warning attached to it.
  • Remove old config system shims, hopefully everyone's moved their configuration over by this point 😄 unless they skipped a few versions, in which case, I'm sorry! Your best bet is checking out the release notes of v4.0.0, there's not much you need to do to upgrade.
  • Add truncation to Clojure results in response to #104. Now infinite or huge things won't destroy your connection if you accidentally print them. If you need to see the rest of the information you can adjust the configuration (:helpgrep print_options).
  • Improved Janet file evaluation so the results of evaluating the file are placed into your current REPL environment, this should be the primary way to load a file in preparation for working on it. It'll resolve imports relative to the file and allow you to access all private values. It's like pasting the file source into the REPL, but it's loaded directly from disk by Janet and resolves imports correctly.
  • Removed client specific debug flags, just the one g:conjure#debug is enough, I don't think the individual client debug flags were useful.

I'm not sure what's next on my radar yet, I obviously have a todo list growing off into the sunset but I may well just mull those over and work on some personal development (like building git in Clojure and maybe recording the process in a series of videos to show my Conjure usage and workflow).

I'd also love to have a go at integrating another few lisps to some degree such as Racket and Common Lisp (#97). So maybe those will be next up!

One more thing to consider: I'm thinking about getting shiny high quality stickers made of the logo and mascot to send out to people sponsoring me past a certain level (maybe cheaper stickers for those sponsoring me to a lesser degree and to hand out at conferences?). Thoughts? I may well rework the sponsorship levels too after reading some really interesting points in I Just Hit $100k/yr On GitHub Sponsors! 🎉❤️ (How I Did It).

Here's a kitten for reading this release. You rock.

image

Have a great week and subsequent weekend!

Ollie

Fix ConjureSchool

30 Jun 08:12
9ad1c34
Compare
Choose a tag to compare

I accidentally broke :ConjureSchool when rewriting the configuration system and didn't notice until @markwoodhall brought it to my attention (thank you!).

I've fixed the issue (replaced some - with some _ 😬) and added a simple test that's run in CircleCI on each commit to prevent it from happening in the future.

School is back in session!

Config rework and introducing Lillian, the Conjure mascot!

28 Jun 15:35
9629271
Compare
Choose a tag to compare

Hello! Welcome to another Conjure update! So fresh, it's still warm 🔥 or maybe that's just the weather we've been having in the UK recently...

Summary

I've rewritten the configuration system (and documentation) to just use regular old VimL let g:conjure#debug = v:true, for example. I've also remapped b:conjure_context to b:conjure#context for consistency.

Also, say hi to the wonderful Lillian, designed and named by the amazingly talented MysticalScribbles!

image

This is a breaking change due to the fact that you'll need to update some of your config (if you have any). Hopefully it'll just get simpler! The biggest thing to be careful about is mappings became mapping and clients became filetype_client in a configuration context. You'll see these reflected in the documentation / help files.

Changes

  • Implemented a new configuration system that doesn't rely on any custom magic, this is inline with other tools and plugins. All you need is VimL and let, no need to worry about "oh is Conjure loaded yet? Do I use ConjureConfig or g:conjure_config?"
  • Deprecated ConjureConfig with warnings, the new system will try to use your existing configuration but will print warnings until you migrate.
  • Small documentation fixes.
  • Adding mentions for how you can tweak the HUD background colour (#101) and vim-jack-in.
  • A bunch of behind the scenes things that I'll be using for some future releases around getting "eval this file" working across different filesystems such as when you're evaluating within a remote server or Docker container. Something I had in older Conjure implementations but lost in the Fennel rewrite, I'm bringing it back! 🎉
  • Adding a mascot and tweaking the README appropriately 😄
  • Massively improved how "run the test under the cursor" works for Clojure + nREPL. Fixed a number of bugs that were kind of hard to stumble across.

Next up

The next chunk of work and release will hopefully be the following:

  • Evaluation of your current file across filesystems (same repo, different parent path in a different file system).
  • Automatic require of your Janet file as you switch buffers. This will be optional and an experiment, so if it doesn't work well I'll drop it. I'm hoping this will pave the way for similar mechanics in other languages that don't have handy (ns ...) forms like Clojure.

Until next time!

Stay safe, rest your brain, enjoy the remainder of the weekend. You're doing great 🎉

HUD close delay, ANSI colour codes, fixes, improvements, MASCOT!?

16 Jun 21:34
778c8e7
Compare
Choose a tag to compare

Hello! I hope your week is off to a good start! If not, I'm sure it'll get better and maybe this update will help, even if it's only by a tiny amount.

  • Added a link to my post on conversational software development to the readme, it explains a little bit of my ethos and driving factors.
  • Improved Clojure namespace extraction and add tests. It can now handle a few more meta data and documentation string edge cases. If you spot any namespaces that don't appear to get parsed out and automatically switch as you eval, let me know! (pro tip, you can set b:conjure_context in any buffer to override which namespace it uses for that buffer)
  • Updated Aniseed to v3.6.0 which brings a few improvements, most notably the ability to require macros from the module syntax.
  • Merge #99 which adds log.hud.passive-close-delay, set this to 1000 to enable a second of delay between when you move your cursor and the HUD closing. Thank you, @heHamsta!
  • Strip all ANSI escape codes from the log by default, turn this off with log.strip-ansi-escape-sequences-line-limit set to 0. Combine it with Olical/AnsiEsc to get ANSI terminal highlighting in the log buffer, to an extent. This fixes #53!
  • Add all of my GitHub sponsors to a list inside the code which I use to add super rare Clojure nREPL session pretty names. Where you would normally see a cat or dog breed, you may now see a wonderful sponsors name! I even added a make sponsors command to update this by scraping the HTML (obviously anticipating rapid change in sponsors 😬 I can hope!).
  • Fixed #100 (ONE HUNDRED! 🎉) where a debug call that wasn't even doing anything causes errors to appear if you switched to an unsupported filetype while things were added to the log in the background.
  • Commissioned a logo / mascot from a wonderful artist, I can't wait to share what she comes up with. I think it's going to be reaaaaaaly good and definitely laptop sticker worthy, a bit different to your normal tech stickers 🙂

Take care of yourself, you're doing great. Here's a pup for reading the pupdate.

image

[]+{} evals and log window config

24 May 10:18
cc3ccf8
Compare
Choose a tag to compare

Happy Sunday to you all! Here's a floppy corgi 😄 🐶 today's release is fairly small but might come in really handy for some!

  • Added support for [] and {} pairs when evaluating forms, you can configure what pairs are considered with :ConjureConfig extract.form-pairs ..., it defaults to [["(" ")"] ["{" "}"] ["[" "]" true]].
  • Added a few more links to the wiki quickstart guides from the readme.
  • Display "no env" when Conjure can't determine the session type instead of "???". This can only really happen when you're connected to a shadow-cljs server that doesn't have a JavaScript environment connected yet so evaluations fail.
  • Add the log.botright? config option (false by default) that forces the log window to either open on the far right or bottom of the editor taking up the full height or width respectively. Enable with :ConjureConfig log.botright? true.

Janet lang support, update Fennel, better Clojure ns handling

21 May 10:53
800df25
Compare
Choose a tag to compare

Good morning, evening and everything in between! I hope you're having a great week and enjoying the weather wherever you may be. Today's pretty important because Conjure has support for three (three!) Lisps! My original vision of a tool that supports many languages is coming together!

Janet support has landed! You just have to start a spork/netrepl server and then open a .janet file. It'll connect automatically and away you go, you can evaluate forms as you would in any other language.

This paves the way for more languages such as Racket and eventually non-lisps when we get wide adoption of tree-sitter in Neovim. How exciting! Now for the full notes.

  • Add Janet support, let me know what you think, it's the first release of this client!
  • Fix Fennel and Clojure module / namespace patterns, the expression was slightly off.
  • Define Clojure namespaces we haven't seen before when you evaluate. This should avoid the "this namespaces doesn't exist" chicken and egg problem that prevents you from defining a namespace if it's not defined. It was kind of rare so you hopefully haven't encountered it anyway!
  • Improved Clojure namespace parsing, it can now handle all sorts of metadata symbols inside the ns form and still pick out your namespace name correctly. Let me know if you find a ns form it can't parse!
  • Updated Aniseed + Fennel, keeping up with Fennel's master branch with various improvements and fixes.

That's all for now! I hope these are welcome changes and you have a good rest of your week. I'll be starting my new job on Tuesday so my output might drop a little but I'll still continue to fix and improve Conjure into the future.

Here's to many more years of having conversations with your code!

Side note: I'm thinking about commissioning a cute hand drawn logo and mascot, possibly an animal in a little parenthesis covered wizard hat+robe or something. Anyone know anyone awesome that would like to do that?