Fix pretty-printing of multiple JSON objects

* lisp/json.el (json-pretty-print-max-secs): Make obsolete.
(json-pretty-print): Pretty-print all JSON objects in the region
instead of just the first one (and then deleting all other
objects) (bug#34160).
This commit is contained in:
Lars Ingebrigtsen 2019-07-09 20:40:23 +02:00
parent 1e4e165eaf
commit 48daf77a9d

View file

@ -758,10 +758,8 @@ With prefix argument MINIMIZE, minimize it instead."
(json-pretty-print (point-min) (point-max) minimize))
(defvar json-pretty-print-max-secs 2.0
"Maximum time for `json-pretty-print's comparison.
The function `json-pretty-print' uses `replace-region-contents'
(which see) passing the value of this variable as argument
MAX-SECS.")
"Maximum time for `json-pretty-print's comparison.")
(make-obsolete-variable json-pretty-print-max-secs nil "27.1")
(defun json-pretty-print (begin end &optional minimize)
"Pretty-print selected region.
@ -771,14 +769,17 @@ With prefix argument MINIMIZE, minimize it instead."
;; Distinguish an empty objects from 'null'
(json-null :json-null)
;; Ensure that ordering is maintained
(json-object-type 'alist))
(replace-region-contents
begin end
(lambda () (json-encode (json-read)))
json-pretty-print-max-secs
;; FIXME: What's a good value here? Can we use something better,
;; e.g., by deriving a value from the size of the region?
64)))
(json-object-type 'alist)
json)
(save-restriction
(narrow-to-region begin end)
(goto-char begin)
(while (setq json (condition-case _
(json-read)
(json-error nil)))
(delete-region begin (point))
(insert (json-encode json))
(setq begin (point))))))
(defun json-pretty-print-buffer-ordered (&optional minimize)
"Pretty-print current buffer with object keys ordered.