parser 0.9.alpha1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -3
  3. data/AST_FORMAT.md +1338 -0
  4. data/README.md +58 -3
  5. data/Rakefile +32 -12
  6. data/bin/benchmark +47 -0
  7. data/bin/explain-parse +14 -0
  8. data/bin/parse +6 -0
  9. data/lib/parser.rb +84 -0
  10. data/lib/parser/all.rb +2 -0
  11. data/lib/parser/ast/node.rb +11 -0
  12. data/lib/parser/ast/processor.rb +8 -0
  13. data/lib/parser/base.rb +116 -0
  14. data/lib/parser/builders/default.rb +654 -0
  15. data/lib/parser/compatibility/ruby1_8.rb +13 -0
  16. data/lib/parser/diagnostic.rb +44 -0
  17. data/lib/parser/diagnostic/engine.rb +44 -0
  18. data/lib/parser/lexer.rl +335 -245
  19. data/lib/parser/lexer/explanation.rb +37 -0
  20. data/lib/parser/{lexer_literal.rb → lexer/literal.rb} +22 -12
  21. data/lib/parser/lexer/stack_state.rb +38 -0
  22. data/lib/parser/ruby18.y +1957 -0
  23. data/lib/parser/ruby19.y +2154 -0
  24. data/lib/parser/source/buffer.rb +78 -0
  25. data/lib/parser/source/map.rb +20 -0
  26. data/lib/parser/source/map/operator.rb +15 -0
  27. data/lib/parser/source/map/variable_assignment.rb +15 -0
  28. data/lib/parser/source/range.rb +66 -0
  29. data/lib/parser/static_environment.rb +12 -6
  30. data/parser.gemspec +23 -13
  31. data/test/helper.rb +45 -0
  32. data/test/parse_helper.rb +204 -0
  33. data/test/racc_coverage_helper.rb +130 -0
  34. data/test/test_diagnostic.rb +47 -0
  35. data/test/test_diagnostic_engine.rb +58 -0
  36. data/test/test_lexer.rb +601 -357
  37. data/test/test_lexer_stack_state.rb +69 -0
  38. data/test/test_parse_helper.rb +74 -0
  39. data/test/test_parser.rb +3654 -0
  40. data/test/test_source_buffer.rb +80 -0
  41. data/test/test_source_range.rb +51 -0
  42. data/test/test_static_environment.rb +1 -4
  43. metadata +137 -12
@@ -0,0 +1,80 @@
1
+ require 'helper'
2
+
3
+ class TestSourceBuffer < MiniTest::Unit::TestCase
4
+ def setup
5
+ @buffer = Parser::Source::Buffer.new('(string)')
6
+ end
7
+
8
+ def test_initialize
9
+ buffer = Parser::Source::Buffer.new('(string)')
10
+ assert_equal '(string)', buffer.name
11
+ assert_equal 1, buffer.first_line
12
+
13
+ buffer = Parser::Source::Buffer.new('(string)', 5)
14
+ assert_equal 5, buffer.first_line
15
+ end
16
+
17
+ def test_source_setter
18
+ @buffer.source = 'foo'
19
+ assert_equal 'foo', @buffer.source
20
+
21
+ assert @buffer.frozen?
22
+ assert @buffer.source.frozen?
23
+ end
24
+
25
+ def test_read
26
+ tempfile = Tempfile.new('parser')
27
+ tempfile.write('foobar')
28
+ tempfile.flush
29
+
30
+ buffer = Parser::Source::Buffer.new(tempfile.path)
31
+ buffer.read
32
+ assert_equal 'foobar', buffer.source
33
+
34
+ assert buffer.frozen?
35
+ assert buffer.source.frozen?
36
+ end
37
+
38
+ def test_uninitialized
39
+ assert_raises RuntimeError do
40
+ @buffer.source
41
+ end
42
+ end
43
+
44
+ def test_line_begin_positions
45
+ @buffer.source = "1\nfoo\nbar"
46
+ assert_equal [0, 2, 6], @buffer.send(:line_begin_positions)
47
+ end
48
+
49
+ def test_decompose_position
50
+ @buffer.source = "1\nfoo\nbar"
51
+
52
+ assert_equal [1, 0], @buffer.decompose_position(0)
53
+ assert_equal [1, 1], @buffer.decompose_position(1)
54
+ assert_equal [2, 0], @buffer.decompose_position(2)
55
+ assert_equal [3, 1], @buffer.decompose_position(7)
56
+ end
57
+
58
+ def test_decompose_position_mapped
59
+ @buffer = Parser::Source::Buffer.new('(string)', 5)
60
+ @buffer.source = "1\nfoo\nbar"
61
+
62
+ assert_equal [5, 0], @buffer.decompose_position(0)
63
+ assert_equal [6, 0], @buffer.decompose_position(2)
64
+ end
65
+
66
+ def test_line
67
+ @buffer.source = "1\nfoo\nbar"
68
+
69
+ assert_equal "1", @buffer.source_line(1)
70
+ assert_equal "foo", @buffer.source_line(2)
71
+ end
72
+
73
+ def test_line_mapped
74
+ @buffer = Parser::Source::Buffer.new('(string)', 5)
75
+ @buffer.source = "1\nfoo\nbar"
76
+
77
+ assert_equal "1", @buffer.source_line(5)
78
+ assert_equal "foo", @buffer.source_line(6)
79
+ end
80
+ end
@@ -0,0 +1,51 @@
1
+ require 'helper'
2
+
3
+ class TestSourceRange < MiniTest::Unit::TestCase
4
+ def setup
5
+ @sfile = Parser::Source::Buffer.new('(string)')
6
+ @sfile.source = "foobar\nbaz"
7
+ end
8
+
9
+ def test_initialize
10
+ sr = Parser::Source::Range.new(@sfile, 1, 2)
11
+ assert_equal 1, sr.begin
12
+ assert_equal 2, sr.end
13
+ assert sr.frozen?
14
+ end
15
+
16
+ def test_size
17
+ sr = Parser::Source::Range.new(@sfile, 1, 2)
18
+ assert_equal 2, sr.size
19
+ end
20
+
21
+ def test_join
22
+ sr1 = Parser::Source::Range.new(@sfile, 1, 2)
23
+ sr2 = Parser::Source::Range.new(@sfile, 5, 8)
24
+ sr = sr1.join(sr2)
25
+
26
+ assert_equal 1, sr.begin
27
+ assert_equal 8, sr.end
28
+ end
29
+
30
+ def test_line
31
+ sr = Parser::Source::Range.new(@sfile, 7, 8)
32
+ assert_equal 2, sr.line
33
+ end
34
+
35
+ def test_source_line
36
+ sr = Parser::Source::Range.new(@sfile, 7, 8)
37
+ assert_equal "baz", sr.source_line
38
+ end
39
+
40
+ def test_columns
41
+ sr = Parser::Source::Range.new(@sfile, 7, 8)
42
+ assert_equal 0, sr.begin_column
43
+ assert_equal 1, sr.end_column
44
+ assert_equal 0..1, sr.column_range
45
+ end
46
+
47
+ def test_to_s
48
+ sr = Parser::Source::Range.new(@sfile, 8, 9)
49
+ assert_equal "(string):2:2", sr.to_s
50
+ end
51
+ end
@@ -1,7 +1,4 @@
1
- # encoding: ascii-8bit
2
-
3
- require 'minitest/autorun'
4
- require 'parser/static_environment'
1
+ require 'helper'
5
2
 
6
3
  class TestStaticEnvironment < MiniTest::Unit::TestCase
7
4
  def setup
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.alpha1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Zotov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-30 00:00:00.000000000 Z
11
+ date: 2013-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ast
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
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
- version: '1.3'
33
+ version: '1.2'
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
- version: '1.3'
40
+ version: '1.2'
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
- version: '10.0'
47
+ version: '0.9'
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
- version: '10.0'
54
+ version: '0.9'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: racc
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +66,77 @@ dependencies:
52
66
  - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
- description: A Ruby parser.
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 4.7.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 4.7.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '0.7'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '0.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: json_pure
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov-sublime-ruby-coverage
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: A Ruby parser written in pure Ruby.
56
140
  email:
57
141
  - whitequark@whitequark.org
58
142
  executables: []
@@ -61,19 +145,51 @@ extra_rdoc_files: []
61
145
  files:
62
146
  - .gitignore
63
147
  - .travis.yml
148
+ - AST_FORMAT.md
64
149
  - Gemfile
65
150
  - LICENSE.txt
66
151
  - README.md
67
152
  - Rakefile
153
+ - bin/benchmark
154
+ - bin/explain-parse
155
+ - bin/parse
68
156
  - lib/parser.rb
157
+ - lib/parser/all.rb
158
+ - lib/parser/ast/node.rb
159
+ - lib/parser/ast/processor.rb
160
+ - lib/parser/base.rb
161
+ - lib/parser/builders/default.rb
162
+ - lib/parser/compatibility/ruby1_8.rb
163
+ - lib/parser/diagnostic.rb
164
+ - lib/parser/diagnostic/engine.rb
69
165
  - lib/parser/lexer.rl
70
- - lib/parser/lexer_literal.rb
166
+ - lib/parser/lexer/explanation.rb
167
+ - lib/parser/lexer/literal.rb
168
+ - lib/parser/lexer/stack_state.rb
169
+ - lib/parser/ruby18.y
170
+ - lib/parser/ruby19.y
171
+ - lib/parser/source/buffer.rb
172
+ - lib/parser/source/map.rb
173
+ - lib/parser/source/map/operator.rb
174
+ - lib/parser/source/map/variable_assignment.rb
175
+ - lib/parser/source/range.rb
71
176
  - lib/parser/static_environment.rb
72
177
  - lib/parser/syntax_error.rb
73
178
  - parser.gemspec
179
+ - test/helper.rb
180
+ - test/parse_helper.rb
181
+ - test/racc_coverage_helper.rb
182
+ - test/test_diagnostic.rb
183
+ - test/test_diagnostic_engine.rb
74
184
  - test/test_lexer.rb
185
+ - test/test_lexer_stack_state.rb
186
+ - test/test_parse_helper.rb
187
+ - test/test_parser.rb
188
+ - test/test_source_buffer.rb
189
+ - test/test_source_range.rb
75
190
  - test/test_static_environment.rb
76
191
  - lib/parser/lexer.rb
192
+ - lib/parser/ruby18.rb
77
193
  homepage: http://github.com/whitequark/parser
78
194
  licenses:
79
195
  - MIT
@@ -89,16 +205,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
205
  version: '1.9'
90
206
  required_rubygems_version: !ruby/object:Gem::Requirement
91
207
  requirements:
92
- - - '>'
208
+ - - '>='
93
209
  - !ruby/object:Gem::Version
94
- version: 1.3.1
210
+ version: '0'
95
211
  requirements: []
96
212
  rubyforge_project:
97
213
  rubygems_version: 2.0.0
98
214
  signing_key:
99
215
  specification_version: 4
100
- summary: A Ruby parser.
216
+ summary: A Ruby parser written in pure Ruby.
101
217
  test_files:
218
+ - test/helper.rb
219
+ - test/parse_helper.rb
220
+ - test/racc_coverage_helper.rb
221
+ - test/test_diagnostic.rb
222
+ - test/test_diagnostic_engine.rb
102
223
  - test/test_lexer.rb
224
+ - test/test_lexer_stack_state.rb
225
+ - test/test_parse_helper.rb
226
+ - test/test_parser.rb
227
+ - test/test_source_buffer.rb
228
+ - test/test_source_range.rb
103
229
  - test/test_static_environment.rb
104
- has_rdoc: