ripper_ruby_parser 1.11.0 → 1.12.0

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: 568f21d8800cba790d212bb45e96554f93a271da3d9bae483fbf101385906d8d
4
- data.tar.gz: fa4393288ca29703405077d9da524a51cb0d7575c08b8dcabcc9be3bcbe5d6d0
3
+ metadata.gz: e017d6c1dff36a5f33a74676c9ff3d9d069ad2210bc8e8049b26ddff56d8961b
4
+ data.tar.gz: 76ba1cc8e225478f4679ed0b801c69387f5c350b57fda365a6316f42c0800bba
5
5
  SHA512:
6
- metadata.gz: 5dcfda84f25d0351b0351e06eb231deaab73d6377991a6b1939dc9c4df268c8cfb0960c22ca50a0d3a5dec432a855ef2ddb8a66171b321855ae2732c1f2d5518
7
- data.tar.gz: 7c68ec079fe840e6990d1555b1751639b46113f636fcc4e90429af4a3c36382f19ba6fbd6c3c0016271e1082412dd6f9001c7f8fb7c20858aec06d1d88a4af59
6
+ metadata.gz: c22fb29374df4cde3de294f1fd7f7e7b529b7a67d69522f5779ff2cb1ec83f8ea8acfdc6eb0750bf9246094989df59b586a1bb96ff3c7c6227aa51be49d8e121
7
+ data.tar.gz: 2d3988eebde86cc80dbcd8079941e00cd3edc4263a105590d608cb37622284cb96bf9cff923b8514d31fd8b4cddaaafdbab270f077d49f0326960c6645577f3b
data/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ This project adheres to [Semantic Versioning 2.0.0][1].
6
6
 
7
7
  This document is formatted based on [Keep A CHANGELOG][2].
8
8
 
9
+ ## 1.12.0 / 2025-10-25
10
+
11
+ * Target compatibility with `ruby_parser` 3.21 ([#256] by [mvz])
12
+ * Support Ruby 3.2 through 3.4, dropping support for Ruby 3.0 and 3.1
13
+ ([#255] and [#260] by [mvz])
14
+
15
+ [#255]: https://github.com/mvz/ripper_ruby_parser/pull/255
16
+ [#256]: https://github.com/mvz/ripper_ruby_parser/pull/256
17
+ [#260]: https://github.com/mvz/ripper_ruby_parser/pull/260
18
+
9
19
  ## 1.11.0 / 2024-01-05
10
20
 
11
21
  * Support Ruby 3.0 through 3.3, dropping support for Ruby 2.6 and 2.7
data/README.md CHANGED
@@ -10,8 +10,8 @@ Parse with Ripper, produce sexps that are compatible with RubyParser.
10
10
 
11
11
  * Drop-in replacement for RubyParser
12
12
  * Should handle 1.9 and later syntax gracefully
13
- * Requires Ruby 3.0 or higher
14
- * Compatible with RubyParser 3.20.2
13
+ * Requires Ruby 3.2 or higher
14
+ * Compatible with RubyParser 3.21.0
15
15
 
16
16
  ## Known incompatibilities
17
17
 
@@ -22,6 +22,8 @@ RipperRubyParser has a few incompatibilities with RubyParser.
22
22
  * RipperRubyParser does not always match RubyParser's line numbering
23
23
  * RipperRubyParser dedents auto-dedenting heredocs
24
24
  * RipperRubyParser does not include postfix comments
25
+ * With Ruby 3.4, RipperRubyParser parses variables assigned by regular
26
+ expressions as local variables
25
27
 
26
28
  ## Install
27
29
 
@@ -46,7 +48,7 @@ parser.parse "foo[bar] += baz qux"
46
48
 
47
49
  ## Requirements
48
50
 
49
- * Ruby 2.7 or higher
51
+ * Ruby 3.2 or higher
50
52
  * `sexp_processor`
51
53
 
52
54
  ## Hacking and contributing
@@ -66,7 +68,7 @@ If you want to send pull requests or patches, please:
66
68
 
67
69
  (The MIT License)
68
70
 
69
- Copyright (c) 2012, 2014-2024 Matijs van Zuijlen
71
+ Copyright (c) 2012, 2014-2025 Matijs van Zuijlen
70
72
 
71
73
  Permission is hereby granted, free of charge, to any person obtaining
72
74
  a copy of this software and associated documentation files (the
@@ -70,15 +70,17 @@ module RipperRubyParser
70
70
  end
71
71
 
72
72
  def on_kw(tok)
73
- result = super
74
- case tok
75
- when "class", "def", "module", "BEGIN", "begin", "END"
76
- unless @in_symbol
73
+ super.tap do |result|
74
+ next if @in_symbol
75
+
76
+ case tok
77
+ when "class", "def", "module", "BEGIN", "begin", "END"
77
78
  @comment_stack.push [result, @comment]
78
79
  @comment = ""
80
+ when "end"
81
+ @comment = "" if @comment_stack.any?
79
82
  end
80
83
  end
81
- result
82
84
  end
83
85
 
84
86
  def on_module(*args)
@@ -221,7 +223,7 @@ module RipperRubyParser
221
223
  end
222
224
 
223
225
  def on_tstring_content(content)
224
- super(content) << @delimiter_stack.last
226
+ super << @delimiter_stack.last
225
227
  end
226
228
 
227
229
  def on_tstring_end(delimiter)
@@ -287,6 +289,7 @@ module RipperRubyParser
287
289
  end
288
290
 
289
291
  NUMBER_LITERAL_TYPES = [:@imaginary, :@int, :@float, :@rational].freeze
292
+ private_constant :NUMBER_LITERAL_TYPES
290
293
 
291
294
  def on_unary(operator, value)
292
295
  if !@space_before && operator == :-@ && NUMBER_LITERAL_TYPES.include?(value.first)
@@ -321,6 +324,21 @@ module RipperRubyParser
321
324
  super
322
325
  end
323
326
 
327
+ def on_case(*args)
328
+ @comment = ""
329
+ super
330
+ end
331
+
332
+ def on_ident(*args)
333
+ @comment = ""
334
+ super
335
+ end
336
+
337
+ def on_string_content(*args)
338
+ @comment = ""
339
+ super
340
+ end
341
+
324
342
  def on_BEGIN(*args)
325
343
  commentize("BEGIN", super)
326
344
  end
@@ -351,13 +369,15 @@ module RipperRubyParser
351
369
  end
352
370
 
353
371
  def commentize(name, exp, target_loc = nil)
372
+ raise "Non-empty comment in progress: #{@comment}" unless @comment.empty?
373
+
354
374
  if target_loc
355
375
  (_, kw, loc), comment = @comment_stack.pop until (loc <=> target_loc) == -1
356
376
  else
357
377
  (_, kw, loc), comment = @comment_stack.pop
358
378
  end
359
379
 
360
- warn "Comment stack mismatch: expected #{kw} to equal #{name}" unless kw == name
380
+ raise "Comment stack mismatch: expected #{kw} to equal #{name}" unless kw == name
361
381
 
362
382
  @comment = ""
363
383
  exp.push loc
@@ -155,6 +155,7 @@ module RipperRubyParser
155
155
  "||": :op_asgn_or,
156
156
  "&&": :op_asgn_and
157
157
  }.freeze
158
+ private_constant :OPERATOR_ASSIGNMENT_MAP
158
159
 
159
160
  def create_regular_operator_assignment_sub_type(lvalue, value, operator)
160
161
  value = unwrap_begin(value)
@@ -198,6 +199,8 @@ module RipperRubyParser
198
199
  cvar: :cvasgn
199
200
  }.freeze
200
201
 
202
+ private_constant :ASSIGNMENT_SUB_TYPE_MAP, :ASSIGNMENT_IN_METHOD_SUB_TYPE_MAP
203
+
201
204
  def create_assignment_sub_type(lvalue, value)
202
205
  lvalue_type, lvalue_value = lvalue
203
206
  s(map_assignment_lvalue_type(lvalue_type), lvalue_value, value)
@@ -215,7 +215,8 @@ module RipperRubyParser
215
215
  end
216
216
 
217
217
  LVAR_MATCHER = Sexp::Matcher.new(:lvar, Sexp._)
218
- NUMBERED_PARAMS = (1..9).map { |it| :"_#{it}" }.freeze
218
+ NUMBERED_PARAMS = (1..9).map { |num| :"_#{num}" }.freeze
219
+ private_constant :LVAR_MATCHER, :NUMBERED_PARAMS
219
220
 
220
221
  def make_iter(call, args, stmt)
221
222
  args[-1] = nil if args && args.last == s(:excessed_comma)
@@ -230,7 +231,7 @@ module RipperRubyParser
230
231
  end
231
232
 
232
233
  def count_numbered_lvars(stmt)
233
- lvar_names = (LVAR_MATCHER / stmt).map { |it| it[1] }
234
+ lvar_names = (LVAR_MATCHER / stmt).map { |match| match[1] }
234
235
  (NUMBERED_PARAMS & lvar_names).length
235
236
  end
236
237
  end
@@ -101,6 +101,7 @@ module RipperRubyParser
101
101
  dsplat: "**",
102
102
  blockarg: "&"
103
103
  }.freeze
104
+ private_constant :SPECIAL_ARG_MARKER
104
105
 
105
106
  def convert_arguments(args)
106
107
  return s(:args) if args.nil?
@@ -139,11 +139,11 @@ module RipperRubyParser
139
139
  end
140
140
 
141
141
  def merge_raw_string_literals(list)
142
- chunks = list.chunk { |it| it.sexp_type == :@tstring_content }
142
+ chunks = list.chunk { |lit| lit.sexp_type == :@tstring_content }
143
143
  chunks.flat_map do |is_simple, items|
144
144
  if is_simple && items.count > 1
145
145
  head = items.first
146
- contents = items.map { |it| it[1] }.join
146
+ contents = items.map { |lit| lit[1] }.join
147
147
  [s(:@tstring_content, contents, head[2], head[3])]
148
148
  else
149
149
  items
@@ -236,6 +236,12 @@ module RipperRubyParser
236
236
  NON_INTERPOLATING_WORD_LIST = /^%[wi].$/
237
237
  REGEXP_LITERALS = ["/", /^%r.$/].freeze
238
238
 
239
+ private_constant :INTERPOLATING_HEREDOC, :NON_INTERPOLATING_HEREDOC,
240
+ :INTERPOLATING_STRINGS, :NON_INTERPOLATING_STRINGS,
241
+ :INTERPOLATING_DSYM,
242
+ :INTERPOLATING_WORD_LIST, :NON_INTERPOLATING_WORD_LIST,
243
+ :REGEXP_LITERALS
244
+
239
245
  def handle_string_unescaping(content, delim)
240
246
  case delim
241
247
  when INTERPOLATING_HEREDOC, INTERPOLATING_DSYM, *INTERPOLATING_STRINGS
@@ -27,8 +27,6 @@ module RipperRubyParser
27
27
 
28
28
  @in_method_body = false
29
29
  @local_variables = []
30
-
31
- @kept_comment = nil
32
30
  end
33
31
 
34
32
  include SexpHandlers
@@ -118,14 +116,10 @@ module RipperRubyParser
118
116
 
119
117
  def process_comment(exp)
120
118
  _, comment, inner = exp.shift 3
121
- comment = @kept_comment + comment if @kept_comment
122
- @kept_comment = nil
123
119
  sexp = process(inner)
124
120
  case sexp.sexp_type
125
121
  when :defs, :defn, :module, :class, :sclass
126
122
  sexp.comments = comment
127
- else
128
- @kept_comment = comment
129
123
  end
130
124
  sexp
131
125
  end
@@ -183,7 +183,7 @@ module RipperRubyParser
183
183
  def delimiter_regexp_pattern(delimiter)
184
184
  delimiter = delimiter[-1]
185
185
  delimiters = DELIMITER_PAIRS.fetch(delimiter, delimiter)
186
- delimiters.each_char.map { |it| Regexp.escape it }.join(" | ")
186
+ delimiters.each_char.map { |char| Regexp.escape char }.join(" | ")
187
187
  end
188
188
  end
189
189
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RipperRubyParser
4
- VERSION = "1.11.0"
4
+ VERSION = "1.12.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ripper_ruby_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matijs van Zuijlen
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-01-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: sexp_processor
@@ -58,20 +57,6 @@ dependencies:
58
57
  - - ">="
59
58
  - !ruby/object:Gem::Version
60
59
  version: 1.3.1
61
- - !ruby/object:Gem::Dependency
62
- name: pry
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: 0.14.0
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: 0.14.0
75
60
  - !ruby/object:Gem::Dependency
76
61
  name: rake
77
62
  requirement: !ruby/object:Gem::Requirement
@@ -106,70 +91,70 @@ dependencies:
106
91
  requirements:
107
92
  - - "~>"
108
93
  - !ruby/object:Gem::Version
109
- version: '1.56'
94
+ version: '1.79'
110
95
  type: :development
111
96
  prerelease: false
112
97
  version_requirements: !ruby/object:Gem::Requirement
113
98
  requirements:
114
99
  - - "~>"
115
100
  - !ruby/object:Gem::Version
116
- version: '1.56'
101
+ version: '1.79'
117
102
  - !ruby/object:Gem::Dependency
118
103
  name: rubocop-minitest
119
104
  requirement: !ruby/object:Gem::Requirement
120
105
  requirements:
121
106
  - - "~>"
122
107
  - !ruby/object:Gem::Version
123
- version: 0.34.1
108
+ version: 0.38.0
124
109
  type: :development
125
110
  prerelease: false
126
111
  version_requirements: !ruby/object:Gem::Requirement
127
112
  requirements:
128
113
  - - "~>"
129
114
  - !ruby/object:Gem::Version
130
- version: 0.34.1
115
+ version: 0.38.0
131
116
  - !ruby/object:Gem::Dependency
132
117
  name: rubocop-packaging
133
118
  requirement: !ruby/object:Gem::Requirement
134
119
  requirements:
135
120
  - - "~>"
136
121
  - !ruby/object:Gem::Version
137
- version: 0.5.2
122
+ version: 0.6.0
138
123
  type: :development
139
124
  prerelease: false
140
125
  version_requirements: !ruby/object:Gem::Requirement
141
126
  requirements:
142
127
  - - "~>"
143
128
  - !ruby/object:Gem::Version
144
- version: 0.5.2
129
+ version: 0.6.0
145
130
  - !ruby/object:Gem::Dependency
146
131
  name: rubocop-performance
147
132
  requirement: !ruby/object:Gem::Requirement
148
133
  requirements:
149
134
  - - "~>"
150
135
  - !ruby/object:Gem::Version
151
- version: '1.19'
136
+ version: '1.25'
152
137
  type: :development
153
138
  prerelease: false
154
139
  version_requirements: !ruby/object:Gem::Requirement
155
140
  requirements:
156
141
  - - "~>"
157
142
  - !ruby/object:Gem::Version
158
- version: '1.19'
143
+ version: '1.25'
159
144
  - !ruby/object:Gem::Dependency
160
145
  name: ruby_parser
161
146
  requirement: !ruby/object:Gem::Requirement
162
147
  requirements:
163
148
  - - "~>"
164
149
  - !ruby/object:Gem::Version
165
- version: 3.20.2
150
+ version: 3.21.0
166
151
  type: :development
167
152
  prerelease: false
168
153
  version_requirements: !ruby/object:Gem::Requirement
169
154
  requirements:
170
155
  - - "~>"
171
156
  - !ruby/object:Gem::Version
172
- version: 3.20.2
157
+ version: 3.21.0
173
158
  - !ruby/object:Gem::Dependency
174
159
  name: sexp_processor
175
160
  requirement: !ruby/object:Gem::Requirement
@@ -236,7 +221,6 @@ metadata:
236
221
  source_code_uri: https://github.com/mvz/ripper_ruby_parser
237
222
  changelog_uri: https://github.com/mvz/ripper_ruby_parser/blob/master/CHANGELOG.md
238
223
  rubygems_mfa_required: 'true'
239
- post_install_message:
240
224
  rdoc_options:
241
225
  - "--main"
242
226
  - README.md
@@ -246,15 +230,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
246
230
  requirements:
247
231
  - - ">="
248
232
  - !ruby/object:Gem::Version
249
- version: 3.0.0
233
+ version: 3.2.0
250
234
  required_rubygems_version: !ruby/object:Gem::Requirement
251
235
  requirements:
252
236
  - - ">="
253
237
  - !ruby/object:Gem::Version
254
238
  version: '0'
255
239
  requirements: []
256
- rubygems_version: 3.5.3
257
- signing_key:
240
+ rubygems_version: 3.7.2
258
241
  specification_version: 4
259
242
  summary: Parse with Ripper, produce sexps that are compatible with RubyParser.
260
243
  test_files: []