Skip to content

Instantly share code, notes, and snippets.

@technomancy
Last active July 4, 2017 15:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save technomancy/ef46401a1a34f4c9edef30d8eb75d7e4 to your computer and use it in GitHub Desktop.
Save technomancy/ef46401a1a34f4c9edef30d8eb75d7e4 to your computer and use it in GitHub Desktop.
Clojure Conj talk proposal

Clojure Conj 2017 Talk: Dev Tools as Data

Abstract (5 sentences max)

In the Clojure community we love to say "it's just data", and this enables us to compose things in unique and often-unexpected ways.

One place where that maxim hasn't been thoroughly applied is developer tooling. Representing things like tracers, test runners, and refactoring tools with a unified declarative model allows us to construct powerful meta-tools for various development environments and avoid reinventing the wheel for building interfaces for each editor one at a time.

Let's do some cross-runtime metaprogramming for greater Clojure/editor symbiosis!

Main ideas

There are lots of one-off libraries for (say) Emacs which exist only to expose some small piece of Clojure-side functionality, like clojure-test-mode.el or slamhound.el. Developers using Vim or other editors must either port that code to vimscript for each operation they want to invoke or just invoke the Clojure functions directly thru the repl.

Certain operations benefit greatly from becoming first-class editor commands, like "run the tests for this file" or "turn on tracing for this var" since they can be bound directly to key combinations. The ability of the editor to offer completion on options that make sense for that particular operation is very helpful.

My talk will show a method for attaching metadata to vars to indicate that the function should become a first-class editor-side command. I'll also demo a client implementation for Emacs (and hopefully at least one other editor) which turns this metadata directly into interactive defuns which can be called via M-x or key bindings.

Talk history

I submitted a similar idea to ClojureWest in 2014 but did not end up giving the talk.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment