jievro-ast-visitor 0.0.4 → 0.1.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
  SHA1:
3
- metadata.gz: 185db79d7f392d92c58b5feadd8ee70eaed31581
4
- data.tar.gz: 20af7a5c3557d773211836a21141ef98807f9793
3
+ metadata.gz: 7330289c3f61493889fba1231b46b813e5805b2f
4
+ data.tar.gz: 896e73ab16d7508067b36f4ddeffe4b2d8f2e0cf
5
5
  SHA512:
6
- metadata.gz: 9d142ef74ba14bc35a6a1878c46f56b7b10abeb249e3b548635b5bdede92a84923af0a1cc45f2ce211ed91ebf8c7a98c99f28bdef64435393c5bfdfded2485c7
7
- data.tar.gz: 12391a5ef65b347e3c0c9e85ab24b4cc22eba62a036f8c701ddc1023c44bb115f03a5562e95974d2e1e989c32f0ab8679fe0b42edc2dce8acda84cb532e854fb
6
+ metadata.gz: 43cf4471919fc6542f26581237c1ae53730fa50b16fc74e515b740cf5d9e4180746133e629eb57411d1e8f5b60694b134e881e4622df918e396c1f7eb3b2fbfb
7
+ data.tar.gz: 1b16f29cca92c86f4aa456458b49869094e638615b9badcdf81fd3695bbdddc013074d3970b500c985b9700b72d58483a3c88ef0ac3669d6e7c4e56ee973ffda
data/Gemfile.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jievro-ast-visitor (0.0.4)
4
+ jievro-ast-visitor (0.1.0)
5
+ jievro-ast (= 0.3.2)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  diff-lcs (1.2.5)
11
+ jievro-ast (0.3.2)
10
12
  rake (10.4.2)
11
13
  rspec (3.2.0)
12
14
  rspec-core (~> 3.2.0)
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.required_ruby_version = '~> 2.0'
21
21
 
22
+ spec.add_runtime_dependency 'jievro-ast', '0.3.2'
23
+
22
24
  spec.add_development_dependency 'bundler', '~> 1.6'
23
25
  spec.add_development_dependency 'rake', '~> 10.0'
24
26
  spec.add_development_dependency 'rspec', '~> 3.2'
@@ -1,32 +1,16 @@
1
1
  module Jievro
2
2
  module AstVisitor
3
3
  class Visitor
4
- def visit(ast, preorder = nil, postorder = nil)
5
- visit_node(ast, nil, nil, nil, preorder, postorder)
6
- end
7
-
8
- private
4
+ def visit(node, preorder = nil, postorder = nil)
5
+ preorder.call(node) unless preorder.nil?
9
6
 
10
- def visit_node(node, parent, property, index, preorder, postorder)
11
-
12
- unless preorder.nil?
13
- preorder.call(node, parent, property, index)
14
- end
15
-
16
- node.keys.each { |p|
17
- child = node[p]
18
- if child.kind_of?(Array)
19
- child.each_with_index { |e, i|
20
- visit_node(e, node, p, i, preorder, postorder)
21
- }
22
- elsif child.kind_of?(Hash)
23
- visit_node(child, node, p, nil, preorder, postorder)
7
+ unless node.type == Jievro::Ast::Node::TYPE_LITERAL
8
+ node.each do |n|
9
+ visit(n, preorder, postorder)
24
10
  end
25
- }
26
-
27
- unless postorder.nil?
28
- postorder.call(node, parent, property, index)
29
11
  end
12
+
13
+ postorder.call(node) unless postorder.nil?
30
14
  end
31
15
  end
32
16
  end
@@ -1,5 +1,5 @@
1
1
  module Jievro
2
2
  module AstVisitor
3
- VERSION = '0.0.4'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -1,31 +1,38 @@
1
1
  require 'rspec'
2
2
  require 'jievro/ast_visitor/ast_visitor'
3
+ require 'jievro/ast/node'
3
4
 
4
5
  describe 'AstVisitor' do
5
-
6
6
  before(:each) do
7
-
8
7
  @visitor = Jievro::AstVisitor::Visitor.new
9
8
 
10
- @ast = {
9
+ hash = {
10
+ __type: 'type_root',
11
11
  k1: 'v1',
12
12
  k2: {
13
+ __type: 'type_k2',
13
14
  k3: 'v3',
14
15
  k4: {
16
+ __type: 'type_k4',
15
17
  # left empty
16
18
  },
17
19
  k5: {
20
+ __type: 'type_k5',
18
21
  k6: [
19
22
  {
23
+ __type: 'type_k6[0]',
20
24
  k7: 'v7',
21
25
  k8: 'v8'
22
26
  },
23
27
  {
24
- k10: 'v10'
28
+ __type: 'type_k6[1]',
29
+ k9: 'v9'
25
30
  },
26
31
  {
27
- k11: {
28
- k12: 'v12'
32
+ __type: 'type_k6[2]',
33
+ k10: {
34
+ __type: 'type_k10',
35
+ k11: 'v11'
29
36
  }
30
37
  }
31
38
  ]
@@ -33,43 +40,58 @@ describe 'AstVisitor' do
33
40
  }
34
41
  }
35
42
 
43
+ @ast = Jievro::Ast::Node.new(hash)
44
+
36
45
  @hooked = []
37
- @hook = lambda { |node, parent, property, index|
38
- @hooked.push [node.keys, parent.nil? ? nil : parent.keys, property, index]
39
- }
46
+
47
+ @hook = lambda do |node|
48
+ @hooked.push(node)
49
+ end
40
50
  end
41
51
 
42
52
  it 'should visit in preorder' do
43
-
44
53
  @visitor.visit(@ast, @hook)
45
54
 
46
55
  expected = [
47
- [[:k1, :k2], nil, nil, nil],
48
- [[:k3, :k4, :k5], [:k1, :k2], :k2, nil],
49
- [[], [:k3, :k4, :k5], :k4, nil],
50
- [[:k6], [:k3, :k4, :k5], :k5, nil],
51
- [[:k7, :k8], [:k6], :k6, 0],
52
- [[:k10], [:k6], :k6, 1],
53
- [[:k11], [:k6], :k6, 2],
54
- [[:k12], [:k11], :k11, nil]
56
+ @ast,
57
+ @ast[:k1],
58
+ @ast[:k2],
59
+ @ast[:k2][:k3],
60
+ @ast[:k2][:k4],
61
+ @ast[:k2][:k5],
62
+ @ast[:k2][:k5][:k6],
63
+ @ast[:k2][:k5][:k6][0],
64
+ @ast[:k2][:k5][:k6][0][:k7],
65
+ @ast[:k2][:k5][:k6][0][:k8],
66
+ @ast[:k2][:k5][:k6][1],
67
+ @ast[:k2][:k5][:k6][1][:k9],
68
+ @ast[:k2][:k5][:k6][2],
69
+ @ast[:k2][:k5][:k6][2][:k10],
70
+ @ast[:k2][:k5][:k6][2][:k10][:k11]
55
71
  ]
56
72
 
57
73
  expect(@hooked).to match(expected)
58
74
  end
59
75
 
60
76
  it 'should visit in postorder' do
61
-
62
77
  @visitor.visit(@ast, nil, @hook)
63
78
 
64
79
  expected = [
65
- [[], [:k3, :k4, :k5], :k4, nil],
66
- [[:k7, :k8], [:k6], :k6, 0],
67
- [[:k10], [:k6], :k6, 1],
68
- [[:k12], [:k11], :k11, nil],
69
- [[:k11], [:k6], :k6, 2],
70
- [[:k6], [:k3, :k4, :k5], :k5, nil],
71
- [[:k3, :k4, :k5], [:k1, :k2], :k2, nil],
72
- [[:k1, :k2], nil, nil, nil]
80
+ @ast[:k1],
81
+ @ast[:k2][:k3],
82
+ @ast[:k2][:k4],
83
+ @ast[:k2][:k5][:k6][0][:k7],
84
+ @ast[:k2][:k5][:k6][0][:k8],
85
+ @ast[:k2][:k5][:k6][0],
86
+ @ast[:k2][:k5][:k6][1][:k9],
87
+ @ast[:k2][:k5][:k6][1],
88
+ @ast[:k2][:k5][:k6][2][:k10][:k11],
89
+ @ast[:k2][:k5][:k6][2][:k10],
90
+ @ast[:k2][:k5][:k6][2],
91
+ @ast[:k2][:k5][:k6],
92
+ @ast[:k2][:k5],
93
+ @ast[:k2],
94
+ @ast
73
95
  ]
74
96
 
75
97
  expect(@hooked).to match(expected)
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jievro-ast-visitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Azzalini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-05 00:00:00.000000000 Z
11
+ date: 2015-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jievro-ast
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.3.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ~>
18
32
  - !ruby/object:Gem::Version
19
33
  version: '1.6'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ~>
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.6'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ~>
32
46
  - !ruby/object:Gem::Version
33
47
  version: '10.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ~>
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ~>
46
60
  - !ruby/object:Gem::Version
47
61
  version: '3.2'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ~>
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.2'
55
69
  description:
@@ -58,8 +72,8 @@ executables: []
58
72
  extensions: []
59
73
  extra_rdoc_files: []
60
74
  files:
61
- - ".gitignore"
62
- - ".travis.yml"
75
+ - .gitignore
76
+ - .travis.yml
63
77
  - Gemfile
64
78
  - Gemfile.lock
65
79
  - LICENSE.txt
@@ -80,17 +94,17 @@ require_paths:
80
94
  - lib
81
95
  required_ruby_version: !ruby/object:Gem::Requirement
82
96
  requirements:
83
- - - "~>"
97
+ - - ~>
84
98
  - !ruby/object:Gem::Version
85
99
  version: '2.0'
86
100
  required_rubygems_version: !ruby/object:Gem::Requirement
87
101
  requirements:
88
- - - ">="
102
+ - - '>='
89
103
  - !ruby/object:Gem::Version
90
104
  version: '0'
91
105
  requirements: []
92
106
  rubyforge_project:
93
- rubygems_version: 2.4.6
107
+ rubygems_version: 2.0.14
94
108
  signing_key:
95
109
  specification_version: 4
96
110
  summary: jievro AST visitor