You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've discussed this with @andyw8 on Slack.
I'm working on a Rails application that uses Sorbet and Tapioca.
Using Time.now.rfc3339 in the app introduced a Sorbet error:
app/jobs/dead_translations/snapshot_job.rb:190: Method rfc3339 does not exist on Time https://srb.help/7003
190 | time: end_time.rfc3339,
^^^^^^^
Got Time originating from:
app/jobs/dead_translations/snapshot_job.rb:186:
186 | def get_live_translations(prefix, end_time)
^^^^^^^^
There is a singleton class method with the same name:
sorbet/rbi/gems/[email protected]:21563: Defined here
21563 | def rfc3339(str); end
^^^^^^^^^^^^^^^^
Either:
- use .class to call it, or
- remove self. from its definition to make it an instance method
Autocorrect: Use -a to autocorrect
app/jobs/dead_translations/snapshot_job.rb:190: Insert .class
190 | time: end_time.rfc3339,
Time#rfc3339 is defined in an ActiveSupport core extension: activesupport/core_ext/time/conversions, as an alias to Time#xmlschema, which itself is defined in Ruby's Time class (here).
$ ruby -e "puts Time.now.xmlschema"-e:1:in `<main>': undefined method `xmlschema' for an instance of Time (NoMethodError)puts Time.now.xmlschema ^^^^^^^^^^
$ ruby -rtime -e "puts Time.now.xmlschema"2024-11-22T01:16:39+09:00
$ ruby -rtime -e "puts Time.now.rfc3339"-e:1:in `<main>': undefined method `rfc3339' for an instance of Time (NoMethodError)puts Time.now.rfc3339 ^^^^^^^^
$ ruby -ractive_support/core_ext/time/conversions -e "puts Time.now.rfc3339"2024-11-22T01:17:10+09:00
What's weird is that Tapioca appears to be able to pick up another method defined with alias_method in the same active_support/core_ext/time/conversions file. (This one: to_formatted_s.)
In another experiment, I tried adding def xmlschema; end in that file, active_support/core_ext/time/conversions, before the line alias_method :rfc3339, :xmlschema. When I run bin/tapioca gem activesupport, it adds the signatures for both Time#xmlschema and Time#rfc3339 to sorbet/rbi/gems/[email protected].
I tried adding either or both of the two lines below in the sorbet/tapioca/require.rb file, but it does not seem to change anything, unfortunately.
I've discussed this with @andyw8 on Slack.
I'm working on a Rails application that uses Sorbet and Tapioca.
Using
Time.now.rfc3339
in the app introduced a Sorbet error:Time#rfc3339
is defined in an ActiveSupport core extension:activesupport/core_ext/time/conversions
, as an alias toTime#xmlschema
, which itself is defined in Ruby'sTime
class (here).What's weird is that Tapioca appears to be able to pick up another method defined with
alias_method
in the sameactive_support/core_ext/time/conversions
file. (This one:to_formatted_s
.)In another experiment, I tried adding
def xmlschema; end
in that file,active_support/core_ext/time/conversions
, before the linealias_method :rfc3339, :xmlschema
. When I runbin/tapioca gem activesupport
, it adds the signatures for bothTime#xmlschema
andTime#rfc3339
tosorbet/rbi/gems/[email protected]
.I tried adding either or both of the two lines below in the
sorbet/tapioca/require.rb
file, but it does not seem to change anything, unfortunately.Also note that Sorbet defines a signature for
Time#xmlschema
, here.Finally, I tried replacing
Time.now.rfc3339
withTime.now.xmlschema
in my code, and now the Sorbet error is gone, so I'll simply go with that for now.The text was updated successfully, but these errors were encountered: