Add function to switch back and forth between clojure src and test files

This commit is contained in:
David Morgan 2021-09-06 21:14:32 +01:00
parent 72734a9403
commit 12eeddb90a
2 changed files with 23 additions and 1 deletions

View File

@ -44,7 +44,9 @@
nrepl-log-messages t
clojure-toplevel-inside-comment-form t)
(unbind-key "C-c C-l" cider-mode-map)
:bind (:map cider-mode-map ("C-c M-l" . cider-load-file))
:bind
(:map cider-mode-map ("C-c M-l" . cider-load-file))
(:map clojure-mode-map ("C-x p q" . project-clojure-test-switch))
:hook
(cider-repl-mode . (lambda ()
(display-line-numbers-mode -1)

View File

@ -2,9 +2,29 @@
;;; Commentary:
;;; Code:
(require 'subr-x)
(use-package project
:ensure nil
:config
(defun project--clojure-switch-to-test (filename project-root)
(let* ((project-src-file (string-remove-prefix project-root filename))
(project-test-file (replace-regexp-in-string "\.clj$" "_test.clj"
(replace-regexp-in-string "^src/" "test/" project-src-file))))
(find-file (expand-file-name project-test-file project-root))))
(defun project--clojure-switch-to-src (test-filename project-root)
(let* ((project-test-file (string-remove-prefix project-root test-filename))
(project-src-file (replace-regexp-in-string "_test\.clj$" ".clj"
(replace-regexp-in-string "^test/" "src/" project-test-file))))
(find-file (expand-file-name project-src-file project-root))))
(defun project-clojure-test-switch ()
(interactive)
(let ((filename (buffer-file-name))
(project-root (consult--project-root))) ;; TODO don't depend on consult
(cond ((string-match (concat "^" project-root "test/.*_test\.clj") filename)
(project--clojure-switch-to-src filename project-root))
((string-match (concat "^" project-root "src/.*\.clj") filename)
(project--clojure-switch-to-test filename project-root)))))
(defun project-recentf ()
"Show a list of recently visited files in a project."
(interactive)