Sha256: 330bed0b9163a95dc56454aa887484951dfe6ccb95b7c054f6a199ae29138532

Contents?: true

Size: 1.5 KB

Versions: 13

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module RubyNext
  module Language
    module Rewriters
      class EndlessMethod < Base
        NAME = "endless-method"
        SYNTAX_PROBE = "obj = Object.new; def obj.foo() = 42"
        MIN_SUPPORTED_VERSION = Gem::Version.new("3.0.0")

        unless Parser::Meta::NODE_TYPES.include?(:def_e)
          def on_def(node)
            return on_def_e(node) if node.loc.end.nil?
            super(node)
          end
        end

        def on_def_e(node)
          context.track! self

          replace(node.loc.assignment, "; ")
          insert_after(node.loc.expression, "; end")

          new_loc = node.loc.dup
          new_loc.instance_variable_set(:@end, node.loc.expression)

          process(
            node.updated(
              :def,
              node.children,
              location: new_loc
            )
          )
        end

        unless Parser::Meta::NODE_TYPES.include?(:def_e)
          def on_defs(node)
            return on_defs_e(node) if node.loc.end.nil?
            super(node)
          end
        end

        def on_defs_e(node)
          context.track! self

          replace(node.loc.assignment, "; ")
          insert_after(node.loc.expression, "; end")

          new_loc = node.loc.dup
          new_loc.instance_variable_set(:@end, node.loc.expression)

          process(
            node.updated(
              :defs,
              node.children,
              location: new_loc
            )
          )
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
ruby-next-core-0.13.3 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.13.2 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.13.1 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.13.0 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.12.0 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.11.1 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.11.0 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.5 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.4 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.3 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.2 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.1 lib/ruby-next/language/rewriters/endless_method.rb
ruby-next-core-0.10.0 lib/ruby-next/language/rewriters/endless_method.rb