diff --git a/Steepfile b/Steepfile index ff6c47b..ad37cb0 100644 --- a/Steepfile +++ b/Steepfile @@ -6,6 +6,7 @@ rbs_root = Gem.loaded_specs['rbs'].full_gem_path stdlib_path core_root: 'core', stdlib_root: "#{rbs_root}/stdlib" target :test do check 'test' + signature 'test/sig' configure_code_diagnostics(D::Ruby.strict) end diff --git a/core/enumerable.rbs b/core/enumerable.rbs new file mode 100644 index 0000000..3cdf8d9 --- /dev/null +++ b/core/enumerable.rbs @@ -0,0 +1,12 @@ +module Enumerable[unchecked out Elem] : _Each[Elem] + interface _Each[unchecked out T] + def each: () { (T) -> void } -> void + end + + # TODO: Array + # def collect: [T]() { (Elem item) -> T } -> Array[T] + # + # alias map collect + + def each_with_index: () { (Elem item, Integer index) -> void } -> self +end diff --git a/test/enumerable.rb b/test/enumerable.rb new file mode 100644 index 0000000..e1039c0 --- /dev/null +++ b/test/enumerable.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +# rubocop:disable Lint/Void +# rubocop:disable Style/Documentation + +class EnumerableTestClass + include Enumerable + + def each + yield 'Hello' + end +end + +a = EnumerableTestClass.new +a.each { |item| item } + +# TODO: Array +# a.collect { |item| item } +# +# a.map { |item| item } + +a.each_with_index do |item, index| + item + index +end + +# rubocop:enable all diff --git a/test/sig/enumerable.rbs b/test/sig/enumerable.rbs new file mode 100644 index 0000000..85e27aa --- /dev/null +++ b/test/sig/enumerable.rbs @@ -0,0 +1,5 @@ +class EnumerableTestClass + include Enumerable[String] + + def each: () { (String) -> void } -> void +end