Subject: bug#52167: closed (29.0.50; [ada-mode] Preserve default value of project-read-file-name-function)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 28 May 2022 11:17:02 +0000

Your bug report

#52167: 29.0.50; [ada-mode] Preserve default value of project-read-file-name-function

which was filed against the emacs, ada-mode package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
52167: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: 29.0.50; [ada-mode] Preserve default value of project-read-file-name-function
From: Stephen Leake <[email-masked]>
To: [email-masked]
Date: Sat, 28 May 2022 04:15:57 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Closed by ada-mode version 7.2.1, uniquify-files version 1.0.4.
-- 
-- Stephe

Subject: 29.0.50; [ada-mode] Preserve default value of project-read-file-name-function
From: Kévin Le Gouguec <[email-masked]>
To: [email-masked]
Date: Sun, 28 Nov 2021 21:39:22 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Package: emacs, ada-mode
X-Debbugs-CC: [email-masked]

Hello,

ada-mode depends on uniquify-files, which ends with this:

> ;;;###autoload
> (setq-default project-read-file-name-function #'uniq-file-read)

This unconditionally changes the prompt for project-find-file at
startup.  I think this is a bit of an overreach: users who install
ada-mode are not necessarily looking for a new project-find-file prompt
for *all* their projects, including those unrelated to Ada.

I'm attaching

- a patch for uniquify-files to remove the above snippet, and add a bit
  of commentary explaining how to opt in to uniq-file-read,

- a patch for ada-mode to explicitly let-bind
  project-read-file-name-function before calling project-find-file,

- two more patches for ada-mode, which I didn't squash with the first
  one because I'm not 100% sure they are desirable: one to make
  ada-find-file support future Emacs versions; another to use
  ada-find-file in ada-mode-menu.

Let me know if this needs more work; thanks for your time.

>From 38a1d0ae71b13b7676ea0ede0a605ff6f23aceed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Le=20Gouguec?= <[email-masked]>
Date: Sat, 27 Nov 2021 23:52:50 +0100
Subject: [PATCH] Preserve default value of project-read-file-name-function

This package can be pulled as a dependency (e.g. of ada-mode),
unbeknownst to the user who might not expect nor desire this setting.

* uniquify-files.el: Do not unconditionally change
project-read-file-name-function; expand commentary to let users know
how to opt in.
---
 uniquify-files.el | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/uniquify-files.el b/uniquify-files.el
index d9430539fe..a314d001fc 100644
--- a/uniquify-files.el
+++ b/uniquify-files.el
@@ -33,6 +33,11 @@
 ;; We accomplish this by preprocessing the list of absolute file names
 ;; to be in that style, in an alist with the original absolute file
 ;; names, and do completion on that alist.
+;;
+;; To use it with `project-find-file', customize
+;; `project-read-file-name-function':
+;;
+;; (setq project-read-file-name-function 'uniq-file-read)
 
 (require 'cl-lib)
 (require 'files)
@@ -317,8 +322,5 @@ done on UNIQIFIED-NAME, PRED is called with ABS-NAME."
                  prompt table predicate hist default)))
     (cdr (assoc found alist))))
 
-;;;###autoload
-(setq-default project-read-file-name-function #'uniq-file-read)
-
 (provide 'uniquify-files)
 ;;; uniquify-files.el ends here
-- 
2.34.0

>From 5ee3ab88fb9c439165a23fad03468c62e2f3ce4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Le=20Gouguec?= <[email-masked]>
Date: Sun, 28 Nov 2021 00:19:20 +0100
Subject: [PATCH 1/3] Explicitly bind project-read-file-name-function

* ada-mode.el (ada-find-file): let-bind
project-read-file-name-function.
* NEWS: announce the change.
---
 NEWS        | 13 +++++++++++++
 ada-mode.el |  9 +++++----
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index fe3e518f11..ff64186a13 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,19 @@ Please send ada-mode bug reports to [email-masked], with
 'ada-mode' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* Ada Mode x.x.x
+xx Xxx xxxx
+
+** Adapt to change in uniquify-files.
+   uniquify-files no longer sets project-read-file-name-function by
+   default.  ada-find-file (C-c C-t) will still use this package's
+   completion style, but project-find-file (C-x p f) will not by
+   default.
+
+   Set project-read-file-name-function to uniq-file-read if you would
+   like to keep using uniquify-files's completion style outside of
+   ada-find-file.
+
 * Ada Mode 7.2.0
 21 Nov 2021
 
diff --git a/ada-mode.el b/ada-mode.el
index a65c7b47da..9997f35c99 100644
--- a/ada-mode.el
+++ b/ada-mode.el
@@ -1462,12 +1462,13 @@ For `wisi-indent-calculate-functions'.
   "Find a file in the current project.
 Prompts with completion, defaults to filename at point."
   (interactive)
-  ;; In emacs 27, we can just call 'project-find-file;
-  ;; project-read-file-name-function handles the uniquify-files alist
-  ;; completion table. In emacs 26, we must do that ourselves.
+  ;; In emacs 27, we can just set project-read-file-name-function to
+  ;; tell 'project-find-file to use the uniquify-files alist
+  ;; completion table.  In emacs 26, we must do that ourselves.
   (cl-ecase emacs-major-version
     (27
-     (project-find-file))
+     (let ((project-read-file-name-function #'uniq-file-read))
+       (project-find-file)))
 
     (26
      (let* ((def (thing-at-point 'filename))
-- 
2.34.0

>From a221c350e7697c6000c1b0030d964501426a1b2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Le=20Gouguec?= <[email-masked]>
Date: Sun, 28 Nov 2021 00:46:48 +0100
Subject: [PATCH 2/3] * ada-mode.el (ada-mode-menu): Prefer ada-find-file

---
 ada-mode.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ada-mode.el b/ada-mode.el
index 9997f35c99..fa2c4a4f7a 100644
--- a/ada-mode.el
+++ b/ada-mode.el
@@ -246,7 +246,7 @@ nil, only the file name."
      )
     ("Navigate"
      ["Other file"                    ada-find-other-file          t]
-     ["Find file in project"          project-find-file            t]
+     ["Find file in project"          ada-find-file                t]
      ["Goto declaration/body"         wisi-goto-spec/body          t]
      ["Goto next statement keyword"   forward-sexp   t]
      ["Goto prev statement keyword"   backward-sexp   t]
-- 
2.34.0

>From b0bd0e796333f80a21c5d73d2cde97d7cf18b095 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Le=20Gouguec?= <[email-masked]>
Date: Sun, 28 Nov 2021 00:48:35 +0100
Subject: [PATCH 3/3] * ada-mode.el (ada-find-file): Support future Emacs
 versions

---
 ada-mode.el | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/ada-mode.el b/ada-mode.el
index fa2c4a4f7a..980fcb081e 100644
--- a/ada-mode.el
+++ b/ada-mode.el
@@ -1465,23 +1465,20 @@ Prompts with completion, defaults to filename at point."
   ;; In emacs 27, we can just set project-read-file-name-function to
   ;; tell 'project-find-file to use the uniquify-files alist
   ;; completion table.  In emacs 26, we must do that ourselves.
-  (cl-ecase emacs-major-version
-    (27
-     (let ((project-read-file-name-function #'uniq-file-read))
-       (project-find-file)))
-
-    (26
-     (let* ((def (thing-at-point 'filename))
-	    (project (project-current))
-	    (all-files (project-files project nil))
-	    (alist (uniq-file-uniquify all-files))
-	    (table (apply-partially #'uniq-file-completion-table alist))
-            (file (project--completing-read-strict
-                   "Find file" table nil nil def)))
-       (if (string= file "")
-           (user-error "You didn't specify the file")
-	 (find-file (cdr (assoc file alist))))))
-    ))
+  (require 'project)
+  (if (boundp 'project-read-file-name-function)
+      (let ((project-read-file-name-function #'uniq-file-read))
+        (project-find-file))
+    (let* ((def (thing-at-point 'filename))
+	   (project (project-current))
+	   (all-files (project-files project nil))
+	   (alist (uniq-file-uniquify all-files))
+	   (table (apply-partially #'uniq-file-completion-table alist))
+           (file (project--completing-read-strict
+                  "Find file" table nil nil def)))
+      (if (string= file "")
+          (user-error "You didn't specify the file")
+	(find-file (cdr (assoc file alist)))))))
 
 ;;;; compatibility with previous ada-mode versions
 
-- 
2.34.0

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.24, cairo version 1.16.0)
 of 2021-11-26 built on hirondell
Repository revision: 11860f89a593a8cfe7efb94e86370bbbe4318fba
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000
System Description: Debian GNU/Linux 11 (bullseye)

Configured using:
 'configure --with-xwidgets --with-cairo --with-gconf --with-xinput2'

Configured features:
ACL CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix