]> git.eshelyaron.com Git - emacs.git/commitdiff
(treesit--indent-rules-optimize): Optimize 'and' and 'or' matcher forms
authorDmitry Gutov <dgutov@yandex.ru>
Sat, 7 Jan 2023 00:44:07 +0000 (02:44 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Sat, 7 Jan 2023 00:44:07 +0000 (02:44 +0200)
* lisp/treesit.el (treesit--indent-rules-optimize):
Optimize 'and' and 'or' matcher forms.  When 'and' has a 'query'
matcher inside (as is the case in ruby-ts--indent-rules, many
times over), this yields a significant performance boost.

lisp/treesit.el

index a85eb699ee17e4d5ba429274a3ed7e958a76784c..374c17c08941f7cb3d2d60115386598da9f5524b 100644 (file)
@@ -1546,6 +1546,10 @@ RULES."
                   (pcase func
                     (`(query ,qry)
                      (list 'query (treesit-query-compile lang qry)))
+                    (`(and . ,fns)
+                     (cons 'and (mapcar #'optimize-func fns)))
+                    (`(or . ,fns)
+                     (cons 'or (mapcar #'optimize-func fns)))
                     (_ func)))
                 ;; Optimize a rule (MATCHER ANCHOR OFFSET).
                 (optimize-rule (rule)