• Stars
    star
    1,245
  • Rank 37,740 (Top 0.8 %)
  • Language
    Clojure
  • License
    Eclipse Public Li...
  • Created almost 10 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Leiningen plugin for a superior development environment

Hi. I haven't been writing software in the last 5 years and various things have changed since then which may mean Ultra no longer works for you. I'm sorry about that, but I'm not going to be able to help. If you're able to fix things, go for it! I'll do my best to accept helpful PRs

Ultra

CircleCI
Hey, you know who has two thumbs and strong opinions? That's right, it's me.

Ultra is a Leiningen plugin for an absolutely kick-ass development environment.

I've written a blog post describing Ultra in greater depth here.

Ultra is the rare piece of essentially "finished" software. I've ironed out most of the bugs, and don't plan on adding much in the future. In other words: it's not unmaintained, it's just done.

Installation

To install Ultra, just add the following to your ~/.lein/profiles.clj

{:user {:plugins [[venantius/ultra "0.6.0"]]}}

Requirements

Lein 2.9.0
JDK 8
Clojure 1.7+

If you want to use something older, see LEGACY_SUPPORT.md

ClojureScript Support

At the moment, Ultra doesn't have ClojureScript support at the REPL. The relevant upstream issue to track work on this is greglook/puget#27; from there, Whidbey will need to be updated, and then Ultra will be able to consume the changes.

Features

For a detailed list of features, check out the wiki. Here's the highlight reel:

A colorized REPL! colorized repl

Syntax-highlighted source! colorized source

Clearer test output! test output demo

Better stacktraces! test stacktrace demo

Configuration

All of the above features are enabled by default, but can be turned off by setting a false flag in your profile. If you wanted Ultra to essentially no-op, your configuration map would look like this:

{:ultra {:repl         false
         :stacktraces  false
         :tests        false}}

REPL Configuration

Ultra uses Whidbey as its pretty-printing engine, and supports all of Whidbey's configuration flags.

{:ultra {:repl {:width 180
                :map-delimiter ""
                :extend-notation true
                :print-meta true
                 ...}}}
:width

Number of characters to try to wrap pretty-printed forms at.

:print-meta

If true, metadata will be printed before values.

:sort-keys

Print maps and sets with ordered keys. Defaults to true, which will sort all collections. If a number, counted collections will be sorted up to the set size. Otherwise, collections are not sorted before printing.

:map-delimiter

The text placed between key-value pairs in a map.

:map-coll-separator

The text placed between a map key and a collection value. The keyword :line will cause line breaks if the whole map does not fit on a single line.

:seq-limit

If set to a positive number, then lists will only render at most the first n elements. This can help prevent unintentional realization of infinite lazy sequences.

Using CIDER alongside Ultra

Projects which extend the Clojure REPL will conflict with each other; a middleware which modifies REPL print output will break the assumption of another middleware expecting unmodified Clojure output. Specifically, Ultra and CIDER collide on certain test result values (#79).

Use either CIDER or Ultra, but not both. Configure cider-jack-in to skip the Leiningen user profile, and therefore skip using Ultra, in .emacs:

; Skip :user section of ~/.lein/profiles.clj when using cider-jack-in.
(setq cider-lein-parameters
      "with-profile -user repl :headless :host localhost")

If you have a lein user profile intended to alter CIDER's behavior, consider these options:

  1. Declare a separate profile and name it in with-profile -user,YOURPROFILE in the Emacs cider-lein-parameters variable.
  2. Configure CIDER's cider-jack-in-lein-plugins variable.

CIDER added variables:

  • cider-lein-parameters in CIDER v0.7.0
  • cider-jack-in-lein-plugins in CIDER v0.11.0

Running project tests may cause the CIDER REPL to hang (#79) when using cider-connect (as opposed to cider-jack-in) with an existing lein repl which is running Ultra.

Contributing

Please open an issue here before submitting pull requests; I prefer to have documentation and consensus that either of our time will be well spent by working on it. When opening an issue -- particularly for bugs -- please refer to CONTRIBUTING.md

Bug fixes and code cleanup are always appreciated and won't get too much pushback; new features will be held to a higher standard - this whole project is something of a massive exercise in ego, after all.

Motivation

...or, why didn't you just put all of this stuff in your ~/.lein/profiles.clj?

In short, my :user profile was starting to become bloated. It was difficult to tell whether plugins were interfering with each other, and my :injections key in particular was starting to look a little unwieldy.

At some point I realized I was up to my neck in alligators and that it was time to push things into a standalone repository.

Special Thanks

Ultra wraps, calls, or draws inspiration from the following libraries, and their owners and authors deserve credit for doing most of the hard work.

License

In some cases, I've borrowed code snippets from libraries above and re-written them. Where that is the case, the Copyright of the original author[s] remains in effect. Any modifications to their code, as well as all original content, is Copyright © 2019 W. David Jarvis.

Distributed under the Eclipse Public License 1.0, the same as Clojure.

More Repositories

1

pyro

Light up your Clojure stacktraces
Clojure
318
star
2

accountant

ClojureScript navigation for single-page applications, made simple.
Clojure
250
star
3

yagni

A Leiningen plugin for finding dead code
Clojure
219
star
4

glojure

The Glojure programming language
Go
172
star
5

vim-cljfmt

A Vim plugin for cljfmt, the Clojure formatting tool.
Vim Script
152
star
6

glow

Syntax highlighting for Clojure source code.
Clojure
101
star
7

vim-eastwood

A Vim plugin for Clojure's Eastwood linter
Vim Script
84
star
8

dotfiles

It's creepy that you want these
Shell
18
star
9

maze

Mazes for Programmers
Go
7
star
10

photon

Experiments in realtime web framework design. Like Meteor, but for Clojure(Script)
Clojure
7
star
11

droplet

Droplet is a Python library for sampling, sketching, and summarizing data from massive data streams.
Python
6
star
12

school

C
2
star
13

takehome

Various puzzles, homework assignments, and interview questions
Python
2
star
14

rethink

A Clojure driver for RethinkDB.
Clojure
1
star
15

yagni-test

Dummy app for testing Yagni
Clojure
1
star
16

spindle

Playing with Node.js and express. Don't take this seriously.
JavaScript
1
star
17

demo

A demo application that shows repeated 404s for a valid worker endpoint using Google App Engine push queues
Go
1
star
18

babel

Chat bots for yo' chat ops.
Clojure
1
star
19

etrade-statement-scraper

A Python script for scraping E*Trade monthly statements for data
Python
1
star
20

shrike

Hosted Code Quality for Clojure -- an abandoned CodeClimate competitor.
CSS
1
star
21

orcs-in-space

Orcs in space!!!
Haskell
1
star
22

darg

Kill the status meeting -- an abandoned IDoneThis competitor.
CSS
1
star