From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Miele Subject: [PATCH] COMMENT and noweb-ref Date: Sun, 20 Oct 2019 22:30:46 +0000 Message-ID: <878spfoxrd.fsf@gmail.com> References: <87o8zkyli6.fsf@gmail.com> Reply-To: sebastian.miele@gmail.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:60214) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iMJit-0007hJ-Cz for emacs-orgmode@gnu.org; Sun, 20 Oct 2019 18:30:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iMJir-0006Zc-W0 for emacs-orgmode@gnu.org; Sun, 20 Oct 2019 18:30:51 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:54069) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iMJir-0006ZQ-MG for emacs-orgmode@gnu.org; Sun, 20 Oct 2019 18:30:49 -0400 Received: by mail-wm1-x32e.google.com with SMTP id i16so11156754wmd.3 for ; Sun, 20 Oct 2019 15:30:49 -0700 (PDT) Received: from tisch ([2a02:908:175c:4260:5ffc:7882:6024:ca5b]) by smtp.gmail.com with ESMTPSA id 200sm1746903wme.32.2019.10.20.15.30.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Oct 2019 15:30:47 -0700 (PDT) In-reply-to: <87o8zkyli6.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: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Sorry. I messed up the previous mail. Please ignore it. I wrote: > org-babel-tangle on > > * A > > #+BEGIN_SRC elisp :tangle yes :noweb yes > ;; A > <> > #+END_SRC > > * COMMENT B > > #+BEGIN_SRC elisp :noweb-ref B > ;; B > #+END_SRC > > * COMMENT C > > #+BEGIN_SRC elisp :tangle yes > ;; C > #+END_SRC > > produces a file with A and B in it. Expected: Just A. Changing > > #+BEGIN_SRC elisp :noweb-ref B > ;; B > #+END_SRC > > to > > # #+BEGIN_SRC elisp :noweb-ref B > # ;; B > # #+END_SRC > > does yield the expected result. Attached is a patch that fixes the problem. A second patch is attached that contains tests about this and related stuff. It is an updated version of an unapplied patch that I sent to this list earlier this month (https://lists.gnu.org/archive/html/emacs-orgmode/2019-10/msg00013.html). Best wishes Sebastian --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=0001-ob-core-Respect-COMMENTed-headlines-when-expanding-n.patch >From ddf0b6d89d30766158311c047d6de10091cb0377 Mon Sep 17 00:00:00 2001 From: Sebastian Miele Date: Sun, 20 Oct 2019 21:34:02 +0000 Subject: [PATCH 1/2] ob-core: Respect COMMENTed headlines when expanding noweb references * lisp/ob-core.el (org-babel-expand-noweb-references): Add calls to org-in-commented-heading-p where appropriate. --- lisp/ob-core.el | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 572f97919..b99545ab5 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -2780,7 +2780,8 @@ block but are passed literally to the \"example-block\"." (concat (funcall c-wrap (car cs)) "\n" b "\n" (funcall c-wrap (cadr cs))))))))) - (if (re-search-forward name-regexp nil t) + (if (and (re-search-forward name-regexp nil t) + (not (org-in-commented-heading-p))) ;; Found a source block named SOURCE-NAME. ;; Assume it is unique; do not look after ;; `:noweb-ref' header argument. @@ -2791,14 +2792,16 @@ block but are passed literally to the \"example-block\"." ;; those with a matching Noweb reference. (let ((expansion nil)) (org-babel-map-src-blocks nil - (let* ((info (org-babel-get-src-block-info 'light)) - (parameters (nth 2 info))) - (when (equal source-name - (cdr (assq :noweb-ref parameters))) - (push (funcall expand-body info) expansion) - (push (or (cdr (assq :noweb-sep parameters)) - "\n") - expansion)))) + (unless (org-in-commented-heading-p) + (let* ((info + (org-babel-get-src-block-info 'light)) + (parameters (nth 2 info))) + (when (equal source-name + (cdr (assq :noweb-ref parameters))) + (push (funcall expand-body info) expansion) + (push (or (cdr (assq :noweb-sep parameters)) + "\n") + expansion))))) (when expansion (mapconcat #'identity (nreverse (cdr expansion)) -- 2.23.0 --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=0002-Add-tests-about-omission-of-commented-src-blocks-whe.patch >From 66c7904298a33900e389acb184fbe7511960b34d Mon Sep 17 00:00:00 2001 From: Sebastian Miele Date: Sun, 20 Oct 2019 21:38:03 +0000 Subject: [PATCH 2/2] Add tests about omission of commented src blocks when e.g. tangling * testing/lisp/test-ob.el (test-ob/noweb-expansion): Add clause to test. * testing/lisp/test-ob-tangle.el (ob-tangle/commented-src-blocks): Add test. --- testing/lisp/test-ob-tangle.el | 84 ++++++++++++++++++++++++++++++++++ testing/lisp/test-ob.el | 24 ++++++++++ 2 files changed, 108 insertions(+) diff --git a/testing/lisp/test-ob-tangle.el b/testing/lisp/test-ob-tangle.el index 47c31dff5..301f7aff7 100644 --- a/testing/lisp/test-ob-tangle.el +++ b/testing/lisp/test-ob-tangle.el @@ -296,6 +296,90 @@ another block (org-split-string (buffer-string)))) (delete-file file)))))) +(ert-deftest ob-tangle/commented-src-blocks () + "Test omission of commented src blocks." + (should + (equal '("A") + (let ((file (make-temp-file "org-tangle-"))) + (unwind-protect + (progn + (org-test-with-temp-text-in-file + (format "#+property: header-args :tangle %S +* A + + #+begin_src emacs-lisp + A + #+end_src + +* COMMENT B + + #+begin_src emacs-lisp + B + #+end_src + +* C + + # #+begin_src emacs-lisp + # C + # #+end_src + +* D + + #+begin_comment + #+begin_src emacs-lisp + D + #+end_src + #+end_comment" + file) + (org-babel-tangle)) + (with-temp-buffer + (insert-file-contents file) + (org-split-string (buffer-string)))) + (delete-file file))))) + (should + (equal '("A") + (let ((file (make-temp-file "org-tangle-"))) + (unwind-protect + (progn + (org-test-with-temp-text-in-file + (format "#+property: header-args :tangle %S +* A + + #+begin_src elisp :noweb yes + A + <> + <> + <> + #+end_src + +* COMMENT B + + #+begin_src elisp :noweb-ref B + B + #+end_src + +* C + + # #+begin_src elisp :noweb-ref C + # C + # #+end_src + +* D + + #+begin_comment + #+begin_src elisp :noweb-ref D + D + #+end_src + #+end_comment" + file) + (let (org-babel-noweb-error-all-langs + org-babel-noweb-error-langs) + (org-babel-tangle))) + (with-temp-buffer + (insert-file-contents file) + (org-split-string (buffer-string)))) + (delete-file file)))))) + (provide 'test-ob-tangle) ;;; test-ob-tangle.el ends here diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el index 367c70f83..681f3403e 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -758,6 +758,30 @@ x #+name: bar #+begin_src emacs-lisp baz +#+end_src" + (org-babel-expand-noweb-references)))) + ;; Respect COMMENT headlines + (should + (equal "C" + (org-test-with-temp-text " +#+begin_src emacs-lisp :noweb yes + <> +#+end_src + +* COMMENT A +#+name: foo +#+begin_src emacs-lisp + A +#+end_src + +* COMMENT B +#+begin_src emacs-lisp :noweb-ref foo + B +#+end_src + +* C +#+begin_src emacs-lisp :noweb-ref foo + C #+end_src" (org-babel-expand-noweb-references))))) -- 2.23.0 --=-=-=--