Sha256: d20a479fd16cd4a7f6774220ec76873478ffd29cebcb445f02a35e0aba42e9ce

Contents?: true

Size: 1.43 KB

Versions: 11

Compression:

Stored size: 1.43 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")

        def on_def(node)
          return process_def(node) if endless?(node)

          super(node)
        end

        def process_def(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

        def on_defs(node)
          return process_defs(node) if endless?(node)
          super(node)
        end

        def process_defs(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

        private

        def endless?(node)
          node.loc.end.nil?
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
ruby-next-core-1.0.3 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-1.0.2 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-1.0.1 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-1.0.0 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-1.0.0.rc.1 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.15.3 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.15.2 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.15.1 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.15.0 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.14.1 lib/ruby-next/language/rewriters/3.0/endless_method.rb
ruby-next-core-0.14.0 lib/ruby-next/language/rewriters/3.0/endless_method.rb