checkoff 0.258.0 → 0.261.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/checkoff/attachments.rb +14 -15
  3. data/lib/checkoff/cli.rb +7 -12
  4. data/lib/checkoff/clients.rb +0 -2
  5. data/lib/checkoff/custom_fields.rb +13 -24
  6. data/lib/checkoff/internal/asana_event_enrichment.rb +11 -21
  7. data/lib/checkoff/internal/asana_event_filter.rb +1 -5
  8. data/lib/checkoff/internal/config_loader.rb +0 -2
  9. data/lib/checkoff/internal/logging.rb +0 -2
  10. data/lib/checkoff/internal/project_hashes.rb +26 -4
  11. data/lib/checkoff/internal/search_url/custom_field_param_converter.rb +9 -10
  12. data/lib/checkoff/internal/search_url/custom_field_variant.rb +7 -2
  13. data/lib/checkoff/internal/search_url/date_param_converter.rb +13 -10
  14. data/lib/checkoff/internal/search_url/parser.rb +2 -7
  15. data/lib/checkoff/internal/search_url/simple_param_converter.rb +1 -4
  16. data/lib/checkoff/internal/section_selector_evaluator.rb +1 -1
  17. data/lib/checkoff/internal/selector_classes/common/function_evaluator.rb +2 -2
  18. data/lib/checkoff/internal/selector_classes/common.rb +2 -3
  19. data/lib/checkoff/internal/selector_classes/function_evaluator.rb +9 -4
  20. data/lib/checkoff/internal/selector_classes/project/function_evaluator.rb +2 -2
  21. data/lib/checkoff/internal/selector_classes/project.rb +0 -1
  22. data/lib/checkoff/internal/selector_classes/section/function_evaluator.rb +2 -2
  23. data/lib/checkoff/internal/selector_classes/section.rb +1 -2
  24. data/lib/checkoff/internal/selector_classes/task/function_evaluator.rb +2 -2
  25. data/lib/checkoff/internal/selector_classes/task.rb +2 -26
  26. data/lib/checkoff/internal/selector_evaluator.rb +6 -5
  27. data/lib/checkoff/internal/task_hashes.rb +17 -9
  28. data/lib/checkoff/internal/task_timing.rb +0 -4
  29. data/lib/checkoff/internal/thread_local.rb +0 -2
  30. data/lib/checkoff/monkeypatches/resource_marshalling.rb +3 -3
  31. data/lib/checkoff/my_tasks.rb +1 -4
  32. data/lib/checkoff/portfolios.rb +0 -1
  33. data/lib/checkoff/project_selectors.rb +1 -1
  34. data/lib/checkoff/projects.rb +19 -8
  35. data/lib/checkoff/resources.rb +14 -3
  36. data/lib/checkoff/sections.rb +9 -9
  37. data/lib/checkoff/subtasks.rb +1 -2
  38. data/lib/checkoff/tags.rb +3 -4
  39. data/lib/checkoff/task_searches.rb +1 -8
  40. data/lib/checkoff/task_selectors.rb +25 -12
  41. data/lib/checkoff/tasks.rb +6 -14
  42. data/lib/checkoff/timelines.rb +3 -20
  43. data/lib/checkoff/timing.rb +1 -2
  44. data/lib/checkoff/version.rb +1 -1
  45. data/lib/checkoff/workspaces.rb +1 -7
  46. data/rbi/checkoff.rbi +99 -146
  47. data/sig/checkoff.rbs +86 -153
  48. metadata +2 -2
data/rbi/checkoff.rbi CHANGED
@@ -82,7 +82,7 @@ module Overcommit
82
82
  end
83
83
 
84
84
  module Checkoff
85
- VERSION = '0.258.0'
85
+ VERSION = '0.261.0'
86
86
 
87
87
  class Attachments
88
88
  include Logging
@@ -811,6 +811,9 @@ module Checkoff
811
811
  sig { params(gid: T.untyped, resource_type: T.untyped).returns(T.untyped) }
812
812
  def resource_by_gid(gid, resource_type: nil); end
813
813
 
814
+ sig { params(resource_type: T.untyped, gid: T.untyped).returns(T.untyped) }
815
+ def fetch_gid_by_type(resource_type, gid); end
816
+
814
817
  sig { params(gid: T.untyped).returns(T.untyped) }
815
818
  def fetch_task_gid(gid); end
816
819
 
@@ -1195,13 +1198,16 @@ module Checkoff
1195
1198
  attr_reader :custom_fields
1196
1199
 
1197
1200
  sig { returns(T.untyped) }
1198
- def self.project_name; end
1201
+ def self.task_selector; end
1202
+
1203
+ sig { params(parsed: T.untyped).returns(T.untyped) }
1204
+ def self.validate_task_selector(parsed); end
1199
1205
 
1200
1206
  sig { returns(T.untyped) }
1201
- def self.workspace_name; end
1207
+ def self.project_name; end
1202
1208
 
1203
1209
  sig { returns(T.untyped) }
1204
- def self.task_selector; end
1210
+ def self.workspace_name; end
1205
1211
 
1206
1212
  sig { returns(T.untyped) }
1207
1213
  def self.run; end
@@ -1630,6 +1636,9 @@ module Checkoff
1630
1636
  sig { params(task_hash: T.untyped, memberships: T.untyped).returns(T.untyped) }
1631
1637
  def add_user_task_list(task_hash, memberships); end
1632
1638
 
1639
+ sig { params(task_hash: T.untyped).returns(T.untyped) }
1640
+ def assignee_hash(task_hash); end
1641
+
1633
1642
  sig do
1634
1643
  params(
1635
1644
  task_hash: T.untyped,
@@ -1721,6 +1730,9 @@ module Checkoff
1721
1730
  sig { params(gid: T.untyped, remaining_params: T.untyped).void }
1722
1731
  def initialize(gid, remaining_params); end
1723
1732
 
1733
+ sig { returns(T.untyped) }
1734
+ def convert; end
1735
+
1724
1736
  sig { returns(T.untyped) }
1725
1737
  attr_reader :gid
1726
1738
 
@@ -1798,6 +1810,9 @@ module Checkoff
1798
1810
  sig { returns(T.untyped) }
1799
1811
  def convert; end
1800
1812
 
1813
+ sig { params(out: T.untyped).returns(T.untyped) }
1814
+ def ensure_matched!(out); end
1815
+
1801
1816
  sig { params(prefix: T.untyped).returns(T.untyped) }
1802
1817
  def convert_for_prefix(prefix); end
1803
1818
 
@@ -2470,7 +2485,7 @@ end
2470
2485
  # typed: ignore
2471
2486
  # Command-line and gem client for Asana (unofficial)
2472
2487
  module Checkoff
2473
- VERSION = T.let('0.258.0', T.untyped)
2488
+ VERSION = T.let('0.261.0', T.untyped)
2474
2489
 
2475
2490
  # Move tasks from one place to another
2476
2491
  class MvSubcommand
@@ -2617,7 +2632,7 @@ module Checkoff
2617
2632
  workspace_name: String,
2618
2633
  project_name: T.any(String, Symbol),
2619
2634
  section_name: T.nilable(T.any(String, Symbol)),
2620
- task_name: T.nilable(T.any(String, Symbol)),
2635
+ task_name: T.nilable(String),
2621
2636
  config: T.any(Checkoff::Internal::EnvFallbackConfigLoader, T::Hash[T.untyped, T.untyped]),
2622
2637
  projects: Checkoff::Projects,
2623
2638
  sections: Checkoff::Sections,
@@ -2813,8 +2828,6 @@ module Checkoff
2813
2828
  def tasks_by_tag_gid(workspace_name, tag_gid, only_uncompleted: true, extra_fields: []); end
2814
2829
 
2815
2830
  # sord warn - Asana::Resources::Tag wasn't able to be resolved to a constant in this project
2816
- # @sg-ignore nil check above is not flow-sensitive
2817
- #
2818
2831
  # _@param_ `workspace_name`
2819
2832
  #
2820
2833
  # _@param_ `tag_name`
@@ -2885,7 +2898,7 @@ module Checkoff
2885
2898
  # _@param_ `asana_task`
2886
2899
  sig do
2887
2900
  params(
2888
- config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader),
2901
+ config: T.any(T::Hash[Symbol, Object], Checkoff::Internal::EnvFallbackConfigLoader),
2889
2902
  client: Asana::Client,
2890
2903
  workspaces: Checkoff::Workspaces,
2891
2904
  sections: Checkoff::Sections,
@@ -2994,9 +3007,6 @@ module Checkoff
2994
3007
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
2995
3008
  # Add a task
2996
3009
  #
2997
- # @sg-ignore @asana_task.create return type could not be inferred — calling a class method
2998
- # through a Class<T>-typed ivar is a known Solargraph dispatch limitation
2999
- #
3000
3010
  # _@param_ `name`
3001
3011
  #
3002
3012
  # _@param_ `workspace_gid`
@@ -3049,14 +3059,12 @@ module Checkoff
3049
3059
 
3050
3060
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3051
3061
  # _@param_ `task_data`
3052
- sig { params(task_data: T::Hash[T.untyped, T.untyped]).returns(Asana::Resources::Task) }
3062
+ sig { params(task_data: T::Hash[String, Object]).returns(Asana::Resources::Task) }
3053
3063
  def h_to_task(task_data); end
3054
3064
 
3055
3065
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
3056
3066
  # True if the task is in a project which is in the given portfolio
3057
3067
  #
3058
- # @sg-ignore Checkoff::Tasks#in_portfolio_named? return type could not be inferred
3059
- #
3060
3068
  # _@param_ `task`
3061
3069
  #
3062
3070
  # _@param_ `portfolio_name`
@@ -3109,9 +3117,6 @@ module Checkoff
3109
3117
  sig { returns(Checkoff::Projects) }
3110
3118
  def projects; end
3111
3119
 
3112
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
3113
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
3114
- # unify #fetch across that union
3115
3120
  sig { returns(String) }
3116
3121
  def default_assignee_gid; end
3117
3122
 
@@ -3138,7 +3143,6 @@ module Checkoff
3138
3143
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3139
3144
  def finer(message = nil, &block); end
3140
3145
 
3141
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3142
3146
  sig { returns(Symbol) }
3143
3147
  def log_level; end
3144
3148
 
@@ -3246,7 +3250,6 @@ module Checkoff
3246
3250
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3247
3251
  def finer(message = nil, &block); end
3248
3252
 
3249
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3250
3253
  sig { returns(Symbol) }
3251
3254
  def log_level; end
3252
3255
 
@@ -3298,7 +3301,7 @@ module Checkoff
3298
3301
  # _@param_ `date_or_time`
3299
3302
  #
3300
3303
  # _@param_ `period` — Valid values: :this_week, :now_or_before, :indefinite, [:less_than_n_days_ago, Integer]
3301
- sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3304
+ sig { params(date_or_time: T.nilable(T.any(Date, Time)), period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3302
3305
  def in_period?(date_or_time, period); end
3303
3306
 
3304
3307
  # _@param_ `date_or_time`
@@ -3347,8 +3350,6 @@ module Checkoff
3347
3350
  sig { params(num_days: Integer).returns(ActiveSupport::TimeWithZone) }
3348
3351
  def n_days_from_now(num_days); end
3349
3352
 
3350
- # @sg-ignore Checkoff::Timing#n_days_from_today return type could not be inferred
3351
- #
3352
3353
  # _@param_ `num_days`
3353
3354
  sig { params(num_days: Integer).returns(Date) }
3354
3355
  def n_days_from_today(num_days); end
@@ -3395,7 +3396,6 @@ module Checkoff
3395
3396
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3396
3397
  def finer(message = nil, &block); end
3397
3398
 
3398
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3399
3399
  sig { returns(Symbol) }
3400
3400
  def log_level; end
3401
3401
  end
@@ -3520,6 +3520,12 @@ module Checkoff
3520
3520
 
3521
3521
  # Default options used in Asana API to pull tasks
3522
3522
  #
3523
+ # Keys are :per_page (Integer), :options (a Hash whose :fields is an
3524
+ # Array<String>) and, when only_uncompleted is set, :completed_since
3525
+ # (String). The value type is genuinely per-key, which a single YARD
3526
+ # Hash value type cannot express.
3527
+ # Callers who want the field list should call #task_fields directly.
3528
+ #
3523
3529
  # _@param_ `extra_fields`
3524
3530
  #
3525
3531
  # _@param_ `only_uncompleted`
@@ -3548,8 +3554,6 @@ module Checkoff
3548
3554
  def project(workspace_name, project_name, extra_fields: []); end
3549
3555
 
3550
3556
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3551
- # @sg-ignore nil check above is not flow-sensitive
3552
- #
3553
3557
  # _@param_ `workspace_name`
3554
3558
  #
3555
3559
  # _@param_ `project_name` — - :my_tasks or a project name
@@ -3604,10 +3608,12 @@ module Checkoff
3604
3608
  def projects_by_workspace_name(workspace_name, extra_fields: []); end
3605
3609
 
3606
3610
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3611
+ # sord warn - "\"unwrapped\"" does not appear to be a type
3612
+ # sord warn - "Hash{\"custom_fields\" => Hash{String =" does not appear to be a type
3607
3613
  # _@param_ `project_obj`
3608
3614
  #
3609
- # _@param_ `project` — - :not_specified, :my_tasks or a project name
3610
- sig { params(project_obj: Asana::Resources::Project, project: T.any(String, Symbol)).returns(T::Hash[T.untyped, T.untyped]) }
3615
+ # _@param_ `project` — - a String is a project name
3616
+ sig { params(project_obj: Asana::Resources::Project, project: T.nilable(T.any(String, Symbol))).returns(T::Hash[T.untyped, T.untyped]) }
3611
3617
  def project_to_h(project_obj, project: :not_specified); end
3612
3618
 
3613
3619
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3621,7 +3627,7 @@ module Checkoff
3621
3627
  # _@param_ `project`
3622
3628
  #
3623
3629
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3624
- sig { params(project: Asana::Resources::Project, period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3630
+ sig { params(project: Asana::Resources::Project, period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3625
3631
  def project_ready?(project, period: :now_or_before); end
3626
3632
 
3627
3633
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
@@ -3630,7 +3636,7 @@ module Checkoff
3630
3636
  # _@param_ `field_name`
3631
3637
  #
3632
3638
  # _@param_ `period` — See Checkoff::Timing#in_period? - :now_or_before,:this_week
3633
- sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, [Symbol, Integer])).returns(T::Boolean) }
3639
+ sig { params(project: Asana::Resources::Project, field_name: T.any(Symbol, T::Array[T.untyped]), period: T.any(Symbol, T::Array[T.any(Symbol, Integer)])).returns(T::Boolean) }
3634
3640
  def in_period?(project, field_name, period); end
3635
3641
 
3636
3642
  sig { returns(T::Hash[T.untyped, T.untyped]) }
@@ -3668,7 +3674,6 @@ module Checkoff
3668
3674
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3669
3675
  def finer(message = nil, &block); end
3670
3676
 
3671
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3672
3677
  sig { returns(Symbol) }
3673
3678
  def log_level; end
3674
3679
 
@@ -3794,7 +3799,6 @@ module Checkoff
3794
3799
  def tasks(workspace_name, project_name, section_name, only_uncompleted: true, extra_fields: []); end
3795
3800
 
3796
3801
  # Pulls just names of tasks from a given section.
3797
- # @sg-ignore Task#name is nilable; task names are assumed present here
3798
3802
  #
3799
3803
  # _@param_ `workspace_name`
3800
3804
  #
@@ -3805,8 +3809,6 @@ module Checkoff
3805
3809
  def section_task_names(workspace_name, project_name, section_name); end
3806
3810
 
3807
3811
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
3808
- # @sg-ignore section() is nil-checked below
3809
- #
3810
3812
  # _@param_ `workspace_name`
3811
3813
  #
3812
3814
  # _@param_ `project_name`
@@ -3901,8 +3903,6 @@ module Checkoff
3901
3903
  def file_task_by_section(by_section, task, project_gid); end
3902
3904
 
3903
3905
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
3904
- # @sg-ignore projects.project may be nil but is raised below
3905
- #
3906
3906
  # _@param_ `workspace_name`
3907
3907
  #
3908
3908
  # _@param_ `project_name`
@@ -3932,7 +3932,6 @@ module Checkoff
3932
3932
  sig { params(message: T.nilable(Object), block: T.untyped).void }
3933
3933
  def finer(message = nil, &block); end
3934
3934
 
3935
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
3936
3935
  sig { returns(Symbol) }
3937
3936
  def log_level; end
3938
3937
 
@@ -4010,8 +4009,6 @@ module Checkoff
4010
4009
  # expected to move to the new-style way of representing sections
4011
4010
  # as memberships with a separate API within a task.
4012
4011
  #
4013
- # @sg-ignore Checkoff::Subtasks#subtask_section? return type could not be inferred
4014
- #
4015
4012
  # _@param_ `subtask`
4016
4013
  sig { params(subtask: Asana::Resources::Task).returns(T.nilable(T::Boolean)) }
4017
4014
  def subtask_section?(subtask); end
@@ -4101,6 +4098,12 @@ module Checkoff
4101
4098
  sig { void }
4102
4099
  def self.run; end
4103
4100
 
4101
+ # _@param_ `resource_type`
4102
+ #
4103
+ # _@param_ `gid`
4104
+ sig { params(resource_type: String, gid: String).returns(T.nilable(Asana::Resources::Resource)) }
4105
+ def fetch_gid_by_type(resource_type, gid); end
4106
+
4104
4107
  sig { returns(Checkoff::Workspaces) }
4105
4108
  attr_reader :workspaces
4106
4109
 
@@ -4185,7 +4188,7 @@ module Checkoff
4185
4188
  # _@param_ `task_data`
4186
4189
  #
4187
4190
  # _@param_ `section`
4188
- sig { params(task_data: T::Hash[T.untyped, T.untyped], section: Asana::Resources::Section).returns(T::Boolean) }
4191
+ sig { params(task_data: T::Hash[String, Object], section: Asana::Resources::Section).returns(T::Boolean) }
4189
4192
  def task_data_dependent_on_previous_section_last_milestone?(task_data, section); end
4190
4193
 
4191
4194
  sig { void }
@@ -4232,8 +4235,6 @@ module Checkoff
4232
4235
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), clients: Checkoff::Clients.new(config:), client: clients.client, projects: Checkoff::Projects.new(config:, client:), workspaces: Checkoff::Workspaces.new(config:, client:)); end
4233
4236
 
4234
4237
  # sord warn - Asana::Resources::Portfolio wasn't able to be resolved to a constant in this project
4235
- # @sg-ignore nil check above is not flow-sensitive
4236
- #
4237
4238
  # _@param_ `workspace_name`
4238
4239
  #
4239
4240
  # _@param_ `portfolio_name`
@@ -4304,7 +4305,7 @@ module Checkoff
4304
4305
  # _@param_ `client`
4305
4306
  #
4306
4307
  # _@param_ `asana_workspace`
4307
- sig { params(config: T.any(T::Hash[T.untyped, T.untyped], Checkoff::Internal::EnvFallbackConfigLoader), client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4308
+ sig { params(config: T.any(T::Hash[Symbol, Object], Checkoff::Internal::EnvFallbackConfigLoader), client: Asana::Client, asana_workspace: T.class_of(Asana::Resources::Workspace)).void }
4308
4309
  def initialize(config: Checkoff::Internal::ConfigLoader.load(:asana), client: Checkoff::Clients.new(config:).client, asana_workspace: Asana::Resources::Workspace); end
4309
4310
 
4310
4311
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
@@ -4315,21 +4316,14 @@ module Checkoff
4315
4316
  def workspace(workspace_name); end
4316
4317
 
4317
4318
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4318
- # @sg-ignore @asana_workspace.find_by_id return type could not be inferred — calling a
4319
- # class method through a Class<T>-typed ivar is a known Solargraph dispatch limitation
4320
4319
  sig { returns(Asana::Resources::Workspace) }
4321
4320
  def default_workspace; end
4322
4321
 
4323
4322
  # sord warn - Asana::Resources::Workspace wasn't able to be resolved to a constant in this project
4324
- # @sg-ignore workspace() is nil-checked below
4325
- #
4326
4323
  # _@param_ `workspace_name`
4327
4324
  sig { params(workspace_name: T.any(String, Symbol)).returns(Asana::Resources::Workspace) }
4328
4325
  def workspace_or_raise(workspace_name); end
4329
4326
 
4330
- # @sg-ignore @config.fetch return type could not be inferred — @config is intentionally
4331
- # dual-typed [Hash, EnvFallbackConfigLoader] throughout this codebase; Solargraph can't
4332
- # unify #fetch across that union
4333
4327
  sig { returns(String) }
4334
4328
  def default_workspace_gid; end
4335
4329
 
@@ -4469,7 +4463,6 @@ module Checkoff
4469
4463
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4470
4464
  def finer(message = nil, &block); end
4471
4465
 
4472
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4473
4466
  sig { returns(Symbol) }
4474
4467
  def log_level; end
4475
4468
 
@@ -4511,8 +4504,6 @@ module Checkoff
4511
4504
  client:)); end
4512
4505
 
4513
4506
  # sord warn - Asana::Resources::CustomField wasn't able to be resolved to a constant in this project
4514
- # @sg-ignore nil check above is not flow-sensitive
4515
- #
4516
4507
  # _@param_ `workspace_name`
4517
4508
  #
4518
4509
  # _@param_ `custom_field_name`
@@ -4536,10 +4527,6 @@ module Checkoff
4536
4527
 
4537
4528
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4538
4529
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4539
- # @sg-ignore Declared return type Array<String> does not match inferred type Array,Array<Array> —
4540
- # fixing cleanly needs binding enum_value.fetch('name') to a typed local; leaving for a
4541
- # follow-up code PR to keep this one annotation-only.
4542
- #
4543
4530
  # _@param_ `resource`
4544
4531
  #
4545
4532
  # _@param_ `custom_field_name`
@@ -4551,41 +4538,41 @@ module Checkoff
4551
4538
  # _@param_ `resource`
4552
4539
  #
4553
4540
  # _@param_ `custom_field_name`
4554
- sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
4541
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T.nilable(T::Hash[String, Object])) }
4555
4542
  def resource_custom_field_by_name(resource, custom_field_name); end
4556
4543
 
4557
4544
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4558
4545
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4559
- # @sg-ignore nil check above is not flow-sensitive
4560
- #
4561
4546
  # _@param_ `resource`
4562
4547
  #
4563
4548
  # _@param_ `custom_field_name`
4564
- sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T::Hash[T.untyped, T.untyped]) }
4549
+ sig { params(resource: T.any(Asana::Resources::Task, Asana::Resources::Project), custom_field_name: String).returns(T::Hash[String, Object]) }
4565
4550
  def resource_custom_field_by_name_or_raise(resource, custom_field_name); end
4566
4551
 
4567
4552
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
4568
4553
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
4569
- # @sg-ignore nil check above is not flow-sensitive
4570
- #
4571
4554
  # _@param_ `resource`
4572
4555
  #
4573
4556
  # _@param_ `custom_field_gid`
4574
- sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[T.untyped, T.untyped]) }
4557
+ sig { params(resource: T.any(Asana::Resources::Project, Asana::Resources::Task), custom_field_gid: String).returns(T::Hash[String, Object]) }
4575
4558
  def resource_custom_field_by_gid_or_raise(resource, custom_field_gid); end
4576
4559
 
4577
- # @sg-ignore Declared return type Array<Hash> does not match inferred type Array,Hash,Array<Hash>
4578
- # fixing cleanly needs restructuring the case/when to bind each branch to a typed local; leaving
4579
- # for a follow-up code PR to keep this one annotation-only.
4560
+ # sord warn - "\"resource_subtype\"" does not appear to be a type
4561
+ # sord warn - "String} & Hash{\"enum_value\"" does not appear to be a type
4562
+ # sord warn - "Hash} & Hash{\"multi_enum_values\"" does not appear to be a type
4563
+ # sord warn - "\"gid\"" does not appear to be a type
4564
+ # sord warn - "String} & Hash{\"name\"" does not appear to be a type
4565
+ # rubocop:disable Layout/LineLength, YARD/TagTypeSyntax
4566
+ # rubocop:enable Layout/LineLength, YARD/TagTypeSyntax
4580
4567
  #
4581
4568
  # _@param_ `custom_field`
4582
- sig { params(custom_field: T::Hash[String, T.any(T::Hash[T.untyped, T.untyped], T::Array[T::Hash[T.untyped, T.untyped]])]).returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
4569
+ sig { params(custom_field: T::Hash[T.untyped, T.any(T.untyped, T.any(T.untyped, T::Array[T::Hash[T.untyped, T.untyped]]))]).returns(T::Array[T::Hash[T.untyped, T.any(T.untyped, String)]]) }
4583
4570
  def resource_custom_field_enum_values(custom_field); end
4584
4571
 
4585
4572
  # _@param_ `custom_field`
4586
4573
  #
4587
4574
  # _@param_ `enum_value`
4588
- sig { params(custom_field: T::Hash[T.untyped, T.untyped], enum_value: T.nilable(T::Hash[String, String])).returns(T::Array[String]) }
4575
+ sig { params(custom_field: T::Hash[String, Object], enum_value: T.nilable(T::Hash[String, String])).returns(T::Array[String]) }
4589
4576
  def find_gids(custom_field, enum_value); end
4590
4577
 
4591
4578
  sig { void }
@@ -4721,9 +4708,6 @@ module Checkoff
4721
4708
  sig { params(api_params: T::Hash[String, Object], workspace_gid: String, extra_fields: T::Array[String]).returns(T::Enumerable[Asana::Resources::Task]) }
4722
4709
  def iterated_raw_task_search(api_params, workspace_gid:, extra_fields:); end
4723
4710
 
4724
- # @sg-ignore return type could not be inferred — bracket access on a Hash{Symbol=>undefined}
4725
- # local doesn't narrow even with a T.cast on the return expression
4726
- #
4727
4711
  # _@param_ `extra_fields`
4728
4712
  sig { params(extra_fields: T::Array[String]).returns(T::Hash[Symbol, T::Array[String]]) }
4729
4713
  def calculate_api_options(extra_fields); end
@@ -4754,7 +4738,6 @@ module Checkoff
4754
4738
  sig { params(message: T.nilable(Object), block: T.untyped).void }
4755
4739
  def finer(message = nil, &block); end
4756
4740
 
4757
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
4758
4741
  sig { returns(Symbol) }
4759
4742
  def log_level; end
4760
4743
 
@@ -4809,24 +4792,25 @@ module Checkoff
4809
4792
  # _@param_ `task`
4810
4793
  #
4811
4794
  # _@param_ `task_selector` — Filter based on task details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
4812
- sig { params(task: Asana::Resources::Task, task_selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T::Boolean) }
4795
+ sig { params(task: Asana::Resources::Task, task_selector: T.any(Symbol, T::Array[T.any(Symbol, String, Integer, T::Array[T.untyped])])).returns(T::Boolean) }
4813
4796
  def filter_via_task_selector(task, task_selector); end
4814
4797
 
4815
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4816
4798
  sig { returns(String) }
4817
4799
  def self.project_name; end
4818
4800
 
4819
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4820
4801
  sig { returns(String) }
4821
4802
  def self.workspace_name; end
4822
4803
 
4823
- # @sg-ignore `x || raise(...)` isn't inferred as narrowing away the nil branch
4824
4804
  sig { returns([Symbol, T::Array[T.untyped]]) }
4825
4805
  def self.task_selector; end
4826
4806
 
4827
4807
  sig { void }
4828
4808
  def self.run; end
4829
4809
 
4810
+ # _@param_ `parsed` — result of JSON.parse on a task selector
4811
+ sig { params(parsed: Object).returns([String, T::Array[T.untyped]]) }
4812
+ def self.validate_task_selector(parsed); end
4813
+
4830
4814
  sig { returns(Checkoff::Tasks) }
4831
4815
  attr_reader :tasks
4832
4816
 
@@ -4877,7 +4861,7 @@ module Checkoff
4877
4861
  # _@param_ `project`
4878
4862
  #
4879
4863
  # _@param_ `project_selector` — Filter based on project details. Examples: [:tag, 'foo'] [:not, [:tag, 'foo']] [:tag, 'foo']
4880
- sig { params(project: Asana::Resources::Project, project_selector: [Symbol, T::Array[T.untyped]]).returns(T::Boolean) }
4864
+ sig { params(project: Asana::Resources::Project, project_selector: T::Array[T.any(Symbol, String, T::Array[T.untyped])]).returns(T::Boolean) }
4881
4865
  def filter_via_project_selector(project, project_selector); end
4882
4866
 
4883
4867
  sig { void }
@@ -4971,7 +4955,7 @@ module Checkoff
4971
4955
  # _@param_ `task_data`
4972
4956
  #
4973
4957
  # _@param_ `client`
4974
- sig { params(task_data: T::Hash[T.untyped, T.untyped], client: Asana::Client).returns(Asana::Resources::Task) }
4958
+ sig { params(task_data: T::Hash[String, Object], client: Asana::Client).returns(Asana::Resources::Task) }
4975
4959
  def h_to_task(task_data, client:); end
4976
4960
 
4977
4961
  # _@param_ `task_hash`
@@ -4993,7 +4977,7 @@ module Checkoff
4993
4977
  # _@param_ `key`
4994
4978
  sig do
4995
4979
  params(
4996
- task_hash: T::Hash[T.untyped, T.untyped],
4980
+ task_hash: T::Hash[String, Object],
4997
4981
  memberships: T::Array[T::Hash[T.untyped, T.untyped]],
4998
4982
  resource: String,
4999
4983
  key: String
@@ -5002,8 +4986,12 @@ module Checkoff
5002
4986
  def unwrap_memberships(task_hash, memberships, resource, key); end
5003
4987
 
5004
4988
  # _@param_ `task_hash`
5005
- sig { params(task_hash: T::Hash[T.untyped, T.untyped]).void }
4989
+ sig { params(task_hash: T::Hash[String, Object]).void }
5006
4990
  def unwrap_all_memberships(task_hash); end
4991
+
4992
+ # _@param_ `task_hash`
4993
+ sig { params(task_hash: T::Hash[String, T.any(String, T::Hash[T.untyped, T.untyped], T::Array[T.untyped])]).returns(T::Hash[String, Object]) }
4994
+ def assignee_hash(task_hash); end
5007
4995
  end
5008
4996
 
5009
4997
  # Utility methods for working with task dates and times
@@ -5027,17 +5015,11 @@ module Checkoff
5027
5015
  def initialize(time_class: Time, date_class: Date, client: Checkoff::Clients.new.client, custom_fields: Checkoff::CustomFields.new(client:)); end
5028
5016
 
5029
5017
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5030
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5031
- # union receiver
5032
- #
5033
5018
  # _@param_ `task`
5034
5019
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5035
5020
  def start_time(task); end
5036
5021
 
5037
5022
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5038
- # @sg-ignore return type could not be inferred — #to_time called via &. on a Date|Time
5039
- # union receiver
5040
- #
5041
5023
  # _@param_ `task`
5042
5024
  sig { params(task: Asana::Resources::Task).returns(T.nilable(Time)) }
5043
5025
  def due_time(task); end
@@ -5076,9 +5058,6 @@ module Checkoff
5076
5058
  class ThreadLocal
5077
5059
  # sord warn - T wasn't able to be resolved to a constant in this project
5078
5060
  # sord warn - T wasn't able to be resolved to a constant in this project
5079
- # @sg-ignore return type could not be inferred — Solargraph's generic/yield-return
5080
- # inference gap for #with_thread_local_variable
5081
- #
5082
5061
  # _@param_ `name`
5083
5062
  #
5084
5063
  # _@param_ `value`
@@ -5097,8 +5076,6 @@ module Checkoff
5097
5076
  sig { params(config: T::Hash[Symbol, T.untyped], sym: Symbol, yaml_filename: String).void }
5098
5077
  def initialize(config, sym, yaml_filename); end
5099
5078
 
5100
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5101
- #
5102
5079
  # _@param_ `key`
5103
5080
  sig { params(key: Symbol).returns(Object) }
5104
5081
  def [](key); end
@@ -5135,10 +5112,15 @@ module Checkoff
5135
5112
  def initialize(_deps = {}); end
5136
5113
 
5137
5114
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
5115
+ # sord warn - "\"unwrapped\"" does not appear to be a type
5116
+ # sord warn - "Hash{\"custom_fields\" => Hash{String =" does not appear to be a type
5117
+ # The two custom_fields entries below hold the same records: the top-level
5118
+ # array is what Asana returns, and unwrapped re-keys those records by name.
5119
+ #
5138
5120
  # _@param_ `project_obj`
5139
5121
  #
5140
- # _@param_ `project` — - :not_specified, :my_tasks
5141
- sig { params(project_obj: Asana::Resources::Project, project: T.any(String, Symbol)).returns(T::Hash[T.untyped, T.untyped]) }
5122
+ # _@param_ `project` — - a String is a project name
5123
+ sig { params(project_obj: Asana::Resources::Project, project: T.nilable(T.any(String, Symbol))).returns(T::Hash[T.untyped, T.untyped]) }
5142
5124
  def project_to_h(project_obj, project: :not_specified); end
5143
5125
 
5144
5126
  # _@param_ `project_hash`
@@ -5248,6 +5230,10 @@ module Checkoff
5248
5230
  sig { params(param_name: String).returns(String) }
5249
5231
  def fetch_solo_param(param_name); end
5250
5232
 
5233
+ # Implemented by every subclass.
5234
+ sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5235
+ def convert; end
5236
+
5251
5237
  sig { returns(String) }
5252
5238
  attr_reader :gid
5253
5239
 
@@ -5339,7 +5325,6 @@ module Checkoff
5339
5325
  sig { params(date_url_params: T::Hash[String, T::Array[String]]).void }
5340
5326
  def initialize(date_url_params:); end
5341
5327
 
5342
- # @sg-ignore out can genuinely be nil if none of the 3 known prefixes matched; relies on the raise above it
5343
5328
  sig { returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5344
5329
  def convert; end
5345
5330
 
@@ -5371,8 +5356,6 @@ module Checkoff
5371
5356
  sig { params(prefix: String).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5372
5357
  def handle_within_next(prefix); end
5373
5358
 
5374
- # @sg-ignore value.length == 1 guard above isn't inferred as narrowing value[0] to non-nil
5375
- #
5376
5359
  # _@param_ `param_key`
5377
5360
  sig { params(param_key: String).returns(String) }
5378
5361
  def get_single_param(param_key); end
@@ -5385,6 +5368,10 @@ module Checkoff
5385
5368
  sig { params(prefix: String).void }
5386
5369
  def validate_unit_is_day!(prefix); end
5387
5370
 
5371
+ # _@param_ `out`
5372
+ sig { params(out: T.nilable([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]])).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5373
+ def ensure_matched!(out); end
5374
+
5388
5375
  sig { returns(T::Hash[String, T::Array[String]]) }
5389
5376
  attr_reader :date_url_params
5390
5377
  end
@@ -5420,7 +5407,6 @@ module Checkoff
5420
5407
  sig { params(verb: String).returns(T::Array[String]) }
5421
5408
  def convert_from_projects_and_sections(verb); end
5422
5409
 
5423
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5424
5410
  sig { returns(T::Array[String]) }
5425
5411
  def convert; end
5426
5412
 
@@ -5577,16 +5563,12 @@ module Checkoff
5577
5563
  sig { returns(T::Hash[String, T::Hash[T.untyped, T.untyped]]) }
5578
5564
  def by_custom_field; end
5579
5565
 
5580
- # @sg-ignore `unless variant_class.nil?` return value isn't inferred as the declared tuple type
5581
- #
5582
5566
  # _@param_ `gid`
5583
5567
  #
5584
5568
  # _@param_ `single_custom_field_params`
5585
5569
  sig { params(gid: String, single_custom_field_params: T::Hash[String, T::Array[String]]).returns([T::Hash[String, String], T::Array[T.any(Symbol, T::Array[T.untyped])]]) }
5586
5570
  def convert_single_custom_field_params(gid, single_custom_field_params); end
5587
5571
 
5588
- # @sg-ignore split(...)[n]'s nilable Array indexing isn't inferred as the declared String return
5589
- #
5590
5572
  # _@param_ `key`
5591
5573
  sig { params(key: String).returns(String) }
5592
5574
  def gid_from_custom_field_key(key); end
@@ -5635,7 +5617,7 @@ module Checkoff
5635
5617
  # _@param_ `asana_event`
5636
5618
  #
5637
5619
  # _@param_ `failures`
5638
- sig { params(filter: T::Hash[T.untyped, T.untyped], asana_event: T::Hash[T.untyped, T.untyped], failures: T::Array[String]).returns(T::Boolean) }
5620
+ sig { params(filter: T::Hash[String, T.any(String, T::Array[String])], asana_event: T::Hash[T.untyped, T.untyped], failures: T::Array[String]).returns(T::Boolean) }
5639
5621
  def filter_matches_asana_event?(filter, asana_event, failures); end
5640
5622
 
5641
5623
  # _@param_ `key`
@@ -5678,7 +5660,6 @@ module Checkoff
5678
5660
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5679
5661
  def finer(message = nil, &block); end
5680
5662
 
5681
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5682
5663
  sig { returns(Symbol) }
5683
5664
  def log_level; end
5684
5665
  end
@@ -5789,7 +5770,6 @@ module Checkoff
5789
5770
  sig { params(message: T.nilable(Object), block: T.untyped).void }
5790
5771
  def finer(message = nil, &block); end
5791
5772
 
5792
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
5793
5773
  sig { returns(Symbol) }
5794
5774
  def log_level; end
5795
5775
 
@@ -5817,13 +5797,12 @@ module Checkoff
5817
5797
  # Base class to evaluate Asana resource selectors against an Asana resource
5818
5798
  class SelectorEvaluator
5819
5799
  # _@param_ `selector`
5820
- sig { params(selector: T.any(Symbol, T::Array[T.any(Symbol, Integer, T::Array[T.untyped])])).returns(T.nilable(T.any(T::Boolean, Object, T::Array[T.untyped]))) }
5800
+ sig { params(selector: T.any(Symbol, T::Array[T.any(Symbol, String, Integer, T::Array[T.untyped])])).returns(T.nilable(T.any(T::Boolean, Object, T::Array[T.untyped]))) }
5821
5801
  def evaluate(selector); end
5822
5802
 
5823
5803
  sig { returns(T::Hash[T.untyped, T.untyped]) }
5824
5804
  def initializer_kwargs; end
5825
5805
 
5826
- # @sg-ignore abstract method always raises; declared type documents the override contract, not this body
5827
5806
  sig { returns(T::Array[T.class_of(Checkoff::SelectorClasses::FunctionEvaluator)]) }
5828
5807
  def function_evaluators; end
5829
5808
 
@@ -5904,9 +5883,6 @@ module Checkoff
5904
5883
  def evaluate_arg?(_index); end
5905
5884
 
5906
5885
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5907
- # @sg-ignore Hash#fetch generic<X> leak on rbs >= 4.1.0, fix in progress upstream
5908
- # https://github.com/castwide/solargraph/pull/1228
5909
- #
5910
5886
  # _@param_ `task`
5911
5887
  #
5912
5888
  # _@param_ `project_name`
@@ -5996,9 +5972,6 @@ module Checkoff
5996
5972
  def matches?; end
5997
5973
 
5998
5974
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
5999
- # @sg-ignore Checkoff::SelectorClasses::Task::UnassignedPFunctionEvaluator#evaluate
6000
- # return type could not be inferred
6001
- #
6002
5975
  # _@param_ `task`
6003
5976
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6004
5977
  def evaluate(task); end
@@ -6012,9 +5985,6 @@ module Checkoff
6012
5985
  def matches?; end
6013
5986
 
6014
5987
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6015
- # @sg-ignore Checkoff::SelectorClasses::Task::DueDateSetPFunctionEvaluator#evaluate
6016
- # return type could not be inferred
6017
- #
6018
5988
  # _@param_ `task`
6019
5989
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6020
5990
  def evaluate(task); end
@@ -6117,9 +6087,6 @@ module Checkoff
6117
6087
  def evaluate_arg?(_index); end
6118
6088
 
6119
6089
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6120
- # @sg-ignore Checkoff::SelectorClasses::Task::MilestonePFunctionEvaluator#evaluate
6121
- # return type could not be inferred
6122
- #
6123
6090
  # _@param_ `task`
6124
6091
  sig { params(task: Asana::Resources::Task).returns(T::Boolean) }
6125
6092
  def evaluate(task); end
@@ -6156,7 +6123,7 @@ module Checkoff
6156
6123
  # _@param_ `_kwargs`
6157
6124
  sig do
6158
6125
  params(
6159
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6126
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6160
6127
  tasks: Checkoff::Tasks,
6161
6128
  timelines: Checkoff::Timelines,
6162
6129
  custom_fields: Checkoff::CustomFields,
@@ -6174,7 +6141,7 @@ module Checkoff
6174
6141
  sig { returns(Checkoff::CustomFields) }
6175
6142
  attr_reader :custom_fields
6176
6143
 
6177
- sig { returns([Symbol, T::Array[T.untyped]]) }
6144
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6178
6145
  attr_reader :selector
6179
6146
  end
6180
6147
  end
@@ -6377,9 +6344,6 @@ module Checkoff
6377
6344
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6378
6345
  # sord warn - boolish is probably not a type, but using anyway
6379
6346
  # sord warn - boolish wasn't able to be resolved to a constant in this project
6380
- # @sg-ignore Checkoff::SelectorClasses::Common::NameStartsWithPFunctionEvaluator#evaluate
6381
- # return type could not be inferred
6382
- #
6383
6347
  # _@param_ `resource`
6384
6348
  #
6385
6349
  # _@param_ `prefix`
@@ -6394,8 +6358,6 @@ module Checkoff
6394
6358
 
6395
6359
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6396
6360
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6397
- # @sg-ignore selector is only String here per matches?'s is_a?(String) check, in another method
6398
- #
6399
6361
  # _@param_ `_resource`
6400
6362
  sig { params(_resource: T.any(Asana::Resources::Task, Asana::Resources::Project)).returns(String) }
6401
6363
  def evaluate(_resource); end
@@ -6408,10 +6370,10 @@ module Checkoff
6408
6370
  # _@param_ `custom_fields`
6409
6371
  #
6410
6372
  # _@param_ `_kwargs`
6411
- sig { params(selector: T.any([Symbol, T::Array[T.untyped]], String), custom_fields: Checkoff::CustomFields, _kwargs: T::Hash[T.untyped, T.untyped]).void }
6373
+ sig { params(selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol), custom_fields: Checkoff::CustomFields, _kwargs: T::Hash[T.untyped, T.untyped]).void }
6412
6374
  def initialize(selector:, custom_fields:, **_kwargs); end
6413
6375
 
6414
- sig { returns(T.any([Symbol, T::Array[T.untyped]], String)) }
6376
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6415
6377
  attr_reader :selector
6416
6378
 
6417
6379
  sig { returns(Checkoff::CustomFields) }
@@ -6429,8 +6391,6 @@ module Checkoff
6429
6391
  def matches?; end
6430
6392
 
6431
6393
  # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6432
- # @sg-ignore nilable return from an @!parse-declared method isn't inferred
6433
- #
6434
6394
  # _@param_ `resource`
6435
6395
  sig { params(resource: Asana::Resources::Project).returns(T.nilable(String)) }
6436
6396
  def evaluate(resource); end
@@ -6490,7 +6450,7 @@ module Checkoff
6490
6450
  # _@param_ `_kwargs`
6491
6451
  sig do
6492
6452
  params(
6493
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6453
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6494
6454
  projects: Checkoff::Projects,
6495
6455
  portfolios: Checkoff::Portfolios,
6496
6456
  workspaces: Checkoff::Workspaces,
@@ -6499,7 +6459,7 @@ module Checkoff
6499
6459
  end
6500
6460
  def initialize(selector:, projects:, portfolios:, workspaces:, **_kwargs); end
6501
6461
 
6502
- sig { returns([Symbol, T::Array[T.untyped]]) }
6462
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6503
6463
  attr_reader :selector
6504
6464
 
6505
6465
  sig { returns(Checkoff::Projects) }
@@ -6523,8 +6483,6 @@ module Checkoff
6523
6483
  def matches?; end
6524
6484
 
6525
6485
  # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6526
- # @sg-ignore String, nil safe-nav chain isn't inferred as returning Boolean
6527
- #
6528
6486
  # _@param_ `section`
6529
6487
  sig { params(section: Asana::Resources::Section).returns(T::Boolean) }
6530
6488
  def evaluate(section); end
@@ -6555,7 +6513,7 @@ module Checkoff
6555
6513
  # _@param_ `kwargs`
6556
6514
  sig do
6557
6515
  params(
6558
- selector: T.any([Symbol, T::Array[T.untyped]], String),
6516
+ selector: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol),
6559
6517
  sections: Checkoff::Sections,
6560
6518
  client: Asana::Client,
6561
6519
  kwargs: T::Hash[T.untyped, T.untyped]
@@ -6563,7 +6521,7 @@ module Checkoff
6563
6521
  end
6564
6522
  def initialize(selector:, sections:, client:, **kwargs); end
6565
6523
 
6566
- sig { returns([Symbol, T::Array[T.untyped]]) }
6524
+ sig { returns(T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol)) }
6567
6525
  attr_reader :selector
6568
6526
 
6569
6527
  # sord warn - Asana::Client wasn't able to be resolved to a constant in this project
@@ -6583,13 +6541,10 @@ module Checkoff
6583
6541
  sig { params(_index: Integer).returns(T::Boolean) }
6584
6542
  def evaluate_arg?(_index); end
6585
6543
 
6586
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6587
6544
  sig { returns(T::Boolean) }
6588
6545
  def matches?; end
6589
6546
 
6590
6547
  # sord warn - Asana::Resources::Task wasn't able to be resolved to a constant in this project
6591
- # @sg-ignore return type could not be inferred — abstract method body is only `raise`
6592
- #
6593
6548
  # _@param_ `_task`
6594
6549
  #
6595
6550
  # _@param_ `_args`
@@ -6599,7 +6554,7 @@ module Checkoff
6599
6554
  # _@param_ `object`
6600
6555
  #
6601
6556
  # _@param_ `fn_name`
6602
- sig { params(object: Object, fn_name: Symbol).returns(T::Boolean) }
6557
+ sig { params(object: T.any(T::Array[T.any(Symbol, T::Array[T.untyped])], Symbol), fn_name: Symbol).returns(T::Boolean) }
6603
6558
  def fn?(object, fn_name); end
6604
6559
 
6605
6560
  # Concrete subclasses each declare their own initialize with their
@@ -6639,7 +6594,6 @@ module Checkoff
6639
6594
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6640
6595
  def finer(message = nil, &block); end
6641
6596
 
6642
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6643
6597
  sig { returns(Symbol) }
6644
6598
  def log_level; end
6645
6599
  end
@@ -6788,8 +6742,8 @@ end - [Checkoff::SelectorClasses::Section::FunctionEvaluator]).freeze, T.untyped
6788
6742
  sig { returns(T::Hash[T.untyped, T.untyped]) }
6789
6743
  def initializer_kwargs; end
6790
6744
 
6791
- # sord warn - Asana::Resources::Project wasn't able to be resolved to a constant in this project
6792
- sig { returns(Asana::Resources::Project) }
6745
+ # sord warn - Asana::Resources::Section wasn't able to be resolved to a constant in this project
6746
+ sig { returns(Asana::Resources::Section) }
6793
6747
  attr_reader :item
6794
6748
 
6795
6749
  sig { returns(Checkoff::Sections) }
@@ -6832,7 +6786,6 @@ module Logging
6832
6786
  sig { params(message: T.nilable(Object), block: T.untyped).void }
6833
6787
  def finer(message = nil, &block); end
6834
6788
 
6835
- # @sg-ignore return type could not be inferred — cascades from the ENV.fetch RBS gap below
6836
6789
  sig { returns(Symbol) }
6837
6790
  def log_level; end
6838
6791
  end
@@ -6853,11 +6806,11 @@ module Asana
6853
6806
  # Public: The base resource class which provides some sugar over common
6854
6807
  # resource functionality.
6855
6808
  class Resource
6856
- sig { returns(T::Hash[T.untyped, T.untyped]) }
6809
+ sig { returns(T::Hash[String, Object]) }
6857
6810
  def marshal_dump; end
6858
6811
 
6859
6812
  # _@param_ `data`
6860
- sig { params(data: T::Hash[T.untyped, T.untyped]).void }
6813
+ sig { params(data: T::Hash[String, Object]).void }
6861
6814
  def marshal_load(data); end
6862
6815
  end
6863
6816
  end