Giter Club home page Giter Club logo

zprint-clj's Introduction

CircleCI

Node.js wrapper for ZPrint Clojure source code formatter

Usage

CLI

Install

npm i -g zprint-clj

Format and write back

zprint-clj -i "./src/**/*.{clj,cljs,cljc,edn}" -o ./

Check formatting without writing (useful for CI)

zprint-clj --check "./src/**/*.{clj,cljs,cljc,edn}"

API

npm i zprint-clj
const printFile = require('zprint-clj');
const outputText = format(inputText, inputFilePath, opts);

Options

  • isHangEnabled true|false โ€” enable hang mode (disabled by default), slows down formatting, but results in better formatted output

Difference between output when Hang mode is on and off

diff --git a/hang.clj b/nohang.clj
index 907120f..965fdfa 100644
--- a/hang.clj
+++ b/nohang.clj
@@ -1,6 +1,7 @@
 (ns zprint-clj.core
-  (:require [zprint.core :as zprint]
-            [goog.object :as gobj]))
+  (:require
+    [zprint.core :as zprint]
+    [goog.object :as gobj]))
@@ -15,8 +16,9 @@

 (defn- make-cfg
   [opts]
-  (cond (false? (gobj/get opts "isHangEnabled")) no-hang
-        :else {}))
+  (cond
+    (false? (gobj/get opts "isHangEnabled")) no-hang
+    :else {}))

Advanced Configuration

You can configure zprint-clj with a .zprintrc file. The .zprintrc is written in EDN format.

Your .zprintrc file will be resolved if it is found in one of two locations:

  1. The current directory where the zprint-clj process was initialized
  2. The global HOME directory

If none found, we fall back on zprint-clj default settings.

Building

production

clojure scripts/build.clj

debug

clojure scripts/build_debug.clj

Local Development

The following guide outlines how to locally develop zprint-clj. Please make sure you have the clj cli tool installed.

  • Install zprint-clj dependencies

    npm install
  • Make your your code changes in the src directory

  • Compile your changes

    clojure scripts/build_debug.clj
  • Update js-src/index to look like this

    const zp = require("../out/main-debug").zprint_clj.core;

    This tells zprint-clj to use the debug version

  • Create a test Clojure file with some test code you want to see formatted

  • Open the test file in your editor of choice

  • Run zprint-clj against your test file

    js-src/cli.js -i <your-filename-here> -o <your-filename-here>

    If you are running in a different directory you will have to update above path to js-src/cli.js. The reason we run this instead of main-debug is because cli, or index, act as the entry points for JS for this library.

Editor plugins

License

MIT

zprint-clj's People

Contributors

athomasoriginal avatar filipesilva avatar pesterhazy avatar roman01la avatar slipset avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar

zprint-clj's Issues

`Cannot find module '../out/main'` when trying to run zprint-clj

Hey, I tried to run zprint-clj, but I'm getting an error. (I tried with npm i zprint-clj in addition to using npx but the result is the same.)

$ npx zprint-clj
Cannot find module '../out/main'

This is on macOS 10.14.2, Node 11.9.0, npm 6.7.0, zprint-clj 0.3.0.

What about zprint configuration?

First, thanks for getting this (and zprint-atom) going. I really appreciate it, and I'm sure others do too. I've learned a lot just testing and trying things with what you and @thheller have done with node.

I'm wondering if there is a way to pass configuration zprint-clj or zprint-atom? Part of the strength of zprint is that people want it "their way", and if one wants to take the time, zprint will pretty much let you have it your way. The npm package that @thheller did let's you have an options map on the command line, and reads the ~/.zprintrc file as well. Is there any chance that you could pick up some of that capability into zprint-clj? If zprint-clj had this, I expect that zprint-atom would at least pick up the ~/.zprintrc capability, if not the command line options map as well.

Were your code in .cljs, I'd probably try my hand at moving replicating what @thheller did and send you a pull request, but I remain inexperienced with doing this stuff in .js.

I'm thinking of doing a bit of an announcement of zprint (which I do about every six months), and it would be nice to point to zprint-clj and 'zprint-atom and say that they not only did zprint but would use your default configuration as well.

In the spirit of full disclosure, the other reason I care about allowing people to configure zprint is that having zprint-clj have hang be default off makes me cringe. I think the resulting code look terrible. I'm not arguing that you should enable it by default (though I'm barely holding myself back on that). But I have created a style {:style :no-hang} in 0.4.7 which you could use to turn it off. I will also create a style {:style :all-hang} which people could use to turn it back on in their ~/.zprintrc. But of course this is only useful if zprint-clj actually reads the ~/.zprintrc, and allows what is read-in to supplant whatever defaults were already configured. I'd like to be able to tell people that they could easily configure zprint-clj and zprint-atom to have hang enabled with something simple in their ~/.zprintrc. Otherwise I imagine that I'm going to fall all over myself apologizing for the awful way the code looks without :hang enabled!

Thanks for considering this!

support directory.

currently this project support on file.
but I want to apply zprint-clj on our project for code standard.

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.