lsegal / yard

YARD is a Ruby Documentation tool. The Y stands for "Yay!"
http://yardoc.org
MIT License
1.92k stars 394 forks source link

Bug: deconstruction + array of symbols #1547

Open stackmystack opened 6 days ago

stackmystack commented 6 days ago

Description

YARD is losing control with deconstruction and array of symbols.

Steps to reproduce

This is the minimal reproduction for the issue.

Gemfile:

source 'https://rubygems.org'
ruby '>= 3.0'
gem 'yard'

.yardopts:

yardoc
--output-dir rdoc
--markup=markdown
src/**/*.rb

src/main.rb:

module Mod
  class A
    # Some fn
    # @param arg [Object]
    def fn(arg)
      case arg
      in SomeClass['array', v]
        '42'
      else
        super
      end
    end

    # A nice little const.
    CONST = %i[a b c]
  end
end

Actual Output

image

Expected Output

image

And that was something I can achieve by:

  1. Putting the const before the fn

    module Mod
    class A
      # A nice little const.
      CONST = %i[a b c]
    
      # Some fn
      # @param arg [Object]
      def fn(arg)
        case arg
        in SomeClass['array', v]
          '42'
        else
          super
        end
      end
    end
    end
  2. Avoiding %i notation:

    module Mod
    class A
      # Some fn
      # @param arg [Object]
      def fn(arg)
        case arg
        in SomeClass['array', v]
          '42'
        else
          super
        end
      end
    
      # A nice little const.
      CONST = [:a, :b, :c]
    end
    end

None of those solutions are actually acceptable in my case:

  1. I cannot change the order of these particular things, because the deconstruction happens in a class different than that of the const, and I cannot extract the class to a separate file (I can —physically— of course, it's just that it doesn't make sense in my project).
  2. I cannot avoid %i notation because the actual const is humongous (again, I physically can, but I would be violating the codebase coding style to please YARD).

Environment details: