All Projects → clojure-emacs → Orchard

clojure-emacs / Orchard

Licence: epl-1.0
A fertile ground for Clojure tooling

Programming Languages

clojure
4091 projects

Labels

Projects that are alternatives of or similar to Orchard

Mmctl
A remote CLI tool for Mattermost
Stars: ✭ 70 (-68.04%)
Mutual labels:  tooling
Coc Metals
coc.nvim extension for Metals, the Scala language server
Stars: ✭ 124 (-43.38%)
Mutual labels:  tooling
Front End Tooling Recipes
Collection of pre-configured front-end tooling setups for common uses.
Stars: ✭ 176 (-19.63%)
Mutual labels:  tooling
Rabbit Mq Admin Toolkit
Manage a RabbitMQ cluster easily.
Stars: ✭ 81 (-63.01%)
Mutual labels:  tooling
Log4brains
✍️ Log and publish your architecture decisions (ADR)
Stars: ✭ 98 (-55.25%)
Mutual labels:  tooling
Pony Stable
🐴 A simple dependency manager for the Pony language.
Stars: ✭ 135 (-38.36%)
Mutual labels:  tooling
Mock Server
Easy to use, no frills http mock server
Stars: ✭ 27 (-87.67%)
Mutual labels:  tooling
Js Refactor
JS Refactoring tool for Visual Studio Code
Stars: ✭ 195 (-10.96%)
Mutual labels:  tooling
Tooling
Advancing Node.js as a framework for writing great tools
Stars: ✭ 98 (-55.25%)
Mutual labels:  tooling
Partyline
Output to Laravel's console from outside of your Command classes.
Stars: ✭ 168 (-23.29%)
Mutual labels:  tooling
Clj Suitable
ClojureScript "IntelliSense" support for JS objects and their properties/methods. Via figwheel and Emacs CIDER.
Stars: ✭ 82 (-62.56%)
Mutual labels:  tooling
Typescript Bundle
A Bundling Tool for TypeScript
Stars: ✭ 94 (-57.08%)
Mutual labels:  tooling
Openwhisk Devtools
Development tools for building and deploying Apache OpenWhisk
Stars: ✭ 141 (-35.62%)
Mutual labels:  tooling
Openwhisk Cli
Apache OpenWhisk Command Line Interface (CLI)
Stars: ✭ 73 (-66.67%)
Mutual labels:  tooling
Tooling
🧰 Up-to-date list of JavaScript and TypeScript tooling resources
Stars: ✭ 181 (-17.35%)
Mutual labels:  tooling
Httplive
HTTP Request & Response Service, Mock HTTP
Stars: ✭ 1,094 (+399.54%)
Mutual labels:  tooling
Typin
Declarative framework for interactive CLI applications
Stars: ✭ 126 (-42.47%)
Mutual labels:  tooling
Profilinggo
A quick tour (or reminder) of Go performance tools
Stars: ✭ 219 (+0%)
Mutual labels:  tooling
Nix Index
Quickly locate nix packages with specific files
Stars: ✭ 197 (-10.05%)
Mutual labels:  tooling
Punk
A data REBL built for the web
Stars: ✭ 148 (-32.42%)
Mutual labels:  tooling

CircleCI Coverage Clojars Project cljdoc badge downloads badge

Orchard

A Clojure library designed to provide common functionality for Clojure development tools (e.g. Clojure editor plugins and IDEs).

Right now orchard provides functionality like:

  • enhanced apropos
  • classpath utils (alternative for java.classpath)
  • value inspector
  • Java class handling utilities
  • Utilities for dealing with metadata
  • Namespace utilities
  • Fetching ClojureDocs documentation
  • Finding function dependencies (other functions invoked by a function) and usages

Why?

Much of the tooling code required to build Clojure editors and smart REPLs is tool-agnostic and should be reused between tools, instead of copied and altered in each and every tool.

Having a common tooling foundation typically means:

  • Better foundation (e.g. more functionality, good documentation, etc) with more contributors
  • Less work for tool authors as they don't have to reinvent the wheel for every tool
  • Happier end users

Design

Orchard is meant to be used to build programmer tooling relying on inspecting the state of a running REPL. REPL-powered tooling has been a core Lisp idea for many years and there are many Clojure libraries in that space (e.g. compliment, tools.trace, sayid, etc).

One thing to keep in mind is that Orchard relies (mostly) on runtime information, not the source code itself. In simple terms - only code that's loaded (evaluated) will be taken under consideration. That's pretty different from the static analysis approach taken by tools for most programming languages where it's not possible to easily inspect the state of running program.

Some other design goals are listed bellow.

No Runtime Dependencies

Orchard is meant to run alongside your application and we can't have a dev tools library interfere with your app right? Dependency collisions are nasty problems which are best solved by making sure there can't be any shared libraries to cause the conflict.

Currently Orchard has one runtime dependency (dynapath), but we hope to eliminate it at some point.

API Optimized for Editors

Code editors can't know what symbols resolve to without consulting a REPL that's why they would typically send a combination of a symbol name and some ns (e.g. the current namespace), so they can be resolved to some var on which an operation would be invoked.

That's why the majority of the functions in Orchard take a combination of a ns and a symbol instead of a var. Probably down the road we'll provide var-friendly versions of most functions as well.

REPL Agnostic

No matter whether you're using nREPL, a socket REPL, unrepl or prepl, Orchard has your back. nREPL clients might opt to wrap some of the Orchard functionality in middleware for convenience (as cider-nrepl does), but they can just eval away if they please.

API Documentation

Documentation for the master branch as well as tagged releases are available here.

Usage

orchard requires Clojure 1.8+ and Java 8+.

Just add orchard as a dependency and start hacking.

[cider/orchard "0.6.5"]

Consult the API documentation to get a better idea about the functionality that's provided.

History

Originally SLIME was the most popular way to program in Clojure with Emacs and a lot of useful functionality was created for it to support things like code completion, value inspection, finding references, apropos and so on. This functionality was implemented as a swank adapter written in Clojure and lived in the swank-clojure project.

Subsequently CIDER and cider-nrepl replaced SLIME and swank, and much code was moved from swank-clojure to cider-nrepl and continued to evolve there.

You can watch the presentation The Evolution of the Emacs tooling for Clojure to learn more about all of this.

This project is an effort to prevent repeating the mistakes of the past - cider-nrepl was split into two libraries, so that non-nREPL clients can make of use of the general functionality contained in cider-nrepl (e.g. things like apropos, inspect, etc).

License

Copyright © 2018-2021 Bozhidar Batsov & contributors

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].