Skip to main content

A Hy pretty-printer / code formatter / beautifier.

Project description

🦑 Beautifhy

A Hy beautifier / code formatter / pretty-printer.

Probably compatible with Hy 1.0.0 and later.

Install

$ pip install -U beautifhy

The pygments style may be modified with the environment variable HY_PYGMENTS_STYLE. This sets the name of a pygments style to use for highlighting. Defaults to lightbulb.

Usage: pretty-printer and syntax highlighter

From the command line, to pretty-print the file core.hy:

$ beautifhy core.hy

gives the output

(import toolz [first second last])

 ;; * Utility things
 ;; -----------------------------------------

(defmacro defmethod [#* args]
  "Define a multimethod (using multimethod.multimethod).
  For example, the Hy code

  `(defmethod f [#^ int x #^ float y]
    (// x (int y)))`

  is equivalent to the following Python code:

  `@multimethod
  def f(x: int, y: float):
      return await x // int(y)`

  You can also define an asynchronous multimethod:

  `(defmethod :async f [#* args #** kwargs]
    (await some-async-function #* args #** kwargs))`
  "
  (if (= :async (first args))
    (let [f (second args) body (cut args 2 None)]
      `(defn :async [hy.I.multimethod.multimethod] ~f ~@body))
    (let [f (first args) body (cut args 1 None)]
      `(defn [hy.I.multimethod.multimethod] ~f ~@body))))


(defn slurp [fname #** kwargs]
  "Read a file and return as a string.
  kwargs can include mode, encoding and buffering, and will be passed
  to open()."
  (let [f (if (:encoding kwargs None) hy.I.codecs.open open)]
    (with [o (f fname #** kwargs)]
      (o.read))))


(defmacro rest [xs]
  "A slice of all but the first element of a sequence."
  `(cut ~xs 1 None))

To apply syntax highlighting (no pretty-printing), do

$ hylight core.hy

You can use stdin and pipe by replacing the filename with -:

$ beautifhy core.hy | hylight -

which will pretty-print core.hy and then syntax highlight the output.

To convert python code to Hy (using py2hy), autoformat, then apply syntax highlighting, do

$ pip3 install py2hy
$ python3 -m py2hy some_code.py | beautifhy - | hylight -

Acknowledgements

The whole library uses pygments. The autoformatter relies on polymorphic dispatch provided by multimethod.

Docs

The docstrings are not bad. Otherwise, try clicking below.

Ask DeepWiki

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beautifhy-1.2.2.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beautifhy-1.2.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file beautifhy-1.2.2.tar.gz.

File metadata

  • Download URL: beautifhy-1.2.2.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for beautifhy-1.2.2.tar.gz
Algorithm Hash digest
SHA256 e23b812b8370625729f126bc7312369d3beab5163cb6d4a040cc8139a4ab74f8
MD5 e3da8d1f8b22e18eb81e2e2f41d0a8bb
BLAKE2b-256 5e4d08a477357975eb69ca698d83290d0a096ebac251ec2de8f8550d4e06b0cb

See more details on using hashes here.

File details

Details for the file beautifhy-1.2.2-py3-none-any.whl.

File metadata

  • Download URL: beautifhy-1.2.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for beautifhy-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 aafcc8596cefffda1f6b5cc98b28403aa78589c4263cd98cfc42106271ad1021
MD5 88100d68c3346d03a4ef39936a692eaa
BLAKE2b-256 7234cbb74479e0e930655d8ed90f9cf3fd5662f78d1a00bd0658fdb24604e73a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page