aboutsummaryrefslogtreecommitdiff
path: root/pearl.el
diff options
context:
space:
mode:
Diffstat (limited to 'pearl.el')
-rw-r--r--pearl.el13
1 files changed, 10 insertions, 3 deletions
diff --git a/pearl.el b/pearl.el
index 41abab6..e4958e9 100644
--- a/pearl.el
+++ b/pearl.el
@@ -1137,10 +1137,17 @@ multi-value filter would change which issues match."
(let ((op (cdr (assq 'type node))))
(cond
((assq 'nin op)
+ ;; Linear's UI authors "open" as `state.type nin [completed,
+ ;; canceled]', omitting duplicate; Pearl's own `:open' adds it.
+ ;; Accept any nin whose excluded types are all closed types and that
+ ;; excludes both completed and canceled -- the canonical open filter,
+ ;; with or without duplicate. A nin missing one of the two, or one
+ ;; that also excludes an open type (e.g. backlog), is a different
+ ;; filter and still refuses.
(let ((vals (append (cdr (assq 'nin op)) nil)))
- (if (and (= (length vals) (length pearl--open-state-types))
- (cl-subsetp vals pearl--open-state-types :test #'string=)
- (cl-subsetp pearl--open-state-types vals :test #'string=))
+ (if (and (cl-subsetp vals pearl--open-state-types :test #'string=)
+ (member "completed" vals)
+ (member "canceled" vals))
(cons 'ok (list :open t))
(pearl--rc-refuse
"state.type uses a `nin' that isn't Pearl's open predicate"))))