Skip to content

Commit 589ad40

Browse files
committed
Add preliminary support for clojure-ts-mode
This does NOT intended to break the dependency from cider to clojure-mode. It is intended to make CIDER work with clojure-ts-mode. Some functionality like clojure-find-ns, clojulore-find-def, etc will still require clojure-mode in order for CIDER to get it's work done.
1 parent f564181 commit 589ad40

8 files changed

+57
-26
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
- [#3354](https://github.com/clojure-emacs/cider/issues/3354): Add new customization variable `cider-reuse-dead-repls` to control how dead REPL buffers are reused on new connections.
1515
- [#3364](https://github.com/clojure-emacs/cider/pull/3364): Update enrich-classpath, adding Clojure CLI compatibility, and reworking its integration into CIDER.
1616
* It will be progressively refined and documented, please consider this alpha software.
17+
- Basic support for using CIDER from [clojure-ts-mode](https://github.com/clojure-emacs/clojure-ts-mode)
1718

1819
### Bugs fixed
1920

cider-completion.el

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ form, with symbol at point replaced by __prefix__."
152152
;; Important because `beginning-of-defun' and
153153
;; `ending-of-defun' work incorrectly in the REPL
154154
;; buffer, so context extraction fails there.
155-
(derived-mode-p 'clojure-mode))
155+
(derived-mode-p 'clojure-mode 'clojure-ts-mode))
156156
;; We use ignore-errors here since grabbing the context
157157
;; might fail because of unbalanced parens, or other
158158
;; technical reasons, yet we don't want to lose all

cider-connection.el

+5-3
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ message in the REPL area."
310310
See command `cider-mode'."
311311
(interactive)
312312
(add-hook 'clojure-mode-hook #'cider-mode)
313+
(add-hook 'clojure-ts-mode-hook #'cider-mode)
313314
(dolist (buffer (cider-util--clojure-buffers))
314315
(with-current-buffer buffer
315316
(unless cider-mode
@@ -803,9 +804,10 @@ multi. This function infers connection type based on the major mode.
803804
For the REPL type use the function `cider-repl-type'."
804805
(with-current-buffer (or buffer (current-buffer))
805806
(cond
806-
((derived-mode-p 'clojurescript-mode) 'cljs)
807-
((derived-mode-p 'clojurec-mode) cider-clojurec-eval-destination)
808-
((derived-mode-p 'clojure-mode) 'clj)
807+
((derived-mode-p 'clojurescript-mode 'clojurescript-ts-mode) 'cljs)
808+
((derived-mode-p 'clojurec-mode 'clojurec-ts-mode)
809+
cider-clojurec-eval-destination)
810+
((derived-mode-p 'clojure-mode 'clojure-ts-mode) 'clj)
809811
(cider-repl-type))))
810812

811813
(defun cider-set-repl-type (&optional type)

cider-mode.el

+16-6
Original file line numberDiff line numberDiff line change
@@ -546,14 +546,16 @@ higher precedence."
546546
(cider--menu-add-help-strings (symbol-value variable))))
547547
map))
548548

549-
;; This menu works as an easy entry-point into CIDER. Even if cider.el isn't
550-
;; loaded yet, this will be shown in Clojure buffers next to the "Clojure"
551-
;; menu.
552549
;;;###autoload
553-
(with-eval-after-load 'clojure-mode
554-
(easy-menu-define cider-clojure-mode-menu-open clojure-mode-map
550+
(defun cider--setup-menu-for-clojure-major-mode (mode-map)
551+
"Setup a Cider menu for a Clojure major mode's MODE-MAP.
552+
553+
This menu works as an easy entry-point into CIDER. Even if cider.el isn't
554+
loaded yet, this will be shown in Clojure buffers next to the Clojure menu."
555+
(easy-menu-define cider-clojure-mode-menu-open mode-map
555556
"Menu for Clojure mode.
556-
This is displayed in `clojure-mode' buffers, if `cider-mode' is not active."
557+
This is displayed in `clojure-mode' and `clojure-ts-mode' buffers,
558+
if `cider-mode' is not active."
557559
`("CIDER" :visible (not cider-mode)
558560
["Start a Clojure REPL" cider-jack-in-clj
559561
:help "Starts an nREPL server and connects a Clojure REPL to it."]
@@ -568,6 +570,14 @@ higher precedence."
568570
"--"
569571
["View user manual" cider-view-manual])))
570572

573+
;;;###autoload
574+
(with-eval-after-load 'clojure-mode
575+
(cider--setup-menu-for-clojure-major-mode clojure-mode-map))
576+
577+
;;;###autoload
578+
(with-eval-after-load 'clojure-ts-mode
579+
(cider--setup-menu-for-clojure-major-mode clojure-ts-mode-map))
580+
571581
;;; Dynamic indentation
572582
(defcustom cider-dynamic-indentation t
573583
"Whether CIDER should aid Clojure(Script) indentation.

cider-ns.el

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ If t, save the files without confirmation."
7878
:group 'cider
7979
:package-version '(cider . "0.15.0"))
8080

81-
(defcustom cider-ns-save-files-on-refresh-modes '(clojure-mode)
81+
(defcustom cider-ns-save-files-on-refresh-modes '(clojure-mode clojure-ts-mode)
8282
"Controls which files might be saved before refreshing.
8383
If a list of modes, any buffers visiting files on the classpath whose major
8484
mode is derived from any of the modes might be saved.

cider-selector.el

+7-4
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,18 @@ DESCRIPTION is a one-line description of what the key selects.")
4949
Not meant to be set by users. It's used internally
5050
by `cider-selector'.")
5151

52-
(defun cider-selector--recently-visited-buffer (mode &optional consider-visible-p)
53-
"Return the most recently visited buffer, deriving its `major-mode' from MODE.
52+
(defun cider-selector--recently-visited-buffer (modes &optional consider-visible-p)
53+
"Return the most recently visited buffer, deriving its `major-mode' from MODES.
54+
MODES may be a symbol for a single mode, or a list of mode symbols.
5455
CONSIDER-VISIBLE-P will allow handling of visible windows as well.
5556
First pass only considers buffers that are not already visible.
5657
Second pass will attempt one of visible ones for scenarios where the window
5758
is visible, but not focused."
5859
(cl-loop for buffer in (buffer-list)
5960
when (and (with-current-buffer buffer
60-
(derived-mode-p mode))
61+
(apply #'derived-mode-p (if (listp modes)
62+
modes
63+
(list modes))))
6164
;; names starting with space are considered hidden by Emacs
6265
(not (string-match-p "^ " (buffer-name buffer)))
6366
(or consider-visible-p
@@ -134,7 +137,7 @@ is chosen. The returned buffer is selected with
134137

135138
(def-cider-selector-method ?c
136139
"Most recently visited clojure-mode buffer."
137-
(cider-selector--recently-visited-buffer 'clojure-mode))
140+
(cider-selector--recently-visited-buffer '(clojure-mode clojure-ts-mode)))
138141

139142
(def-cider-selector-method ?e
140143
"Most recently visited emacs-lisp-mode buffer."

cider-util.el

+3-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ Setting this to nil removes the fontification restriction."
6060
(defun cider-util--clojure-buffers ()
6161
"Return a list of all existing `clojure-mode' buffers."
6262
(seq-filter
63-
(lambda (buffer) (with-current-buffer buffer (derived-mode-p 'clojure-mode)))
63+
(lambda (buffer)
64+
(with-current-buffer buffer
65+
(derived-mode-p 'clojure-mode 'clojure-ts-mode)))
6466
(buffer-list)))
6567

6668
(defun cider-current-dir ()

cider.el

+23-10
Original file line numberDiff line numberDiff line change
@@ -2090,18 +2090,31 @@ alternative to the default is `cider-random-tip'."
20902090

20912091
(add-hook 'cider-connected-hook #'cider--maybe-inspire-on-connect)
20922092

2093+
;;;###autoload
2094+
(defun cider--setup-clojure-major-mode (mode)
2095+
"Setup Cider key bindings and hooks for a Clojure major MODE."
2096+
(cl-flet ((concat-symbol (symbol suffix)
2097+
(intern (concat (symbol-name mode) suffix))))
2098+
(let ((mode-map (eval (concat-symbol mode "-map"))))
2099+
(define-key mode-map (kbd "C-c M-x") #'cider)
2100+
(define-key mode-map (kbd "C-c M-j") #'cider-jack-in-clj)
2101+
(define-key mode-map (kbd "C-c M-J") #'cider-jack-in-cljs)
2102+
(define-key mode-map (kbd "C-c M-c") #'cider-connect-clj)
2103+
(define-key mode-map (kbd "C-c M-C") #'cider-connect-cljs)
2104+
(define-key mode-map (kbd "C-c C-x") 'cider-start-map)
2105+
(define-key mode-map (kbd "C-c C-s") 'sesman-map)
2106+
(require 'sesman)
2107+
(sesman-install-menu mode-map)
2108+
(add-hook (concat-symbol mode "-hook")
2109+
(lambda () (setq-local sesman-system 'CIDER))))))
2110+
20932111
;;;###autoload
20942112
(with-eval-after-load 'clojure-mode
2095-
(define-key clojure-mode-map (kbd "C-c M-x") #'cider)
2096-
(define-key clojure-mode-map (kbd "C-c M-j") #'cider-jack-in-clj)
2097-
(define-key clojure-mode-map (kbd "C-c M-J") #'cider-jack-in-cljs)
2098-
(define-key clojure-mode-map (kbd "C-c M-c") #'cider-connect-clj)
2099-
(define-key clojure-mode-map (kbd "C-c M-C") #'cider-connect-cljs)
2100-
(define-key clojure-mode-map (kbd "C-c C-x") 'cider-start-map)
2101-
(define-key clojure-mode-map (kbd "C-c C-s") 'sesman-map)
2102-
(require 'sesman)
2103-
(sesman-install-menu clojure-mode-map)
2104-
(add-hook 'clojure-mode-hook (lambda () (setq-local sesman-system 'CIDER))))
2113+
(cider--setup-clojure-major-mode 'clojure-mode))
2114+
2115+
;;;###autoload
2116+
(with-eval-after-load 'clojure-ts-mode
2117+
(cider--setup-clojure-major-mode 'clojure-ts-mode))
21052118

21062119
(provide 'cider)
21072120

0 commit comments

Comments
 (0)