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.)
** 0.7.4
*Fixes*
+ Ignore empty quoted strings in plain-string queries ([[https://github.com/alphapapa/org-ql/issues/383][#383]]).
** 0.7.3
*Fixes*

View file

@ -285,6 +285,11 @@ Matches with or without time.")
:link '(custom-manual "(org-ql)Usage")
: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
"Ask before running a query that could run arbitrary code.
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)
;; This is a bit confusing, but it seems to work. There's probably a better way.
`(pred -- (list 'not (car pred))))
positive-term))
positive-term empty-quote))
(positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args)))
(and predicate-without-args `(pred -- (list (intern pred))))
(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))))
(quoted-arg "\"" (substring (+ (not (or separator "\"")) (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 "!")
(separator "," )))
(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
;; borrow this `with-peg-rules' call, which isn't too bad.
(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
(`(,one-predicate) one-predicate)
(`(,_ . ,_) (cons boolean (reverse parsed-sexp)))

View file

@ -73,6 +73,7 @@ Functions / Macros
Changelog
* 0.8-pre: 08-pre.
* 0.7.4: 074.
* 0.7.3: 073.
* 0.7.2: 072.
* 0.7.1: 071.
@ -1027,6 +1028,7 @@ releases.
* Menu:
* 0.8-pre: 08-pre.
* 0.7.4: 074.
* 0.7.3: 073.
* 0.7.2: 072.
* 0.7.1: 071.
@ -1058,7 +1060,7 @@ releases.
* 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
===========
@ -1096,9 +1098,19 @@ File: README.info, Node: 08-pre, Next: 073, Up: Changelog
(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*
@ -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
5.3 0.7.2
5.4 0.7.2
=========
*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
5.4 0.7.1
5.5 0.7.1
=========
*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
5.5 0.7
5.6 0.7
=======
*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
5.6 0.6.3
5.7 0.6.3
=========
*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
5.7 0.6.2
5.8 0.6.2
=========
*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
5.8 0.6.1
5.9 0.6.1
=========
*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
5.9 0.6
=======
5.10 0.6
========
*Added*
• 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
5.10 0.5.2
5.11 0.5.2
==========
*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
5.11 0.5.1
5.12 0.5.1
==========
*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
5.12 0.5
5.13 0.5
========
*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
5.13 0.4.9
5.14 0.4.9
==========
*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
5.14 0.4.8
5.15 0.4.8
==========
*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
5.15 0.4.7
5.16 0.4.7
==========
*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
5.16 0.4.6
5.17 0.4.6
==========
*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
5.17 0.4.5
5.18 0.4.5
==========
*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
5.18 0.4.4
5.19 0.4.4
==========
*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
5.19 0.4.3
5.20 0.4.3
==========
*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
5.20 0.4.2
5.21 0.4.2
==========
*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
5.21 0.4.1
5.22 0.4.1
==========
*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
5.22 0.4
5.23 0.4
========
_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
5.23 0.3.2
5.24 0.3.2
==========
*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
5.24 0.3.1
5.25 0.3.1
==========
*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
5.25 0.3
5.26 0.3
========
*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
5.26 0.2.3
5.27 0.2.3
==========
*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
5.27 0.2.2
5.28 0.2.2
==========
*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
5.28 0.2.1
5.29 0.2.1
==========
*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
5.29 0.2
5.30 0.2
========
*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
5.30 0.1
5.31 0.1
========
First tagged release.
@ -1839,75 +1851,76 @@ GPLv3

Tag Table:
Node: Top225
Node: Contents1845
Node: Screenshots1968
Node: Installation2086
Node: Quelpa2600
Node: Helm support3128
Node: Usage3531
Node: Commands3929
Node: org-ql-find4394
Node: org-ql-open-link5212
Node: org-ql-refile6067
Node: org-ql-search6395
Node: helm-org-ql8326
Node: org-ql-view8704
Node: org-ql-view-sidebar9234
Node: org-ql-view-recent-items9614
Node: org-ql-sparse-tree10110
Node: Queries10910
Node: Non-sexp query syntax12027
Node: General predicates13786
Node: Ancestor/descendant predicates20773
Node: Date/time predicates21901
Node: Functions / Macros25025
Node: Agenda-like views25323
Ref: Function org-ql-block25485
Node: Listing / acting-on results26746
Ref: Caching26954
Ref: Function org-ql-select27867
Ref: Function org-ql-query30293
Ref: Macro org-ql (deprecated)32067
Node: Custom predicates32382
Ref: Macro org-ql-defpred32606
Node: Dynamic block36047
Node: Links38771
Node: Tips39458
Node: Changelog39782
Node: 08-pre40592
Node: 07342357
Node: 07243092
Node: 07144011
Node: 0744820
Node: 06347744
Node: 06248275
Node: 06148580
Node: 0649148
Node: 05252202
Node: 05152504
Node: 0552929
Node: 04954460
Node: 04854742
Node: 04755091
Node: 04655500
Node: 04555908
Node: 04456269
Node: 04356628
Node: 04256831
Node: 04156992
Node: 0457239
Node: 03261340
Node: 03161743
Node: 0361940
Node: 02365240
Node: 02265474
Node: 02165754
Node: 0265959
Node: 0170037
Node: Notes70138
Node: Comparison with Org Agenda searches70300
Node: org-sidebar71189
Node: License71468
Node: Contents1859
Node: Screenshots1982
Node: Installation2100
Node: Quelpa2614
Node: Helm support3142
Node: Usage3545
Node: Commands3943
Node: org-ql-find4408
Node: org-ql-open-link5226
Node: org-ql-refile6081
Node: org-ql-search6409
Node: helm-org-ql8340
Node: org-ql-view8718
Node: org-ql-view-sidebar9248
Node: org-ql-view-recent-items9628
Node: org-ql-sparse-tree10124
Node: Queries10924
Node: Non-sexp query syntax12041
Node: General predicates13800
Node: Ancestor/descendant predicates20787
Node: Date/time predicates21915
Node: Functions / Macros25039
Node: Agenda-like views25337
Ref: Function org-ql-block25499
Node: Listing / acting-on results26760
Ref: Caching26968
Ref: Function org-ql-select27881
Ref: Function org-ql-query30307
Ref: Macro org-ql (deprecated)32081
Node: Custom predicates32396
Ref: Macro org-ql-defpred32620
Node: Dynamic block36061
Node: Links38785
Node: Tips39472
Node: Changelog39796
Node: 08-pre40620
Node: 07442385
Node: 07342612
Node: 07243344
Node: 07144263
Node: 0745072
Node: 06347996
Node: 06248527
Node: 06148832
Node: 0649400
Node: 05252456
Node: 05152758
Node: 0553183
Node: 04954714
Node: 04854996
Node: 04755345
Node: 04655754
Node: 04556162
Node: 04456523
Node: 04356882
Node: 04257085
Node: 04157246
Node: 0457493
Node: 03261594
Node: 03161997
Node: 0362194
Node: 02365494
Node: 02265728
Node: 02166008
Node: 0266213
Node: 0170291
Node: Notes70392
Node: Comparison with Org Agenda searches70554
Node: org-sidebar71443
Node: License71722

End Tag Table

View file

@ -648,6 +648,14 @@ with keyword arg NOW in PLIST."
;; 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"
(expect (org-ql--query-string-to-sexp "todo: !todo:CHECK,SOMEDAY")
:to-equal '(and (todo) (not (todo "CHECK" "SOMEDAY"))))