checkoff 0.256.0 → 0.258.0

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +12 -11
  3. data/lib/checkoff/cli.rb +11 -14
  4. data/lib/checkoff/clients.rb +2 -2
  5. data/lib/checkoff/custom_fields.rb +9 -7
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +17 -11
  7. data/lib/checkoff/internal/asana_event_filter.rb +4 -0
  8. data/lib/checkoff/internal/config_loader.rb +2 -2
  9. data/lib/checkoff/internal/logging.rb +2 -2
  10. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +8 -7
  11. data/lib/checkoff/internal/search_url/custom_field_variant.rb +2 -0
  12. data/lib/checkoff/internal/search_url/date_param_converter.rb +8 -2
  13. data/lib/checkoff/internal/search_url/parser.rb +7 -5
  14. data/lib/checkoff/internal/search_url/results_merger.rb +1 -2
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +13 -4
  16. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +3 -0
  17. data/lib/checkoff/internal/selector_classes/common.rb +14 -30
  18. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +13 -2
  19. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +9 -0
  20. data/lib/checkoff/internal/selector_classes/project.rb +6 -13
  21. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +6 -3
  22. data/lib/checkoff/internal/selector_classes/section.rb +2 -4
  23. data/lib/checkoff/internal/selector_classes/task.rb +42 -16
  24. data/lib/checkoff/internal/selector_evaluator.rb +4 -6
  25. data/lib/checkoff/internal/task_timing.rb +6 -5
  26. data/lib/checkoff/internal/thread_local.rb +2 -1
  27. data/lib/checkoff/my_tasks.rb +3 -1
  28. data/lib/checkoff/portfolios.rb +1 -1
  29. data/lib/checkoff/projects.rb +4 -3
  30. data/lib/checkoff/sections.rb +7 -11
  31. data/lib/checkoff/subtasks.rb +2 -1
  32. data/lib/checkoff/tags.rb +3 -2
  33. data/lib/checkoff/task_searches.rb +6 -3
  34. data/lib/checkoff/task_selectors.rb +3 -3
  35. data/lib/checkoff/tasks.rb +10 -9
  36. data/lib/checkoff/timelines.rb +21 -5
  37. data/lib/checkoff/timing.rb +4 -8
  38. data/lib/checkoff/version.rb +1 -1
  39. data/lib/checkoff/workspaces.rb +5 -2
  40. data/rbi/checkoff.rbi +145 -104
  41. data/sig/checkoff.rbs +110 -97
  42. metadata +2 -2
data/sig/checkoff.rbs CHANGED
@@ -77,7 +77,7 @@ module Checkoff
77
77
  def run: () -> void
78
78
 
79
79
  # _@param_ `project_arg`
80
- def project_arg_to_name: (String project_arg) -> (Symbol | String)
80
+ def project_arg_to_name: ((Symbol | String) project_arg) -> (Symbol | String)
81
81
 
82
82
  # Returns the value of attribute from_workspace_name.
83
83
  attr_reader from_workspace_name: untyped
@@ -288,7 +288,7 @@ module Checkoff
288
288
  ) -> ::Enumerable[Asana::Resources::Task]
289
289
 
290
290
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
291
- # @sg-ignore
291
+ # @sg-ignore nil check above is not flow-sensitive
292
292
  #
293
293
  # _@param_ `workspace_name`
294
294
  #
@@ -444,7 +444,8 @@ module Checkoff
444
444
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
445
445
  # Add a task
446
446
  #
447
- # @sg-ignore
447
+ # @sg-ignore @asana_task.create return type could not be inferred — calling a class method
448
+ # through a Class<T>-typed ivar is a known Solargraph dispatch limitation
448
449
  #
449
450
  # _@param_ `name`
450
451
  #
@@ -464,7 +465,6 @@ module Checkoff
464
465
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
465
466
  # True if any of the task's dependencies are marked incomplete
466
467
  #
467
- # @sg-ignore
468
468
  # Include 'dependencies.gid' in extra_fields of task passed in.
469
469
  #
470
470
  # _@param_ `task`
@@ -544,7 +544,9 @@ module Checkoff
544
544
 
545
545
  def projects: () -> Checkoff::Projects
546
546
 
547
- # @sg-ignore
547
+ # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
548
+ # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
549
+ # unify #fetch across that union
548
550
  def default_assignee_gid: () -> String
549
551
 
550
552
  def logger: () -> ::Logger
@@ -564,7 +566,7 @@ module Checkoff
564
566
  # _@param_ `message`
565
567
  def finer: (?Object? message) -> void
566
568
 
567
- # @sg-ignore
569
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
568
570
  def log_level: () -> Symbol
569
571
 
570
572
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -654,7 +656,7 @@ module Checkoff
654
656
  # _@param_ `message`
655
657
  def finer: (?Object? message) -> void
656
658
 
657
- # @sg-ignore
659
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
658
660
  def log_level: () -> Symbol
659
661
 
660
662
  attr_reader projects: Checkoff::Projects
@@ -746,7 +748,7 @@ module Checkoff
746
748
  # _@param_ `period_name`
747
749
  #
748
750
  # _@param_ `args`
749
- def compound_in_period?: ((Date | Time)? date_or_time, Symbol period_name, *Object args) -> bool
751
+ def compound_in_period?: ((Date | Time)? date_or_time, Symbol period_name, *::Array[Object] args) -> bool
750
752
 
751
753
  def self.run: () -> void
752
754
 
@@ -767,7 +769,7 @@ module Checkoff
767
769
  # _@param_ `message`
768
770
  def finer: (?Object? message) -> void
769
771
 
770
- # @sg-ignore
772
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
771
773
  def log_level: () -> Symbol
772
774
  end
773
775
 
@@ -900,7 +902,7 @@ module Checkoff
900
902
  def project: ((String | Symbol) workspace_name, (String | Symbol) project_name, ?extra_fields: ::Array[String]) -> Asana::Resources::Project?
901
903
 
902
904
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
903
- # @sg-ignore
905
+ # @sg-ignore nil check above is not flow-sensitive
904
906
  #
905
907
  # _@param_ `workspace_name`
906
908
  #
@@ -1002,7 +1004,7 @@ module Checkoff
1002
1004
  # _@param_ `message`
1003
1005
  def finer: (?Object? message) -> void
1004
1006
 
1005
- # @sg-ignore
1007
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1006
1008
  def log_level: () -> Symbol
1007
1009
 
1008
1010
  attr_reader timing: Checkoff::Timing
@@ -1074,7 +1076,7 @@ module Checkoff
1074
1076
  #
1075
1077
  # _@param_ `extra_fields`
1076
1078
  def tasks_by_section: (
1077
- String workspace_name,
1079
+ (String | Symbol) workspace_name,
1078
1080
  (String | Symbol) project_name,
1079
1081
  ?only_uncompleted: bool,
1080
1082
  ?extra_fields: ::Array[String]
@@ -1109,7 +1111,7 @@ module Checkoff
1109
1111
  ) -> ::Enumerable[Asana::Resources::Task]
1110
1112
 
1111
1113
  # Pulls just names of tasks from a given section.
1112
- # @sg-ignore
1114
+ # @sg-ignore Task#name is nilable; task names are assumed present here
1113
1115
  #
1114
1116
  # _@param_ `workspace_name`
1115
1117
  #
@@ -1225,7 +1227,7 @@ module Checkoff
1225
1227
  # _@param_ `message`
1226
1228
  def finer: (?Object? message) -> void
1227
1229
 
1228
- # @sg-ignore
1230
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1229
1231
  def log_level: () -> Symbol
1230
1232
 
1231
1233
  attr_reader projects: Checkoff::Projects
@@ -1292,10 +1294,10 @@ module Checkoff
1292
1294
  # expected to move to the new-style way of representing sections
1293
1295
  # as memberships with a separate API within a task.
1294
1296
  #
1295
- # @sg-ignore
1297
+ # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
1296
1298
  #
1297
1299
  # _@param_ `subtask`
1298
- def subtask_section?: (Asana::Resources::Task subtask) -> bool
1300
+ def subtask_section?: (Asana::Resources::Task subtask) -> bool?
1299
1301
 
1300
1302
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1301
1303
  # _@param_ `current_section`
@@ -1483,7 +1485,7 @@ module Checkoff
1483
1485
  ) -> void
1484
1486
 
1485
1487
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
1486
- # @sg-ignore
1488
+ # @sg-ignore nil check above is not flow-sensitive
1487
1489
  #
1488
1490
  # _@param_ `workspace_name`
1489
1491
  #
@@ -1555,7 +1557,8 @@ module Checkoff
1555
1557
  def workspace: ((String | Symbol) workspace_name) -> Asana::Resources::Workspace?
1556
1558
 
1557
1559
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
1558
- # @sg-ignore
1560
+ # @sg-ignore @asana_workspace.find_by_id return type could not be inferred — calling a
1561
+ # class method through a Class<T>-typed ivar is a known Solargraph dispatch limitation
1559
1562
  def default_workspace: () -> Asana::Resources::Workspace
1560
1563
 
1561
1564
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
@@ -1564,7 +1567,9 @@ module Checkoff
1564
1567
  # _@param_ `workspace_name`
1565
1568
  def workspace_or_raise: ((String | Symbol) workspace_name) -> Asana::Resources::Workspace
1566
1569
 
1567
- # @sg-ignore
1570
+ # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
1571
+ # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
1572
+ # unify #fetch across that union
1568
1573
  def default_workspace_gid: () -> String
1569
1574
 
1570
1575
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -1596,6 +1601,7 @@ module Checkoff
1596
1601
  ?client: Asana::Client
1597
1602
  ) -> void
1598
1603
 
1604
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1599
1605
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
1600
1606
  # _@param_ `url`
1601
1607
  #
@@ -1608,13 +1614,12 @@ module Checkoff
1608
1614
  # _@param_ `verify_mode` — - e.g., OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER
1609
1615
  def create_attachment_from_url!: (
1610
1616
  String url,
1611
- Asana::Resources::Resource resource,
1617
+ Asana::Resources::Task resource,
1612
1618
  ?attachment_name: String?,
1613
1619
  ?verify_mode: Integer,
1614
1620
  ?just_the_url: bool
1615
1621
  ) -> Asana::Resources::Attachment
1616
1622
 
1617
- # sord warn - URI wasn't able to be resolved to a constant in this project
1618
1623
  # Writes contents of URL to a temporary file with the same
1619
1624
  # extension as the URL using Net::HTTP, raising an exception if
1620
1625
  # not succesful
@@ -1622,12 +1627,13 @@ module Checkoff
1622
1627
  # _@param_ `uri`
1623
1628
  #
1624
1629
  # _@param_ `verify_mode` — - e.g., OpenSSL::SSL::VERIFY_NONE,OpenSSL::SSL::VERIFY_PEER
1625
- def download_uri: (URI uri, ?verify_mode: Integer) -> Object
1630
+ def download_uri: (URI::Generic uri, ?verify_mode: Integer) -> Object
1626
1631
 
1627
1632
  # sord duck - #read_body looks like a duck type, replacing with untyped
1628
1633
  # _@param_ `response`
1629
1634
  def write_tempfile_from_response: (untyped response) -> void
1630
1635
 
1636
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1631
1637
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
1632
1638
  # _@param_ `url`
1633
1639
  #
@@ -1638,18 +1644,19 @@ module Checkoff
1638
1644
  # _@param_ `verify_mode` — - e.g., OpenSSL::SSL::VERIFY_NONE,OpenSSL::SSL::VERIFY_PEER
1639
1645
  def create_attachment_from_downloaded_url!: (
1640
1646
  String url,
1641
- Asana::Resources::Resource resource,
1647
+ Asana::Resources::Task resource,
1642
1648
  attachment_name: String?,
1643
1649
  ?verify_mode: Integer
1644
1650
  ) -> Asana::Resources::Attachment
1645
1651
 
1652
+ # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1646
1653
  # sord warn - Asana::Resources::Attachment wasn't able to be resolved to a constant in this project
1647
1654
  # _@param_ `url`
1648
1655
  #
1649
1656
  # _@param_ `resource`
1650
1657
  #
1651
1658
  # _@param_ `attachment_name`
1652
- def create_attachment_from_url_alone!: (String url, Asana::Resources::Resource resource, attachment_name: String?) -> Asana::Resources::Attachment
1659
+ def create_attachment_from_url_alone!: (String url, Asana::Resources::Task resource, attachment_name: String?) -> Asana::Resources::Attachment
1653
1660
 
1654
1661
  # _@param_ `filename`
1655
1662
  def content_type_from_filename: (String filename) -> String?
@@ -1679,7 +1686,7 @@ module Checkoff
1679
1686
  # _@param_ `message`
1680
1687
  def finer: (?Object? message) -> void
1681
1688
 
1682
- # @sg-ignore
1689
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1683
1690
  def log_level: () -> Symbol
1684
1691
 
1685
1692
  attr_reader workspaces: Checkoff::Workspaces
@@ -1714,7 +1721,7 @@ module Checkoff
1714
1721
  ) -> void
1715
1722
 
1716
1723
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
1717
- # @sg-ignore
1724
+ # @sg-ignore nil check above is not flow-sensitive
1718
1725
  #
1719
1726
  # _@param_ `workspace_name`
1720
1727
  #
@@ -1736,7 +1743,9 @@ module Checkoff
1736
1743
 
1737
1744
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1738
1745
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1739
- # @sg-ignore
1746
+ # @sg-ignore Declared return type Array<String> does not match inferred type Array,Array<Array> —
1747
+ # fixing cleanly needs binding enum_value.fetch('name') to a typed local; leaving for a
1748
+ # follow-up code PR to keep this one annotation-only.
1740
1749
  #
1741
1750
  # _@param_ `resource`
1742
1751
  #
@@ -1752,7 +1761,7 @@ module Checkoff
1752
1761
 
1753
1762
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1754
1763
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1755
- # @sg-ignore
1764
+ # @sg-ignore nil check above is not flow-sensitive
1756
1765
  #
1757
1766
  # _@param_ `resource`
1758
1767
  #
@@ -1761,14 +1770,16 @@ module Checkoff
1761
1770
 
1762
1771
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
1763
1772
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
1764
- # @sg-ignore
1773
+ # @sg-ignore nil check above is not flow-sensitive
1765
1774
  #
1766
1775
  # _@param_ `resource`
1767
1776
  #
1768
1777
  # _@param_ `custom_field_gid`
1769
1778
  def resource_custom_field_by_gid_or_raise: ((Asana::Resources::Project | Asana::Resources::Task) resource, String custom_field_gid) -> ::Hash[untyped, untyped]
1770
1779
 
1771
- # @sg-ignore
1780
+ # @sg-ignore Declared return type Array<Hash> does not match inferred type Array,Hash,Array<Hash> —
1781
+ # fixing cleanly needs restructuring the case/when to bind each branch to a typed local; leaving
1782
+ # for a follow-up code PR to keep this one annotation-only.
1772
1783
  #
1773
1784
  # _@param_ `custom_field`
1774
1785
  def resource_custom_field_enum_values: (::Hash[String, (::Hash[untyped, untyped] | ::Array[::Hash[untyped, untyped]])] custom_field) -> ::Array[::Hash[untyped, untyped]]
@@ -1898,10 +1909,11 @@ module Checkoff
1898
1909
  # _@param_ `extra_fields`
1899
1910
  def iterated_raw_task_search: (::Hash[String, Object] api_params, workspace_gid: String, extra_fields: ::Array[String]) -> ::Enumerable[Asana::Resources::Task]
1900
1911
 
1901
- # @sg-ignore
1912
+ # @sg-ignore return type could not be inferred — bracket access on a Hash{Symbol=>undefined}
1913
+ # local doesn't narrow even with a T.cast on the return expression
1902
1914
  #
1903
1915
  # _@param_ `extra_fields`
1904
- def calculate_api_options: (::Array[String] extra_fields) -> ::Hash[Symbol, untyped]
1916
+ def calculate_api_options: (::Array[String] extra_fields) -> ::Hash[Symbol, ::Array[String]]
1905
1917
 
1906
1918
  def self.run: () -> void
1907
1919
 
@@ -1922,7 +1934,7 @@ module Checkoff
1922
1934
  # _@param_ `message`
1923
1935
  def finer: (?Object? message) -> void
1924
1936
 
1925
- # @sg-ignore
1937
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
1926
1938
  def log_level: () -> Symbol
1927
1939
 
1928
1940
  attr_reader task_selectors: Checkoff::TaskSelectors
@@ -1968,13 +1980,13 @@ module Checkoff
1968
1980
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
1969
1981
  def filter_via_task_selector: (Asana::Resources::Task task, (Symbol | ::Array[(Symbol | Integer | ::Array[untyped])]) task_selector) -> bool
1970
1982
 
1971
- # @sg-ignore
1983
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1972
1984
  def self.project_name: () -> String
1973
1985
 
1974
- # @sg-ignore
1986
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1975
1987
  def self.workspace_name: () -> String
1976
1988
 
1977
- # @sg-ignore
1989
+ # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
1978
1990
  def self.task_selector: () -> [Symbol, ::Array[untyped]]
1979
1991
 
1980
1992
  def self.run: () -> void
@@ -2146,13 +2158,15 @@ module Checkoff
2146
2158
  ) -> void
2147
2159
 
2148
2160
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2149
- # @sg-ignore
2161
+ # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
2162
+ # union receiver
2150
2163
  #
2151
2164
  # _@param_ `task`
2152
2165
  def start_time: (Asana::Resources::Task task) -> Time?
2153
2166
 
2154
2167
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2155
- # @sg-ignore
2168
+ # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
2169
+ # union receiver
2156
2170
  #
2157
2171
  # _@param_ `task`
2158
2172
  def due_time: (Asana::Resources::Task task) -> Time?
@@ -2186,7 +2200,8 @@ module Checkoff
2186
2200
  class ThreadLocal
2187
2201
  # sord warn - T wasn't able to be resolved to a constant in this project
2188
2202
  # sord warn - T wasn't able to be resolved to a constant in this project
2189
- # @sg-ignore
2203
+ # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
2204
+ # inference gap for #with_thread_local_variable
2190
2205
  #
2191
2206
  # _@param_ `name`
2192
2207
  #
@@ -2204,7 +2219,7 @@ module Checkoff
2204
2219
  # _@param_ `yaml_filename`
2205
2220
  def initialize: (::Hash[Symbol, untyped] config, Symbol sym, String yaml_filename) -> void
2206
2221
 
2207
- # @sg-ignore
2222
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2208
2223
  #
2209
2224
  # _@param_ `key`
2210
2225
  def []: (Symbol key) -> Object
@@ -2302,7 +2317,7 @@ module Checkoff
2302
2317
  def convert_custom_field_params: (::Hash[String, ::Array[String]] custom_field_params) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2303
2318
 
2304
2319
  # _@param_ `url_params`
2305
- def partition_url_params: (::Hash[String, String] url_params) -> [::Hash[String, ::Array[String]], ::Hash[String, ::Array[String]], ::Hash[String, ::Array[String]]]
2320
+ def partition_url_params: (::Hash[String, ::Array[String]] url_params) -> [::Hash[String, ::Array[String]], ::Hash[String, ::Array[String]], ::Hash[String, ::Array[String]]]
2306
2321
  end
2307
2322
 
2308
2323
  # Merge task selectors and search API arguments
@@ -2310,10 +2325,8 @@ module Checkoff
2310
2325
  # _@param_ `args`
2311
2326
  def self.merge_args: (*::Array[::Hash[String, String]] args) -> ::Hash[String, String]
2312
2327
 
2313
- # @sg-ignore
2314
- #
2315
2328
  # _@param_ `task_selectors`
2316
- def self.merge_task_selectors: (*::Array[(Symbol | ::Array[untyped])] task_selectors) -> [Symbol, ::Array[untyped], ::Array[untyped]]
2329
+ def self.merge_task_selectors: (*::Array[(Symbol | ::Array[untyped])] task_selectors) -> (Symbol | ::Array[untyped] | [Symbol, ::Array[untyped], ::Array[untyped]])
2317
2330
  end
2318
2331
 
2319
2332
  # https://developers.asana.com/docs/search-tasks-in-a-workspace
@@ -2404,7 +2417,7 @@ module Checkoff
2404
2417
  # _@param_ `date_url_params` — the simple params
2405
2418
  def initialize: (date_url_params: ::Hash[String, ::Array[String]]) -> void
2406
2419
 
2407
- # @sg-ignore
2420
+ # @sg-ignore out can genuinely be nil if none of the 3 known prefixes matched; relies on the raise above it
2408
2421
  def convert: () -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2409
2422
 
2410
2423
  # _@param_ `prefix`
@@ -2430,7 +2443,7 @@ module Checkoff
2430
2443
  # _@return_ — See https://developers.asana.com/docs/search-tasks-in-a-workspace
2431
2444
  def handle_within_next: (String prefix) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2432
2445
 
2433
- # @sg-ignore
2446
+ # @sg-ignore value.length == 1 guard above isn't inferred as narrowing value[0] to non-nil
2434
2447
  #
2435
2448
  # _@param_ `param_key`
2436
2449
  def get_single_param: (String param_key) -> String
@@ -2471,6 +2484,9 @@ module Checkoff
2471
2484
  # _@param_ `verb`
2472
2485
  def convert_from_projects_and_sections: (String verb) -> ::Array[String]
2473
2486
 
2487
+ # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
2488
+ def convert: () -> ::Array[String]
2489
+
2474
2490
  attr_reader key: String
2475
2491
 
2476
2492
  attr_reader values: ::Array[String]
@@ -2554,14 +2570,13 @@ module Checkoff
2554
2570
  def convert: () -> ::Hash[String, String]
2555
2571
 
2556
2572
  # https://developers.asana.com/docs/search-tasks-in-a-workspace
2557
- # @sg-ignore
2558
2573
  #
2559
2574
  # _@param_ `key` — the name of the search url param
2560
2575
  #
2561
2576
  # _@param_ `values` — the values of the search url param
2562
2577
  #
2563
- # _@return_ — the converted params
2564
- def convert_arg: (String key, ::Array[String] values) -> ::Hash[String, String]
2578
+ # _@return_ — the converted params, as an alternating key/value flat array
2579
+ def convert_arg: (String key, ::Array[String] values) -> ::Array[String]
2565
2580
 
2566
2581
  attr_reader simple_url_params: ::Hash[String, ::Array[String]]
2567
2582
  end
@@ -2578,14 +2593,14 @@ module Checkoff
2578
2593
 
2579
2594
  def by_custom_field: () -> ::Hash[String, ::Hash[untyped, untyped]]
2580
2595
 
2581
- # @sg-ignore
2596
+ # @sg-ignore `unless variant_class.nil?` return value isn't inferred as the declared tuple type
2582
2597
  #
2583
2598
  # _@param_ `gid`
2584
2599
  #
2585
2600
  # _@param_ `single_custom_field_params`
2586
2601
  def convert_single_custom_field_params: (String gid, ::Hash[String, ::Array[String]] single_custom_field_params) -> [::Hash[String, String], ::Array[(Symbol | ::Array[untyped])]]
2587
2602
 
2588
- # @sg-ignore
2603
+ # @sg-ignore split(...)[n]'s nilable Array indexing isn't inferred as the declared String return
2589
2604
  #
2590
2605
  # _@param_ `key`
2591
2606
  def gid_from_custom_field_key: (String key) -> String
@@ -2663,7 +2678,7 @@ module Checkoff
2663
2678
  # _@param_ `message`
2664
2679
  def finer: (?Object? message) -> void
2665
2680
 
2666
- # @sg-ignore
2681
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2667
2682
  def log_level: () -> Symbol
2668
2683
  end
2669
2684
 
@@ -2723,10 +2738,8 @@ module Checkoff
2723
2738
  # _@param_ `resource_type`
2724
2739
  def enrich_gid: (String gid, ?resource_type: String?) -> [untyped, untyped, untyped, untyped]
2725
2740
 
2726
- # @sg-ignore
2727
- #
2728
2741
  # _@param_ `filter`
2729
- def enrich_filter_parent_gid!: (::Hash[String, (String | ::Array[String])] filter) -> String?
2742
+ def enrich_filter_parent_gid!: (::Hash[String, (String | ::Array[String])] filter) -> void
2730
2743
 
2731
2744
  # _@param_ `filter`
2732
2745
  def enrich_filter_resource!: (::Hash[String, (String | ::Array[String])] filter) -> void
@@ -2734,13 +2747,11 @@ module Checkoff
2734
2747
  # _@param_ `filter`
2735
2748
  def enrich_filter_section!: (::Hash[String, (String | ::Array[String])] filter) -> void
2736
2749
 
2737
- # sord warn - "'resource'" does not appear to be a type
2738
2750
  # _@param_ `asana_event`
2739
- def enrich_event_parent!: (::Hash[untyped, ::Hash[untyped, untyped]] asana_event) -> void
2751
+ def enrich_event_parent!: (::Hash[untyped, untyped] asana_event) -> void
2740
2752
 
2741
- # sord warn - "'resource'" does not appear to be a type
2742
2753
  # _@param_ `asana_event`
2743
- def enrich_event_resource!: (::Hash[untyped, ::Hash[untyped, untyped]] asana_event) -> void
2754
+ def enrich_event_resource!: (::Hash[untyped, untyped] asana_event) -> void
2744
2755
 
2745
2756
  def logger: () -> ::Logger
2746
2757
 
@@ -2759,7 +2770,7 @@ module Checkoff
2759
2770
  # _@param_ `message`
2760
2771
  def finer: (?Object? message) -> void
2761
2772
 
2762
- # @sg-ignore
2773
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
2763
2774
  def log_level: () -> Symbol
2764
2775
 
2765
2776
  attr_reader projects: Checkoff::Projects
@@ -2784,18 +2795,18 @@ module Checkoff
2784
2795
 
2785
2796
  def initializer_kwargs: () -> ::Hash[untyped, untyped]
2786
2797
 
2787
- # @sg-ignore
2798
+ # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
2788
2799
  def function_evaluators: () -> ::Array[singleton(Checkoff::SelectorClasses::FunctionEvaluator)]
2789
2800
 
2790
2801
  # _@param_ `selector`
2791
2802
  #
2792
2803
  # _@param_ `evaluator`
2793
- def evaluate_args: (::Array[untyped] selector, Checkoff::SelectorClasses::FunctionEvaluator evaluator) -> ::Array[untyped]
2804
+ def evaluate_args: ((Symbol | ::Array[untyped]) selector, Checkoff::SelectorClasses::FunctionEvaluator evaluator) -> ::Array[untyped]
2794
2805
 
2795
2806
  # _@param_ `selector`
2796
2807
  #
2797
2808
  # _@param_ `evaluator`
2798
- def try_this_evaluator: (::Array[untyped] selector, Checkoff::SelectorClasses::FunctionEvaluator evaluator) -> (bool | Object)?
2809
+ def try_this_evaluator: ((Symbol | ::Array[untyped]) selector, Checkoff::SelectorClasses::FunctionEvaluator evaluator) -> (bool | Object)?
2799
2810
 
2800
2811
  attr_reader item: Asana::Resources::Resource
2801
2812
  end
@@ -2822,8 +2833,6 @@ module Checkoff
2822
2833
  def evaluate_arg?: (Integer _index) -> bool
2823
2834
 
2824
2835
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2825
- # @sg-ignore
2826
- #
2827
2836
  # _@param_ `task`
2828
2837
  #
2829
2838
  # _@param_ `section_name_prefix`
@@ -2838,8 +2847,6 @@ module Checkoff
2838
2847
  def evaluate_arg?: (Integer _index) -> bool
2839
2848
 
2840
2849
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2841
- # @sg-ignore
2842
- #
2843
2850
  # _@param_ `task`
2844
2851
  #
2845
2852
  # _@param_ `section_name`
@@ -2854,7 +2861,8 @@ module Checkoff
2854
2861
  def evaluate_arg?: (Integer _index) -> bool
2855
2862
 
2856
2863
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2857
- # @sg-ignore
2864
+ # @sg-ignore Hash#fetch generic<X> leak on rbs >= 4.1.0, fix in progress upstream
2865
+ # https://github.com/castwide/solargraph/pull/1228
2858
2866
  #
2859
2867
  # _@param_ `task`
2860
2868
  #
@@ -2884,8 +2892,6 @@ module Checkoff
2884
2892
  def evaluate_arg?: (Integer _index) -> bool
2885
2893
 
2886
2894
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2887
- # @sg-ignore
2888
- #
2889
2895
  # _@param_ `task`
2890
2896
  #
2891
2897
  # _@param_ `tag_name`
@@ -3036,7 +3042,8 @@ module Checkoff
3036
3042
  def evaluate_arg?: (Integer _index) -> bool
3037
3043
 
3038
3044
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3039
- # @sg-ignore
3045
+ # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
3046
+ # return type could not be inferred
3040
3047
  #
3041
3048
  # _@param_ `task`
3042
3049
  def evaluate: (Asana::Resources::Task task) -> bool
@@ -3185,10 +3192,6 @@ module Checkoff
3185
3192
 
3186
3193
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3187
3194
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3188
- # @sg-ignore
3189
- # @sg-ignore
3190
- # @sg-ignore
3191
- #
3192
3195
  # _@param_ `resource`
3193
3196
  #
3194
3197
  # _@param_ `custom_field_gid`
@@ -3205,9 +3208,6 @@ module Checkoff
3205
3208
 
3206
3209
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3207
3210
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3208
- # @sg-ignore
3209
- # @sg-ignore
3210
- #
3211
3211
  # _@param_ `resource`
3212
3212
  #
3213
3213
  # _@param_ `custom_field_gid`
@@ -3226,9 +3226,6 @@ module Checkoff
3226
3226
 
3227
3227
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3228
3228
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3229
- # @sg-ignore
3230
- # @sg-ignore
3231
- #
3232
3229
  # _@param_ `resource`
3233
3230
  #
3234
3231
  # _@param_ `custom_field_name`
@@ -3267,7 +3264,8 @@ module Checkoff
3267
3264
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3268
3265
  # sord warn - boolish is probably not a type, but using anyway
3269
3266
  # sord warn - boolish wasn't able to be resolved to a constant in this project
3270
- # @sg-ignore
3267
+ # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
3268
+ # return type could not be inferred
3271
3269
  #
3272
3270
  # _@param_ `resource`
3273
3271
  #
@@ -3281,7 +3279,7 @@ module Checkoff
3281
3279
 
3282
3280
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3283
3281
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3284
- # @sg-ignore
3282
+ # @sg-ignore selector is only String here per matches?'s is_a?(String) check, in another method
3285
3283
  #
3286
3284
  # _@param_ `_resource`
3287
3285
  def evaluate: ((Asana::Resources::Task | Asana::Resources::Project) _resource) -> String
@@ -3297,6 +3295,8 @@ module Checkoff
3297
3295
  def initialize: (selector: ([Symbol, ::Array[untyped]] | String), custom_fields: Checkoff::CustomFields, **::Hash[untyped, untyped] _kwargs) -> void
3298
3296
 
3299
3297
  attr_reader selector: ([Symbol, ::Array[untyped]] | String)
3298
+
3299
+ attr_reader custom_fields: Checkoff::CustomFields
3300
3300
  end
3301
3301
  end
3302
3302
 
@@ -3309,7 +3309,7 @@ module Checkoff
3309
3309
  def matches?: () -> bool
3310
3310
 
3311
3311
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3312
- # @sg-ignore
3312
+ # @sg-ignore nilable return from an @!parse-declared method isn't inferred
3313
3313
  #
3314
3314
  # _@param_ `resource`
3315
3315
  def evaluate: (Asana::Resources::Project resource) -> String?
@@ -3322,8 +3322,6 @@ module Checkoff
3322
3322
  def matches?: () -> bool
3323
3323
 
3324
3324
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3325
- # @sg-ignore
3326
- #
3327
3325
  # _@param_ `project`
3328
3326
  #
3329
3327
  # _@param_ `period` — - :now_or_before or :this_week
@@ -3337,10 +3335,6 @@ module Checkoff
3337
3335
  def matches?: () -> bool
3338
3336
 
3339
3337
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3340
- # @sg-ignore
3341
- #
3342
- # @sg-ignore
3343
- #
3344
3338
  # _@param_ `project`
3345
3339
  #
3346
3340
  # _@param_ `portfolio_name`
@@ -3376,6 +3370,12 @@ module Checkoff
3376
3370
  ) -> void
3377
3371
 
3378
3372
  attr_reader selector: [Symbol, ::Array[untyped]]
3373
+
3374
+ attr_reader projects: Checkoff::Projects
3375
+
3376
+ attr_reader portfolios: Checkoff::Portfolios
3377
+
3378
+ attr_reader workspaces: Checkoff::Workspaces
3379
3379
  end
3380
3380
  end
3381
3381
 
@@ -3388,7 +3388,7 @@ module Checkoff
3388
3388
  def matches?: () -> bool
3389
3389
 
3390
3390
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3391
- # @sg-ignore
3391
+ # @sg-ignore String, nil safe-nav chain isn't inferred as returning Boolean
3392
3392
  #
3393
3393
  # _@param_ `section`
3394
3394
  def evaluate: (Asana::Resources::Section section) -> bool
@@ -3401,8 +3401,6 @@ module Checkoff
3401
3401
  def matches?: () -> bool
3402
3402
 
3403
3403
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3404
- # @sg-ignore
3405
- #
3406
3404
  # _@param_ `section`
3407
3405
  def evaluate: (Asana::Resources::Section section) -> bool
3408
3406
  end
@@ -3428,6 +3426,8 @@ module Checkoff
3428
3426
 
3429
3427
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
3430
3428
  attr_reader client: Asana::Client
3429
+
3430
+ attr_reader sections: Checkoff::Sections
3431
3431
  end
3432
3432
  end
3433
3433
 
@@ -3438,11 +3438,11 @@ module Checkoff
3438
3438
  # _@param_ `_index`
3439
3439
  def evaluate_arg?: (Integer _index) -> bool
3440
3440
 
3441
- # @sg-ignore
3441
+ # @sg-ignore return type could not be inferred — abstract method body is only `raise`
3442
3442
  def matches?: () -> bool
3443
3443
 
3444
3444
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3445
- # @sg-ignore
3445
+ # @sg-ignore return type could not be inferred — abstract method body is only `raise`
3446
3446
  #
3447
3447
  # _@param_ `_task`
3448
3448
  #
@@ -3454,6 +3454,19 @@ module Checkoff
3454
3454
  # _@param_ `fn_name`
3455
3455
  def fn?: (Object object, Symbol fn_name) -> bool
3456
3456
 
3457
+ # Concrete subclasses each declare their own initialize with their
3458
+ # specific keyword args (and set @selector themselves before calling
3459
+ # super()); this signature exists only so Solargraph can resolve
3460
+ # `evaluator_class.new(selector:, **kwargs)` call sites that hold a
3461
+ # `Class<FunctionEvaluator>` reference rather than a concrete subclass -
3462
+ # deliberately a no-op so a bare `super()` call from those subclasses
3463
+ # can't clobber the @selector they already set.
3464
+ #
3465
+ # _@param_ `selector`
3466
+ #
3467
+ # _@param_ `_kwargs`
3468
+ def initialize: (?selector: (Symbol | ::Array[untyped] | String)?, **::Hash[untyped, untyped] _kwargs) -> void
3469
+
3457
3470
  def logger: () -> ::Logger
3458
3471
 
3459
3472
  # _@param_ `message`
@@ -3471,7 +3484,7 @@ module Checkoff
3471
3484
  # _@param_ `message`
3472
3485
  def finer: (?Object? message) -> void
3473
3486
 
3474
- # @sg-ignore
3487
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3475
3488
  def log_level: () -> Symbol
3476
3489
  end
3477
3490
  end
@@ -3616,7 +3629,7 @@ module Logging
3616
3629
  # _@param_ `message`
3617
3630
  def finer: (?Object? message) -> void
3618
3631
 
3619
- # @sg-ignore
3632
+ # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3620
3633
  def log_level: () -> Symbol
3621
3634
  end
3622
3635