Subject: [PATCH] Use lexical binding for ediff
From: Alex Branham <[email-masked]>
To: [email-masked]
Date: Wed, 24 Apr 2019 07:55:20 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello -

I've attached a patch that converts ediff to use lexical-binding. I've
been using it locally for a couple of weeks without noticing any issues,
though I'm not a super-heavy ediff user.

Thanks,
Alex

From 32d559ec60813eca85e88f77b89781c3d8b8dc26 Mon Sep 17 00:00:00 2001
From: Alex Branham <[email-masked]>
Date: Wed, 10 Apr 2019 20:37:51 -0500
Subject: [PATCH] Use lexical binding for ediff

* lisp/vc/ediff-diff.el:
* lisp/vc/ediff-help.el:
* lisp/vc/ediff-hook.el:
* lisp/vc/ediff-init.el:
* lisp/vc/ediff-merg.el:
* lisp/vc/ediff-vers.el:
* lisp/vc/ediff-wind.el:
* lisp/vc/ediff-mult.el: Use lexical binding.
(ediff-get-directory-files-under-revision): Remove unused jobname argument.
(ediff-prepare-meta-buffer): Remove unused startup-hooks
(ediff-mark-session-for-hiding): Reindent, remove unused lexical variable.
* lisp/vc/ediff-ptch.el: Use lexical binding.
(ediff-multi-patch-internal): Remove unused variable startup-hooks.
* lisp/vc/ediff.el: Use lexical binding.
(ediff-version): Increase.
(ediff-date): Remove.
(ediff-directories-internal):
(ediff-directory-revisions-internal): Account for changes to function
arguments.
---
 lisp/vc/ediff-diff.el |  2 +-
 lisp/vc/ediff-help.el |  3 ++-
 lisp/vc/ediff-hook.el |  2 +-
 lisp/vc/ediff-init.el |  2 +-
 lisp/vc/ediff-merg.el |  2 +-
 lisp/vc/ediff-mult.el | 26 ++++++++++++--------------
 lisp/vc/ediff-ptch.el |  5 ++---
 lisp/vc/ediff-vers.el |  2 +-
 lisp/vc/ediff-wind.el |  2 +-
 lisp/vc/ediff.el      | 19 +++++++------------
 10 files changed, 29 insertions(+), 36 deletions(-)

diff --git a/lisp/vc/ediff-diff.el b/lisp/vc/ediff-diff.el
index a1d27af79d..f6b68bbd7d 100644
--- a/lisp/vc/ediff-diff.el
+++ b/lisp/vc/ediff-diff.el
@@ -1,4 +1,4 @@
-;;; ediff-diff.el --- diff-related utilities
+;;; ediff-diff.el --- diff-related utilities  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff-help.el b/lisp/vc/ediff-help.el
index 11c8b35bca..74a4068a7f 100644
--- a/lisp/vc/ediff-help.el
+++ b/lisp/vc/ediff-help.el
@@ -1,4 +1,4 @@
-;;; ediff-help.el --- Code related to the contents of Ediff help buffers
+;;; ediff-help.el --- Code related to the contents of Ediff help buffers  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1996-2019 Free Software Foundation, Inc.
 
@@ -30,6 +30,7 @@
 ;; end pacifier
 
 (require 'ediff-init)
+(defvar ediff-multiframe)
 
 ;; Help messages
 
diff --git a/lisp/vc/ediff-hook.el b/lisp/vc/ediff-hook.el
index 84122150ad..6ece7af5e6 100644
--- a/lisp/vc/ediff-hook.el
+++ b/lisp/vc/ediff-hook.el
@@ -1,4 +1,4 @@
-;;; ediff-hook.el --- setup for Ediff's menus and autoloads
+;;; ediff-hook.el --- setup for Ediff's menus and autoloads  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1995-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff-init.el b/lisp/vc/ediff-init.el
index a74d6a8b4d..41871d4b7c 100644
--- a/lisp/vc/ediff-init.el
+++ b/lisp/vc/ediff-init.el
@@ -1,4 +1,4 @@
-;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff
+;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff-merg.el b/lisp/vc/ediff-merg.el
index a511f4488f..e08d899bd0 100644
--- a/lisp/vc/ediff-merg.el
+++ b/lisp/vc/ediff-merg.el
@@ -1,4 +1,4 @@
-;;; ediff-merg.el --- merging utilities
+;;; ediff-merg.el --- merging utilities  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff-mult.el b/lisp/vc/ediff-mult.el
index 21f89168b3..39ed275897 100644
--- a/lisp/vc/ediff-mult.el
+++ b/lisp/vc/ediff-mult.el
@@ -1,4 +1,4 @@
-;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
+;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1995-2019 Free Software Foundation, Inc.
 
@@ -714,9 +714,8 @@ behavior."
 ;; we may visit them recursively.  DIR1 is the directory to inspect.
 ;; MERGE-AUTOSTORE-DIR is the directory where to auto-store the results of
 ;; merges.  Can be nil.
-(defun ediff-get-directory-files-under-revision (jobname
-						 regexp dir1
-						 &optional merge-autostore-dir)
+(defun ediff-get-directory-files-under-revision (regexp dir1
+						        &optional merge-autostore-dir)
   (let (lis1 elt common auxdir1)
     (setq auxdir1 (file-name-as-directory dir1)
 	  lis1	  (directory-files auxdir1 nil regexp))
@@ -760,7 +759,7 @@ behavior."
 				      auxdir1 nil nil
 				      merge-autostore-dir nil)
      (mapcar (lambda (elt) (ediff-make-new-meta-list-element
-			    (expand-file-name (concat auxdir1 elt)) nil nil))
+		       (expand-file-name (concat auxdir1 elt)) nil nil))
 	     common))
     ))
 
@@ -798,8 +797,8 @@ behavior."
 ;; Prepare meta-buffer in accordance with the argument-function and
 ;; redraw-function.  Must return the created  meta-buffer.
 (defun ediff-prepare-meta-buffer (action-func meta-list
-				  meta-buffer-name redraw-function
-				  jobname &optional startup-hooks)
+				              meta-buffer-name redraw-function
+				              jobname)
   (let* ((meta-buffer-name
 	  (ediff-unique-buffer-name meta-buffer-name "*"))
 	 (meta-buffer (get-buffer-create meta-buffer-name)))
@@ -869,27 +868,27 @@ behavior."
 	    (define-key ediff-meta-buffer-map
 	      [menu-bar ediff-meta-mode ediff-hide-marked-sessions]
 	      '(menu-item "Hide marked" ediff-hide-marked-sessions
-		  :help "Hide marked sessions.  With prefix arg, unhide"))
+		          :help "Hide marked sessions.  With prefix arg, unhide"))
 
 	    (define-key ediff-meta-buffer-map
 	      [menu-bar ediff-meta-mode ediff-mark-for-hiding-at-pos]
 	      '(menu-item "Mark for hiding" ediff-mark-for-hiding-at-pos
-		  :help "Mark session for hiding.  With prefix arg, unmark"))
+		          :help "Mark session for hiding.  With prefix arg, unmark"))
 
 	    (define-key ediff-meta-buffer-map
 	      [menu-bar ediff-meta-mode ediff-mark-for-operation-at-pos]
 	      '(menu-item "Mark for group operation" ediff-mark-for-operation-at-pos
-		  :help "Mark session for a group operation.  With prefix arg, unmark"))
+		          :help "Mark session for a group operation.  With prefix arg, unmark"))
 
 	    (define-key ediff-meta-buffer-map
 	      [menu-bar ediff-meta-mode ediff-unmark-all-for-hiding]
 	      '(menu-item "Unmark all for hiding" ediff-unmark-all-for-hiding
-		  :help "Unmark all sessions marked for hiding"))
+		          :help "Unmark all sessions marked for hiding"))
 
 	    (define-key ediff-meta-buffer-map
 	      [menu-bar ediff-meta-mode ediff-unmark-all-for-operation]
 	      '(menu-item "Unmark all for group operation" ediff-unmark-all-for-operation
-		  :help "Unmark all sessions marked for operation"))
+		          :help "Unmark all sessions marked for operation"))
 
 	    (cond ((ediff-collect-diffs-metajob jobname)
 		   (define-key ediff-meta-buffer-map
@@ -1583,8 +1582,7 @@ Useful commands:
 
 ;; Returns whether session was marked or unmarked
 (defun ediff-mark-session-for-hiding (info unmark)
-  (let ((session-buf (ediff-get-session-buffer info))
-	ignore)
+  (let (ignore)
     (cond ((eq unmark 'mark) (setq unmark nil))
 	  ((eq (ediff-get-session-status info) ?H) (setq unmark t))
 	  (unmark  ; says unmark, but the marker is different from H
diff --git a/lisp/vc/ediff-ptch.el b/lisp/vc/ediff-ptch.el
index 4178b5a8c0..21a4d575f4 100644
--- a/lisp/vc/ediff-ptch.el
+++ b/lisp/vc/ediff-ptch.el
@@ -1,4 +1,4 @@
-;;; ediff-ptch.el --- Ediff's  patch support
+;;; ediff-ptch.el --- Ediff's  patch support  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1996-2019 Free Software Foundation, Inc.
 
@@ -842,8 +842,7 @@ you can still examine the changes via M-x ediff-files"
 			    ediff-patch-map))
 		    "*Ediff Session Group Panel"
 		    'ediff-redraw-directory-group-buffer
-		    'ediff-multifile-patch
-		    startup-hooks))
+		    'ediff-multifile-patch))
     (ediff-show-meta-buffer meta-buf)
     ))
 
diff --git a/lisp/vc/ediff-vers.el b/lisp/vc/ediff-vers.el
index 664ae5ae94..049fdc880b 100644
--- a/lisp/vc/ediff-vers.el
+++ b/lisp/vc/ediff-vers.el
@@ -1,4 +1,4 @@
-;;; ediff-vers.el --- version control interface to Ediff
+;;; ediff-vers.el --- version control interface to Ediff  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1995-1997, 2001-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff-wind.el b/lisp/vc/ediff-wind.el
index 492ddd3417..559a20b023 100644
--- a/lisp/vc/ediff-wind.el
+++ b/lisp/vc/ediff-wind.el
@@ -1,4 +1,4 @@
-;;; ediff-wind.el --- window manipulation utilities
+;;; ediff-wind.el --- window manipulation utilities  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994-1997, 2000-2019 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/ediff.el b/lisp/vc/ediff.el
index 0dfbe2ea66..bfb09246a1 100644
--- a/lisp/vc/ediff.el
+++ b/lisp/vc/ediff.el
@@ -1,21 +1,18 @@
-;;; ediff.el --- a comprehensive visual interface to diff & patch
+;;; ediff.el --- a comprehensive visual interface to diff & patch  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994-2019 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <[email-masked]>
 ;; Created: February 2, 1994
 ;; Keywords: comparing, merging, patching, vc, tools, unix
-;; Version: 2.81.4
+;; Version: 2.81.6
+(defconst ediff-version "2.81.6" "The current version of Ediff")
 
 ;; Yoni Rabkin <[email-masked]> contacted the maintainer of this
 ;; file on 20/3/2008, and the maintainer agreed that when a bug is
 ;; filed in the Emacs bug reporting system against this file, a copy
 ;; of the bug report be sent to the maintainer's email address.
 
-(defconst ediff-version "2.81.5" "The current version of Ediff")
-(defconst ediff-date "July 4, 2013" "Date of last update")
-
-
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software: you can redistribute it and/or modify
@@ -862,8 +859,7 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
 		    (car dir-diff-struct)
 		    "*Ediff Session Group Panel"
 		    'ediff-redraw-directory-group-buffer
-		    jobname
-		    startup-hooks))
+		    jobname))
     (ediff-show-meta-buffer meta-buf)
     ))
 
@@ -899,7 +895,7 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
 
     (setq file-list
 	  (ediff-get-directory-files-under-revision
-	   jobname regexp dir1 merge-autostore-dir))
+	   regexp dir1 merge-autostore-dir))
     (setq startup-hooks
 	  ;; this sets various vars in the meta buffer inside
 	  ;; ediff-prepare-meta-buffer
@@ -912,8 +908,7 @@ MERGE-AUTOSTORE-DIR is the directory in which to store merged files."
 		    file-list
 		    "*Ediff Session Group Panel"
 		    'ediff-redraw-directory-group-buffer
-		    jobname
-		    startup-hooks))
+		    jobname))
     (ediff-show-meta-buffer meta-buf)
     ))
 
@@ -1546,7 +1541,7 @@ When called interactively, displays the version."
           (interactive-p)
         (called-interactively-p 'interactive))
       (message "%s" (ediff-version))
-    (format "Ediff %s of %s" ediff-version ediff-date)))
+    (format "Ediff %s" ediff-version)))
 
 ;; info is run first, and will autoload info.el.
 (declare-function Info-goto-node "info" (nodename &optional fork strict-case))
-- 
2.21.0