rfmt 1.3.0-x86_64-linux-musl → 1.3.2-x86_64-linux-musl

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: a757fc13ab7a62ef8d5dde2946f76a5de89707d62aa6a2847bf74d86b208534d
4
- data.tar.gz: 31607843166facc56e3ab406ea9645372a219e218126d599619f7f0180fa3cbf
3
+ metadata.gz: 514d6bc7a65ae2ea7ad4d84fd742871bfe634efdf58f574fcdfde7df47b3eda4
4
+ data.tar.gz: bab9d44bb89bd979fa2f6e501806943402b47ace663d52182b6997917a4878b7
5
5
  SHA512:
6
- metadata.gz: 351583b49c87a0263046fe8476a4e098a6cf5b47b3a8664553d4fe7cc8dc750a72416de880b588af0584b4f8586a077fd3b1a3d6043829f90c062a80530df8ae
7
- data.tar.gz: b6596d81d9f668f4071a2cce3e62062919a213a12f9960696915937e30cd5cbbae74ed9ec561556017909a46eff0001df76365c095507ae4b5d843871e064e58
6
+ metadata.gz: 98657054e0006e52166c5680e6add702c0b839218737c3967648b2e58dd5c92f913b2eca84ab9133f2b8899b328f3da711ababc748476e9678f9c799858367e6
7
+ data.tar.gz: fc2ba6bd4eefcdea77f59c8c43c48e3f748139463a0efcbfda3cc961d90e771f851597990743f54e200819b84b7241b87a53dc809fa53e18ce40fc0f85704a4a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.3.2] - 2026-01-09
4
+
5
+ ### Added
6
+ - Implement `std::str::FromStr` trait for `NodeType`
7
+ - Unit tests for validation module
8
+
9
+ ### Changed
10
+ - Use serde enum for comment type deserialization (type-safe JSON parsing)
11
+ - Convert recursive `find_last_code_line` to iterative approach (prevent stack overflow)
12
+ - Use BTreeMap index for comment lookup in `emit_statements` (O(n) → O(log n))
13
+
14
+ ### Fixed
15
+ - Remove panic-prone `unwrap()` on Mutex lock in logger (prevent Ruby VM crash)
16
+
17
+ ## [1.3.1] - 2026-01-08
18
+
19
+ ### Added
20
+ - Dedicated emitters for SingletonClassNode and pattern matching (CaseMatchNode, InNode)
21
+ - Literal and pattern match node support
22
+ - NoKeywordsParameterNode support
23
+
24
+ ### Changed
25
+ - Performance: Comment lookup optimized with BTreeMap index (O(n) → O(log n))
26
+ - Performance: HashSet for comment tracking (O(n) → O(1) contains check)
27
+ - Performance: Cached indent strings to avoid repeated allocations
28
+
29
+ ### Fixed
30
+ - DefNode parameter handling and missing node types
31
+ - Deep nest JSON parse error (max_nesting: false)
32
+
3
33
  ## [1.3.0] - 2026-01-07
4
34
 
5
35
  ### Added
data/lib/rfmt/3.1/rfmt.so CHANGED
Binary file
data/lib/rfmt/3.2/rfmt.so CHANGED
Binary file
data/lib/rfmt/3.3/rfmt.so CHANGED
Binary file
@@ -56,7 +56,7 @@ module Rfmt
56
56
 
57
57
  # Serialize the Prism AST to JSON
58
58
  def self.serialize_ast(node)
59
- JSON.generate(convert_node(node))
59
+ JSON.generate(convert_node(node), max_nesting: false)
60
60
  end
61
61
 
62
62
  # Serialize the Prism AST with comments to JSON
@@ -80,7 +80,7 @@ module Rfmt
80
80
  JSON.generate({
81
81
  ast: convert_node(result.value),
82
82
  comments: comments
83
- })
83
+ }, max_nesting: false)
84
84
  end
85
85
 
86
86
  # Convert a Prism node to our internal representation
@@ -241,8 +241,6 @@ module Rfmt
241
241
  [node.expression].compact
242
242
  when Prism::AndNode
243
243
  [node.left, node.right].compact
244
- when Prism::NotNode
245
- [node.expression].compact
246
244
  when Prism::InterpolatedRegularExpressionNode, Prism::InterpolatedSymbolNode,
247
245
  Prism::InterpolatedXStringNode
248
246
  node.parts || []
@@ -293,6 +291,55 @@ module Rfmt
293
291
  [*node.lefts, node.rest, *node.rights, node.value].compact
294
292
  when Prism::MultiTargetNode
295
293
  [*node.lefts, node.rest, *node.rights].compact
294
+ when Prism::SourceFileNode, Prism::SourceLineNode, Prism::SourceEncodingNode
295
+ []
296
+ when Prism::PreExecutionNode, Prism::PostExecutionNode
297
+ [node.statements].compact
298
+ # Numeric literals
299
+ when Prism::RationalNode, Prism::ImaginaryNode
300
+ [node.numeric].compact
301
+ # String interpolation
302
+ when Prism::EmbeddedVariableNode
303
+ [node.variable].compact
304
+ # Pattern matching patterns
305
+ when Prism::ArrayPatternNode
306
+ [*node.requireds, node.rest, *node.posts].compact
307
+ when Prism::HashPatternNode
308
+ [*node.elements, node.rest].compact
309
+ when Prism::FindPatternNode
310
+ [node.left, *node.requireds, node.right].compact
311
+ when Prism::CapturePatternNode
312
+ [node.value, node.target].compact
313
+ when Prism::AlternationPatternNode
314
+ [node.left, node.right].compact
315
+ when Prism::PinnedExpressionNode
316
+ [node.expression].compact
317
+ when Prism::PinnedVariableNode
318
+ [node.variable].compact
319
+ # Forwarding and special parameters
320
+ when Prism::ForwardingArgumentsNode, Prism::ForwardingParameterNode,
321
+ Prism::NoKeywordsParameterNode
322
+ []
323
+ # References
324
+ when Prism::BackReferenceReadNode, Prism::NumberedReferenceReadNode
325
+ []
326
+ # Call/Index compound assignment
327
+ when Prism::CallAndWriteNode, Prism::CallOrWriteNode, Prism::CallOperatorWriteNode
328
+ [node.receiver, node.value].compact
329
+ when Prism::IndexAndWriteNode, Prism::IndexOrWriteNode, Prism::IndexOperatorWriteNode
330
+ [node.receiver, node.arguments, node.value].compact
331
+ # Match
332
+ when Prism::MatchWriteNode
333
+ [node.call, *node.targets].compact
334
+ when Prism::MatchLastLineNode, Prism::InterpolatedMatchLastLineNode
335
+ []
336
+ # Other
337
+ when Prism::FlipFlopNode
338
+ [node.left, node.right].compact
339
+ when Prism::ImplicitNode
340
+ [node.value].compact
341
+ when Prism::ImplicitRestNode
342
+ []
296
343
  else
297
344
  # For unknown types, try to get child nodes if they exist
298
345
  []
@@ -327,6 +374,11 @@ module Rfmt
327
374
  metadata['name'] = name
328
375
  end
329
376
  metadata['parameters_count'] = extract_parameter_count(node).to_s
377
+ # Extract parameters text directly from source
378
+ if node.parameters
379
+ metadata['parameters_text'] = node.parameters.location.slice
380
+ metadata['has_parens'] = (!node.lparen_loc.nil?).to_s
381
+ end
330
382
  # Check if this is a class method (def self.method_name)
331
383
  if node.respond_to?(:receiver) && node.receiver
332
384
  receiver = node.receiver
data/lib/rfmt/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rfmt
4
- VERSION = '1.3.0'
4
+ VERSION = '1.3.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.2
5
5
  platform: x86_64-linux-musl
6
6
  authors:
7
7
  - fujitani sora
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-01-06 00:00:00.000000000 Z
11
+ date: 2026-01-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Write a longer description or delete this line.
14
14
  email: