Skip to content

mkspec no longer runs without RubyGems (SortedSet causes an error) #77

@trinistr

Description

@trinistr

Not completely sure if this issue should be here or in ruby/spec, but nonetheless.

ruby/spec's CONTRIBUTING.md says:

Finding unspecified core methods

This is very easy, just run the command below in your spec directory.
ruby must be a recent version of MRI.

$ ruby --disable-gem ../mspec/bin/mkspec

However, this produces an error due to SortedSet being a constant but no longer having a stdlib implementation, while MkSpec tries to load every single constant in Object:

$ ruby --disable-gem ../mspec/bin/mkspec
/home/alex/.local/share/mise/installs/ruby/3.4.7/lib/ruby/3.4.0/set/sorted_set.rb:4:in '<top (required)>': The `SortedSet` class has been extracted from the `set` library. You must use the `sorted_set` gem or other alternatives. (RuntimeError)
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'Kernel#require'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'Module#const_get'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'NameMap#class_or_module'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:85:in 'block in NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'Array#each'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:98:in 'block in NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'Array#each'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/commands/mkspec.rb:128:in 'MkSpec#run'
        from /home/alex/Projects/mspec/lib/mspec/commands/mkspec.rb:141:in 'MkSpec.main'
        from ../mspec/bin/mkspec:7:in '<main>'
/home/alex/.local/share/mise/installs/ruby/3.4.7/lib/ruby/3.4.0/set/sorted_set.rb:2:in 'Kernel#require': cannot load such file -- sorted_set (LoadError)
        from /home/alex/.local/share/mise/installs/ruby/3.4.7/lib/ruby/3.4.0/set/sorted_set.rb:2:in '<top (required)>'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'Kernel#require'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'Module#const_get'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:69:in 'NameMap#class_or_module'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:85:in 'block in NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'Array#each'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:98:in 'block in NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'Array#each'
        from /home/alex/Projects/mspec/lib/mspec/utils/name_map.rb:83:in 'NameMap#map'
        from /home/alex/Projects/mspec/lib/mspec/commands/mkspec.rb:128:in 'MkSpec#run'
        from /home/alex/Projects/mspec/lib/mspec/commands/mkspec.rb:141:in 'MkSpec.main'
        from ../mspec/bin/mkspec:7:in '<main>'

This is the problematic code being run when no "--constant" option is specified:

    constants = config[:constants]
    constants = Object.constants if constants.empty?

    @map.map({}, constants).each do |mod, methods|

This in turn calls Object.const_get, which autloads SortedSet, which breaks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions