Module: RubyNext

Defined in:
lib/ruby-next/irb.rb,
lib/ruby-next/cli.rb,
lib/ruby-next/core.rb,
lib/ruby-next/utils.rb,
lib/ruby-next/config.rb,
lib/ruby-next/logging.rb,
lib/ruby-next/version.rb,
lib/ruby-next/language.rb,
lib/ruby-next/commands/base.rb,
lib/ruby-next/language/eval.rb,
lib/ruby-next/language/setup.rb,
lib/ruby-next/language/parser.rb,
lib/ruby-next/commands/nextify.rb,
lib/ruby-next/language/runtime.rb,
lib/ruby-next/commands/core_ext.rb,
lib/ruby-next/language/rewriters/base.rb,
lib/ruby-next/language/rewriters/text.rb,
lib/ruby-next/language/paco_parsers/base.rb,
lib/ruby-next/language/rewriters/2.4/dir.rb,
lib/ruby-next/language/rewriters/abstract.rb,
lib/ruby-next/language/paco_parsers/comments.rb,
lib/ruby-next/language/rewriters/edge/it_param.rb,
lib/ruby-next/language/rewriters/3.0/in_pattern.rb,
lib/ruby-next/language/rewriters/2.7/args_forward.rb,
lib/ruby-next/language/rewriters/3.0/find_pattern.rb,
lib/ruby-next/language/rewriters/2.6/endless_range.rb,
lib/ruby-next/language/paco_parsers/string_literals.rb,
lib/ruby-next/language/rewriters/3.0/endless_method.rb,
lib/ruby-next/language/rewriters/3.1/shorthand_hash.rb,
lib/ruby-next/language/rewriters/2.1/required_kwargs.rb,
lib/ruby-next/language/rewriters/2.3/safe_navigation.rb,
lib/ruby-next/language/rewriters/2.7/numbered_params.rb,
lib/ruby-next/language/rewriters/3.1/anonymous_block.rb,
lib/ruby-next/language/rewriters/2.1/numeric_literals.rb,
lib/ruby-next/language/rewriters/2.3/squiggly_heredoc.rb,
lib/ruby-next/language/rewriters/2.7/pattern_matching.rb,
lib/ruby-next/language/rewriters/3.1/pin_vars_pattern.rb,
lib/ruby-next/language/rewriters/3.2/anonymous_restargs.rb,
lib/ruby-next/language/rewriters/2.5/rescue_within_block.rb,
lib/ruby-next/language/rewriters/3.0/args_forward_leading.rb,
lib/ruby-next/language/rewriters/proposed/method_reference.rb,
lib/ruby-next/language/rewriters/3.1/endless_method_command.rb,
lib/ruby-next/language/rewriters/proposed/bind_vars_pattern.rb,
lib/ruby-next/language/rewriters/3.1/refinement_import_methods.rb,
lib/ruby-next/language/rewriters/3.1/oneline_pattern_parensless.rb

Overview

Add binding argument to all self-less eval’s

Defined Under Namespace

Modules: Commands, Core, IRBExt, Language, Utils Classes: CLI

Constant Summary collapse

MIN_SUPPORTED_VERSION =

Mininum Ruby version supported by RubyNext

Gem::Version.new("2.2.0")
RUBY_NEXT_DIR =

Where to store transpiled files (relative from the project LOAD_PATH, usually ‘lib/`)

".rbnext"
LAST_MINOR_VERSIONS =

Defines last minor version for every major version

{
  2 => 8, # 2.8 is required for backward compatibility: some gems already uses it
  3 => 4
}.freeze
LATEST_VERSION =
[3, 4].freeze
NEXT_VERSION =

A virtual version number used for proposed features

"1995.next.0"
VERSION =
"1.0.1"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.debug_enabledObject

Returns the value of attribute debug_enabled.



8
9
10
# File 'lib/ruby-next/logging.rb', line 8

def debug_enabled
  @debug_enabled
end

.silence_warningsObject

Returns the value of attribute silence_warnings.



7
8
9
# File 'lib/ruby-next/logging.rb', line 7

def silence_warnings
  @silence_warnings
end

Class Method Details

.debug_source(source, filepath = nil) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/ruby-next/logging.rb', line 16

def debug_source(source, filepath = nil)
  return unless debug_enabled

  return if debug_filter && !filepath.include?(debug_filter)

  $stdout.puts Utils.source_with_lines(source, filepath)
end

.edge_syntax?Boolean

Returns true if we want to use edge syntax

Returns:

  • (Boolean)


36
37
38
# File 'lib/ruby-next/config.rb', line 36

def edge_syntax?
  %w[y true 1].include?(ENV["RUBY_NEXT_EDGE"])
end

.load_from_rc(path = ".rbnextrc") ⇒ Object

Load transpile settings from the RC file (nextify command flags)



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ruby-next/config.rb', line 62

def load_from_rc(path = ".rbnextrc")
  return unless File.exist?(path)

  require "yaml"

  args = YAML.load_file(path)&.fetch("nextify", "")&.lines&.flat_map { |line| line.chomp.split(/\s+/) }

  ENV["RUBY_NEXT_EDGE"] ||= "true" if args.delete("--edge")
  ENV["RUBY_NEXT_PROPOSED"] ||= "true" if args.delete("--proposed")
  ENV["RUBY_NEXT_TRANSPILE_MODE"] ||= "rewrite" if args.delete("--transpile-mode=rewrite")
  ENV["RUBY_NEXT_TRANSPILE_MODE"] ||= "ast" if args.delete("--transpile-mode=ast")
end

.next_ruby_version(version = current_ruby_version) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ruby-next/config.rb', line 44

def next_ruby_version(version = current_ruby_version)
  return if version == Gem::Version.new(NEXT_VERSION)

  major, minor = Gem::Version.new(version).segments.map(&:to_i)

  return Gem::Version.new(NEXT_VERSION) if major >= LATEST_VERSION.first && minor >= LATEST_VERSION.last

  nxt =
    if LAST_MINOR_VERSIONS[major] == minor
      "#{major + 1}.0.0"
    else
      "#{major}.#{minor + 1}.0"
    end

  Gem::Version.new(nxt)
end

.proposed_syntax?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/ruby-next/config.rb', line 40

def proposed_syntax?
  %w[y true 1].include?(ENV["RUBY_NEXT_PROPOSED"])
end

.warn(msg) ⇒ Object



10
11
12
13
14
# File 'lib/ruby-next/logging.rb', line 10

def warn(msg)
  return if silence_warnings

  Kernel.warn msg
end

Instance Method Details

#current_ruby_versionObject



26
27
28
# File 'lib/ruby-next/config.rb', line 26

def current_ruby_version
  "2.6.5"
end