瀏覽代碼

ob-clojure: Don't tangle with auto prepend ns statement

* lisp/ob-clojure.el: (org-babel-expand-body:clojure,
  org-babel-header-args:clojure): whether auto prepend Clojure (ns ..)
  statement depend on whether have :ns header argument specified.

* testing/test-ob-clojure.el: Add a test.
stardiviner 6 年之前
父節點
當前提交
bcdb2b5568
共有 3 個文件被更改,包括 34 次插入15 次删除
  1. 5 0
      etc/ORG-NEWS
  2. 15 15
      lisp/ob-clojure.el
  3. 14 0
      testing/lisp/test-ob-clojure.el

+ 5 - 0
etc/ORG-NEWS

@@ -13,6 +13,11 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
 * Version 9.3
 * Version 9.3
 
 
 ** Incompatible changes
 ** Incompatible changes
+*** ob-clojure will not auto prepend ~(ns ..)~ statement now
+When tangling, user usually just want to tangle literally code instead
+of prepend inserting a ~(ns ..)~ statement before source block
+code. Now, when you have no ~:ns~ header argument specified, this
+behavior will not happend automatically.
 *** Change in behavior on exit from an Org edit buffer
 *** Change in behavior on exit from an Org edit buffer
 Org will no longer attempt to restore the window configuration in the
 Org will no longer attempt to restore the window configuration in the
 frame to which the user returns after editing a source block with
 frame to which the user returns after editing a source block with

+ 15 - 15
lisp/ob-clojure.el

@@ -63,7 +63,8 @@
 (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
 (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
 
 
 (defvar org-babel-default-header-args:clojure '())
 (defvar org-babel-default-header-args:clojure '())
-(defvar org-babel-header-args:clojure '((package . :any)))
+(defvar org-babel-header-args:clojure '((ns . :any)
+					(package . :any)))
 
 
 (defcustom org-babel-clojure-sync-nrepl-timeout 10
 (defcustom org-babel-clojure-sync-nrepl-timeout 10
   "Timeout value, in seconds, of a Clojure sync call.
   "Timeout value, in seconds, of a Clojure sync call.
@@ -103,20 +104,19 @@ If the value is nil, timeout is disabled."
 	 (result-params (cdr (assq :result-params params)))
 	 (result-params (cdr (assq :result-params params)))
 	 (print-level nil)
 	 (print-level nil)
 	 (print-length nil)
 	 (print-length nil)
-	 (body
-	  (org-trim
-	   (format "(ns %s)\n%s"
-		   ;; Source block specified namespace :ns.
-		   ns
-		   ;; Variables binding.
-		   (if (null vars) (org-trim body)
-		     (format "(let [%s]\n%s)"
-			     (mapconcat
-			      (lambda (var)
-				(format "%S (quote %S)" (car var) (cdr var)))
-			      vars
-			      "\n      ")
-			     body))))))
+	 (body (org-trim
+		(concat
+		 ;; Source block specified namespace :ns.
+		 (and (cdr (assq :ns params)) (format "(ns %s)\n" ns))
+		 ;; Variables binding.
+		 (if (null vars) (org-trim body)
+		   (format "(let [%s]\n%s)"
+			   (mapconcat
+			    (lambda (var)
+			      (format "%S (quote %S)" (car var) (cdr var)))
+			    vars
+			    "\n      ")
+			   body))))))
     (if (or (member "code" result-params)
     (if (or (member "code" result-params)
 	    (member "pp" result-params))
 	    (member "pp" result-params))
 	(format "(clojure.pprint/pprint (do %s))" body)
 	(format "(clojure.pprint/pprint (do %s))" body)

+ 14 - 0
testing/lisp/test-ob-clojure.el

@@ -71,6 +71,20 @@
     (should (string=
     (should (string=
 	     ": 1"
 	     ": 1"
 	     (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
 	     (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
+(ert-deftest ob-clojure/tangle-without-ns ()
+  (org-test-with-temp-text
+   "#+begin_src clojure :tangle /tmp/test.clj
+(print 1)
+#+end_src"
+   (org-babel-next-src-block)
+   (org-babel-tangle)
+   (should
+    (string=
+     "(print 1)
+"
+     (with-temp-buffer
+       (insert-file-contents "/tmp/test.clj")
+       (buffer-substring-no-properties (point-min) (point-max)))))))
 
 
 (provide 'test-ob-clojure)
 (provide 'test-ob-clojure)