Sha256: 15b25b0ee4f5917d60af0dd18dfd4864e4bdc69d8a67e4d7c0b2c5aeb0ccbcb2

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

# typed: true
module Parlour
  class RbiGenerator
    class ModuleNamespace < Namespace
      extend T::Sig

      sig do
        params(
          name: String,
          interface: T::Boolean,
          block: T.nilable(T.proc.params(x: ClassNamespace).void)
        ).void
      end
      def initialize(name, interface, &block)
        super(&block)
        @name = name
        @interface = interface
      end

      sig do
        override.params(
          indent_level: Integer,
          options: Options
        ).returns(T::Array[String])
      end
      def generate_rbi(indent_level, options)        
        lines = []
        lines << options.indented(indent_level, "module #{name}")
        lines += [options.indented(indent_level + 1, "interface!"), ""] if interface
        lines += super(indent_level + 1, options)
        lines << options.indented(indent_level, "end")
      end

      sig { returns(String) }
      attr_reader :name

      sig { returns(T::Boolean) }
      attr_reader :interface

      sig do
        override.params(
          others: T::Array[RbiGenerator::RbiObject]
        ).returns(T::Boolean)
      end
      def mergeable?(others)
        others = T.cast(others, T::Array[RbiGenerator::ModuleNamespace]) rescue (return false)
        all = others + [self]

        all.map(&:interface).uniq.length == 1
      end

      sig do 
        override.params(
          others: T::Array[RbiGenerator::RbiObject]
        ).void
      end
      def merge_into_self(others)
        others.each do |other|
          other = T.cast(other, ModuleNamespace)

          other.children.each { |c| children << c }
          other.extends.each { |e| extends << e }
          other.includes.each { |i| includes << i }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
parlour-0.1.1 lib/parlour/rbi_generator/module_namespace.rb