Merge: v0.7.4

This commit is contained in:
Adam Porter 2023-12-16 04:13:38 -06:00
commit ace5e361af
4 changed files with 143 additions and 103 deletions

View file

@ -566,6 +566,11 @@ Simple links may also be written manually in either sexp or non-sexp form, like:
+ Org v9.7's ~org-element~ API changes required some adjustments. ([[https://github.com/alphapapa/org-ql/issues/364][#364]]. Thanks to several users for reporting, and to [[https://github.com/yantar92][Ihor Radchenko]] for his feedback.) + Org v9.7's ~org-element~ API changes required some adjustments. ([[https://github.com/alphapapa/org-ql/issues/364][#364]]. Thanks to several users for reporting, and to [[https://github.com/yantar92][Ihor Radchenko]] for his feedback.)
** 0.7.4
*Fixes*
+ Ignore empty quoted strings in plain-string queries ([[https://github.com/alphapapa/org-ql/issues/383][#383]]).
** 0.7.3 ** 0.7.3
*Fixes* *Fixes*

View file

@ -285,6 +285,11 @@ Matches with or without time.")
:link '(custom-manual "(org-ql)Usage") :link '(custom-manual "(org-ql)Usage")
:link '(url-link "https://github.com/alphapapa/org-ql")) :link '(url-link "https://github.com/alphapapa/org-ql"))
(defcustom org-ql-signal-peg-failure nil
"Signal an error when parsing a plain-string query fails.
This should only be enabled while debugging."
:type 'boolean)
(defcustom org-ql-ask-unsafe-queries t (defcustom org-ql-ask-unsafe-queries t
"Ask before running a query that could run arbitrary code. "Ask before running a query that could run arbitrary code.
Org QL queries in sexp form can contain arbitrary expressions. Org QL queries in sexp form can contain arbitrary expressions.
@ -950,7 +955,7 @@ value of `org-ql-predicates')."
(term (or (and negation (list positive-term) (term (or (and negation (list positive-term)
;; This is a bit confusing, but it seems to work. There's probably a better way. ;; This is a bit confusing, but it seems to work. There's probably a better way.
`(pred -- (list 'not (car pred)))) `(pred -- (list 'not (car pred))))
positive-term)) positive-term empty-quote))
(positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args))) (positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args)))
(and predicate-without-args `(pred -- (list (intern pred)))) (and predicate-without-args `(pred -- (list (intern pred))))
(and plain-string `(s -- (list org-ql-default-predicate s))))) (and plain-string `(s -- (list org-ql-default-predicate s)))))
@ -963,6 +968,12 @@ value of `org-ql-predicates')."
(keyword (substring (+ (not (or separator "=" "\"" (syntax-class whitespace))) (any)))) (keyword (substring (+ (not (or separator "=" "\"" (syntax-class whitespace))) (any))))
(quoted-arg "\"" (substring (+ (not (or separator "\"")) (any))) "\"") (quoted-arg "\"" (substring (+ (not (or separator "\"")) (any))) "\"")
(unquoted-arg (substring (+ (not (or separator "\"" (syntax-class whitespace))) (any)))) (unquoted-arg (substring (+ (not (or separator "\"" (syntax-class whitespace))) (any))))
(empty-quote
;; This avoids aborting parsing or signaling an
;; error if the user types in two successive
;; quotation marks while typing a query (e.g. when
;; using electric-pair-mode).
"\"\"")
(negation "!") (negation "!")
(separator "," ))) (separator "," )))
(closure (lambda (input &optional boolean) (closure (lambda (input &optional boolean)
@ -983,7 +994,10 @@ value of `org-ql-predicates')."
;; have to borrow some code. It ends up that we only have to ;; have to borrow some code. It ends up that we only have to
;; borrow this `with-peg-rules' call, which isn't too bad. ;; borrow this `with-peg-rules' call, which isn't too bad.
(eval `(with-peg-rules ,pexs (eval `(with-peg-rules ,pexs
(peg-run (peg ,(caar pexs)) #'peg-signal-failure)))))) (peg-run (peg ,(caar pexs))
(lambda (failures)
(when org-ql-signal-peg-failure
(peg-signal-failure failures)))))))))
(pcase parsed-sexp (pcase parsed-sexp
(`(,one-predicate) one-predicate) (`(,one-predicate) one-predicate)
(`(,_ . ,_) (cons boolean (reverse parsed-sexp))) (`(,_ . ,_) (cons boolean (reverse parsed-sexp)))

View file

@ -73,6 +73,7 @@ Functions / Macros
Changelog Changelog
* 0.8-pre: 08-pre. * 0.8-pre: 08-pre.
* 0.7.4: 074.
* 0.7.3: 073. * 0.7.3: 073.
* 0.7.2: 072. * 0.7.2: 072.
* 0.7.1: 071. * 0.7.1: 071.
@ -1027,6 +1028,7 @@ releases.
* Menu: * Menu:
* 0.8-pre: 08-pre. * 0.8-pre: 08-pre.
* 0.7.4: 074.
* 0.7.3: 073. * 0.7.3: 073.
* 0.7.2: 072. * 0.7.2: 072.
* 0.7.1: 071. * 0.7.1: 071.
@ -1058,7 +1060,7 @@ releases.
* 0.1: 01. * 0.1: 01.
 
File: README.info, Node: 08-pre, Next: 073, Up: Changelog File: README.info, Node: 08-pre, Next: 074, Up: Changelog
5.1 0.8-pre 5.1 0.8-pre
=========== ===========
@ -1096,9 +1098,19 @@ File: README.info, Node: 08-pre, Next: 073, Up: Changelog
(https://github.com/yantar92) for his feedback.) (https://github.com/yantar92) for his feedback.)
 
File: README.info, Node: 073, Next: 072, Prev: 08-pre, Up: Changelog File: README.info, Node: 074, Next: 073, Prev: 08-pre, Up: Changelog
5.2 0.7.3 5.2 0.7.4
=========
*Fixes*
• Ignore empty quoted strings in plain-string queries (#383
(https://github.com/alphapapa/org-ql/issues/383)).

File: README.info, Node: 073, Next: 072, Prev: 074, Up: Changelog
5.3 0.7.3
========= =========
*Fixes* *Fixes*
@ -1116,7 +1128,7 @@ File: README.info, Node: 073, Next: 072, Prev: 08-pre, Up: Changelog
 
File: README.info, Node: 072, Next: 071, Prev: 073, Up: Changelog File: README.info, Node: 072, Next: 071, Prev: 073, Up: Changelog
5.3 0.7.2 5.4 0.7.2
========= =========
*Fixes* *Fixes*
@ -1137,7 +1149,7 @@ File: README.info, Node: 072, Next: 071, Prev: 073, Up: Changelog
 
File: README.info, Node: 071, Next: 07, Prev: 072, Up: Changelog File: README.info, Node: 071, Next: 07, Prev: 072, Up: Changelog
5.4 0.7.1 5.5 0.7.1
========= =========
*Fixes* *Fixes*
@ -1156,7 +1168,7 @@ File: README.info, Node: 071, Next: 07, Prev: 072, Up: Changelog
 
File: README.info, Node: 07, Next: 063, Prev: 071, Up: Changelog File: README.info, Node: 07, Next: 063, Prev: 071, Up: Changelog
5.5 0.7 5.6 0.7
======= =======
*Added* *Added*
@ -1216,7 +1228,7 @@ File: README.info, Node: 07, Next: 063, Prev: 071, Up: Changelog
 
File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog
5.6 0.6.3 5.7 0.6.3
========= =========
*Fixed* *Fixed*
@ -1232,7 +1244,7 @@ File: README.info, Node: 063, Next: 062, Prev: 07, Up: Changelog
 
File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog
5.7 0.6.2 5.8 0.6.2
========= =========
*Fixed* *Fixed*
@ -1243,7 +1255,7 @@ File: README.info, Node: 062, Next: 061, Prev: 063, Up: Changelog
 
File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog
5.8 0.6.1 5.9 0.6.1
========= =========
*Fixed* *Fixed*
@ -1261,8 +1273,8 @@ File: README.info, Node: 061, Next: 06, Prev: 062, Up: Changelog
 
File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog
5.9 0.6 5.10 0.6
======= ========
*Added* *Added*
• Macro org-ql-defpred, used to define search predicates. (See • Macro org-ql-defpred, used to define search predicates. (See
@ -1328,7 +1340,7 @@ File: README.info, Node: 06, Next: 052, Prev: 061, Up: Changelog
 
File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog
5.10 0.5.2 5.11 0.5.2
========== ==========
*Fixed* *Fixed*
@ -1339,7 +1351,7 @@ File: README.info, Node: 052, Next: 051, Prev: 06, Up: Changelog
 
File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog
5.11 0.5.1 5.12 0.5.1
========== ==========
*Fixed* *Fixed*
@ -1352,7 +1364,7 @@ File: README.info, Node: 051, Next: 05, Prev: 052, Up: Changelog
 
File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog
5.12 0.5 5.13 0.5
======== ========
*Added* *Added*
@ -1393,7 +1405,7 @@ File: README.info, Node: 05, Next: 049, Prev: 051, Up: Changelog
 
File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog
5.13 0.4.9 5.14 0.4.9
========== ==========
*Fixed* *Fixed*
@ -1404,7 +1416,7 @@ File: README.info, Node: 049, Next: 048, Prev: 05, Up: Changelog
 
File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog
5.14 0.4.8 5.15 0.4.8
========== ==========
*Fixed* *Fixed*
@ -1416,7 +1428,7 @@ File: README.info, Node: 048, Next: 047, Prev: 049, Up: Changelog
 
File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog
5.15 0.4.7 5.16 0.4.7
========== ==========
*Fixed* *Fixed*
@ -1429,7 +1441,7 @@ File: README.info, Node: 047, Next: 046, Prev: 048, Up: Changelog
 
File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog
5.16 0.4.6 5.17 0.4.6
========== ==========
*Fixed* *Fixed*
@ -1442,7 +1454,7 @@ File: README.info, Node: 046, Next: 045, Prev: 047, Up: Changelog
 
File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog
5.17 0.4.5 5.18 0.4.5
========== ==========
*Fixed* *Fixed*
@ -1454,7 +1466,7 @@ File: README.info, Node: 045, Next: 044, Prev: 046, Up: Changelog
 
File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog
5.18 0.4.4 5.19 0.4.4
========== ==========
*Fixed* *Fixed*
@ -1466,7 +1478,7 @@ File: README.info, Node: 044, Next: 043, Prev: 045, Up: Changelog
 
File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog
5.19 0.4.3 5.20 0.4.3
========== ==========
*Fixed* *Fixed*
@ -1476,7 +1488,7 @@ File: README.info, Node: 043, Next: 042, Prev: 044, Up: Changelog
 
File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog
5.20 0.4.2 5.21 0.4.2
========== ==========
*Fixed* *Fixed*
@ -1485,7 +1497,7 @@ File: README.info, Node: 042, Next: 041, Prev: 043, Up: Changelog
 
File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog
5.21 0.4.1 5.22 0.4.1
========== ==========
*Fixed* *Fixed*
@ -1495,7 +1507,7 @@ File: README.info, Node: 041, Next: 04, Prev: 042, Up: Changelog
 
File: README.info, Node: 04, Next: 032, Prev: 041, Up: Changelog File: README.info, Node: 04, Next: 032, Prev: 041, Up: Changelog
5.22 0.4 5.23 0.4
======== ========
_Note:_ The next release, 0.5, may include changes which will require _Note:_ The next release, 0.5, may include changes which will require
@ -1576,7 +1588,7 @@ automatically, as they will be pushed to the master branch when ready.
 
File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog
5.23 0.3.2 5.24 0.3.2
========== ==========
*Fixed* *Fixed*
@ -1589,7 +1601,7 @@ File: README.info, Node: 032, Next: 031, Prev: 04, Up: Changelog
 
File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog
5.24 0.3.1 5.25 0.3.1
========== ==========
*Fixed* *Fixed*
@ -1599,7 +1611,7 @@ File: README.info, Node: 031, Next: 03, Prev: 032, Up: Changelog
 
File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog
5.25 0.3 5.26 0.3
======== ========
*Added* *Added*
@ -1667,7 +1679,7 @@ File: README.info, Node: 03, Next: 023, Prev: 031, Up: Changelog
 
File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog
5.26 0.2.3 5.27 0.2.3
========== ==========
*Fixed* *Fixed*
@ -1677,7 +1689,7 @@ File: README.info, Node: 023, Next: 022, Prev: 03, Up: Changelog
 
File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog
5.27 0.2.2 5.28 0.2.2
========== ==========
*Fixed* *Fixed*
@ -1688,7 +1700,7 @@ File: README.info, Node: 022, Next: 021, Prev: 023, Up: Changelog
 
File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog
5.28 0.2.1 5.29 0.2.1
========== ==========
*Fixed* *Fixed*
@ -1698,7 +1710,7 @@ File: README.info, Node: 021, Next: 02, Prev: 022, Up: Changelog
 
File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog
5.29 0.2 5.30 0.2
======== ========
*Added* *Added*
@ -1781,7 +1793,7 @@ File: README.info, Node: 02, Next: 01, Prev: 021, Up: Changelog
 
File: README.info, Node: 01, Prev: 02, Up: Changelog File: README.info, Node: 01, Prev: 02, Up: Changelog
5.30 0.1 5.31 0.1
======== ========
First tagged release. First tagged release.
@ -1839,75 +1851,76 @@ GPLv3
 
Tag Table: Tag Table:
Node: Top225 Node: Top225
Node: Contents1845 Node: Contents1859
Node: Screenshots1968 Node: Screenshots1982
Node: Installation2086 Node: Installation2100
Node: Quelpa2600 Node: Quelpa2614
Node: Helm support3128 Node: Helm support3142
Node: Usage3531 Node: Usage3545
Node: Commands3929 Node: Commands3943
Node: org-ql-find4394 Node: org-ql-find4408
Node: org-ql-open-link5212 Node: org-ql-open-link5226
Node: org-ql-refile6067 Node: org-ql-refile6081
Node: org-ql-search6395 Node: org-ql-search6409
Node: helm-org-ql8326 Node: helm-org-ql8340
Node: org-ql-view8704 Node: org-ql-view8718
Node: org-ql-view-sidebar9234 Node: org-ql-view-sidebar9248
Node: org-ql-view-recent-items9614 Node: org-ql-view-recent-items9628
Node: org-ql-sparse-tree10110 Node: org-ql-sparse-tree10124
Node: Queries10910 Node: Queries10924
Node: Non-sexp query syntax12027 Node: Non-sexp query syntax12041
Node: General predicates13786 Node: General predicates13800
Node: Ancestor/descendant predicates20773 Node: Ancestor/descendant predicates20787
Node: Date/time predicates21901 Node: Date/time predicates21915
Node: Functions / Macros25025 Node: Functions / Macros25039
Node: Agenda-like views25323 Node: Agenda-like views25337
Ref: Function org-ql-block25485 Ref: Function org-ql-block25499
Node: Listing / acting-on results26746 Node: Listing / acting-on results26760
Ref: Caching26954 Ref: Caching26968
Ref: Function org-ql-select27867 Ref: Function org-ql-select27881
Ref: Function org-ql-query30293 Ref: Function org-ql-query30307
Ref: Macro org-ql (deprecated)32067 Ref: Macro org-ql (deprecated)32081
Node: Custom predicates32382 Node: Custom predicates32396
Ref: Macro org-ql-defpred32606 Ref: Macro org-ql-defpred32620
Node: Dynamic block36047 Node: Dynamic block36061
Node: Links38771 Node: Links38785
Node: Tips39458 Node: Tips39472
Node: Changelog39782 Node: Changelog39796
Node: 08-pre40592 Node: 08-pre40620
Node: 07342357 Node: 07442385
Node: 07243092 Node: 07342612
Node: 07144011 Node: 07243344
Node: 0744820 Node: 07144263
Node: 06347744 Node: 0745072
Node: 06248275 Node: 06347996
Node: 06148580 Node: 06248527
Node: 0649148 Node: 06148832
Node: 05252202 Node: 0649400
Node: 05152504 Node: 05252456
Node: 0552929 Node: 05152758
Node: 04954460 Node: 0553183
Node: 04854742 Node: 04954714
Node: 04755091 Node: 04854996
Node: 04655500 Node: 04755345
Node: 04555908 Node: 04655754
Node: 04456269 Node: 04556162
Node: 04356628 Node: 04456523
Node: 04256831 Node: 04356882
Node: 04156992 Node: 04257085
Node: 0457239 Node: 04157246
Node: 03261340 Node: 0457493
Node: 03161743 Node: 03261594
Node: 0361940 Node: 03161997
Node: 02365240 Node: 0362194
Node: 02265474 Node: 02365494
Node: 02165754 Node: 02265728
Node: 0265959 Node: 02166008
Node: 0170037 Node: 0266213
Node: Notes70138 Node: 0170291
Node: Comparison with Org Agenda searches70300 Node: Notes70392
Node: org-sidebar71189 Node: Comparison with Org Agenda searches70554
Node: License71468 Node: org-sidebar71443
Node: License71722
 
End Tag Table End Tag Table

View file

@ -648,6 +648,14 @@ with keyword arg NOW in PLIST."
;; TODO: Other predicates. ;; TODO: Other predicates.
(it "Ignores empty quoted strings"
(expect (org-ql--query-string-to-sexp "\"\"")
:to-equal nil)
(expect (org-ql--query-string-to-sexp "foo \"\" bar")
:to-equal '(and (rifle "foo") (rifle "bar")))
(expect (org-ql--query-string-to-sexp "foo \"baz\" bar")
:to-equal '(and (rifle "foo") (rifle "baz") (rifle "bar"))))
(it "Negated terms" (it "Negated terms"
(expect (org-ql--query-string-to-sexp "todo: !todo:CHECK,SOMEDAY") (expect (org-ql--query-string-to-sexp "todo: !todo:CHECK,SOMEDAY")
:to-equal '(and (todo) (not (todo "CHECK" "SOMEDAY")))) :to-equal '(and (todo) (not (todo "CHECK" "SOMEDAY"))))