From 29fffbdd87391272e9131be63cf93f5067d6ae0d Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 22 Dec 2021 13:56:47 +0100 Subject: [PATCH] Revert field-related thingatpt changes This reverts 7db376e560448e61485ba054def8c82b21f33d6a, which led to severe performance regressions when being run in large buffers with no fields (bug#52593) --- etc/NEWS | 1 - lisp/thingatpt.el | 38 +++++++++++++++--------------------- test/lisp/thingatpt-tests.el | 8 -------- 3 files changed, 16 insertions(+), 31 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 02b6f665b07..1664ccfd044 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -3038,7 +3038,6 @@ checkdoc will now check the format of 'yes-or-no-p'. *** New command 'checkdoc-dired'. This can be used to run checkdoc on files from a Dired buffer. ---- *** No longer checks for 'A-' modifiers. Checkdoc recommends usage of command substitutions ("\\[foo-command]") in favor of writing keybindings like 'C-c f'. It now no longer warns diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el index 32e66184d70..4d3e68ec9c4 100644 --- a/lisp/thingatpt.el +++ b/lisp/thingatpt.el @@ -162,30 +162,24 @@ Possibilities include `symbol', `list', `sexp', `defun', When the optional argument NO-PROPERTIES is non-nil, strip text properties from the return value. -If the current buffer uses fields (see Info node `(elisp)Fields'), -this function will narrow to the field before identifying the -thing at point. - See the file `thingatpt.el' for documentation on how to define a symbol as a valid THING." - (save-restriction - (narrow-to-region (field-beginning) (field-end)) - (let ((text - (cond - ((cl-loop for (pthing . function) in thing-at-point-provider-alist - when (eq pthing thing) - for result = (funcall function) - when result - return result)) - ((get thing 'thing-at-point) - (funcall (get thing 'thing-at-point))) - (t - (let ((bounds (bounds-of-thing-at-point thing))) - (when bounds - (buffer-substring (car bounds) (cdr bounds)))))))) - (when (and text no-properties (sequencep text)) - (set-text-properties 0 (length text) nil text)) - text))) + (let ((text + (cond + ((cl-loop for (pthing . function) in thing-at-point-provider-alist + when (eq pthing thing) + for result = (funcall function) + when result + return result)) + ((get thing 'thing-at-point) + (funcall (get thing 'thing-at-point))) + (t + (let ((bounds (bounds-of-thing-at-point thing))) + (when bounds + (buffer-substring (car bounds) (cdr bounds)))))))) + (when (and text no-properties (sequencep text)) + (set-text-properties 0 (length text) nil text)) + text)) ;;;###autoload (defun bounds-of-thing-at-mouse (event thing) diff --git a/test/lisp/thingatpt-tests.el b/test/lisp/thingatpt-tests.el index 2a32dc57b1c..dc108c77c5c 100644 --- a/test/lisp/thingatpt-tests.el +++ b/test/lisp/thingatpt-tests.el @@ -223,12 +223,4 @@ position to retrieve THING.") (should (equal (test--number "0xf00" 2) 3840)) (should (equal (test--number "0xf00" 3) 3840))) -(ert-deftest test-fields () - (with-temp-buffer - (insert (propertize "foo" 'field 1) "bar" (propertize "zot" 'field 2)) - (goto-char 1) - (should (eq (symbol-at-point) 'foo)) - (goto-char 5) - (should (eq (symbol-at-point) 'bar)))) - ;;; thingatpt-tests.el ends here -- 2.39.2