From mboxrd@z Thu Jan 1 00:00:00 1970 From: stardiviner Subject: Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified. Date: Mon, 14 Jan 2019 13:52:56 +0800 Message-ID: <87fttveqfb.fsf@gmail.com> References: <877egvj6l2.fsf@gmail.com> <87r2dlz3jq.fsf@gmail.com> Reply-To: numbchild@gmail.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([209.51.188.92]:53508) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1givGm-0001mK-JZ for emacs-orgmode@gnu.org; Mon, 14 Jan 2019 00:58:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1giv8d-0000yZ-Kq for emacs-orgmode@gnu.org; Mon, 14 Jan 2019 00:50:21 -0500 Received: from [61.175.244.13] (port=35705 helo=dark.localdomain) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1giv8d-0000wT-2I for emacs-orgmode@gnu.org; Mon, 14 Jan 2019 00:50:19 -0500 In-reply-to: <87r2dlz3jq.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: org-mode Cc: Nicolas Goaziou --=-=-= Content-Type: text/plain I updated the patch by adding a test. With command "make test" I got: ``` Tangled 0 code blocks from babel.org passed 132/828 ob-tangle/no-excessive-id-insertion-on-tangle passed 133/828 ob-test/org-babel-combine-header-arg-lists failed 134/828 org-missing-dependency/test-ob-R failed 135/828 org-missing-dependency/test-ob-clojure failed 136/828 org-missing-dependency/test-ob-eshell failed 137/828 org-missing-dependency/test-ob-lua failed 138/828 org-missing-dependency/test-ob-maxima failed 139/828 org-missing-dependency/test-ob-plantuml failed 140/828 org-missing-dependency/test-ob-ruby failed 141/828 org-missing-dependency/test-ob-scheme failed 142/828 org-missing-dependency/test-ob-vala failed 143/828 org-missing-dependency/test-org-attach-annex failed 144/828 org-missing-dependency/test-org-protocol passed 145/828 test-ob-exp/org-babel-exp-src-blocks/w-no-file passed 146/828 test-ob-exp/org-babel-exp-src-blocks/w-no-headers passed 147/828 test-ob-exp/org-babel-exp-src-blocks/w-no-headers2 executing Emacs-Lisp code block... ``` With command: $ make BTEST_RE="ob-clojure/tangle-without-ns" test-dirty I got: ``` Loading /home/stardiviner/Code/Emacs/org-mode/testing/lisp/test-property-inheritance.el (source)... selected tests: ob-clojure/tangle-without-ns Running 0 tests (2019-01-14 13:27:58+0800) Ran 0 tests, 0 results as expected (2019-01-14 13:27:58+0800) make cleantest ``` I don't know why it report missing requirement, so the test failed. Nicolas, do you have any idea why this? You can check out the test code. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch >From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001 From: stardiviner Date: Thu, 10 Jan 2019 09:34:39 +0800 Subject: [PATCH] lisp/ob-clojure.el: 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. * etc/ORG-NEWS: mentioned this changed in ORG-NEWS. * testing/test-ob-clojure.el: add a test for tangled clojure code without (ns ..). --- etc/ORG-NEWS | 5 +++++ lisp/ob-clojure.el | 34 ++++++++++++++++++--------------- testing/lisp/test-ob-clojure.el | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 1bb485ad1..2eea00d97 100644 --- a/etc/ORG-NEWS +++ b/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 diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 2088ab375..55a4c3eb4 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -63,7 +63,11 @@ (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 '((package . :any)) + "For the :ns header argument, when you don't specify it, it + will not auto prepend (ns ..) statement before source block + code. If you have a :ns specified, the (ns ..) statement will + be auto prepended before source block code.") (defcustom org-babel-clojure-sync-nrepl-timeout 10 "Timeout value, in seconds, of a Clojure sync call. @@ -103,20 +107,20 @@ 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. + (if (not (null (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) diff --git a/testing/lisp/test-ob-clojure.el b/testing/lisp/test-ob-clojure.el index f917ca4cc..a5391dcb3 100644 --- a/testing/lisp/test-ob-clojure.el +++ b/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) -- 2.20.1 --=-=-= Content-Type: text/plain -- [ stardiviner ] I try to make every word tell the meaning what I want to express. Blog: https://stardiviner.github.io/ IRC(freenode): stardiviner, Matrix: stardiviner GPG: F09F650D7D674819892591401B5DF1C95AE89AC3 --=-=-=--