]> git.eshelyaron.com Git - emacs.git/commitdiff
(treesit-simple-indent-presets): Short-circuit 'and' and 'or'
authorDmitry Gutov <dgutov@yandex.ru>
Sat, 7 Jan 2023 00:02:25 +0000 (02:02 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Sat, 7 Jan 2023 00:02:25 +0000 (02:02 +0200)
* lisp/treesit.el (treesit-simple-indent-presets):
Short-circuit the 'and' and 'or' matchers.  To avoid calling all
fns after one returned nil or truthy value, respectively.

lisp/treesit.el

index 987942c507ae434e388222c01b30a4efd004f65f..a85eb699ee17e4d5ba429274a3ed7e958a76784c 100644 (file)
@@ -1179,16 +1179,15 @@ See `treesit-simple-indent-presets'.")
         ;; TODO: Document.
         (cons 'and (lambda (&rest fns)
                      (lambda (node parent bol &rest _)
-                       (cl-reduce (lambda (a b) (and a b))
-                                  (mapcar (lambda (fn)
-                                            (funcall fn node parent bol))
-                                          fns)))))
+                       (not
+                        (seq-find
+                         (lambda (fn) (not (funcall fn node parent bol)))
+                         fns)))))
         (cons 'or (lambda (&rest fns)
                     (lambda (node parent bol &rest _)
-                      (cl-reduce (lambda (a b) (or a b))
-                                 (mapcar (lambda (fn)
-                                           (funcall fn node parent bol))
-                                         fns)))))
+                      (seq-find
+                       (lambda (fn) (funcall fn node parent bol))
+                       fns))))
         (cons 'not (lambda (fn)
                      (lambda (node parent bol &rest _)
                        (not (funcall fn node parent bol)))))