syntax_tree_ext 0.3.1 → 0.4.0

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
2
  SHA256:
3
- metadata.gz: c1db7c0430ae86be8cd79200e3764505f54175fc38359137fb1e2f74c337acef
4
- data.tar.gz: e5a2827ce03b9fbb54b61b3cc0a3e00116fc66fc870d19a64d66d2c77ba0e791
3
+ metadata.gz: 252bb9039575140c0f6880c558a9dc3b19b08e400f673184672a4064584473aa
4
+ data.tar.gz: cfe4011f7e28f90f1ce9a30573fde27529f0f92eabc1af79719cd2d5a4405033
5
5
  SHA512:
6
- metadata.gz: 47ca6fe36cdef18f2b59189bb29fea107973ba8f41735b1c450de6d0ee307ce702d021f244a3509fa92e0659b4c4bc2b4a0c111d3aae969ca4173e8b85059d61
7
- data.tar.gz: f28d7ce55a092aa5bffb3ae5747cea2d99859ecd25662e8f1366ddae6ff578677bd2b4384222ed9b062b1485203ca6020fb98503278c8616c1d9eb0fc5387ae4
6
+ metadata.gz: f729e476eb65c5587c4a2bc3fd6026ef9debd27af3b951b4a9a269480fad087c819a337084b401df9cc15e8ea82349879245f427bcbb0d1026c4d55b707d6c59
7
+ data.tar.gz: c329ff9f956c7ba8e718ffc8df2f5f05c6bd7c6e556c28828e3da5378db4fcd91f44e7a71a242391e2ff7b53750b57b3133247285e0a78bac10e53747d285876
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.4.0 (2023-06-08)
4
+
5
+ * Add `Syntax::Node#to_hash`
6
+
3
7
  ## 0.3.1 (2023-05-18)
4
8
 
5
9
  * Support `array` in `Node#to_value`
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- syntax_tree_ext (0.3.1)
4
+ syntax_tree_ext (0.4.0)
5
5
  syntax_tree
6
6
 
7
7
  GEM
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SyntaxTreeExt
4
- VERSION = "0.3.1"
4
+ VERSION = "0.4.0"
5
5
  end
@@ -65,6 +65,27 @@ module SyntaxTree
65
65
  source[location.start_char...location.end_char]
66
66
  end
67
67
 
68
+ # Convert node to a hash, so that it can be converted to a json.
69
+ def to_hash
70
+ result = { node_type: self.class.name.split('::').last }
71
+ unless deconstruct_keys([]).empty?
72
+ deconstruct_keys([]).each do |key, value|
73
+ result[key] =
74
+ case value
75
+ when Array
76
+ value.map { |v| v.respond_to?(:to_hash) ? v.to_hash : v }
77
+ when SyntaxTree::Node, SyntaxTree::Location
78
+ value.to_hash
79
+ else
80
+ value
81
+ end
82
+ end
83
+ else
84
+ result[:children] = children.map { |c| c.respond_to?(:to_hash) ? c.to_hash : c }
85
+ end
86
+ result
87
+ end
88
+
68
89
  # Respond key value and source for hash node
69
90
  def method_missing(method_name, *args, &block)
70
91
  return super unless respond_to_assocs?
@@ -111,4 +132,17 @@ module SyntaxTree
111
132
  assoc_key.end_with?(':') ? assoc_key == "#{key}:" : assoc_key == key
112
133
  end
113
134
  end
135
+
136
+ class Location
137
+ def to_hash
138
+ {
139
+ start_line: start_line,
140
+ start_char: start_char,
141
+ start_column: start_column,
142
+ end_line: end_line,
143
+ end_char: end_char,
144
+ end_column: end_column,
145
+ }
146
+ end
147
+ end
114
148
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syntax_tree_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-18 00:00:00.000000000 Z
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: syntax_tree
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  requirements: []
64
- rubygems_version: 3.4.10
64
+ rubygems_version: 3.4.13
65
65
  signing_key:
66
66
  specification_version: 4
67
67
  summary: extend syntax_tree