parser 0.9.alpha1 → 0.9.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.
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: