;; -*- lexical-binding: t; -*-
(require 'sly)
(require 'cl-lib)
(require 'sly-cl-indent "lib/sly-cl-indent")
(define-sly-contrib sly-indentation
"Contrib interfacing `sly-cl-indent' and SLY."
(:slynk-dependencies slynk/indentation)
(:on-load
(setq sly--lisp-indent-current-package-function 'sly-current-package)))
(defun sly-update-system-indentation (symbol indent packages)
(let ((list (gethash symbol sly-common-lisp-system-indentation))
(ok nil))
(if (not list)
(puthash symbol (list (cons indent packages))
sly-common-lisp-system-indentation)
(dolist (spec list)
(cond ((equal (car spec) indent)
(dolist (p packages)
(unless (member p (cdr spec))
(push p (cdr spec))))
(setf ok t))
(t
(setf (cdr spec)
(cl-set-difference (cdr spec) packages :test 'equal)))))
(unless ok
(puthash symbol (cons (cons indent packages) list)
sly-common-lisp-system-indentation)))))
(provide 'sly-indentation)