Common Lisp Extension for Zed
Common Lisp language support for the Zed editor with integrated LSP server and Jupyter kernel support.
Features
π― Smart Type-Aware Code Completion
Intelligent completions that detect type declarations and provide contextual example values:
;; After defining and evaluating: (defun greet (name) (declare (type string name)) (format t "Hello, ~a!~%" name)) ;; Typing (gree shows: (greet name) β Parameter name placeholder
Smart parameter completion:
- Shows parameter names from function signatures
- Includes type information when available
- Works with both built-in and user-defined functions
π§ LSP Features
- Syntax highlighting with tree-sitter grammar
- Autocomplete with parameter snippets and type-aware placeholders
- Multi-package support with package-qualified completion (
my-utils::internal-helper) - Package labels showing which package each symbol comes from
- User package prioritization - your symbols appear first in completions
- Hover documentation showing signatures and docstrings
- Package hover - hover over package names to see symbols in that package
- Symbol information from both built-in Common Lisp and user definitions
- Document sync for real-time updates
- Master REPL integration for querying user-defined symbols
π Jupyter REPL Integration
- Shared Master REPL: All Jupyter kernels and the LSP server share a single REPL environment
- Live sync: Definitions from Jupyter automatically available in Zed LSP
- Bidirectional: Code evaluated in Zed available in Jupyter
- Multi-kernel support: Run multiple Jupyter kernels with shared state
- Auto-reconnect: Handles REPL restarts gracefully
π Language Support
- Syntax highlighting for all Common Lisp constructs
- Rainbow brackets support
- Multi-line s-expression evaluation
- ASDF system definition support
Installation
From Zed Extensions
- Open Zed
- Open the command palette (
Cmd+Shift+P) - Search for "zed: extensions"
- Search for "Common Lisp"
- Click "Install"
Development Installation
git clone https://github.com/etyurkin/zed-cl
cd zed-clIn Zed:
- Go to Extensions (
Cmd+Shift+Pβ "zed: extensions") - Click "Install Dev Extension"
- Select the cloned directory
Quick Start
Prerequisites
- SBCL: Install via
brew install sbcl(macOS) or your package manager - Quicklisp: Install from quicklisp.org
- Jupyter (optional): Install via
pip install jupyter jupyterlab - ZeroMQ (for Jupyter): Install via
brew install zeromq(macOS)
Basic LSP Usage
Once installed, the LSP server starts automatically when you open a .lisp file:
- Open or create a
.lispfile - Start typing - you'll see:
- Autocomplete for Common Lisp built-ins
- Hover documentation
- Symbol information
Using with Jupyter
For the full experience with REPL evaluation and shared state:
# Install Jupyter kernel make install # Verify installation make verify # Start Jupyter jupyter lab
Usage Examples
In Zed Editor
;; Define a function (defun factorial (n) "Calculate factorial of n" (declare (type integer n)) (if (<= n 1) 1 (* n (factorial (- n 1))))) ;; Select the function with Cmd+Shift+Up ;; Press Ctrl+Shift+Enter to evaluate it in the REPL ;; Now type (fact and you'll see completion with package info: factorial [common-lisp-user] β Your definition appears first! factorial [alexandria] β Library symbols appear after ;; Hover over 'factorial' to see the documentation
Multi-Package Support
;; Define functions in custom packages (defpackage :my-utils (:use :cl) (:export #:add-numbers #:multiply-numbers)) (in-package :my-utils) (defun add-numbers (a b) "Add two numbers" (+ a b)) ;; Select the above code ;; Press Ctrl+Shift+Enter to evaluate in the REPL ;; In another file, use package-qualified completion: ;; Type (my-utils:: to see all symbols in the package ;; Type (my-utils::add to complete to add-numbers ;; Hover over 'my-utils' to see all package symbols ;; Package tooltip shows: ;; Package: my-utils ;; User-defined package ;; Symbols (2): ;; - add-numbers (function) ;; - multiply-numbers (function)
Shared State Magic
In one file:
(defvar *config* '(:database "mydb" :port 5432))
In another file:
(getf *config* :port) ; => 5432 ;; Hover over *config* shows the value! ;; Autocomplete suggests *config*
All files share the same REPL environment via the master REPL architecture.
Supported File Extensions
.lisp- Common Lisp source files.lsp- Lisp source files.l- Lisp files.cl- Common Lisp files.asd- ASDF system definitions.ros- Roswell scripts
Architecture
βββββββββββββββββββββββββββββββββββ
β Master REPL Process β
β (Shared Lisp Environment) β
ββββββββββββ¬βββββββββββββββββββββββ
β
ββββββββ΄ββββββββ¬βββββββββββββββ
β β β
βββββΌβββββ βββββΌβββββ βββββΌβββββ
βJupyter β βJupyter β β Zed β
βKernel 1β βKernel 2β β LSP β
ββββββββββ ββββββββββ ββββββββββ
All components connect to a single master REPL for true state sharing.
Tree-sitter Grammar
This extension uses tree-sitter-commonlisp, automatically downloaded and compiled by Zed.
Management Commands
# Jupyter Kernel make install # Install Jupyter kernel make verify # Verify installation and dependencies make uninstall # Uninstall kernel make test-jupyter # Test kernel manually # Master REPL make start-repl # Start master REPL server make stop-repl # Stop master REPL (resets environment) make repl-status # Check master REPL and kernel status # Maintenance make clean # Clean temporary files make help # Show all available commands
Troubleshooting
LSP not starting
- Check Zed's language server logs
- Ensure SBCL is installed:
which sbcl - Check Zed's extension installation succeeded
Completions not working
- Check master REPL is running:
ls /tmp/cl-master-repl.sock - Verify LSP server is connected (check Zed's language server logs)
- Try restarting Zed to reconnect to master REPL
Jupyter kernel won't start
- Run
make verifyto check dependencies - Ensure Jupyter is installed:
pip install jupyter jupyterlab - Ensure ZeroMQ is installed:
brew install zeromq(macOS)
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Development Setup
- Clone the repository
- Install dev extension in Zed
- Make changes
- Test with a
.lispfile
License
MIT