hiiro 0.1.293 → 0.1.295

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20e69313f458dee5ff24926e4c905ea46bcfa67146f45df57f08e5692c0c9005
4
- data.tar.gz: cf1b62233a0c03e1bc024ec966b88b9687cbc384b2cbf593dae30b9587ade3ff
3
+ metadata.gz: 11e1f44deb6626f97123e066d0c746e82174392c5c60b28a508f4730b62a85f7
4
+ data.tar.gz: b72bf798fe7e23b2e1df95746f6f3c07482fd19f620f9114bc356dc4226c3d92
5
5
  SHA512:
6
- metadata.gz: d3db13bf516d8dfa5db32bd1480de76d886ed1dc51f9465749b4ee6f7b2ce75e420cc035bf3446828fe70383aa6b2fd315c6f76ae8f7bfb7dd2943250dc7a7ff
7
- data.tar.gz: 402ff47ab1de9c80d226c853914ed7c2a9d21a03e2d275138545a73551bdbc62275a8e53bf884dafdfa8037b6f55b93ecb98cf90b63cf89eb32f2c512f6ad4dc
6
+ metadata.gz: '06915243bcc868b2ea77def9c9ead108409dd85a3fe6a1a3ca2fbdbfb1b421bb3c5e86ef58ec2535b0e4878f5c8384e8d3b13f04f533f577403a9c3d8181741d'
7
+ data.tar.gz: 4d75730e12195c1945af43b348932a0fcd0ae5b4cc7d7da6f1f2b8b4b1c5f6bbc8176523d9919ebbd7f044bf77f6922477d03d396550a8820a3344cd8763f10a
data/CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
1
1
  ```markdown
2
+ ## v0.1.295 (2026-03-26)
3
+
4
+ ### Changed
5
+ - `h pr ls`/`h pr update`: filter flags now use AND-across-dimensions logic — state flags (`-o`, `-m`, `-D`, `-c`) OR within their group, check flags (`-r`, `-g`, `-p`) OR within theirs, and the two groups AND together; e.g. `-o -g` shows open PRs with passing checks, `-o -r -g` shows open PRs with failing or passing checks
6
+
7
+ ## v0.1.294 (2026-03-26)
8
+
9
+ ### Fixed
10
+ - `h pr ls`/`h pr update`: filter flags (`-r`, `-g`, `-p`, etc.) from `pm.add_options` now register correctly; switched from `pm.add_options(self)` inside implicit `instance_eval` block to explicit block parameter `|o|` with `pm.add_options(o)`, matching the pattern already used by `h pr green`/`red`/`old`
11
+
2
12
  ## v0.1.293 (2026-03-26)
3
13
 
4
14
  ### Changed
data/bin/h-pr CHANGED
@@ -221,14 +221,14 @@ Hiiro.run(*ARGV, plugins: [Pins]) do
221
221
  end
222
222
 
223
223
  add_subcmd(:ls) do |*ls_args|
224
- opts = Hiiro::Options.parse(ls_args) {
225
- flag(:update, short: 'u', desc: 'update status before listing')
226
- flag(:verbose, short: 'v', desc: 'multi-line output per PR')
227
- flag(:checks, short: 'C', desc: 'show individual check run details')
228
- flag(:diff, short: 'd', desc: 'open diff for selected PR')
229
- flag(:all, short: 'a', desc: 'show all tracked PRs (no filter)')
230
- pm.add_options(self)
231
- mutual_exclusion(:all, :active, :merged, :drafts, :red, :green, :pending, :conflicts)
224
+ opts = Hiiro::Options.parse(ls_args) { |o|
225
+ o.flag(:update, short: 'u', desc: 'update status before listing')
226
+ o.flag(:verbose, short: 'v', desc: 'multi-line output per PR')
227
+ o.flag(:checks, short: 'C', desc: 'show individual check run details')
228
+ o.flag(:diff, short: 'd', desc: 'open diff for selected PR')
229
+ o.flag(:all, short: 'a', desc: 'show all tracked PRs (no filter)')
230
+ pm.add_options(o)
231
+ o.mutual_exclusion(:all, :active, :merged, :drafts, :red, :green, :pending, :conflicts)
232
232
  }
233
233
 
234
234
  if opts.help
@@ -314,11 +314,11 @@ Hiiro.run(*ARGV, plugins: [Pins]) do
314
314
  end
315
315
 
316
316
  add_subcmd(:update) do |*update_args|
317
- opts = Hiiro::Options.parse(update_args) {
318
- flag(:force_update, long: 'force-update', short: 'u', desc: 'force refresh even if recently checked')
319
- flag(:all, short: 'a', desc: 'show all tracked PRs (no filter)')
320
- pm.add_options(self)
321
- mutual_exclusion(:all, :active, :merged, :drafts, :red, :green, :pending, :conflicts)
317
+ opts = Hiiro::Options.parse(update_args) { |o|
318
+ o.flag(:force_update, long: 'force-update', short: 'u', desc: 'force refresh even if recently checked')
319
+ o.flag(:all, short: 'a', desc: 'show all tracked PRs (no filter)')
320
+ pm.add_options(o)
321
+ o.mutual_exclusion(:all, :active, :merged, :drafts, :red, :green, :pending, :conflicts)
322
322
  }
323
323
 
324
324
  pinned = pinned_manager.load_pinned
@@ -15,6 +15,15 @@ class Hiiro
15
15
  active: ->(pr) { !pr.merged? && !pr.closed? },
16
16
  }.freeze
17
17
 
18
+ # Filters are split into two orthogonal dimensions:
19
+ # state — what lifecycle state the PR is in (active, merged, draft, conflicting)
20
+ # checks — what the CI check status is (red, green, pending)
21
+ # Flags within each dimension OR together; dimensions AND together.
22
+ # e.g. -o -g → (active) AND (green checks)
23
+ # -o -r -g → (active) AND (red OR green)
24
+ STATE_FILTER_KEYS = %i[active merged drafts conflicts].freeze
25
+ CHECK_FILTER_KEYS = %i[red green pending].freeze
26
+
18
27
  def self.add_resolvers(hiiro)
19
28
  pm = new
20
29
  hiiro.add_resolver(:pr,
@@ -392,7 +401,14 @@ class Hiiro
392
401
  active = FILTER_PREDICATES.keys.select { |f| opts.respond_to?(f) && opts.send(f) }
393
402
  active = (active + forced).uniq
394
403
 
395
- results = active.empty? ? prs : prs.select { |pr| active.any? { |f| FILTER_PREDICATES[f]&.call(pr) } }
404
+ state_flags = active & STATE_FILTER_KEYS
405
+ check_flags = active & CHECK_FILTER_KEYS
406
+
407
+ results = prs.select do |pr|
408
+ state_match = state_flags.empty? || state_flags.any? { |f| FILTER_PREDICATES[f]&.call(pr) }
409
+ check_match = check_flags.empty? || check_flags.any? { |f| FILTER_PREDICATES[f]&.call(pr) }
410
+ state_match && check_match
411
+ end
396
412
 
397
413
  # Tags are an AND post-filter; multiple tags are OR'd among themselves
398
414
  tag_filter = Array(opts.respond_to?(:tag) ? opts.tag : nil).map(&:to_s).reject(&:empty?)
data/lib/hiiro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.293"
2
+ VERSION = "0.1.295"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiiro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.293
4
+ version: 0.1.295
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota