Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error with completion "ivy--shorter-matches-first: Wrong number of arguments: #<subr sort>, 3" #3052

Closed
martinfowler opened this issue Aug 14, 2024 · 10 comments
Labels
compat Issues relating to backward/forward compatibility regression

Comments

@martinfowler
Copy link

After a recent upgrade of my packages, I started getting the following error when using completion-at-point

ivy--shorter-matches-first: Wrong number of arguments: #<subr sort>, 3

Digging into this, I saw commit 5b8436e had modified ivy--shorter-matches-first to use a new version of the built-in sort function that's available in Emacs 30. I'm running emacs 29.4 on MacOS.

Digging a bit further I found issue 3038 which describes using conditional compilation using static-if allowing a polyfill to run on older versions of Emacs such as mine.

But for some reason it's not working on my machine. I download packages using use-package and upgraded via list-packages. I'm running ivy version 20240524.1139.

@basil-conto
Copy link
Collaborator

What does typing M-: (list (fboundp 'static-if) (fboundp 'value<)) RET yield on your end?

And would you mind including here the information gathered by M-x report-emacs-bug RET?

Thanks.

@Kyrremann
Copy link

Kyrremann commented Aug 15, 2024

I have the same problem, and have had it for at least a month, but finally now sat down to try to figure it out. It's (only) when I try to complete something in shell. It works if I add more letters, usually more than three. The error pops up, and then remove my input.

M-: (list (fboundp 'static-if) (fboundp 'value<)) RET returns (t t).

My report

In GNU Emacs 29.4 (build 1, aarch64-apple-darwin23.5.0, NS appkit-2487.60 Version 14.5 (Build 23F79)) of 2024-06-30 built on Kyrres-MacBook-Pro.local Windowing system distributor 'Apple', version 10.3.2487 System Description: macOS 14.6.1

Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
--infodir=/opt/homebrew/Cellar/emacs-plus@29/29.4/share/info/emacs
--prefix=/opt/homebrew/Cellar/emacs-plus@29/29.4 --with-xml2
--with-gnutls --without-compress-install --without-dbus
--without-imagemagick --with-modules --with-rsvg --with-ns
--disable-ns-self-contained 'CFLAGS=-Os -w -pipe
-mmacosx-version-min=14
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk
-DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT'
'CPPFLAGS=-I/opt/homebrew/opt/icu4c/include
-I/opt/homebrew/opt/sqlite/include -I/opt/homebrew/opt/readline/include
-isystem/opt/homebrew/include -F/opt/homebrew/Frameworks
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk'
'LDFLAGS=-L/opt/homebrew/opt/icu4c/lib -L/opt/homebrew/opt/sqlite/lib
-L/opt/homebrew/opt/readline/lib -L/opt/homebrew/lib
-F/opt/homebrew/Frameworks -Wl,-headerpad_max_install_names
-isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk''

Configured features:
ACL GIF GLIB GMP GNUTLS JPEG JSON LCMS2 LIBXML2 MODULES NOTIFY KQUEUE NS
PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP XIM ZLIB

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

Major mode: Messages

Minor modes in effect:
recentf-mode: t
all-the-icons-ivy-rich-mode: t
counsel-mode: t
ivy-rich-mode: t
ivy-mode: t
marginalia-mode: t
which-key-mode: t
global-company-mode: t
company-mode: t
pyvenv-mode: t
override-global-mode: t
magit-todos-mode: t
global-git-commit-mode: t
magit-auto-revert-mode: t
coterm-mode: t
shell-dirtrack-mode: t
kubectx-mode: t
savehist-mode: t
save-place-mode: t
persistent-scratch-autosave-mode: t
global-undo-tree-mode: t
undo-tree-mode: t
global-diff-hl-mode: t
global-auto-revert-mode: t
display-time-mode: t
el-patch-use-package-mode: t
tooltip-mode: t
global-eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
buffer-read-only: t
column-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t

Load-path shadows:
/Users/kyrremann/.emacs.d/elpa/transient-20240805.1231/transient hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/transient
/Users/kyrremann/.emacs.d/elpa/jsonrpc-1.0.25/jsonrpc hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/jsonrpc
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-jump hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-jump
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-diminish hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-diminish
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-delight hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-delight
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-lint hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-lint
/Users/kyrremann/.emacs.d/elpa/bind-key-20230203.2004/bind-key hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/bind-key
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-core hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-core
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-ensure hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-ensure
/Users/kyrremann/.emacs.d/elpa/use-package-20230426.2324/use-package-bind-key hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/use-package/use-package-bind-key
/Users/kyrremann/.emacs.d/elpa/eglot-1.17/eglot hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/progmodes/eglot
/Users/kyrremann/.emacs.d/elpa/eldoc-1.15.0/eldoc hides /opt/homebrew/Cellar/emacs-plus@29/29.4/share/emacs/29.4/lisp/emacs-lisp/eldoc

Features:
(shadow sort display-line-numbers flyspell ispell mail-extr emacsbug
recentf tree-widget magit-bookmark bookmark ace-window avy
bash-completion xterm-color all-the-icons-ivy-rich counsel xdg swiper
ivy-rich ivy delsel ivy-faces ivy-overlay colir company-oddmuse
company-keywords company-etags company-gtags company-dabbrev-code
company-dabbrev company-files company-clang company-cmake
company-semantic company-template company-bbdb tramp tramp-loaddefs
trampver tramp-integration tramp-compat marginalia which-key go-mode
find-file ffap copilot-chat copilot-chat-copilot flycheck find-func
py-autopep8 yasnippet-snippets yasnippet highlight-indentation
flymake-proc flymake warnings company-capf company elpy elpy-rpc pyvenv
eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module
esh-groups esh-util elpy-shell elpy-profile elpy-django elpy-refactor
python treesit ido hideshow files-x etags fileloop generator xref
project cus-edit pp epa-file use-package-bind-key bind-key magit-todos
pcre2el rxt advice re-builder hl-todo f s async grep compile forge-repos
forge-tablist hl-line forge-topics forge-commands forge-semi
forge-bitbucket buck forge-gogs gogs forge-gitea gtea forge-gitlab glab
forge-github ghub-graphql treepy gsexp ghub url-http url-gw nsm url-auth
let-alist gnutls forge-notify forge-revnote forge-pullreq forge-issue
forge-topic yaml parse-time iso8601 eieio-custom wid-edit bug-reference
forge-post markdown-mode rx color thingatpt noutline outline icons
forge-repo forge forge-core forge-db closql emacsql-sqlite-common
emacsql emacsql-compiler eieio-base magit-submodule magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes
magit-worktree magit-tag magit-merge magit-branch magit-reset
magit-files magit-refs magit-status magit magit-repos magit-apply
magit-wip magit-log which-func imenu magit-diff smerge-mode git-commit
log-edit message sendmail yank-media puny dired dired-loaddefs rfc822
mml mml-sec epa derived epg rfc6068 epg-config gnus-util
text-property-search time-date mailabbrev mail-utils gmm-utils
mailheader add-log magit-core magit-autorevert magit-margin
magit-transient magit-process with-editor server magit-mode transient
edmacro kmacro benchmark magit-git magit-base magit-section format-spec
cursor-sensor crm coterm compat compat-30 term disp-table shell
pcomplete ehelp comint ansi-osc ansi-color ring exec-path-from-shell
midnight use-package-ensure diary-lib diary-loaddefs cal-menu calendar
cal-loaddefs auto-package-update dash kubectx-mode all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons modus-vivendi-theme
modus-themes savehist saveplace persistent-scratch undo-tree diff queue
diff-hl log-view pcvs-util vc-dir ewoc vc vc-dispatcher diff-mode
easy-mmode autorevert filenotify elec-pair time desktop frameset
cus-load quelpa-use-package cl-extra use-package-core quelpa mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util
ietf-drums mail-prsvr lisp-mnt help-fns radix-tree help-mode finder-inf
all-the-icons-ivy-autoloads all-the-icons-ivy-rich-autoloads
all-the-icons-autoloads auto-package-update-autoloads
bash-completion-autoloads breadcrumb-autoloads cargo-mode-autoloads
company-jedi-autoloads company-lua-autoloads copilot-chat-autoloads
coterm-autoloads counsel-autoloads diff-hl-autoloads
dired-single-autoloads dockerfile-mode-autoloads editorconfig-autoloads
eglot-autoloads eldoc-autoloads elpy-autoloads company-autoloads
emojify-autoloads enh-ruby-mode-autoloads exec-path-from-shell-autoloads
flycheck-hl-todo-autoloads flycheck-rust-autoloads flycheck-autoloads
flymake-lua-autoloads forge-autoloads closql-autoloads emacsql-autoloads
ghub-autoloads go-autoloads gotest-autoloads groovy-mode-autoloads
highlight-indent-guides-autoloads highlight-indentation-autoloads
inf-ruby-autoloads ivy-rich-autoloads jedi-autoloads
auto-complete-autoloads jedi-core-autoloads epc-autoloads
ctable-autoloads concurrent-autoloads jsonrpc-autoloads
kotlin-mode-autoloads kotlin-ts-mode-autoloads kubel-autoloads
lin-autoloads link-hint-autoloads lua-mode-autoloads
magit-file-icons-autoloads el-patch-autoloads el-patch el-patch-stub
magit-todos-autoloads magit-autoloads pcase magit-section-autoloads
git-commit-autoloads hl-todo-autoloads f-autoloads async-autoloads
marginalia-autoloads markdown-mode-autoloads monokai-theme-autoloads
move-text-autoloads nerd-icons-autoloads nginx-mode-autoloads
pcre2el-autoloads popup-autoloads py-autopep8-autoloads pytest-autoloads
python-environment-autoloads deferred-autoloads pyvenv-autoloads
quelpa-use-package-autoloads rainbow-mode-autoloads rubocopfmt-autoloads
rust-mode-autoloads swiper-autoloads ivy-autoloads
terraform-doc-autoloads promise-autoloads request-autoloads
terraform-mode-autoloads dash-autoloads hcl-mode-autoloads
toml-autoloads transient-autoloads treepy-autoloads
treesit-auto-autoloads which-key-autoloads with-editor-autoloads info
compat-autoloads yaml-autoloads yaml-mode-autoloads
yasnippet-snippets-autoloads yasnippet-autoloads package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns lcms2
multi-tty make-network-process emacs)

Memory information:
((conses 16 786969 51622)
(symbols 48 43503 0)
(strings 32 209023 7481)
(string-bytes 1 5969765)
(vectors 16 79841)
(vector-slots 8 1045223 56852)
(floats 8 942 587)
(intervals 56 34710 0)
(buffers 984 16))

@basil-conto
Copy link
Collaborator

basil-conto commented Aug 17, 2024

Thanks.

It's (only) when I try to complete something in shell. It works if I add more letters, usually more than three. The error pops up, and then remove my input.

The shell completion SNAFU sounds rather like #1755 and #3051, so I wonder if the symptoms are just incidental here.

M-: (list (fboundp 'static-if) (fboundp 'value<)) RET returns (t t).

This is a bit odd, since both static-if and value< (as part of the new sort calling convention) are new in Emacs 30.

So I wonder if these definitions are actually polyfills provided by...

Features: ([...] compat compat-30 [...])

...the compat package:

But then I'm confused, because I thought the same package also polyfills the new arity of sort:

I'll try to have a poke around soon, but in the meantime any extra info you come up with will be helpful.

@basil-conto
Copy link
Collaborator

I'll try to have a poke around soon, but in the meantime any extra info you come up with will be helpful.

For example, where does C-h f (describe-function) say that static-if, value<, and sort are defined?

@appleby
Copy link

appleby commented Aug 17, 2024

I have the same issue. In my case, various magit-related packages that I use (magit, forge, ghub, git-modes, etc) pull in a dependency called compat that does indeed define value< and the new sort. However, the compat def for sort specifies :extended t, which apparently means it does not override the original symbol, and must be called with compat-call.

(sort (list 3 2 1) #'<)
(1 2 3)

(compat-call sort (list 3 2 1) :lessp #'value<)
(1 2 3)

I assume compat is loaded before ivy in my config, so in ivy--shorter-matches-first, (fboundp 'value<) is statically t, but sort is still the Emacs 29 version.

(documentation 'sort)
"Sort SEQ, stably, comparing elements using PREDICATE.
Returns the sorted sequence.  SEQ should be a list or vector.  SEQ is
modified by side effects.  PREDICATE is called with two elements of
SEQ, and should return non-nil if the first element should sort before
the second.

(fn SEQ PREDICATE)"
(documentation 'compat--sort)
"[Compatibility function for ‘sort’, defined in Emacs 30.0.50. See (compat) Emacs
30.0.50’ for more details.]

Sort function with support for keyword arguments.  The following arguments are
defined:

:key FUNC -- FUNC is a function that takes a single element from SEQ and returns
  the key value to be used in comparison.  If absent or nil, ‘identity’ is used.

:lessp FUNC -- FUNC is a function that takes two arguments and returns non-nil
  if the first element should come before the second.  If absent or nil,
  ‘value<’ is used.

:reverse BOOL -- if BOOL is non-nil, the sorting order implied by FUNC is
  reversed.  This does not affect stability: equal elements still retain their
  order in the input sequence.

:in-place BOOL -- if BOOL is non-nil, SEQ is sorted in-place and returned.
  Otherwise, a sorted copy of SEQ is returned and SEQ remains unmodified; this
  is the default.

For compatibility, the calling convention (sort SEQ LESSP) can also be used; in
this case, sorting is always done in-place.

(fn SEQ &optional LESSP &rest REST)"

@Kyrremann
Copy link

You probably got your answer above, but I'll post info from my instance too.

static-if

static-if is a Lisp macro in ‘compat-30.el’.

(static-if CONDITION THEN-FORM &rest ELSE-FORMS)

[Compatibility macro for ‘static-if’, defined in Emacs 30.0.50. See (compat)
Emacs 30.0.50’ for more details.]

value<

value< is a byte-compiled Lisp function in ‘compat-30.el’.

(value< A B)

[Compatibility function for ‘value<’, defined in Emacs 30.0.50. See (compat)
Emacs 30.0.50’ for more details.]

sort

sort is a built-in function in ‘C source code’.

(sort SEQ PREDICATE)

Sort SEQ, stably, comparing elements using PREDICATE.
Returns the sorted sequence.  SEQ should be a list or vector.  SEQ is
modified by side effects.  PREDICATE is called with two elements of
SEQ, and should return non-nil if the first element should sort before
the second.

  Probably introduced at or before Emacs version 25.1.

@martinfowler
Copy link
Author

Sorry I didn't come back to this. Here's some more information

emacs-report-bug

In GNU Emacs 29.4 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60
 Version 10.14.6 (Build 18G9323)) of 2024-07-24 built on
 builder10-14.lan
Windowing system distributor 'Apple', version 10.3.2487
System Description:  macOS 14.6.1

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

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

Major mode: ELisp/d

Minor modes in effect:
  recentf-mode: t
  repeat-mode: t
  company-quickhelp-mode: t
  company-quickhelp-local-mode: t
  counsel-mode: t
  ivy-mode: t
  delete-selection-mode: t
  csv-field-index-mode: t
  whole-line-or-region-global-mode: t
  whole-line-or-region-local-mode: t
  which-key-mode: t
  shell-dirtrack-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  volatile-highlights-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  abbrev-mode: t

Load-path shadows:
/Users/martin/active/tools/emacs/custom hides /Applications/Emacs.app/Contents/Resources/lisp/custom
/Users/martin/.emacs.d/elpa/transient-20240805.1231/transient hides /Applications/Emacs.app/Contents/Resources/lisp/transient
/Users/martin/.emacs.d/elpa/hierarchy-20190425.842/hierarchy hides /Applications/Emacs.app/Contents/Resources/lisp/emacs-lisp/hierarchy

Features:
(shadow mail-extr emacsbug ffap flyspell ispell rng-xsd xsd-regexp
rng-cmpct nxml-mode-expansions rng-nxml rng-valid nxml-mode nxml-outln
nxml-rap tramp-sh recentf tree-widget bookmark persistent-soft
list-utils pcache eieio-base cl font-utils repeat two-column cua-base
misc image-file image-converter oc-basic ol-eww ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime
gnutls dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus dbus
gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int
gnus-range message sendmail yank-media rfc822 mml mml-sec epa epg
rfc6068 epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils
mailheader gnus-win ol-docview doc-view jka-compr image-mode exif
ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi face-remap
move-lines misc-functions xmlunicode mfcom-snips mf-treesitter
isolate-kill-ring mf-org ob-ruby ob-shell ox-pandoc ox-org ox-odt
rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse
nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda
ox-html table ox-ascii ox-publish ox org-autolist
the-org-mode-expansions org-element org-persist org-id org-refile
avl-tree org org-macro org-pcomplete org-list org-footnote org-faces
org-entities ob-js ob-sqlite ob-sql ob-python
python-el-fgallina-expansions python ob ob-tangle org-src ob-ref ob-lob
ob-table ob-exp ob-comint ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu
calendar cal-loaddefs org-version org-compat org-macs mf-R mf-css mf-js
flymake-json flymake-easy mf-ruby rubocop mf-ibuffer email-snips mfcom
derived mf-nxml html5-schema mf-markdown special-chars emojify apropos
tar-mode arc-mode archive-mode ht unicode-fonts smart-quotes mf-company
company-quickhelp pos-tip company mf-ivy ivy-hydra counsel swiper ivy
delsel ivy-faces ivy-overlay colir mf-dired dired-collapse dired-rainbow
dired-open dired-filter f dired-hacks-utils dired-aux dired-x dired
dired-loaddefs cc-isearch-menu mf-packages ztree ztree-diff
ztree-diff-model ztree-dir ztree-view ztree-protocol ztree-util focus
ess ess-utils ess-custom git-timemachine vc-git diff-mode vc-dispatcher
wgrep grep ggtags yaml-mode-expansions yaml-mode let-alist
multiple-cursors mc-separate-operations rectangular-region-mode
mc-mark-pop mc-edit-lines mc-hide-unmatched-lines-mode mc-mark-more
mc-cycle-cursors multiple-cursors-core inf-ruby haml-mode
js-mode-expansions js c-ts-common cc-mode-expansions cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
css-mode-expansions css-mode treesit html-mode-expansions sgml-mode
facemenu eww xdg url-queue shr pixel-fill kinsoku url-file svg xml dom
mm-url gnus nnheader gnus-util mail-utils range wid-edit
ruby-mode-expansions ruby-mode smie fill-column-indicator csv-mode sort
spinner git-gutter casual casual-symbolic casual-variables
casual-calc-algebra calcalg3 casual-financial casual-stack calc-undo
calc-yank casual-trail casual-graphics casual-fileio calc-vec
casual-vector casual-predicates casual-units casual-trigonometric
casual-time casual-settings casual-angle-measure casual-rounding
casual-random calc-comb casual-logarithmic casual-conversion
casual-complex casual-binary casual-radix casual-labels casual-version
casual-calc transient compat compat-30 calc-math calc-ext calc
calc-loaddefs rect calc-macs whole-line-or-region eglot
external-completion array filenotify jsonrpc ert pp ewoc debug backtrace
flymake-proc flymake compile text-property-search imenu vc-msg
vc-msg-sdk highlight-indent-guides dumb-jump popup which-key
markdown-mode color noutline outline crux tramp tramp-loaddefs trampver
tramp-integration files-x tramp-compat shell pcomplete comint ansi-osc
parse-time iso8601 time-date format-spec ansi-color warnings icons
yasnippet cycle-quotes etags fileloop generator xref project
volatile-highlights hydra advice ring lv diminish undo-tree diff queue
exec-path-from-shell expand-region text-mode-expansions
er-basic-expansions thingatpt expand-region-core expand-region-custom
rainbow-delimiters s dash pkg-info url-http url-auth mail-parse rfc2231
rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm puny find-func
lisp-mnt epl define-repeat-map edmacro kmacro cl-extra help-mode
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core whitespace
cus-load finder-inf ag-autoloads casual-autoloads casual-dired-autoloads
casual-lib-autoloads company-quickhelp-autoloads company-autoloads
counsel-ag-popup-autoloads counsel-autoloads crux-autoloads
csv-mode-autoloads cycle-quotes-autoloads diminish-autoloads
dired-collapse-autoloads dired-filter-autoloads dired-narrow-autoloads
dired-open-autoloads dired-rainbow-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads dumb-jump-autoloads embark-autoloads
embrace-autoloads emojify-autoloads ess-autoloads
exec-path-from-shell-autoloads expand-region-autoloads
fill-column-indicator-autoloads flymake-json-autoloads
flymake-easy-autoloads focus-autoloads ggtags-autoloads
git-gutter-autoloads git-timemachine-autoloads haml-mode-autoloads
helpful-autoloads elisp-refs-autoloads f-autoloads
highlight-indent-guides-autoloads html5-schema-autoloads
indent-tools-autoloads inf-ruby-autoloads ivy-hydra-autoloads
hydra-autoloads jq-format-autoloads json-mode-autoloads rx
json-navigator-autoloads hierarchy-autoloads json-snatcher-autoloads
lv-autoloads magit-autoloads pcase git-commit-autoloads
magit-section-autoloads markdown-mode-autoloads
multiple-cursors-autoloads org-autolist-autoloads ox-pandoc-autoloads
ht-autoloads plantuml-mode-autoloads dash-autoloads pos-tip-autoloads
puppet-mode-autoloads pkg-info-autoloads epl-autoloads
rainbow-delimiters-autoloads reformatter-autoloads rg-autoloads
rnc-mode-autoloads rubocop-autoloads ruby-refactor-autoloads s-autoloads
scss-mode-autoloads spinner-autoloads string-inflection-autoloads
surround-autoloads swiper-autoloads ivy-autoloads transient-autoloads
undo-tree-autoloads queue-autoloads unicode-fonts-autoloads
ucs-utils-autoloads font-utils-autoloads persistent-soft-autoloads
list-utils-autoloads pcache-autoloads vc-msg-autoloads popup-autoloads
volatile-highlights-autoloads wgrep-autoloads which-key-autoloads
whole-line-or-region-autoloads with-editor-autoloads info
compat-autoloads yafolding-autoloads yaml-mode-autoloads
yasnippet-autoloads ztree-autoloads package browse-url url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 626769 46759)
 (symbols 48 51084 0)
 (strings 32 190577 14364)
 (string-bytes 1 5878325)
 (vectors 16 102254)
 (vector-slots 8 1902119 62409)
 (floats 8 576 266)
 (intervals 56 3261 73)
 (buffers 984 23))

(list (fboundp 'static-if) (fboundp 'value<))

(t t)

The functions you asked for:

  • static-if is a macro defined in compat-30.el.
  • value< is a byte-compiled function defined in compat-30.el.
  • sort is a function defined in C source code. Signature (sort SEQ PREDICATE)

@basil-conto
Copy link
Collaborator

Thanks for the information; it seems clear that compat's :extended t breaks the assumptions with which I introduced the polyfills.

Sorry about the breakage and the delay! I aim to push a fix later today.

basil-conto added a commit that referenced this issue Aug 29, 2024
* ivy.el (ivy--new-sort-p): New constant.
(ivy--shorter-matches-first, ivy--flx-sort):
* swiper.el (swiper--avy-candidates): Check ivy--new-sort-p instead
of value<, which could be polyfilled by the compat package.

Fixes #3052.
@basil-conto basil-conto added regression compat Issues relating to backward/forward compatibility labels Aug 29, 2024
@basil-conto
Copy link
Collaborator

basil-conto commented Aug 29, 2024

New polyfills coming to a GNU-devel ELPA (and MELPA) near you.

I tested them in a bare Emacs 29.4 with compat preinstalled, and couldn't spot any issues (except for all the other ones ;).

Let me know if you encounter any problems with this.

@martinfowler
Copy link
Author

Thanks for fixing that so swiftly. Worked fine on my machine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compat Issues relating to backward/forward compatibility regression
Projects
None yet
Development

No branches or pull requests

4 participants