Take clauses from preambles when possible

This commit is contained in:
Ihor Radchenko 2021-04-05 18:47:56 +08:00
parent e1a464fb2c
commit 9b30c4139b
No known key found for this signature in database
GPG key ID: 6470762A7DA11D8B

View file

@ -1229,7 +1229,7 @@ result form."
((eq query t) (setq query `(regexp ,regexp))) ((eq query t) (setq query `(regexp ,regexp)))
((not query) (setq query `(regexp ,regexp))) ((not query) (setq query `(regexp ,regexp)))
(t nil)) (t nil))
(setq query clause)) (unless query (setq query clause)))
(push query queries) (push query queries)
;; Take the longest regexp. It should be hardest to match. ;; Take the longest regexp. It should be hardest to match.
(when (length> regexp (length regexp-max)) (when (length> regexp (length regexp-max))
@ -1256,9 +1256,8 @@ result form."
(if regexp (if regexp
(cond (cond
((eq query t) (setq query `(regexp ,regexp))) ((eq query t) (setq query `(regexp ,regexp)))
((not query) (setq query `(regexp ,regexp))) ((not query) (setq query `(regexp ,regexp))))
(t nil)) (unless query (setq query clause)))
(setq query clause))
(push query queries) (push query queries)
;; Collect regexps for combining. ;; Collect regexps for combining.
(if regexp (push regexp regexps) (if regexp (push regexp regexps)
@ -1268,9 +1267,7 @@ result form."
(and regexps (and regexps
(rx-to-string `(or ,@(mapcar (lambda (re) `(regex ,re)) regexps))))) (rx-to-string `(or ,@(mapcar (lambda (re) `(regex ,re)) regexps)))))
:case-fold t :case-fold t
:query (if regexp-null-p :query `(or ,@(mapcar (lambda (clause) `(save-excursion ,clause)) queries)))))))
`(save-excursion (or ,@clauses))
`(save-excursion (or ,@queries))))))))
(org-ql-defpred org-ql--when (condition &rest clauses) (org-ql-defpred org-ql--when (condition &rest clauses)
"Return values of CLAUSES when CONDITION is non-nil." "Return values of CLAUSES when CONDITION is non-nil."
@ -1283,7 +1280,7 @@ result form."
(-let* (((&plist :regexp :case-fold :query) (rec `(and ,condition ,(last clauses))))) (-let* (((&plist :regexp :case-fold :query) (rec `(and ,condition ,(last clauses)))))
(list :regexp regexp (list :regexp regexp
:case-fold case-fold :case-fold case-fold
:query `(when ,condition ,@clauses)))))) :query `(when ,condition ,@(mapcar (lambda (clause) `(save-excursion ,clause)) (butlast clauses)) ,(last clauses)))))))
(org-ql-defpred org-ql--unless (condition &rest clauses) (org-ql-defpred org-ql--unless (condition &rest clauses)
"Return values of CLAUSES unless CONDITION is non-nil." "Return values of CLAUSES unless CONDITION is non-nil."
@ -1296,7 +1293,7 @@ result form."
(-let* (((&plist :regexp :case-fold :query) (rec ,(last clauses)))) (-let* (((&plist :regexp :case-fold :query) (rec ,(last clauses))))
(list :regexp regexp (list :regexp regexp
:case-fold case-fold :case-fold case-fold
:query `(unless ,condition ,@clauses)))))) :query `(unless (save-excursion ,condition) ,@(mapcar (lambda (clause) `(save-excursion ,clause)) (butlast clauses)) ,(last clauses)))))))
(org-ql-defpred org-ql--not (clauses) (org-ql-defpred org-ql--not (clauses)
"Match when CLAUSES don't match." "Match when CLAUSES don't match."