From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: [PATCH] ob-vala.el: Add Vala support to Babel Date: Sun, 23 Jul 2017 11:05:02 +0200 Message-ID: <87379no75t.fsf@nicolasgoaziou.fr> References: <87fudze7y4.fsf@nicolasgoaziou.fr> <1500061387-3353-1-git-send-email-mitch@cgarbs.de> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58080) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dZCpF-0000vT-NM for emacs-orgmode@gnu.org; Sun, 23 Jul 2017 05:05:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dZCpE-0002qX-J2 for emacs-orgmode@gnu.org; Sun, 23 Jul 2017 05:05:21 -0400 Received: from [2001:4b98:c:538::194] (port=49723 helo=relay2-d.mail.gandi.net) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dZCpE-0002de-DK for emacs-orgmode@gnu.org; Sun, 23 Jul 2017 05:05:20 -0400 In-Reply-To: <1500061387-3353-1-git-send-email-mitch@cgarbs.de> (Christian Garbs's message of "Fri, 14 Jul 2017 21:43:07 +0200") 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: Christian Garbs Cc: Christian Garbs , emacs-orgmode@gnu.org Hello, Christian Garbs writes: > * ob-vala.el: Add support for the Vala language to Babel. Thank you. Comments follow. > +;; file extension ;; File extension. > +;; header arguments empty by default ;; Header argument empty by default. > +(defvar org-babel-vala-compiler "valac" > + "Command used to compile a Vala source code file into an > +executable.") The first line of a docstring should be a full sentence. Also, shouldn't this be a defcustom? > +(defun org-babel-expand-body:vala (body params &optional processed-params) > + "Expand BODY: does nothing, returns original BODY while ignoring PARAMS." > + body ;; TODO: expand params? > + ) > + > +;; This is the main function which is called to evaluate a code > +;; block. > +;; > +;; - run Vala compiler and create a binary in a temporary file > +;; - compiler/linker flags can be set via :flags header argument > +;; - if compilation succeeded, run the binary > +;; - commandline parameters to the binary can be set via :cmdline > +;; header argument > +;; - stdout will be parsed as RESULT (control via :result-params > +;; header argument) > +;; > +;; There is no session support because Vala is a compiled language. > +;; > +;; This function is heavily based on ob-C.el > +(defun org-babel-execute:vala (body params) > + "Execute a block of Vala code with org-babel. "org-babel" -> "Babel" > +This function is called by `org-babel-execute-src-block'" > + (message "executing Vala source code block") > + (let* ((tmp-src-file (org-babel-temp-file > + "vala-src-" > + ".vala")) > + (tmp-bin-file (org-babel-temp-file "vala-bin-" org-babel-exeext)) > + (cmdline (cdr (assoc :cmdline params))) > + (flags (cdr (assoc :flags params))) `assoc' -> `assq' > + (full-body (org-babel-expand-body:vala body params)) > + (compile > + (progn > + (with-temp-file tmp-src-file (insert full-body)) > + (org-babel-eval > + (format "%s %s -o %s %s" > + org-babel-vala-compiler > + (mapconcat 'identity 'identity -> #'identity > + (if (listp flags) flags (list flags)) " ") > + (org-babel-process-file-name tmp-bin-file) > + (org-babel-process-file-name tmp-src-file)) ""))) > + ) There should be no dangling parenthesis. Please move it at the end of the line above. > + (if (file-executable-p tmp-bin-file) > + (let ((results > + (org-trim > + (org-babel-eval > + (concat tmp-bin-file (if cmdline (concat " " cmdline) "")) "")))) > + (org-babel-reassemble-table > + (org-babel-result-cond (cdr (assoc :result-params params)) > + (org-babel-read results) > + (let ((tmp-file (org-babel-temp-file "vala-"))) > + (with-temp-file tmp-file (insert results)) > + (org-babel-import-elisp-from-file tmp-file))) > + (org-babel-pick-name > + (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) > + (org-babel-pick-name > + (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params))) > + )) > + ))) See above. Also, it looks like you are using a one-armed `if'. In this case, I suggest using (when ...) instead. > +(defun org-babel-prep-session:vala (session params) > + "This function does nothing as Vala is a compiled language with no > +support for sessions" > + (error "Vala is a compiled language -- no support for sessions")) See remark about first line in a docstirng. > +(defun org-babel-vala-var-to-vala (var) > + "Convert an elisp var into a string of vala source code > +specifying a var of the same value." > + (format "%S" var)) Ditto. > +(defun org-babel-vala-table-or-string (results) > + "If the results look like a table, then convert them into an > +Emacs-lisp table, otherwise return the results as a string." > + ) The body of the function is missing. Could you send an updated patch? Regards, -- Nicolas Goaziou