arst 0.0.1 → 0.0.3
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 +7 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +9 -2
- data/README.md +230 -21
- data/VERSION +1 -1
- data/arst.gemspec +2 -3
- data/examples/Rakefile +5 -0
- data/examples/simple.arst +16 -0
- data/lib/arst.rb +8 -0
- data/lib/arst/generator.rb +14 -0
- data/lib/arst/generator/arst.rb +37 -0
- data/lib/arst/generator/base.rb +29 -0
- data/lib/arst/generator/c.rb +11 -0
- data/lib/arst/generator/ruby.rb +164 -0
- data/lib/arst/helpers.rb +13 -0
- data/lib/arst/node.rb +25 -0
- data/lib/arst/node/base.rb +39 -0
- data/lib/arst/node/class.rb +32 -0
- data/lib/arst/node/extend.rb +14 -0
- data/lib/arst/node/include.rb +14 -0
- data/lib/arst/node/module.rb +14 -0
- data/lib/arst/node/namable.rb +26 -0
- data/lib/arst/node/root.rb +11 -0
- data/lib/arst/parser.rb +64 -0
- data/lib/arst/rake_task.rb +62 -0
- metadata +40 -49
- data/examples/indentation_sensitive.rb +0 -84
- data/examples/simple.rb +0 -31
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
require 'arst'
|
4
|
+
|
5
|
+
module ARST
|
6
|
+
|
7
|
+
class RakeTask < Rake::TaskLib
|
8
|
+
|
9
|
+
attr_reader :generators
|
10
|
+
|
11
|
+
def initialize(&block)
|
12
|
+
@generators = []
|
13
|
+
|
14
|
+
block.call(self) if block_given?
|
15
|
+
|
16
|
+
define_tasks
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_generator(generator_options={})
|
20
|
+
# TODO: Validate generator_options
|
21
|
+
generators << generator_options
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def define_tasks
|
27
|
+
namespace :arst do
|
28
|
+
desc 'Generate all ARST files'
|
29
|
+
task :generate do
|
30
|
+
@generators.each { |options| generate(options) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate(options)
|
36
|
+
# TODO: Validate options
|
37
|
+
# TODO: Check if input_path is a valid ARST file
|
38
|
+
# TODO: Check if output_path is a directory if split_files == true
|
39
|
+
|
40
|
+
input_path = Pathname.new( options.delete(:input_path) )
|
41
|
+
output_path = Pathname.new( options.delete(:output_path) )
|
42
|
+
generator_type = options.delete(:type)
|
43
|
+
|
44
|
+
tree = ARST::Parser.parse( input_path.read )
|
45
|
+
output = ARST::Generator.generate( generator_type, tree, options )
|
46
|
+
|
47
|
+
output.each do |output|
|
48
|
+
file_path = output_path.join( output[:filename] )
|
49
|
+
file_path.dirname.mkpath
|
50
|
+
|
51
|
+
unless file_path.exist?
|
52
|
+
puts "[GENERATE] #{file_path}"
|
53
|
+
file_path.open('w+') { |file| file.write( output[:body] ) }
|
54
|
+
else
|
55
|
+
puts "[EXISTS] #{file_path}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ryan Scott Lewis
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: active_support
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: parslet
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,15 +34,27 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 1.5.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 10.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 10.0.0
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: version
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
59
|
- - ~>
|
52
60
|
- !ruby/object:Gem::Version
|
@@ -54,7 +62,6 @@ dependencies:
|
|
54
62
|
type: :runtime
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
66
|
- - ~>
|
60
67
|
- !ruby/object:Gem::Version
|
@@ -62,7 +69,6 @@ dependencies:
|
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: awesome_print
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
72
|
requirements:
|
67
73
|
- - ~>
|
68
74
|
- !ruby/object:Gem::Version
|
@@ -70,7 +76,6 @@ dependencies:
|
|
70
76
|
type: :development
|
71
77
|
prerelease: false
|
72
78
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
79
|
requirements:
|
75
80
|
- - ~>
|
76
81
|
- !ruby/object:Gem::Version
|
@@ -78,7 +83,6 @@ dependencies:
|
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
name: cocaine
|
80
85
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
86
|
requirements:
|
83
87
|
- - ~>
|
84
88
|
- !ruby/object:Gem::Version
|
@@ -86,7 +90,6 @@ dependencies:
|
|
86
90
|
type: :development
|
87
91
|
prerelease: false
|
88
92
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
93
|
requirements:
|
91
94
|
- - ~>
|
92
95
|
- !ruby/object:Gem::Version
|
@@ -94,7 +97,6 @@ dependencies:
|
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
name: guard-bundler
|
96
99
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
100
|
requirements:
|
99
101
|
- - ~>
|
100
102
|
- !ruby/object:Gem::Version
|
@@ -102,7 +104,6 @@ dependencies:
|
|
102
104
|
type: :development
|
103
105
|
prerelease: false
|
104
106
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
107
|
requirements:
|
107
108
|
- - ~>
|
108
109
|
- !ruby/object:Gem::Version
|
@@ -110,7 +111,6 @@ dependencies:
|
|
110
111
|
- !ruby/object:Gem::Dependency
|
111
112
|
name: guard-shell
|
112
113
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
114
|
requirements:
|
115
115
|
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
@@ -118,31 +118,13 @@ dependencies:
|
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
121
|
requirements:
|
123
122
|
- - ~>
|
124
123
|
- !ruby/object:Gem::Version
|
125
124
|
version: 0.5.0
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rake
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ~>
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 10.0.0
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 10.0.0
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: rb-fsevent
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - ~>
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - ~>
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -169,40 +150,50 @@ files:
|
|
169
150
|
- VERSION
|
170
151
|
- LICENSE
|
171
152
|
- arst.gemspec
|
172
|
-
-
|
173
|
-
-
|
153
|
+
- lib/arst/generator/arst.rb
|
154
|
+
- lib/arst/generator/base.rb
|
155
|
+
- lib/arst/generator/c.rb
|
156
|
+
- lib/arst/generator/ruby.rb
|
157
|
+
- lib/arst/generator.rb
|
158
|
+
- lib/arst/helpers.rb
|
159
|
+
- lib/arst/node/base.rb
|
160
|
+
- lib/arst/node/class.rb
|
161
|
+
- lib/arst/node/extend.rb
|
162
|
+
- lib/arst/node/include.rb
|
163
|
+
- lib/arst/node/module.rb
|
164
|
+
- lib/arst/node/namable.rb
|
165
|
+
- lib/arst/node/root.rb
|
166
|
+
- lib/arst/node.rb
|
167
|
+
- lib/arst/parser.rb
|
168
|
+
- lib/arst/rake_task.rb
|
169
|
+
- lib/arst.rb
|
170
|
+
- examples/Rakefile
|
171
|
+
- examples/simple.arst
|
174
172
|
homepage: http://github.com/RyanScottLewis/
|
175
173
|
licenses:
|
176
174
|
- MIT
|
175
|
+
metadata: {}
|
177
176
|
post_install_message:
|
178
177
|
rdoc_options: []
|
179
178
|
require_paths:
|
180
179
|
- lib
|
181
180
|
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
-
none: false
|
183
181
|
requirements:
|
184
182
|
- - '>='
|
185
183
|
- !ruby/object:Gem::Version
|
186
184
|
version: '0'
|
187
|
-
segments:
|
188
|
-
- 0
|
189
|
-
hash: 1607695465800406566
|
190
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
-
none: false
|
192
186
|
requirements:
|
193
187
|
- - '>='
|
194
188
|
- !ruby/object:Gem::Version
|
195
189
|
version: '0'
|
196
|
-
segments:
|
197
|
-
- 0
|
198
|
-
hash: 1607695465800406566
|
199
190
|
requirements: []
|
200
191
|
rubyforge_project:
|
201
|
-
rubygems_version:
|
192
|
+
rubygems_version: 2.0.5
|
202
193
|
signing_key:
|
203
|
-
specification_version:
|
194
|
+
specification_version: 4
|
204
195
|
summary: Abstract Ruby Syntax Tree (ARST) is a high-level language syntax denoting
|
205
196
|
the object domain of a Ruby project.
|
206
197
|
test_files:
|
207
|
-
- examples/
|
208
|
-
- examples/simple.
|
198
|
+
- examples/Rakefile
|
199
|
+
- examples/simple.arst
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'parslet'
|
2
|
-
|
3
|
-
# class IndentationSensitiveParser < Parslet::Parser
|
4
|
-
#
|
5
|
-
# rule(:indent) { str(' ') }
|
6
|
-
# rule(:newline) { str("\n") }
|
7
|
-
# rule(:identifier) { match['A-Za-z0-9'].repeat.as(:identifier) }
|
8
|
-
#
|
9
|
-
# rule(:node) { identifier >> newline >> (indent >> identifier >> newline.maybe).repeat.as(:children) }
|
10
|
-
#
|
11
|
-
# rule(:document) { node.repeat }
|
12
|
-
#
|
13
|
-
# root :document
|
14
|
-
#
|
15
|
-
# end
|
16
|
-
|
17
|
-
# class IndentationSensitiveParser < Parslet::Parser
|
18
|
-
#
|
19
|
-
# def initialize
|
20
|
-
# @indentation_size
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# rule(:space) { str(' ') }
|
24
|
-
# rule(:indent) { str(' ') }
|
25
|
-
# rule(:newline) { str("\n") }
|
26
|
-
# rule(:identifier) { match['A-Za-z0-9'].repeat.as(:identifier) }
|
27
|
-
#
|
28
|
-
# rule(:node) { identifier >> newline >> (indent >> identifier >> newline.maybe).repeat.as(:children) }
|
29
|
-
#
|
30
|
-
# rule(:document) { node.repeat }
|
31
|
-
#
|
32
|
-
# root :document
|
33
|
-
#
|
34
|
-
# end
|
35
|
-
|
36
|
-
class IndentationSensitiveParser < Parslet::Parser
|
37
|
-
|
38
|
-
def indent(depth)
|
39
|
-
str(' ' * depth)
|
40
|
-
end
|
41
|
-
|
42
|
-
rule(:newline) { str("\n") }
|
43
|
-
|
44
|
-
rule(:identifier) { match['A-Za-z0-9'].repeat(1).as(:identifier) }
|
45
|
-
|
46
|
-
def node(depth)
|
47
|
-
indent(depth) >> identifier >> newline.maybe >>
|
48
|
-
(
|
49
|
-
dynamic { |soutce, context| node(depth+1).repeat(0) }
|
50
|
-
).as(:children)
|
51
|
-
end
|
52
|
-
|
53
|
-
rule(:document) { node(0).repeat }
|
54
|
-
|
55
|
-
root :document
|
56
|
-
end
|
57
|
-
|
58
|
-
require 'ap'
|
59
|
-
require 'pp'
|
60
|
-
|
61
|
-
begin
|
62
|
-
input = DATA.read
|
63
|
-
|
64
|
-
puts '', '----- input ----------------------------------------------------------------------', ''
|
65
|
-
ap input
|
66
|
-
|
67
|
-
tree = IndentationSensitiveParser.new.parse(input)
|
68
|
-
|
69
|
-
puts '', '----- tree -----------------------------------------------------------------------', ''
|
70
|
-
pp tree
|
71
|
-
|
72
|
-
rescue IndentationSensitiveParser::ParseFailed => failure
|
73
|
-
puts '', '----- error ----------------------------------------------------------------------', ''
|
74
|
-
puts failure.cause.ascii_tree
|
75
|
-
end
|
76
|
-
|
77
|
-
__END__
|
78
|
-
level0child0
|
79
|
-
level0child1
|
80
|
-
level1child0
|
81
|
-
level1child1
|
82
|
-
level2child0
|
83
|
-
level1child2
|
84
|
-
level0child3
|
data/examples/simple.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'arst'
|
2
|
-
|
3
|
-
require 'ap'
|
4
|
-
require 'pp'
|
5
|
-
|
6
|
-
begin
|
7
|
-
input = DATA.read
|
8
|
-
|
9
|
-
puts '', '----- input ----------------------------------------------------------------------', ''
|
10
|
-
ap input
|
11
|
-
|
12
|
-
tree = ARST.parse(input)
|
13
|
-
|
14
|
-
puts '', '----- tree -----------------------------------------------------------------------', ''
|
15
|
-
ap tree
|
16
|
-
|
17
|
-
rescue ARST::Parser::ParseFailed => failure
|
18
|
-
puts '', '----- error ----------------------------------------------------------------------', ''
|
19
|
-
puts failure.cause.ascii_tree
|
20
|
-
end
|
21
|
-
|
22
|
-
__END__
|
23
|
-
module Test
|
24
|
-
class Bar
|
25
|
-
module Foo
|
26
|
-
module Baz
|
27
|
-
module Qux
|
28
|
-
module NoWai
|
29
|
-
module UserSystem
|
30
|
-
class User
|
31
|
-
class Admin < User
|