Skip to main content

nREPL implementation for Hy (Hylang)

Project description

hy-nrepl

hy-nrepl unit test

hy-nrepl is an implementation of the nREPL protocol for Hy.

hy-nrepl is a fork from HyREPL and has been adjusted to work with the current Hy.

Implemented Operations

from nREPL Built-in Ops

  • add-middleware
  • clone
  • close
  • completions
  • describe
  • eval
  • interrupt
  • load-file
  • lookup
  • ls-middleware
  • ls-sessions
  • stdin
  • swap-middleware

Usage

hy-nrepl requires Python >= 3.11 and Hy >= 0.29.0.

To install:

pip install hy-nrepl

To run the server (default port is 7888):

hy-nrepl

# Output debug log and specify port
hy-nrepl --debug 7888

Testing

Install test dependencies, then run pytest:

pip install -e .[test]

pytest tests

Known Issues

Code evaluation is performed in a thread that is not Python's main thread. Therefore, some libraries that expect to be run on the main thread will not work as expected.

  • GUI Libraries: Libraries like Tkinter will not function correctly.
  • Plotting Libraries: Matplotlib is known to have issues. As an alternative, you can use libraries like Plotly, which work without relying on the main thread.

Confirmed working nREPL clients

Emacs

The following combinations are currently confirmed to work stably.

  • hy-mode + Rail
    • REPL (Eval and Interruption)
    • Symbol completion
    • Eldoc (Function arg documentations)
    • Jump to source

Emacs Configuration Example

Here is an example configuration for a plain Emacs setup using use-package.

1. Install Rail

This setup uses a forked version of Rail that has been modified to work well with hy-nrepl.

Clone the forked Rail repository from GitHub. This example clones it to the home directory (~/Rail).

git clone [https://github.com/masatoi/Rail.git](https://github.com/masatoi/Rail.git) ~/Rail

2. Configure Emacs

Add the following settings to your Emacs initialization file (e.g., ~/.emacs.d/init.el). This setup assumes you are using package.el and use-package.

;;; Assumes use-package is already installed.
;;; If not, add bootstrap code for package.el and use-package.
(require 'package)
(add-to-list 'package-archives '("melpa" . "[https://melpa.org/packages/](https://melpa.org/packages/)") t)
(package-initialize)

;;; hy-mode (will be installed from MELPA)
;;; jedhy is disabled as Rail provides completion.
(use-package hy-mode
  :mode "\\.hy\\'"
  :custom (hy-jedhy--enable? nil))

;;; Rail (loaded from the local path)
(use-package rail
  :ensure nil
  :load-path "~/Rail" ; Must match the path where you cloned Rail
  :commands (rail rail-interaction-mode)
  :hook ((hy-mode . rail-interaction-mode)
         (hy-mode . rail-setup-eldoc)
         (rail-mode . rail-setup-eldoc)))

3. How to Connect

  1. Start the nREPL server in your terminal. It will listen on localhost:7888 by default.

    hy-nrepl
    
  2. Connect to the nREPL server from Emacs. Run M-x rail, and you will be prompted for the host and port. Enter the default value, localhost:7888, and press Enter. This will complete the connection and open a REPL buffer.

  3. Developing with .hy files. Once connected, opening a .hy file will automatically enable the minor mode rail-interaction-mode. This provides features like:

    • Evaluating Hy S-expressions within the buffer
    • Symbol completion
    • Displaying function argument information via Eldoc
  4. Interrupting Execution. While an evaluation is running in the REPL buffer, you can interrupt it by pressing C-c C-c.

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

hy_nrepl-1.0.4.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

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

hy_nrepl-1.0.4-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file hy_nrepl-1.0.4.tar.gz.

File metadata

  • Download URL: hy_nrepl-1.0.4.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hy_nrepl-1.0.4.tar.gz
Algorithm Hash digest
SHA256 6f244f1a55b8e8570bdbc36f1fd7fcf993b38a106c84054f34468ea9d49b1541
MD5 0f32c17b19e2a8a68d3145da3e173d8f
BLAKE2b-256 0f3cd017f6e4690413398dc9da3332112770728c4ea69c3c4d28f89771a55485

See more details on using hashes here.

Provenance

The following attestation bundles were made for hy_nrepl-1.0.4.tar.gz:

Publisher: release.yaml on masatoi/hy-nrepl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hy_nrepl-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: hy_nrepl-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hy_nrepl-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 269820f7dd8ee0d14849b968642bbd75e281e32cc14fb743309bf05cf11915fa
MD5 7fea24969d703c0b29227cc4a3089cea
BLAKE2b-256 112dd92500b0d5327d22a742feecf1d955f47588cddc0fb861ba7521255a1b6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for hy_nrepl-1.0.4-py3-none-any.whl:

Publisher: release.yaml on masatoi/hy-nrepl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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