From 2e82f297f6ced1b8161714861a4b1e35fac0376d Mon Sep 17 00:00:00 2001 From: Janfel <33464477+Janfel@users.noreply.github.com> Date: Sun, 19 Jan 2020 02:50:44 +0100 Subject: [PATCH 1/3] Fix #2036: Copy local variables into formatting buffer. Make +format-buffer copy all buffer-local variables from the original buffer into the temporary buffer. When resolving a symbol inside of a formatter, the value it is bound to in the formatted buffer will now be used instead of the default value. Fixes #2036. --- modules/editor/format/autoload/format.el | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/editor/format/autoload/format.el b/modules/editor/format/autoload/format.el index 49345bf5c..77eb0c24c 100644 --- a/modules/editor/format/autoload/format.el +++ b/modules/editor/format/autoload/format.el @@ -131,6 +131,7 @@ See `+format/buffer' for the interactive version of this function, and ;; like `gofmt') widen the buffer, in order to only format a region of ;; text, we must make a copy of the buffer to apply formatting to. (let ((output (buffer-substring-no-properties (point-min) (point-max))) + (origin-buffer (or (buffer-base-buffer) (current-buffer))) (origin-buffer-file-name (buffer-file-name (buffer-base-buffer))) (origin-default-directory default-directory)) (with-temp-buffer @@ -138,8 +139,12 @@ See `+format/buffer' for the interactive version of this function, and (insert output) ;; Ensure this temp buffer _seems_ as much like the origin ;; buffer as possible. - (setq default-directory origin-default-directory - buffer-file-name origin-buffer-file-name) + (cl-loop for (var . val) in (buffer-local-variables origin-buffer) + ;; Making enable-multibyte-characters buffer-local + ;; causes an error. + unless (eq var 'enable-multibyte-characters) + ;; Using setq-local would quote var. + do (set (make-local-variable var) val)) ;; Since we're piping a region of text to the formatter, remove ;; any leading indentation to make it look like a file. (when preserve-indent-p From e34b5decc63158c8d7d54fb545ae446cdf6f262b Mon Sep 17 00:00:00 2001 From: Janfel <33464477+Janfel@users.noreply.github.com> Date: Sun, 19 Jan 2020 03:02:04 +0100 Subject: [PATCH 2/3] Remove unused local bindings Remove the let-clauses binding origin-buffer-file-name and origin-default-directory, as the previous commit renders them obsolete. --- modules/editor/format/autoload/format.el | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/editor/format/autoload/format.el b/modules/editor/format/autoload/format.el index 77eb0c24c..cdfb87c8e 100644 --- a/modules/editor/format/autoload/format.el +++ b/modules/editor/format/autoload/format.el @@ -131,9 +131,7 @@ See `+format/buffer' for the interactive version of this function, and ;; like `gofmt') widen the buffer, in order to only format a region of ;; text, we must make a copy of the buffer to apply formatting to. (let ((output (buffer-substring-no-properties (point-min) (point-max))) - (origin-buffer (or (buffer-base-buffer) (current-buffer))) - (origin-buffer-file-name (buffer-file-name (buffer-base-buffer))) - (origin-default-directory default-directory)) + (origin-buffer (or (buffer-base-buffer) (current-buffer)))) (with-temp-buffer (with-silent-modifications (insert output) From 2fe3268dc26b8f3f2a2874f7171033761c585531 Mon Sep 17 00:00:00 2001 From: Janfel <33464477+Janfel@users.noreply.github.com> Date: Mon, 20 Jan 2020 17:02:37 +0100 Subject: [PATCH 3/3] Fix cl-loop indentation. --- modules/editor/format/autoload/format.el | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/editor/format/autoload/format.el b/modules/editor/format/autoload/format.el index cdfb87c8e..5894a7781 100644 --- a/modules/editor/format/autoload/format.el +++ b/modules/editor/format/autoload/format.el @@ -138,11 +138,11 @@ See `+format/buffer' for the interactive version of this function, and ;; Ensure this temp buffer _seems_ as much like the origin ;; buffer as possible. (cl-loop for (var . val) in (buffer-local-variables origin-buffer) - ;; Making enable-multibyte-characters buffer-local - ;; causes an error. - unless (eq var 'enable-multibyte-characters) - ;; Using setq-local would quote var. - do (set (make-local-variable var) val)) + ;; Making enable-multibyte-characters buffer-local + ;; causes an error. + unless (eq var 'enable-multibyte-characters) + ;; Using setq-local would quote var. + do (set (make-local-variable var) val)) ;; Since we're piping a region of text to the formatter, remove ;; any leading indentation to make it look like a file. (when preserve-indent-p