Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

generate_rbs_for_model doesn't create sig/*/main.rbs #66

Closed
jasonlor opened this issue Nov 21, 2020 · 4 comments · Fixed by #87
Closed

generate_rbs_for_model doesn't create sig/*/main.rbs #66

jasonlor opened this issue Nov 21, 2020 · 4 comments · Fixed by #87

Comments

@jasonlor
Copy link

jasonlor commented Nov 21, 2020

Using:

    rbs (0.17.0)
    rbs_rails (0.4.1)
UnknownTypeNameError: name=ApplicationRecord
UnknownTypeNameError: name=::ActiveStorage
UnknownTypeNameError:** name=::ActsAsTaggableOn

It looks like the generate_rbs_for_model task doesn't generate the main.rbs file.
Adding the following file fixes the error This issue extends to other generated definitions.


https://github.com/pocke/rbs_rails/blob/master/test/app/sig/main.rbs

class ApplicationRecord < ActiveRecord::Base
end

sig/app/models/active_storage/main.rbs:

class ::ActiveStorage < ActiveRecord::Base
end

sig/app/models/acts_as_taggable_on/main.rbs:

class ::ActsAsTaggableOn < ActiveRecord::Base
end
@jasonlor jasonlor changed the title UnknownTypeNameError: name=ApplicationRecord generate_rbs_for_model doesn't create sig/*/main.rbs Nov 21, 2020
@pocke
Copy link
Owner

pocke commented Nov 22, 2020

UnknownTypeNameError: name=ApplicationRecord

generate_rbs_for_model rake task generates RBSs only for not abstract classes. Because it refers to RDBMS's schema information, and abstract classes don't have a schema.

RBS Rails isn't responsible for abstract classes. If you need RBS for them, you can write the RBSs by hand or generate them with rbs prototype rb that rbs gem provides.

UnknownTypeNameError: name=::ActiveStorage

Currently RBS Rails haven't supported ActiveStorage yet. And the priority is not high.
So, if you need the type of ActiveStorage, you can write it yourself.

By the way, ActiveStorage does not inherit ActiveRecord::Base, and it is not a class.
https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/activestorage/lib/active_storage.rb#L36

UnknownTypeNameError:** name=::ActsAsTaggableOn

What is ActsAsTaggableOn? Is it a gem? https://github.com/mbleigh/acts-as-taggable-on
RBS Rails isn't responsible for gems except for rails.
So, you can write RBSs for them yourself. Or you can find gems from the official RBS repo (but now it has only a few gems).

@pocke
Copy link
Owner

pocke commented Nov 23, 2020

By the way, I think we need more documentation to introduce RBS Rails and Steep. I'll work on it. #68

@connorshea
Copy link

I'm running into very similar errors when trying to introduce RBS to my Rails app:

vendor/rbs/gem_rbs/gems/actionpack/6.0.3.2/actionpack-generated.rbs:2633:6...2633:21	UnknownTypeNameError: name=Mutex_m
vendor/rbs/gem_rbs/gems/activerecord/6.0.3.2/activerecord-generated.rbs:4547:6...4547:21	UnknownTypeNameError: name=Mutex_m
vendor/rbs/gem_rbs/gems/activerecord/6.0.3.2/activerecord-generated.rbs:18024:6...18024:21	UnknownTypeNameError: name=Mutex_m
vendor/rbs/gem_rbs/gems/activesupport/6.0.3.2/activesupport-generated.rbs:2455:2...2455:31	UnknownMethodAliasError: class_name=::Date, method_name=plus_without_duration
vendor/rbs/gem_rbs/gems/activesupport/6.0.3.2/activesupport-generated.rbs:8886:8...8886:34	UnknownTypeNameError: name=::Logger::Severity
vendor/rbs/gem_rbs/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9014:2...9033:5	UnknownTypeNameError: name=::Logger
vendor/rbs/gem_rbs/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9029:4...9032:7	UnknownTypeNameError: name=::Logger::Formatter
vendor/rbs/gem_rbs/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9695:6...9695:21	UnknownTypeNameError: name=Mutex_m
sig/app/models/active_storage/attachment.rbs:1:0...87:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/attachment.rbs:89:0...94:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/attachment.rbs:96:0...97:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/blob.rbs:1:0...127:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/blob.rbs:129:0...134:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/blob.rbs:136:0...137:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/variant_record.rbs:1:0...59:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/variant_record.rbs:61:0...66:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/active_storage/variant_record.rbs:68:0...69:3	UnknownTypeNameError: name=::ActiveStorage
sig/app/models/company.rbs:1:0...85:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/doorkeeper/access_grant.rbs:1:0...114:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/access_grant.rbs:116:0...121:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/access_grant.rbs:123:0...124:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/access_token.rbs:1:0...125:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/access_token.rbs:127:0...132:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/access_token.rbs:134:0...135:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/application.rbs:1:0...152:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/application.rbs:154:0...159:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/doorkeeper/application.rbs:161:0...162:3	UnknownTypeNameError: name=::Doorkeeper
sig/app/models/engine.rbs:1:0...77:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/event.rbs:1:0...126:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/external_account.rbs:1:0...93:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/favorite_game.rbs:1:0...79:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game.rbs:1:0...239:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_developer.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_engine.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_genre.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_platform.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_publisher.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_purchase.rbs:1:0...191:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_purchase_platform.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/game_purchase_store.rbs:1:0...76:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/genre.rbs:1:0...77:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/platform.rbs:1:0...85:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/relationship.rbs:1:0...79:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/series.rbs:1:0...73:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/statistic.rbs:1:0...274:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/steam_app_id.rbs:1:0...48:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/steam_blocklist.rbs:1:0...81:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/store.rbs:1:0...61:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/user.rbs:1:0...363:3	UnknownTypeNameError: name=ApplicationRecord
sig/app/models/wikidata_blocklist.rbs:1:0...81:3	UnknownTypeNameError: name=ApplicationRecord

I think rbs_rails should definitely create a signature file for ApplicationRecord at the very least, since that's something every Rails app will have. I'd definitely like better docs for how to set this up :)

Thank you for your work, @pocke!

@pocke
Copy link
Owner

pocke commented Dec 26, 2020

@connorshea Thanks for your feedback!

I think it needs to generate all superclasses of ActiveRecord models, including ApplicationRecord.
For example:

# Ruby files
class User < ApplicationRecord
end

class Article < AnotherApplicationRecord
end

# RBS files
class ApplicationRecord < ActiveRecord::Base
end

class AnotherApplicationRecord < ActiveRecord::Base
end

class User < ApplicationRecord
end

class Article < AnotherApplicationRecord
end

I'll implement it with #77 because #77 also needs to generate superclasses.


By the way, I guess you need to require some library, such as Mutex_m, Logger, etc.

And I haven't generated ActiveStorage's RBS yet, so you need to write the RBS by hand for now 🙏.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants