diff --git a/lib/ruby2js/converter/super.rb b/lib/ruby2js/converter/super.rb index b827963..5037916 100644 --- a/lib/ruby2js/converter/super.rb +++ b/lib/ruby2js/converter/super.rb @@ -24,23 +24,29 @@ class Converter end if es2015 + add_args = true + if @class_method parse @class_parent put '.' put method.children[0] + add_args = method.is_method? elsif method.children[0] == :constructor put 'super' else put 'super.' put method.children[0] + add_args = method.is_method? end - put '(' - cleaned_args = args.map do |arg| # FIX: #212 - arg.type == :optarg ? s(:arg, arg.children[0]) : arg + if add_args + put '(' + cleaned_args = args.map do |arg| # FIX: #212 + arg.type == :optarg ? s(:arg, arg.children[0]) : arg + end + parse s(:args, *cleaned_args) + put ')' end - parse s(:args, *cleaned_args) - put ')' else parse @class_parent diff --git a/spec/es2015_spec.rb b/spec/es2015_spec.rb index 31d9f4a..e414e0a 100644 --- a/spec/es2015_spec.rb +++ b/spec/es2015_spec.rb @@ -386,6 +386,11 @@ def to_js_fn(string) must_equal 'class A {}; class B extends A {_render(force=false, options={}) {super._render(force, options)}}' end + it "should handle super getter" do + to_js('class A; end; class B < A; def self.foo; super; end; end'). + must_equal 'class A {}; class B extends A {static get foo() {return A.foo}}' + end + it "should handle class super" do to_js('class A; end; class B < A; def self.foo(x); super; end; end'). must_equal 'class A {}; class B extends A {static foo(x) {A.foo(x)}}' diff --git a/spec/es2018_spec.rb b/spec/es2018_spec.rb index 1c2103e..155ba0a 100644 --- a/spec/es2018_spec.rb +++ b/spec/es2018_spec.rb @@ -19,6 +19,11 @@ def to_js_fn(string) end end + it "should handle super getter merge" do + to_js_fn('class A; end; class B < A; def self.foo; super.merge(o: 1); end; end'). + must_equal 'class A {}; class B extends A {static get foo() {return {...A.foo, o: 1}}}' + end + describe 'keyword arguments' do it 'should handle rest arguments with keyword arguments in methods' do skip if RUBY_VERSION =~ /^(1\.9|2\.0)/