diff options
| author | Bozhidar Batsov <bozhidar@batsov.dev> | 2026-02-14 22:17:37 +0200 |
|---|---|---|
| committer | Bozhidar Batsov <bozhidar@batsov.dev> | 2026-02-14 22:17:37 +0200 |
| commit | 9ca36353567a020fec42e76ee03cd87fff3034a8 (patch) | |
| tree | b6b21e69e94788a31b78db3ec5c997da0bf1ff16 | |
| parent | 446886481850d8cfa3fc09b7fbcc7f3cbdc967e8 (diff) | |
Add compat dependency and adopt modern Emacs APIs
Add (compat "30") as a dependency, which backports newer Emacs
functions to older versions with zero overhead on modern Emacs.
Changes enabled by compat:
- Use string-replace instead of replace-regexp-in-string for literal
replacements (resolves TODO in projectile-complementary-dir)
Also simplified version-conditional code now safe with Emacs 27.1+:
- Remove redundant fboundp check for xref-references-in-directory
- Remove redundant fboundp check for xref-find-definitions
- Simplify auto tags backend to prefer ggtags then xref
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | projectile.el | 17 |
2 files changed, 7 insertions, 11 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cf63dc..ebd7346 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ ### Changes * **[Breaking]** Bump minimum required Emacs version from 26.1 to 27.1. This removes ~30 lines of compatibility code (fileloop fallback, `time-convert` fallback, `projectile-flatten` shim) and fixes the `tags-query-replace` FIXME in `projectile-replace-regexp`. +* Add `compat` as a dependency, enabling the use of modern Emacs APIs (e.g. `string-replace`) on older Emacs versions. * [#1958](https://github.com/bbatsov/projectile/issues/1958): Exclude `.projectile-cache.eld` from search results (ripgrep/ag/grep) by default. * [#1957](https://github.com/bbatsov/projectile/pull/1957): Add `:caller` information to calls to `ivy-read` (used by packages like `ivy-rich`). * [#1947](https://github.com/bbatsov/projectile/issues/1947): `projectile-project-name` should be marked as safe. diff --git a/projectile.el b/projectile.el index 8f22443..db6bdbb 100644 --- a/projectile.el +++ b/projectile.el @@ -6,7 +6,7 @@ ;; URL: https://github.com/bbatsov/projectile ;; Keywords: project, convenience ;; Version: 2.9.1 -;; Package-Requires: ((emacs "27.1")) +;; Package-Requires: ((emacs "27.1") (compat "30")) ;; This file is NOT part of GNU Emacs. @@ -36,6 +36,7 @@ ;;; Code: (require 'cl-lib) +(require 'compat) (require 'thingatpt) (require 'ibuffer) (require 'ibuf-ext) @@ -3983,8 +3984,7 @@ Replace STRING in DIR-PATH with REPLACEMENT." (let* ((project-root (projectile-project-root)) (relative-dir (file-name-directory (file-relative-name dir-path project-root)))) (projectile-expand-root - ;; TODO: Use string-replace once we target emacs 28 - (replace-regexp-in-string string replacement relative-dir t)))) + (string-replace string replacement relative-dir)))) (defun projectile--create-directories-for (path) "Create directories necessary for PATH." @@ -4572,8 +4572,7 @@ installed to work." A thin wrapper around `xref-references-in-directory'." (interactive) - (when (and (fboundp 'xref-references-in-directory) - (fboundp 'xref--show-xrefs)) + (when (fboundp 'xref--show-xrefs) (let ((project-root (projectile-acquire-root)) (symbol (or symbol (read-from-minibuffer "Lookup in project: " (projectile-symbol-at-point))))) (xref--show-xrefs (xref-references-in-directory symbol project-root) nil)))) @@ -4632,13 +4631,9 @@ A thin wrapper around `xref-references-in-directory'." (cond ((fboundp 'ggtags-find-tag-dwim) 'ggtags-find-tag-dwim) - ((fboundp 'xref-find-definitions) - 'xref-find-definitions) - ((fboundp 'etags-select-find-tag) - 'etags-select-find-tag))) + (t 'xref-find-definitions))) ((eq projectile-tags-backend 'xref) - (when (fboundp 'xref-find-definitions) - 'xref-find-definitions)) + 'xref-find-definitions) ((eq projectile-tags-backend 'ggtags) (when (fboundp 'ggtags-find-tag-dwim) 'ggtags-find-tag-dwim)) |
