emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [PATCH] ob-vala.el: Add Vala support to Babel


From: Nicolas Goaziou
Subject: Re: [O] [PATCH] ob-vala.el: Add Vala support to Babel
Date: Sun, 23 Jul 2017 11:05:02 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Hello,

Christian Garbs <address@hidden> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]