Sha256: 28b1d72d4af5067d56b6f129d09cb375d22c5f5c9613e231a95ce20609acc05a

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

module Steep
  module Drivers
    class PrintInterface
      attr_reader :type_name
      attr_reader :signature_dirs
      attr_reader :stdout
      attr_reader :stderr

      include Utils::EachSignature

      def initialize(type_name:, signature_dirs:, stdout:, stderr:)
        @type_name = type_name
        @signature_dirs = signature_dirs
        @stdout = stdout
        @stderr = stderr
      end

      def run
        if type_name
          type = Parser.parse_type(type_name)

          env = AST::Signature::Env.new

          each_signature(signature_dirs, false) do |signature|
            env.add signature
          end

          begin
            builder = Interface::Builder.new(signatures: env)
            check = Subtyping::Check.new(builder: builder)

            interface = check.resolve(type)

            stdout.puts "#{type}"
            stdout.puts "- Instance variables:"
            interface.ivars.each do |name, type|
              puts "  - #{name}: #{type}"
            end
            stdout.puts "- Methods:"
            interface.methods.each do |name, method|
              puts "  - #{Rainbow(name).blue}:"
              method.types.each do |method_type|
                loc = if method_type.location
                        "#{method_type.location.buffer.name}:#{method_type.location.to_s}"
                      else
                        "no location"
                      end
                puts "    - #{Rainbow(method_type.to_s).red} (#{loc})"
              end
            end
          rescue Steep::Subtyping::Check::CannotResolveError
            stderr.puts "🤔 #{Rainbow(type.to_s).red} cannot be resolved to interface"
          end
        else
          stderr.puts "Pass a type name to command line"
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
steep-0.7.1 lib/steep/drivers/print_interface.rb