Procházet zdrojové kódy

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 před 6 roky
rodič
revize
bcdb2b5568
3 změnil soubory, kde provedl 34 přidání a 15 odebrání
  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
 
 ** 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
 Org will no longer attempt to restore the window configuration in the
 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"))
 
 (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
   "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)))
 	 (print-level 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)
 	    (member "pp" result-params))
 	(format "(clojure.pprint/pprint (do %s))" body)

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

@@ -71,6 +71,20 @@
     (should (string=
 	     ": 1"
 	     (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)