AndyObtiva / glimmer-dsl-libui

Glimmer DSL for LibUI - Prerequisite-Free Ruby Desktop Development Cross-Platform Native GUI Library - The Quickest Way From Zero To GUI - If You Liked Shoes, You'll Love Glimmer! - No need to pre-install any prerequisites. Just install the gem and have platform-independent GUI that just works on Mac, Windows, and Linux.
MIT License
473 stars 15 forks source link

Circular require warnings when run via the -w flag, probably due to square.rb and/or shape.rb #5

Closed rubyFeedback closed 2 years ago

rubyFeedback commented 2 years ago

Hey there Andy,

Not sure whether this should be reported or not, as it seems to be so minor. But perhaps it may be simple to address, so.

I get a circular require warning when running via the -w flag e. g. this header:

#!/usr/bin/ruby -w
# Encoding: UTF-8
# frozen_string_literal: true
# =========================================================================== #

The exact warning looks like this:

<internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85: warning: <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85: warning: loading in progress, circular require considered harmful - /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/libui/shape.rb
    from form.rb:7:in  `<main>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in  `rescue in require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in  `require'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer-dsl-libui.rb:38:in  `<top (required)>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/dsl/libui/dsl.rb:23:in  `<top (required)>'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/dsl/libui/dsl.rb:23:in  `each'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/dsl/libui/dsl.rb:23:in  `block in <top (required)>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/dsl/libui/property_expression.rb:24:in  `<top (required)>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/libui/shape.rb:199:in  `<top (required)>'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/libui/shape.rb:199:in  `each'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/libui/shape.rb:199:in  `block in <top (required)>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from /root/.gem/gems/glimmer-dsl-libui-0.3.5/lib/glimmer/libui/shape/square.rb:22:in  `<top (required)>'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'
    from <internal:/usr/lib/ruby/site_ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in  `require'

I assume that square.rb and/or glimmer/libui/shape.rb may have some inter-dependencies.

Not sure if it is worth to fix or just ignore but I thought I should report it.

(I am currently building that GUI in glimmer-dsl-libui which is why I notice these things. At first I thought I made a mistake, which is usually the case when I write new code, but upon looking at the original .rb file which showed no circular require warnings, I realised that this came because I use the -w flag out of habit. Otherwise I would not have noticed it. Hope that explains this bug report a little bit better.)

AndyObtiva commented 2 years ago

I would not worry about this at all.

Yes, shape.rb happens to dynamically load all Shape subclasses nested under /shape/ namespace directory:

Dir[File.expand_path("./#{File.basename(__FILE__, '.rb')}/*.rb", __dir__)].each {|f| require f}

But then each shape (e.g. Square) mentions that it requires its superclass Shape:

require 'glimmer/libui/shape'

Warnings are just warnings. They do not always indicate anything important. That is why they are just called warnings. As such, I am closing this.