ruby-next-core 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae8ccdf6dc524052fe864e962362b7da9dd6ce804d03b8cde765ed8010f8c9ea
4
- data.tar.gz: ad015bedd5ca0a48e0f50f27f9b3c78235c3326e99a65d4f4ae1f9adac0aaa2b
3
+ metadata.gz: d3395d5a5cd7bbc3f2697682cd8d212c398ef0a76d19b60308f68d027c545300
4
+ data.tar.gz: aa20461bff07df85835508f8e498b88604c5d31988db06fe4793d2becda92055
5
5
  SHA512:
6
- metadata.gz: 10eb9b82b0dd65188fe311d0a3bbe1950c148b6d94ed548a59d3b0ced0e41e077e1183315c3cbc2c351def0ee6ac16a2095f49cc425952ab6d276221766f8856
7
- data.tar.gz: c65ff2bda5a24e47cd3ee13b80059c50dfdb05a9051c3ae782d8cfabdf9f32b0b936110751cdf65920ac00850e5448c04f606f7870d22c2b02d93692f24c0699
6
+ metadata.gz: d431025ce839f76a8d39436899b6d38e66ed8818f62a14bfad0e8367cdf29ed11439ed75a91bb9051f68488c70ffdc7622210ac0fe76e3385e7b945a4545113b
7
+ data.tar.gz: e3ff453d83653ebd4bfefe1bdb30e12e6ac39d25a80311accbfabe7fd0af1395b216c07e6e91a33cb05aa50e45dc6e246e9c118b59d09bf95bb75eb4f6f1a69a
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.5.2 (2020-03-25)
6
+
7
+ - Enhance logging. ([@palkan][])
8
+
9
+ Use `RUBY_NEXT_WARN=false` to disable warnings.
10
+ Use `RUBY_NEXT_DEBUG=path.rb` to display the transpiler output only for matching files
11
+ in the runtime mode.
12
+
5
13
  ## 0.5.1 (2020-03-20)
6
14
 
7
15
  - Add RuboCop integration. ([@palkan][])
data/README.md CHANGED
@@ -35,6 +35,7 @@ That's why Ruby Next implements the `master` features as fast as possible.
35
35
  - [Runtime usage](#runtime-usage)
36
36
  - [Bootsnap integration](#using-with-bootsnap)
37
37
  - [`ruby -ruby-next`](#uby-next)
38
+ - [Logging & Debugging](#logging-and-debugging)
38
39
  - [RuboCop](#rubocop)
39
40
  - [Proposed & edge features](#proposed-and-edge-features)
40
41
 
@@ -307,6 +308,16 @@ RUBYOPT="-ruby-next" ruby my_ruby_script.rb
307
308
  ruby -ruby-next -e "puts [2, 4, 5].tally"
308
309
  ```
309
310
 
311
+ ## Logging and debugging
312
+
313
+ Ruby Next prints some debugging information when fails to load a file in the runtime mode (and fallbacks to the built-in loading mechanism).
314
+
315
+ You can disable these warnings either by providing the `RUBY_NEXT_WARN=false` env variable or by setting `RubyNext.silence_warnings = true` in your code.
316
+
317
+ You can also enable transpiled source code debugging by setting the `RUBY_NEXT_DEBUG=true` env variable. When it's set, Ruby Next prints the transpiled code before loading it.
318
+
319
+ You can use a file pattern as the value for the env var to limit the output: for example, `RUBY_NEXT_DEBUG=my_script.rb`.
320
+
310
321
  ## RuboCop
311
322
 
312
323
  Since Ruby Next provides support for features not available in RuboCop yet, you need to add a patch for compatibility.
@@ -34,4 +34,5 @@ module RubyNext
34
34
  end
35
35
 
36
36
  require_relative "ruby-next/core"
37
+ require_relative "ruby-next/logging"
37
38
  end
@@ -17,7 +17,7 @@ if load_iseq.source_location[0].include?("/bootsnap/")
17
17
  return super unless RubyNext::Language.transformable?(path)
18
18
  source = RubyNext::Language.transform(source, rewriters: RubyNext::Language.current_rewriters)
19
19
 
20
- $stdout.puts ::RubyNext::Utils.source_with_lines(source, path) if ENV["RUBY_NEXT_DEBUG"] == "1"
20
+ RubyNext.debug_source(source, path)
21
21
 
22
22
  RubyVM::InstructionSequence.compile(source, path, path).to_binary
23
23
  rescue SyntaxError
@@ -9,7 +9,7 @@ module RubyNext
9
9
  source,
10
10
  using: bind&.receiver == TOPLEVEL_BINDING.receiver || bind&.receiver&.is_a?(Module)
11
11
  )
12
- $stdout.puts ::RubyNext::Utils.source_with_lines(new_source, "(#{caller_locations(1, 1).first})") if ENV["RUBY_NEXT_DEBUG"] == "1"
12
+ RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
13
13
  super new_source, bind, *args
14
14
  end
15
15
  end
@@ -22,7 +22,7 @@ module RubyNext
22
22
 
23
23
  source = args.shift
24
24
  new_source = ::RubyNext::Language::Runtime.transform(source, using: false)
25
- $stdout.puts ::RubyNext::Utils.source_with_lines(new_source, "(#{caller_locations(1, 1).first})") if ENV["RUBY_NEXT_DEBUG"] == "1"
25
+ RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
26
26
  super new_source, *args
27
27
  end
28
28
  end
@@ -35,7 +35,7 @@ module RubyNext
35
35
 
36
36
  source = args.shift
37
37
  new_source = ::RubyNext::Language::Runtime.transform(source, using: false)
38
- $stdout.puts ::RubyNext::Utils.source_with_lines(new_source, "(#{caller_locations(1, 1).first})") if ENV["RUBY_NEXT_DEBUG"] == "1"
38
+ RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
39
39
  super new_source, *args
40
40
  end
41
41
 
@@ -44,7 +44,7 @@ module RubyNext
44
44
 
45
45
  source = args.shift
46
46
  new_source = ::RubyNext::Language::Runtime.transform(source, using: false)
47
- $stdout.puts ::RubyNext::Utils.source_with_lines(new_source, "(#{caller_locations(1, 1).first})") if ENV["RUBY_NEXT_DEBUG"] == "1"
47
+ RubyNext.debug_source(new_source, "(#{caller_locations(1, 1).first})")
48
48
  super new_source, *args
49
49
  end
50
50
  end
@@ -80,7 +80,7 @@ module RubyNext
80
80
  end
81
81
 
82
82
  def warn_custom_parser_required_for(feature)
83
- warn(CUSTOM_PARSER_REQUIRED % feature)
83
+ RubyNext.warn(CUSTOM_PARSER_REQUIRED % feature)
84
84
  end
85
85
  end
86
86
 
@@ -24,7 +24,7 @@ module RubyNext
24
24
  contents = File.read(path)
25
25
  new_contents = transform contents
26
26
 
27
- $stdout.puts source_with_lines(new_contents, path) if ENV["RUBY_NEXT_DEBUG"] == "1"
27
+ RubyNext.debug_source new_contents, path
28
28
 
29
29
  evaluate(new_contents, path)
30
30
  true
@@ -83,7 +83,7 @@ module Kernel
83
83
  true
84
84
  rescue => e
85
85
  $LOADED_FEATURES.delete realpath
86
- warn "RubyNext failed to require '#{path}': #{e.message}"
86
+ RubyNext.warn "RubyNext failed to require '#{path}': #{e.message}"
87
87
  require_without_ruby_next(path)
88
88
  end
89
89
 
@@ -98,7 +98,7 @@ module Kernel
98
98
  )
99
99
  require(realpath)
100
100
  rescue => e
101
- warn "RubyNext failed to require relative '#{path}' from #{from}: #{e.message}"
101
+ RubyNext.warn "RubyNext failed to require relative '#{path}' from #{from}: #{e.message}"
102
102
  require_relative_without_ruby_next(path)
103
103
  end
104
104
 
@@ -110,7 +110,7 @@ module Kernel
110
110
 
111
111
  RubyNext::Language::Runtime.load(realpath, wrap: wrap)
112
112
  rescue => e
113
- warn "RubyNext failed to load '#{path}': #{e.message}"
113
+ RubyNext.warn "RubyNext failed to load '#{path}': #{e.message}"
114
114
  load_without_ruby_next(path)
115
115
  end
116
116
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "utils"
4
+
5
+ module RubyNext
6
+ class << self
7
+ attr_accessor :silence_warnings
8
+ attr_reader :debug_enabled
9
+
10
+ def warn(msg)
11
+ return if silence_warnings
12
+
13
+ Kernel.warn msg
14
+ end
15
+
16
+ def debug_source(source, filepath = nil)
17
+ return unless debug_enabled
18
+
19
+ return if debug_filter && !filepath.include?(debug_filter)
20
+
21
+ $stdout.puts Utils.source_with_lines(source, filepath)
22
+ end
23
+
24
+ def debug_enabled=(val)
25
+ return if val.nil?
26
+
27
+ @debug_enabled = !(val == "false" || val == "0")
28
+
29
+ return unless debug_enabled
30
+
31
+ return if val == "true" || val == "1"
32
+
33
+ @debug_filter = val
34
+ end
35
+
36
+ private
37
+
38
+ attr_reader :debug_filter
39
+ end
40
+
41
+ self.silence_warnings = ENV["RUBY_NEXT_WARN"] != "false"
42
+ self.debug_enabled = ENV["RUBY_NEXT_DEBUG"]
43
+ end
@@ -6,7 +6,9 @@ module RubyNext
6
6
 
7
7
  if $LOAD_PATH.respond_to?(:resolve_feature_path)
8
8
  def resolve_feature_path(feature)
9
- $LOAD_PATH.resolve_feature_path(feature)&.last
9
+ catch(LoadError) do
10
+ $LOAD_PATH.resolve_feature_path(feature)&.last
11
+ end
10
12
  end
11
13
  else
12
14
  def resolve_feature_path(path)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyNext
4
- VERSION = "0.5.1"
4
+ VERSION = "0.5.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-next-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-20 00:00:00.000000000 Z
11
+ date: 2020-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -95,6 +95,7 @@ files:
95
95
  - lib/ruby-next/language/runtime.rb
96
96
  - lib/ruby-next/language/setup.rb
97
97
  - lib/ruby-next/language/unparser.rb
98
+ - lib/ruby-next/logging.rb
98
99
  - lib/ruby-next/rubocop.rb
99
100
  - lib/ruby-next/utils.rb
100
101
  - lib/ruby-next/version.rb