From 97272dad9f8b4c7cbe9b7abb19ce7c645623d773 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Wed, 8 Oct 2014 23:34:58 +0800 Subject: [PATCH] * lisp/progmodes/cfengine.el (cfengine3-make-syntax-cache): Always return a syntax. Replace call-process-shell-command with process-file. Ensure cfengine-mode-syntax-functions-regex is always set. Ensure cache when cfengine-cf-promises fails. Fixes: debbugs:18620 --- lisp/ChangeLog | 8 ++++++ lisp/progmodes/cfengine.el | 50 ++++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2d60bd5d630..e94ca37fe98 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2014-10-08 Leo Liu + + * progmodes/cfengine.el (cfengine3-make-syntax-cache): Always + return a syntax. Replace call-process-shell-command with + process-file. Ensure cfengine-mode-syntax-functions-regex is + always set. Ensure cache when cfengine-cf-promises fails. + (Bug#18620) + 2014-10-07 Glenn Morris * font-lock.el (font-lock-fontify-buffer): Fix interactive-only markup. diff --git a/lisp/progmodes/cfengine.el b/lisp/progmodes/cfengine.el index 7d4f6dc25b9..da231918c39 100644 --- a/lisp/progmodes/cfengine.el +++ b/lisp/progmodes/cfengine.el @@ -1231,29 +1231,32 @@ Should not be necessary unless you reinstall CFEngine." (setq cfengine-mode-syntax-cache nil)) (defun cfengine3-make-syntax-cache () - "Build the CFEngine 3 syntax cache. -Calls `cfengine-cf-promises' with \"-s json\"" - (let ((syntax (cddr (assoc cfengine-cf-promises cfengine-mode-syntax-cache)))) - (if cfengine-cf-promises - (or syntax - (with-demoted-errors - (with-temp-buffer - (call-process-shell-command cfengine-cf-promises - nil ; no input - t ; current buffer - nil ; no redisplay - "-s" "json") - (goto-char (point-min)) - (setq syntax (json-read)) - (setq cfengine-mode-syntax-cache - (cons (cons cfengine-cf-promises syntax) - cfengine-mode-syntax-cache)) - (setq cfengine-mode-syntax-functions-regex - (regexp-opt (mapcar (lambda (def) - (format "%s" (car def))) - (cdr (assq 'functions syntax))) - 'symbols)))))) - cfengine3-fallback-syntax)) + "Build the CFEngine 3 syntax cache and return the syntax. +Calls `cfengine-cf-promises' with \"-s json\"." + (or (cdr (assoc cfengine-cf-promises cfengine-mode-syntax-cache)) + (let ((syntax (or (when cfengine-cf-promises + (with-demoted-errors "cfengine3-make-syntax-cache: %S" + (with-temp-buffer + (or (zerop (process-file cfengine-cf-promises + nil ; no input + t ; output + nil ; no redisplay + "-s" "json")) + (error "%s" (buffer-substring + (point-min) + (progn (goto-char (point-min)) + (line-end-position))))) + (goto-char (point-min)) + (json-read)))) + cfengine3-fallback-syntax))) + (push (cons cfengine-cf-promises syntax) + cfengine-mode-syntax-cache) + (setq cfengine-mode-syntax-functions-regex + (regexp-opt (mapcar (lambda (def) + (format "%s" (car def))) + (cdr (assq 'functions syntax))) + 'symbols)) + syntax))) (defun cfengine3-documentation-function () "Document CFengine 3 functions around point. @@ -1265,7 +1268,6 @@ Use it by enabling `eldoc-mode'." (defun cfengine3-completion-function () "Return completions for function name around or before point." - (cfengine3-make-syntax-cache) (let* ((bounds (save-excursion (let ((p (point))) (skip-syntax-backward "w_" (point-at-bol)) -- 2.39.5