jievro-ast-visitor 0.0.4 → 0.1.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
  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