node_query 1.14.1 → 1.15.1

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: 7ca6c90b61fc096a8827b28f96e8af9c2f3bf114e09a0bc6f4fa4c2b6b0a5dcb
4
- data.tar.gz: 14f2604eb60f8482d0c9182e2aa0054bbec3130c49504f519936d95d03a7611c
3
+ metadata.gz: 9b7a968afbfc580614cb1647fd59933e29ca42a51f16bd94d83bfdd2ff6d76f3
4
+ data.tar.gz: a58361e9a486604fd35e5645528ddb3ad1bf49f314ed704e57954678dfac9d78
5
5
  SHA512:
6
- metadata.gz: 7d40bbebba507b8bf52b9c6981c060a07c827f01a30c78cf5dec7a916fb085f0377e1b3ca19a5ed8cef8117c3850cb1ff5055fcb48599522648bd22340d8397d
7
- data.tar.gz: a9c3edcb83f845e350f5004a21278735e67c6357d28096011b8acd1908290bf1fa2e44d4f0223c0fcd4ace273bbdfc317043b509c160d6ea7bfd4f79fbe542fd
6
+ metadata.gz: 2468e0e6e5fc5b2fe8d9f93e9169394552991a6813af79428d14d6740b206a4f8e4b1eb37c8b7bbea826daf96157bd571d57ac0afdb302b0271ea2be8ffe088c
7
+ data.tar.gz: feecda8504d3b2477a3152b2993cd8b18a301d9f2e07f09e523b2a4cbed8791369ddffcf3c727dd5b059b34cf52aeec83b507451d14c9f4129aef177552022aa
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.15.1 (2024-02-16)
4
+
5
+ * Use `deconstruct_keys` to get prism children
6
+ * Get `PrismAdapter`
7
+ * Read prism node type
8
+
9
+ ## 1.15.0 (2024-02-10)
10
+
11
+ * Support `prism`
12
+
3
13
  ## 1.14.1 (2023-11-27)
4
14
 
5
15
  * Fix `ArrayValue` with `adapter` parameter
data/Gemfile CHANGED
@@ -14,6 +14,6 @@ gem "guard-rspec"
14
14
  gem "guard-rake"
15
15
  gem "oedipus_lex"
16
16
  gem "racc"
17
- gem "parser"
18
17
  gem "parser_node_ext"
19
18
  gem "syntax_tree_ext"
19
+ gem "prism_ext"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- node_query (1.14.1)
4
+ node_query (1.15.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -38,16 +38,19 @@ GEM
38
38
  nenv (~> 0.1)
39
39
  shellany (~> 0.0)
40
40
  oedipus_lex (2.6.0)
41
- parser (3.2.2.3)
41
+ parser (3.3.0.5)
42
42
  ast (~> 2.4.1)
43
43
  racc
44
- parser_node_ext (1.2.1)
44
+ parser_node_ext (1.2.2)
45
45
  parser
46
46
  prettier_print (1.2.1)
47
+ prism (0.22.0)
48
+ prism_ext (0.2.0)
49
+ prism
47
50
  pry (0.14.1)
48
51
  coderay (~> 1.1)
49
52
  method_source (~> 1.0)
50
- racc (1.6.2)
53
+ racc (1.7.3)
51
54
  rake (13.0.6)
52
55
  rb-fsevent (0.11.1)
53
56
  rb-inotify (0.10.1)
@@ -66,15 +69,16 @@ GEM
66
69
  rspec-support (~> 3.11.0)
67
70
  rspec-support (3.11.0)
68
71
  shellany (0.0.1)
69
- syntax_tree (6.1.1)
72
+ syntax_tree (6.2.0)
70
73
  prettier_print (>= 1.2.0)
71
- syntax_tree_ext (0.6.4)
74
+ syntax_tree_ext (0.7.0)
72
75
  syntax_tree
73
76
  thor (1.2.1)
74
77
 
75
78
  PLATFORMS
76
79
  x86_64-darwin-21
77
80
  x86_64-darwin-22
81
+ x86_64-darwin-23
78
82
  x86_64-linux
79
83
 
80
84
  DEPENDENCIES
@@ -83,8 +87,8 @@ DEPENDENCIES
83
87
  guard-rspec
84
88
  node_query!
85
89
  oedipus_lex
86
- parser
87
90
  parser_node_ext
91
+ prism_ext
88
92
  racc
89
93
  rake (~> 13.0)
90
94
  rspec (~> 3.0)
data/README.md CHANGED
@@ -258,7 +258,7 @@ It matches def node whose arguments are either id or name.
258
258
  .class .send
259
259
  ```
260
260
 
261
- It matches send node whose ansestor is class node.
261
+ It matches send node whose ancestor is class node.
262
262
 
263
263
  #### Child combinator
264
264
 
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'prism'
4
+ require 'prism_ext'
5
+
6
+ class NodeQuery::PrismAdapter
7
+ def is_node?(node)
8
+ node.is_a?(Prism::Node)
9
+ end
10
+
11
+ def get_node_type(node)
12
+ node.type
13
+ end
14
+
15
+ def get_source(node)
16
+ node.slice
17
+ end
18
+
19
+ def get_children(node)
20
+ keys = []
21
+ children = []
22
+ node.deconstruct_keys([]).each do |key, value|
23
+ next if [:flags, :location].include?(key)
24
+
25
+ if key.to_s.end_with?('_loc')
26
+ new_key = key.to_s[0..-5]
27
+ unless keys.include?(new_key)
28
+ keys << new_key
29
+ children << node.send(new_key)
30
+ end
31
+ else
32
+ unless keys.include?(key.to_s)
33
+ keys << key.to_s
34
+ children << value
35
+ end
36
+ end
37
+ end
38
+ children
39
+ end
40
+
41
+ def get_siblings(node)
42
+ child_nodes = get_children(node.parent_node)
43
+ if child_nodes.is_a?(Array) && child_nodes.size == 1 && child_nodes.first.is_a?(Array)
44
+ index = child_nodes.first.index(node)
45
+ return child_nodes.first[index + 1...]
46
+ end
47
+
48
+ index = child_nodes.index(node)
49
+ child_nodes[index + 1...]
50
+ end
51
+ end
@@ -3,14 +3,6 @@
3
3
  require 'syntax_tree'
4
4
  require 'syntax_tree_ext'
5
5
 
6
- if RUBY_VERSION.to_i < 3
7
- class Hash
8
- def except(*keys)
9
- self.reject { |k, _| keys.include?(k) }
10
- end
11
- end
12
- end
13
-
14
6
  class NodeQuery::SyntaxTreeAdapter
15
7
  def is_node?(node)
16
8
  node.is_a?(SyntaxTree::Node)
@@ -25,10 +17,18 @@ class NodeQuery::SyntaxTreeAdapter
25
17
  end
26
18
 
27
19
  def get_children(node)
28
- node.deconstruct_keys([]).except(:location, :comments).values
20
+ node.deconstruct_keys([]).filter { |key, _value| ![:location, :comments].include?(key) }
21
+ .values
29
22
  end
30
23
 
31
24
  def get_siblings(node)
32
- node.siblings
25
+ child_nodes = node.parent_node.deconstruct_keys([]).except(:location, :comments).values
26
+ if child_nodes.is_a?(Array) && child_nodes.size == 1 && child_nodes.first.is_a?(Array)
27
+ index = child_nodes.first.index(node)
28
+ return child_nodes.first[index + 1...]
29
+ end
30
+
31
+ index = child_nodes.index(node)
32
+ child_nodes[index + 1...]
33
33
  end
34
34
  end
@@ -93,7 +93,7 @@ module NodeQuery::Compiler
93
93
  end
94
94
  end
95
95
  else
96
- NodeQuery.adapter.get_children(node).each do |child_node|
96
+ @adapter.get_children(node).each do |child_node|
97
97
  if match?(child_node, child_node)
98
98
  nodes << child_node
99
99
  break if options[:stop_at_first_match]
@@ -171,10 +171,10 @@ module NodeQuery::Compiler
171
171
  end
172
172
  end
173
173
  when '+'
174
- next_sibling = node.siblings.first
174
+ next_sibling = @adapter.get_siblings(node).first
175
175
  nodes << next_sibling if @rest.match?(next_sibling, next_sibling)
176
176
  when '~'
177
- node.siblings.each do |sibling_node|
177
+ @adapter.get_siblings(node).each do |sibling_node|
178
178
  nodes << sibling_node if @rest.match?(sibling_node, sibling_node)
179
179
  end
180
180
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class NodeQuery
4
- VERSION = "1.14.1"
4
+ VERSION = "1.15.1"
5
5
  end
data/lib/node_query.rb CHANGED
@@ -11,6 +11,7 @@ class NodeQuery
11
11
  autoload :Adapter, "node_query/adapter"
12
12
  autoload :ParserAdapter, "node_query/adapter/parser"
13
13
  autoload :SyntaxTreeAdapter, "node_query/adapter/syntax_tree"
14
+ autoload :PrismAdapter, "node_query/adapter/prism"
14
15
  autoload :Compiler, "node_query/compiler"
15
16
  autoload :Helper, "node_query/helper"
16
17
  autoload :NodeRules, "node_query/node_rules"
@@ -65,6 +66,8 @@ class NodeQuery
65
66
  ParserAdapter.new
66
67
  when :syntax_tree
67
68
  SyntaxTreeAdapter.new
69
+ when :prism
70
+ PrismAdapter.new
68
71
  else
69
72
  raise InvalidAdapterError, "adapter #{adapter} is not supported"
70
73
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: node_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.1
4
+ version: 1.15.1
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-11-27 00:00:00.000000000 Z
11
+ date: 2024-02-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ast node query language
14
14
  email:
@@ -27,6 +27,7 @@ files:
27
27
  - lib/node_query.rb
28
28
  - lib/node_query/adapter.rb
29
29
  - lib/node_query/adapter/parser.rb
30
+ - lib/node_query/adapter/prism.rb
30
31
  - lib/node_query/adapter/syntax_tree.rb
31
32
  - lib/node_query/compiler.rb
32
33
  - lib/node_query/compiler/array_value.rb
@@ -78,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
79
  - !ruby/object:Gem::Version
79
80
  version: '0'
80
81
  requirements: []
81
- rubygems_version: 3.4.20
82
+ rubygems_version: 3.5.3
82
83
  signing_key:
83
84
  specification_version: 4
84
85
  summary: ast node query language