Sha256: 0f8940325bde29ae14ffb4be7b4771cb9949061227c4905ee39e81d5c8d0e0ed

Contents?: true

Size: 1.62 KB

Versions: 6

Compression:

Stored size: 1.62 KB

Contents

# typed: strict
# frozen_string_literal: true

module Tapioca
  module RBI
    module Rewriters
      class NestNonPublicMethods < Visitor
        extend T::Sig

        sig { override.params(node: T.nilable(Node)).void }
        def visit(node)
          return unless node

          case node
          when Tree
            public_group = VisibilityGroup.new(Visibility::Public)
            protected_group = VisibilityGroup.new(Visibility::Protected)
            private_group = VisibilityGroup.new(Visibility::Private)

            node.nodes.dup.each do |child|
              visit(child)
              next unless child.is_a?(Method)
              child.detach
              case child.visibility
              when Visibility::Protected
                protected_group << child
              when Visibility::Private
                private_group << child
              else
                public_group << child
              end
            end

            node << public_group unless public_group.empty?
            node << protected_group unless protected_group.empty?
            node << private_group unless private_group.empty?
          end
        end
      end
    end

    class Tree
      extend T::Sig

      sig { void }
      def nest_non_public_methods!
        visitor = Rewriters::NestNonPublicMethods.new
        visitor.visit(self)
      end
    end

    class VisibilityGroup < Tree
      extend T::Sig

      sig { returns(Visibility) }
      attr_reader :visibility

      sig { params(visibility: Visibility).void }
      def initialize(visibility)
        super()
        @visibility = visibility
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
tapioca-0.4.27 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb
tapioca-0.4.26 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb
tapioca-0.4.25 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb
tapioca-0.4.24 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb
tapioca-0.4.23 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb
tapioca-0.4.22 lib/tapioca/rbi/rewriters/nest_non_public_methods.rb