Skip to content

Commit 2a362e6

Browse files
committed
[Fix #216] Better auto-ns for cljc files
There is no :refer :all in cljs: - Require the ns under test :as sut - Require clojure.test and cljs.test :as t for symmetry
1 parent 888a487 commit 2a362e6

File tree

4 files changed

+44
-12
lines changed

4 files changed

+44
-12
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
### Changes
1010

11+
- [#216](https://github.com/clojure-emacs/clj-refactor.el/issues/216) Teach our automatic ns generator about cljc files.
1112
- Teach `cljr-extract-constant` about the `^:const` hint to the compiler.
1213
- Use yasnippet for placeholder parameters in `cljr-create-fn-from-example`
1314
- Highlight the function be promoted with overlays in `cljr-promote-function`.

clj-refactor.el

+18-6
Original file line numberDiff line numberDiff line change
@@ -776,19 +776,31 @@ Signal an error if it is not supported."
776776
(when src-ns
777777
(mapconcat 'identity (append (butlast ns-chunks) (list src-ns)) "."))))
778778

779+
(defun cljr--cljc-file? (&optional buf)
780+
"Is buf, or current buffer, visiting a cljc file?"
781+
(s-ends-with? ".cljc" (buffer-file-name (or buf (current-buffer)))))
782+
779783
(defun cljr--add-test-use-declarations ()
780784
(save-excursion
781785
(let* ((ns (clojure-find-ns))
782786
(source-ns (cljr--find-source-ns-of-test-ns ns (buffer-file-name))))
783787
(cljr--insert-in-ns ":require")
784788
(when source-ns
785-
(insert "[" source-ns " :refer :all]"))
789+
(if (cljr--cljc-file?)
790+
;; no :refer :all in cljs
791+
(insert "[" source-ns " :as :sut]")
792+
(insert "[" source-ns " :refer :all]")))
786793
(cljr--insert-in-ns ":require")
787-
(insert "[" (cond
788-
((cljr--project-depends-on-p "midje") "midje.sweet")
789-
((cljr--project-depends-on-p "expectations") "expectations")
790-
(t "clojure.test"))
791-
" :refer :all]"))))
794+
(insert (cond
795+
((cljr--project-depends-on-p "midje")
796+
"[midje.sweet :refer :all]")
797+
((cljr--project-depends-on-p "expectations")
798+
"[expectations :refer :all]")
799+
((cljr--cljc-file?)
800+
"#?(:clj [clojure.test :as t]
801+
:cljs [cljs.test :as t :include-macros true])")
802+
(t "[clojure.test :refer :all]"))))
803+
(indent-region (point-min) (point-max))))
792804

793805
(defun cljr--in-tests-p ()
794806
"Check whether the current file is a test file.

features/auto-ns.feature

+10
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,13 @@ Feature: Add namespace to blank .clj files
6464
(:require [cljr.core :refer :all]
6565
[midje.sweet :refer :all]))
6666
"""
67+
68+
Scenario: cljc file
69+
When I open file "tmp/test/cljr/core_test.cljc"
70+
Then I should see:
71+
"""
72+
(ns cljr.core-test
73+
(:require [cljr.core :as sut]
74+
#?(:clj [clojure.test :as t]
75+
:cljs [cljs.test :as t :include-macros true])))
76+
"""

features/support/env.el

+15-6
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,29 @@
3535
(cljr-add-keybindings-with-prefix "C-!")
3636
(add-hook 'clojure-mode-hook (lambda () (clj-refactor-mode))))
3737

38-
(Before
39-
(save-all-buffers-dont-ask)
40-
(kill-matching-buffers-dont-ask "clj")
41-
(setq cljr-use-multiple-cursors t))
38+
(defun kill-matching-buffers-dont-ask (regexp &optional internal-too)
39+
(dolist (buffer (buffer-list))
40+
(let ((name (buffer-name buffer)))
41+
(when (and name (not (string-equal name ""))
42+
(or internal-too (/= (aref name 0) ?\s))
43+
(string-match regexp name))
44+
(kill-buffer buffer)))))
4245

4346
(defun save-all-buffers-dont-ask ()
4447
(dolist (buffer (buffer-list))
4548
(with-current-buffer buffer
4649
(let ((filename (buffer-file-name)))
4750
(when (and filename
4851
(or (file-exists-p filename)
49-
(s-ends-with? ".clj" filename)))
52+
(s-ends-with? ".clj" filename)
53+
(s-ends-with? ".cljc" filename)))
5054
(save-buffer))))))
5155

56+
(Before
57+
(save-all-buffers-dont-ask)
58+
(kill-matching-buffers-dont-ask "cljc?")
59+
(setq cljr-use-multiple-cursors t))
60+
5261
(defun kill-matching-buffers-dont-ask (regexp &optional internal-too)
5362
(dolist (buffer (buffer-list))
5463
(let ((name (buffer-name buffer)))
@@ -59,7 +68,7 @@
5968

6069
(After
6170
(save-all-buffers-dont-ask)
62-
(kill-matching-buffers-dont-ask "clj")
71+
(kill-matching-buffers-dont-ask "cljc?")
6372
(delete-directory (expand-file-name "tmp" clj-refactor-root-path) t))
6473

6574
(Teardown

0 commit comments

Comments
 (0)