emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
@ 2018-11-30  8:46 stardiviner
  2018-11-30 21:25 ` Tim Cross
  2019-01-10  1:47 ` stardiviner
  0 siblings, 2 replies; 10+ messages in thread
From: stardiviner @ 2018-11-30  8:46 UTC (permalink / raw)
  To: org-mode


The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~.

   #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj"
   (defproject xunfei-clj-demo "0.1.0-SNAPSHOT"
     :description "xunfei-clj demo"
     :url "http://example.com/FIXME"
     :license {:name "Eclipse Public License"
               :url  "http://www.eclipse.org/legal/epl-v10.html"}
     :dependencies [[org.clojure/clojure "1.9.0"]
                    [xunfei-clj "0.1.4-SNAPSHOT"]]
     :resource-paths ["lib/Msc.jar"])
   #+end_src

In upper case, obviously I don't want insert the ~(ns ..)~ line of code.

I hope the ob-clojure header argument ~:ns~ should detect value like
"nil", "" (empty string) or something else. Or when ~:ns~ header
argument is not specified. So that the tangling will not auto insert
~(ns ..)~ line.

--
[ 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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2018-11-30  8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner
@ 2018-11-30 21:25 ` Tim Cross
  2018-12-03  6:25   ` stardiviner
  2019-01-10  1:47 ` stardiviner
  1 sibling, 1 reply; 10+ messages in thread
From: Tim Cross @ 2018-11-30 21:25 UTC (permalink / raw)
  To: numbchild; +Cc: org-mode


stardiviner <numbchild@gmail.com> writes:

> The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~.
>
>    #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj"
>    (defproject xunfei-clj-demo "0.1.0-SNAPSHOT"
>      :description "xunfei-clj demo"
>      :url "http://example.com/FIXME"
>      :license {:name "Eclipse Public License"
>                :url  "http://www.eclipse.org/legal/epl-v10.html"}
>      :dependencies [[org.clojure/clojure "1.9.0"]
>                     [xunfei-clj "0.1.4-SNAPSHOT"]]
>      :resource-paths ["lib/Msc.jar"])
>    #+end_src
>
> In upper case, obviously I don't want insert the ~(ns ..)~ line of code.
>
> I hope the ob-clojure header argument ~:ns~ should detect value like
> "nil", "" (empty string) or something else. Or when ~:ns~ header
> argument is not specified. So that the tangling will not auto insert
> ~(ns ..)~ line.

I think the problem here is that really, project.clj is not a valid
clojure source file. It is really a clojure data file or clojure
snippet (I mean in the sense that you cannot execute it or include it as
a dependency within a clojure program - it is input data for the lein
build tool). If lein was being developed from scratch today, rather than
project.clj, you would probably have project.edn.

The question is, should we allow setting ns to nil/"", preventing
inclusion of a ns line, which would make 'real' clojure source files
invalid just to support this edge case or should we consider an
alternative solution e.g.

- have a 'lein-project' source type which could perhaps provide
  additional support for editing project.clj files (as I suspect lein is
  on the way out - replaced with things like clj or boot)
- try using edn-mode and having support for edn as a valid language
  type. I've never used edn mode and I'm not 100% certain project.clj
  and edn are completely compatible.

It seems to me that the preferred build tool is likely to become clj or
derivatives of clj. I've noticed increasingly longer delays in new lein
releases (the 'reflection' warning has been there for nearly 12 months
now, as has the incorrect classpath warning on some platforms).

In the long-term, I think org would probably benefit from integration
with clj rather than cider for ob-clojure as it is likely to be more
stable and less complex. Using cider has always felt like pushing a
square peg into a round hole to me. 

Tim

--
Tim Cross

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2018-11-30 21:25 ` Tim Cross
@ 2018-12-03  6:25   ` stardiviner
  2018-12-04 21:22     ` Tim Cross
  0 siblings, 1 reply; 10+ messages in thread
From: stardiviner @ 2018-12-03  6:25 UTC (permalink / raw)
  To: Tim Cross; +Cc: org-mode


Tim Cross <theophilusx@gmail.com> writes:

> I think the problem here is that really, project.clj is not a valid
> clojure source file. It is really a clojure data file or clojure
> snippet (I mean in the sense that you cannot execute it or include it as
> a dependency within a clojure program - it is input data for the lein
> build tool). If lein was being developed from scratch today, rather than
> project.clj, you would probably have project.edn.

Actually a few months ago, Sean on Slack clojurians helped me out for
using clj and deps.edn. Just because of habit inertia. I'm still using
Leiningen. As you said, the Clojure community is moving to clj/clojure +
deps.edn. I decide to following the trend. Start to use it now.

>
> The question is, should we allow setting ns to nil/"", preventing
> inclusion of a ns line, which would make 'real' clojure source files
> invalid just to support this edge case or should we consider an
> alternative solution e.g.
>
> - have a 'lein-project' source type which could perhaps provide
>   additional support for editing project.clj files (as I suspect lein is
>   on the way out - replaced with things like clj or boot)
> - try using edn-mode and having support for edn as a valid language
>   type. I've never used edn mode and I'm not 100% certain project.clj
>   and edn are completely compatible.
>
> It seems to me that the preferred build tool is likely to become clj or
> derivatives of clj. I've noticed increasingly longer delays in new lein
> releases (the 'reflection' warning has been there for nearly 12 months
> now, as has the incorrect classpath warning on some platforms).
>
> In the long-term, I think org would probably benefit from integration
> with clj rather than cider for ob-clojure as it is likely to be more
> stable and less complex. Using cider has always felt like pushing a
> square peg into a round hole to me.

I remember we have a short discussion about ob-clojure use clj instead
of CIDER before. I totally agree on this. Seems already has an Emacs
package named "inf-clojure". I added this "integrate inf-clojure to
ob-clojure" as my task. But not sure when to check it out. I have many
tasks on my list. I have an idea, would you create an GitHub repo for
this? I would like to contribute on it.

As I said previous, if I use "deps.edn", use `edn-mode' would solve this
problem. But there is no `edn-mode'. I checked out MELPA, only has
package named "edn" which is used to Support for reading and writing the
edn data format from elisp. I also did a search on GitHub. No luck.

Anyway, I'm going to switch to clj + deps.edn

And Thanks, @Tim.

--
[ 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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2018-12-03  6:25   ` stardiviner
@ 2018-12-04 21:22     ` Tim Cross
  2018-12-05  9:04       ` stardiviner
  0 siblings, 1 reply; 10+ messages in thread
From: Tim Cross @ 2018-12-04 21:22 UTC (permalink / raw)
  To: numbchild; +Cc: org-mode


Sorry, only just noticed this response in my spam folder - gmail is
tagging your messages as spam because it could not verify it was legit.

stardiviner <numbchild@gmail.com> writes:

> Tim Cross <theophilusx@gmail.com> writes:
>
>> I think the problem here is that really, project.clj is not a valid
>> clojure source file. It is really a clojure data file or clojure
>> snippet (I mean in the sense that you cannot execute it or include it as
>> a dependency within a clojure program - it is input data for the lein
>> build tool). If lein was being developed from scratch today, rather than
>> project.clj, you would probably have project.edn.
>
> Actually a few months ago, Sean on Slack clojurians helped me out for
> using clj and deps.edn. Just because of habit inertia. I'm still using
> Leiningen. As you said, the Clojure community is moving to clj/clojure +
> deps.edn. I decide to following the trend. Start to use it now.
>
>>
>> The question is, should we allow setting ns to nil/"", preventing
>> inclusion of a ns line, which would make 'real' clojure source files
>> invalid just to support this edge case or should we consider an
>> alternative solution e.g.
>>
>> - have a 'lein-project' source type which could perhaps provide
>>   additional support for editing project.clj files (as I suspect lein is
>>   on the way out - replaced with things like clj or boot)
>> - try using edn-mode and having support for edn as a valid language
>>   type. I've never used edn mode and I'm not 100% certain project.clj
>>   and edn are completely compatible.
>>
>> It seems to me that the preferred build tool is likely to become clj or
>> derivatives of clj. I've noticed increasingly longer delays in new lein
>> releases (the 'reflection' warning has been there for nearly 12 months
>> now, as has the incorrect classpath warning on some platforms).
>>
>> In the long-term, I think org would probably benefit from integration
>> with clj rather than cider for ob-clojure as it is likely to be more
>> stable and less complex. Using cider has always felt like pushing a
>> square peg into a round hole to me.
>
> I remember we have a short discussion about ob-clojure use clj instead
> of CIDER before. I totally agree on this. Seems already has an Emacs
> package named "inf-clojure". I added this "integrate inf-clojure to
> ob-clojure" as my task. But not sure when to check it out. I have many
> tasks on my list. I have an idea, would you create an GitHub repo for
> this? I would like to contribute on it.
>
> As I said previous, if I use "deps.edn", use `edn-mode' would solve this
> problem. But there is no `edn-mode'. I checked out MELPA, only has
> package named "edn" which is used to Support for reading and writing the
> edn data format from elisp. I also did a search on GitHub. No luck.
>
> Anyway, I'm going to switch to clj + deps.edn
>
> And Thanks, @Tim.

At present, I have no time to work on any clojure. I'm completely
consumed with work demands and unfortunately, I've not convinced them to
allow me to use Clojre/clojurescript (yet!), so stuck in javascript
world for now.

I will have leave in the early year and will likely re-visit this. I too
need to move from lein to clj + edn. It would be really good to simplify
the org interface for clojre and clojurescript and I suspect clj + edn
will be the way to go. The older inf-clojure was OK, but it lacked some
higher level features we do need as well, so it will take a bit of work.

Tim


-- 
Tim Cross

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2018-12-04 21:22     ` Tim Cross
@ 2018-12-05  9:04       ` stardiviner
  0 siblings, 0 replies; 10+ messages in thread
From: stardiviner @ 2018-12-05  9:04 UTC (permalink / raw)
  To: Tim Cross; +Cc: org-mode


Tim Cross <theophilusx@gmail.com> writes:

> Sorry, only just noticed this response in my spam folder - gmail is
> tagging your messages as spam because it could not verify it was legit.

Yeah, I found some other's emails in Gmail Spam too. I usually regularly
check Spam folder a week. Might because GPG sign? I don't know why.

> I will have leave in the early year and will likely re-visit this. I too
> need to move from lein to clj + edn. It would be really good to simplify
> the org interface for clojre and clojurescript and I suspect clj + edn
> will be the way to go. The older inf-clojure was OK, but it lacked some
> higher level features we do need as well, so it will take a bit of work.

I'm currently switched to clj-new utility. I'm considering create an
Emacs extension to invoke "clj-new". I'll start work on it in a few days.

--
[ 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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2018-11-30  8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner
  2018-11-30 21:25 ` Tim Cross
@ 2019-01-10  1:47 ` stardiviner
  2019-01-14  5:52   ` stardiviner
  1 sibling, 1 reply; 10+ messages in thread
From: stardiviner @ 2019-01-10  1:47 UTC (permalink / raw)
  To: org-mode

[-- Attachment #1: Type: text/plain, Size: 1109 bytes --]


stardiviner <numbchild@gmail.com> writes:

> The ob-clojure tangle will insert ~(ns ..)~ from babel header argument :ns or use defualt ~(ns user)~.
>
>    #+begin_src clojure :eval no :ns "" :tangle "data/code/xunfei-clj-demo/project.clj" :results link :file "data/code/xunfei-clj-demo/project.clj"
>    (defproject xunfei-clj-demo "0.1.0-SNAPSHOT"
>      :description "xunfei-clj demo"
>      :url "http://example.com/FIXME"
>      :license {:name "Eclipse Public License"
>                :url  "http://www.eclipse.org/legal/epl-v10.html"}
>      :dependencies [[org.clojure/clojure "1.9.0"]
>                     [xunfei-clj "0.1.4-SNAPSHOT"]]
>      :resource-paths ["lib/Msc.jar"])
>    #+end_src
>
> In upper case, obviously I don't want insert the ~(ns ..)~ line of code.
>
> I hope the ob-clojure header argument ~:ns~ should detect value like
> "nil", "" (empty string) or something else. Or when ~:ns~ header
> argument is not specified. So that the tangling will not auto insert
> ~(ns ..)~ line.

I added an patch to detect :ns is not specified which is `nil'. This
will be better for tangling.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --]
[-- Type: text/x-patch, Size: 3154 bytes --]

From 749e85a30ca6226c4b3aaef85ae0d72b51d6018e Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
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.
---
 etc/ORG-NEWS       |  5 +++++
 lisp/ob-clojure.el | 34 +++++++++++++++++++---------------
 2 files changed, 24 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)
-- 
2.20.1


[-- Attachment #3: Type: text/plain, Size: 255 bytes --]



-- 
[ 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
      

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2019-01-10  1:47 ` stardiviner
@ 2019-01-14  5:52   ` stardiviner
  2019-01-21  0:39     ` [PATCH] " stardiviner
  0 siblings, 1 reply; 10+ messages in thread
From: stardiviner @ 2019-01-14  5:52 UTC (permalink / raw)
  To: org-mode; +Cc: Nicolas Goaziou

[-- Attachment #1: Type: text/plain, Size: 1631 bytes --]


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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --]
[-- Type: text/x-patch, Size: 4052 bytes --]

From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
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


[-- Attachment #3: Type: text/plain, Size: 247 bytes --]



--
[ 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

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2019-01-14  5:52   ` stardiviner
@ 2019-01-21  0:39     ` stardiviner
  2019-01-21 20:19       ` Nicolas Goaziou
  0 siblings, 1 reply; 10+ messages in thread
From: stardiviner @ 2019-01-21  0:39 UTC (permalink / raw)
  To: org-mode

[-- Attachment #1: Type: text/plain, Size: 381 bytes --]

After few days later, I re-run "make test", it's fine now.

6 unexpected results:
   FAILED  ob-D/inhomogeneous_table
   FAILED  ob-D/list-list-var
   FAILED  ob-D/list-var
   FAILED  ob-D/vector-var
   FAILED  test-org-clock/clocktable/lang
   FAILED  test-org-colview/columns-width

Because few days passed, make sure the patch is the latest version. I
attached my patch again.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-clojure.el-Don-t-tangle-with-auto-prepend-ns.patch --]
[-- Type: text/x-patch, Size: 4052 bytes --]

From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001
From: stardiviner <numbchild@gmail.com>
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


[-- Attachment #3: Type: text/plain, Size: 255 bytes --]



-- 
[ 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
      

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2019-01-21  0:39     ` [PATCH] " stardiviner
@ 2019-01-21 20:19       ` Nicolas Goaziou
  2019-01-22  7:57         ` stardiviner
  0 siblings, 1 reply; 10+ messages in thread
From: Nicolas Goaziou @ 2019-01-21 20:19 UTC (permalink / raw)
  To: stardiviner; +Cc: org-mode

Hello,

stardiviner <numbchild@gmail.com> writes:

> From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001
> From: stardiviner <numbchild@gmail.com>
> Date: Thu, 10 Jan 2019 09:34:39 +0800
> Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns
>  statement

Applied, with tiny changes. Thank you.

Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] ob-clojure should not tangle with inserting (ns ..) line when no :ns specified.
  2019-01-21 20:19       ` Nicolas Goaziou
@ 2019-01-22  7:57         ` stardiviner
  0 siblings, 0 replies; 10+ messages in thread
From: stardiviner @ 2019-01-22  7:57 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: org-mode


Nicolas Goaziou <mail@nicolasgoaziou.fr> writes:

> Hello,
>
> stardiviner <numbchild@gmail.com> writes:
>
>> From 8a64ccf659afcbd510e69eaa4ac175946f1ae311 Mon Sep 17 00:00:00 2001
>> From: stardiviner <numbchild@gmail.com>
>> Date: Thu, 10 Jan 2019 09:34:39 +0800
>> Subject: [PATCH] lisp/ob-clojure.el: Don't tangle with auto prepend ns
>>  statement
>
> Applied, with tiny changes. Thank you.

Thanks as always, Nicolas.

>
> Regards,


-- 
[ 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
      

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-01-22  7:54 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-30  8:46 ob-clojure should not tangle with inserting (ns ..) line when no :ns specified stardiviner
2018-11-30 21:25 ` Tim Cross
2018-12-03  6:25   ` stardiviner
2018-12-04 21:22     ` Tim Cross
2018-12-05  9:04       ` stardiviner
2019-01-10  1:47 ` stardiviner
2019-01-14  5:52   ` stardiviner
2019-01-21  0:39     ` [PATCH] " stardiviner
2019-01-21 20:19       ` Nicolas Goaziou
2019-01-22  7:57         ` stardiviner

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).