14

Introducing Gopcaml mode - structural OCaml editing - Community - OCaml

 4 years ago
source link: https://discuss.ocaml.org/t/introducing-gopcaml-mode-structural-ocaml-editing/5310
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Hi all, I am pleased to announce the first release of Gopcaml-mode, a new emacs library that aims to extend the existing OCaml editing experience with structural editing capabilities.

A picture is worth a thousand words, so I’ll cut to the chase, and start with a few demonstrations:

Examples

  • AST-based code navigation - C-M-n, C-M-p, C-M-u, C-M-d, C-M-f, C-M-b
  • AST-based code transformation -C-M-N, C-M-P, C-M-F, C-M-B
  • Mark exp - C-M-SPC
  • Extract expression into letdef - C-c C-e

This is just a small sample of the features - a full listing is provided at the project readme, which can be found at the project page 114.

Notes

This plugin is quite faithful to the OCaml specification and doesn’t reimplement a separate OCaml parser as some other plugins do - instead I use the Ecaml package (which allows interfacing with Emacs from OCaml code) to allow delegating to the OCaml parser (from Ocaml-compiler-libs) directly.

It’s in the process of being published to opam, and should be available to download soon.

Edit: It has now been merged into the opam-repositories and can be installed via opam:

Installation

  • Install the package from opam
opam install gopcaml-mode
  • load the package in your init.el
 (let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share")))))
	   (when (and opam-share (file-directory-p opam-share))
	     ;; Register Gopcaml mode
	     (add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share))
         (autoload 'gopcaml-mode "gopcaml-mode" nil t nil)
	     ;; Automatically start it in OCaml buffers
	     (setq auto-mode-alist
		   (append '(("\\.ml[ily]?$" . gopcaml-mode)
			     ("\\.topml$" . gopcaml-mode))
			   auto-mode-alist))
	     ))
  • (Optional) install multiple-cursors to enable extraction and smartparens for better handling of parenthesis.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK