parser 2.5.0.3 → 2.5.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2b09926b92e95874cfa6295ffa913a0d282c063d
4
- data.tar.gz: 10036043ab11e9fd97f36ddf29615f8f25247b78
2
+ SHA256:
3
+ metadata.gz: eae6cafd7a3fce8e37c8659d938ebaf9c07809373b09e67aadfce5812e270798
4
+ data.tar.gz: f5c5cbe528398b002fd7663fcd87083a4a6674a9c506b2d57c0c94015a3a006a
5
5
  SHA512:
6
- metadata.gz: 78ade228a7b0d40884bd06a6b2241d1282693f15d359bf73e0ae4f56e08b90da90586ecca947666fdf00b5d2a6a9ec7851627cd870a00cab49eafe6368c245fa
7
- data.tar.gz: f4109e28f013c637ad30b616115037264756b05eadfde190987564831b1f3ef9071cfafc764b731098639524f28c06d80738437a8c60f4d0062de3cf52daf1ec
6
+ metadata.gz: 8721c4dd25927f9913423c7a5a1076b40d9652b2e327b6d74d02f9994e45a4bb53a69c1889d0fa271f1fb4756600a809cf11876add173fd4c65e64c4316c4225
7
+ data.tar.gz: 6b356ff3f6889594738f9b5c2ded84bc0abf20cf506caaaa627ff2ce5759edc68f0b73f6e4a9c0cab4dbf377df821979cd2fb179bf24ee3939868ec871fe3396
@@ -1,8 +1,14 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
- Not released (2018-03-06)
5
- -------------------------
4
+ v2.5.0.4 (2018-03-13)
5
+ ---------------------
6
+
7
+ Bugs fixed:
8
+ * AST::Processor: handle on_index, on_indexasgn, on_lambda. (Ilya Bylich)
9
+
10
+ v2.5.0.3 (2018-03-06)
11
+ ---------------------
6
12
 
7
13
  Bugs fixed:
8
14
  * Accept `BEGIN` and `END` as correct method name (#463) (Masataka Pocke Kuwabara)
@@ -166,7 +166,11 @@ module Parser
166
166
 
167
167
  alias on_csend on_send
168
168
 
169
+ alias on_index process_regular_node
170
+ alias on_indexasgn process_regular_node
171
+
169
172
  alias on_block process_regular_node
173
+ alias on_lambda process_regular_node
170
174
 
171
175
  alias on_while process_regular_node
172
176
  alias on_while_post process_regular_node
@@ -131,6 +131,9 @@ module Parser
131
131
  @builder.parser = self
132
132
  @context = Context.new
133
133
 
134
+ # Last emitted token
135
+ @last_token = nil
136
+
134
137
  if self.class::Racc_debug_parser && ENV['RACC_DEBUG']
135
138
  @yydebug = true
136
139
  end
@@ -222,7 +225,9 @@ module Parser
222
225
  private
223
226
 
224
227
  def next_token
225
- @lexer.advance
228
+ token = @lexer.advance
229
+ @last_token = token
230
+ token
226
231
  end
227
232
 
228
233
  def check_kwarg_name(name_t)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parser
4
+ module Color
5
+ def self.color(str, code, bold: false)
6
+ return str unless STDOUT.tty?
7
+ code = Array(code)
8
+ code.unshift(1) if bold
9
+ "\e[#{code.join(';')}m#{str}\e[0m"
10
+ end
11
+
12
+ def self.red(str, bold: false)
13
+ color(str, 31, bold: bold)
14
+ end
15
+
16
+ def self.green(str, bold: false)
17
+ color(str, 32, bold: bold)
18
+ end
19
+
20
+ def self.yellow(str, bold: false)
21
+ color(str, 33, bold: bold)
22
+ end
23
+
24
+ def self.magenta(str, bold: false)
25
+ color(str, 35, bold: bold)
26
+ end
27
+
28
+ def self.underline(str)
29
+ color(str, 4)
30
+ end
31
+ end
32
+ end
@@ -89,7 +89,7 @@ class Parser::Lexer
89
89
 
90
90
  REGEXP_META_CHARACTERS = Regexp.union(*"\\$()*+.<>?[]^{|}".chars).freeze
91
91
 
92
- attr_reader :source_buffer, :last_token
92
+ attr_reader :source_buffer
93
93
 
94
94
  attr_accessor :diagnostics
95
95
  attr_accessor :static_env
@@ -175,9 +175,6 @@ class Parser::Lexer
175
175
 
176
176
  # State before =begin / =end block comment
177
177
  @cs_before_block_comment = self.class.lex_en_line_begin
178
-
179
- # Last emitted token
180
- @last_token = nil
181
178
  end
182
179
 
183
180
  def source_buffer=(source_buffer)
@@ -328,7 +325,6 @@ class Parser::Lexer
328
325
  token = [ type, [ value, range(s, e) ] ]
329
326
 
330
327
  @token_queue.push(token)
331
- @last_token = token
332
328
 
333
329
  @tokens.push(token) if @tokens
334
330
 
@@ -21,14 +21,14 @@ module Parser
21
21
  more = "(in-kwarg)" if @in_kwarg
22
22
 
23
23
  puts decorate(range,
24
- "\e[0;32m#{type} #{val.inspect}\e[0m",
25
- "#{state.to_s.ljust(12)} #{@cond} #{@cmdarg} #{more}\e[0m")
24
+ Color.green("#{type} #{val.inspect}"),
25
+ "#{state.to_s.ljust(12)} #{@cond} #{@cmdarg} #{more}")
26
26
 
27
27
  [ type, [val, range] ]
28
28
  end
29
29
 
30
30
  def state=(new_state)
31
- puts " \e[1;33m>>> STATE SET <<<\e[0m " +
31
+ puts " #{Color.yellow(">>> STATE SET <<<", bold: true)} " +
32
32
  "#{new_state.to_s.ljust(12)} #{@cond} #{@cmdarg}".rjust(66)
33
33
 
34
34
  self.state_before_explanation = new_state
@@ -40,12 +40,12 @@ module Parser
40
40
  from, to = range.begin.column, range.end.column
41
41
 
42
42
  line = range.source_line + ' '
43
- line[from...to] = "\e[4m#{line[from...to]}\e[0m"
43
+ line[from...to] = Color.underline(line[from...to])
44
44
 
45
45
  tail_len = to - from - 1
46
46
  tail = '~' * (tail_len >= 0 ? tail_len : 0)
47
- decoration = "#{" " * from}\e[1;31m^#{tail}\e[0m #{token} ".
48
- ljust(70) + info
47
+ decoration = "#{" " * from}#{Color.red("^#{tail}", bold: true)} #{token} ".
48
+ ljust(68) + info
49
49
 
50
50
  [ line, decoration ]
51
51
  end
@@ -862,7 +862,7 @@ rule
862
862
  #
863
863
  # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack
864
864
  # and later lexer pushes corresponding bits on top of it.
865
- last_token = @lexer.last_token[0]
865
+ last_token = @last_token[0]
866
866
  lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG
867
867
 
868
868
  if lookahead
@@ -1845,13 +1845,13 @@ regexp_contents: # nothing
1845
1845
  }
1846
1846
  | tSTRING_DBEG
1847
1847
  {
1848
- @lexer.cond.push(false)
1849
- @lexer.cmdarg.push(false)
1848
+ @lexer.push_cmdarg
1849
+ @lexer.push_cond
1850
1850
  }
1851
1851
  compstmt tSTRING_DEND
1852
1852
  {
1853
- @lexer.cond.pop
1854
- @lexer.cmdarg.pop
1853
+ @lexer.pop_cmdarg
1854
+ @lexer.pop_cond
1855
1855
 
1856
1856
  result = @builder.begin(val[0], val[2], val[3])
1857
1857
  }
@@ -872,7 +872,7 @@ rule
872
872
  #
873
873
  # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack
874
874
  # and later lexer pushes corresponding bits on top of it.
875
- last_token = @lexer.last_token[0]
875
+ last_token = @last_token[0]
876
876
  lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG
877
877
 
878
878
  if lookahead
@@ -1842,13 +1842,13 @@ regexp_contents: # nothing
1842
1842
  }
1843
1843
  | tSTRING_DBEG
1844
1844
  {
1845
- @lexer.cond.push(false)
1846
- @lexer.cmdarg.push(false)
1845
+ @lexer.push_cmdarg
1846
+ @lexer.push_cond
1847
1847
  }
1848
1848
  compstmt tSTRING_DEND
1849
1849
  {
1850
- @lexer.cond.pop
1851
- @lexer.cmdarg.pop
1850
+ @lexer.pop_cmdarg
1851
+ @lexer.pop_cond
1852
1852
 
1853
1853
  result = @builder.begin(val[0], val[2], val[3])
1854
1854
  }
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'parser/runner'
4
+ require 'parser/color'
4
5
  require 'parser/lexer/explanation'
5
6
  require 'json'
6
7
 
@@ -20,15 +21,15 @@ module Parser
20
21
  print_line = lambda do
21
22
  unless hilight_line.empty?
22
23
  puts hilight_line.
23
- gsub(/[a-z_]+/) { |m| "\e[1;33m#{m}\e[0m" }.
24
- gsub(/[~.]+/) { |m| "\e[1;35m#{m}\e[0m" }
24
+ gsub(/[a-z_]+/) { |m| Color.yellow(m, bold: true) }.
25
+ gsub(/[~.]+/) { |m| Color.magenta(m, bold: true) }
25
26
  hilight_line = ''
26
27
  end
27
28
  end
28
29
 
29
30
  print_source = lambda do |range|
30
31
  source_line = range.source_line
31
- puts "\e[32m#{source_line}\e[0m"
32
+ puts Color.green(source_line)
32
33
  source_line
33
34
  end
34
35
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parser
4
- VERSION = '2.5.0.3'
4
+ VERSION = '2.5.0.5'
5
5
  end
@@ -6814,4 +6814,32 @@ class TestParser < Minitest::Test
6814
6814
  %q{},
6815
6815
  ALL_VERSIONS)
6816
6816
  end
6817
+
6818
+ def test_bug_466
6819
+ assert_parses(
6820
+ s(:block,
6821
+ s(:send, nil, :foo,
6822
+ s(:dstr,
6823
+ s(:begin,
6824
+ s(:send,
6825
+ s(:begin,
6826
+ s(:send,
6827
+ s(:int, 1), :+,
6828
+ s(:int, 1))), :to_i)))),
6829
+ s(:args), nil),
6830
+ %q{foo "#{(1+1).to_i}" do; end},
6831
+ %q{},
6832
+ ALL_VERSIONS)
6833
+ end
6834
+
6835
+ def test_bug_473
6836
+ assert_parses(
6837
+ s(:send, nil, :m,
6838
+ s(:dstr,
6839
+ s(:begin,
6840
+ s(:array)))),
6841
+ %q{m "#{[]}"},
6842
+ %q{},
6843
+ ALL_VERSIONS)
6844
+ end
6817
6845
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0.3
4
+ version: 2.5.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - whitequark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-06 00:00:00.000000000 Z
11
+ date: 2018-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ast
@@ -183,6 +183,7 @@ files:
183
183
  - lib/parser/base.rb
184
184
  - lib/parser/builders/default.rb
185
185
  - lib/parser/clobbering_error.rb
186
+ - lib/parser/color.rb
186
187
  - lib/parser/context.rb
187
188
  - lib/parser/current.rb
188
189
  - lib/parser/deprecation.rb
@@ -296,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
297
  version: '0'
297
298
  requirements: []
298
299
  rubyforge_project:
299
- rubygems_version: 2.5.2.2
300
+ rubygems_version: 2.7.6
300
301
  signing_key:
301
302
  specification_version: 4
302
303
  summary: A Ruby parser written in pure Ruby.