phaad 0.0.2 → 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.
- data/Guardfile +7 -0
- data/lib/phaad/generator.rb +95 -7
- data/lib/phaad/version.rb +1 -1
- data/phaad.gemspec +2 -0
- data/spec/generator/array_spec.rb +1 -0
- data/spec/generator/binary_spec.rb +25 -0
- data/spec/generator/function_spec.rb +41 -12
- data/spec/generator/keywords_spec.rb +11 -0
- data/spec/generator/string_spec.rb +5 -0
- data/spec/generator/switch_spec.rb +23 -0
- metadata +57 -10
data/Guardfile
ADDED
data/lib/phaad/generator.rb
CHANGED
@@ -27,7 +27,7 @@ module Phaad
|
|
27
27
|
should_not_be = [ [:bodystmt, [[:void_stmt]], nil, nil, nil] ]
|
28
28
|
first_should_not_be = [:void_stmt, :def, :bodystmt, :if, :else, :elsif,
|
29
29
|
:unless, :while, :until, :while_mod, :until_mod, :if_mod, :unless_mod,
|
30
|
-
:massign, :class, :for]
|
30
|
+
:massign, :class, :for, :case, :defs]
|
31
31
|
emit ";\n" if !should_not_be.include?(sexp) && !first_should_not_be.include?(sexp.first)
|
32
32
|
end
|
33
33
|
outdent unless options[:indent] == false
|
@@ -69,7 +69,10 @@ module Phaad
|
|
69
69
|
when :string_literal
|
70
70
|
process(sexp[1])
|
71
71
|
when :string_embexpr
|
72
|
+
no_brackets = [:var_ref, :method_add_arg, :command]
|
73
|
+
emit "(" unless no_brackets.include?(sexp[1][0][0])
|
72
74
|
process sexp[1][0]
|
75
|
+
emit ")" unless no_brackets.include?(sexp[1][0][0])
|
73
76
|
when :regexp_literal
|
74
77
|
emit '"/'
|
75
78
|
emit sexp[1][0][1]
|
@@ -79,6 +82,8 @@ module Phaad
|
|
79
82
|
emit sexp[1]
|
80
83
|
when :symbol_literal
|
81
84
|
emit sexp[1][1][1].inspect
|
85
|
+
when :@label
|
86
|
+
emit sexp[1][0..-2].inspect
|
82
87
|
when :dyna_symbol
|
83
88
|
process(sexp[1][0])
|
84
89
|
when :assign
|
@@ -102,6 +107,15 @@ module Phaad
|
|
102
107
|
process r
|
103
108
|
emit ";\n"
|
104
109
|
end
|
110
|
+
when :opassign
|
111
|
+
raise NotImplementedError, sexp.inspect unless sexp[2][0] == :@op
|
112
|
+
process(sexp[1])
|
113
|
+
if sexp[2][1] == "<<="
|
114
|
+
emit " .= "
|
115
|
+
else
|
116
|
+
emit " #{sexp[2][1]} "
|
117
|
+
end
|
118
|
+
process(sexp[3])
|
105
119
|
when :return
|
106
120
|
emit "return "
|
107
121
|
process sexp[1]
|
@@ -116,13 +130,17 @@ module Phaad
|
|
116
130
|
emit sexp[1][1..-1]
|
117
131
|
when :@const
|
118
132
|
emit sexp[1]
|
133
|
+
when :break
|
134
|
+
emit "break"
|
135
|
+
when :next
|
136
|
+
emit "continue"
|
119
137
|
when :method_add_arg
|
120
138
|
if sexp[1][0] == :fcall && sexp[1][1][0] == :@ident
|
121
139
|
emit sexp[1][1][1]
|
122
140
|
emit "("
|
123
141
|
process sexp[2][1] if sexp[2][1]
|
124
142
|
emit ")"
|
125
|
-
elsif sexp[1][0] == :call
|
143
|
+
elsif sexp[1][0] == :call
|
126
144
|
process sexp[1]
|
127
145
|
emit "("
|
128
146
|
process sexp[2][1] if sexp[2][1]
|
@@ -138,7 +156,7 @@ module Phaad
|
|
138
156
|
process sexp[3]
|
139
157
|
when :command
|
140
158
|
if sexp[1][0] == :@ident
|
141
|
-
no_brackets = %w{global echo}
|
159
|
+
no_brackets = %w{global echo var public}
|
142
160
|
emit sexp[1][1]
|
143
161
|
emit no_brackets.include?(sexp[1][1]) ? " " : "("
|
144
162
|
if sexp[2][0] == :args_add_block
|
@@ -156,9 +174,20 @@ module Phaad
|
|
156
174
|
emit ", " unless s == sexp[1].last
|
157
175
|
end
|
158
176
|
when :call
|
159
|
-
|
160
|
-
|
161
|
-
|
177
|
+
if sexp[1][1][0] == :@const
|
178
|
+
if sexp[3][1] == "new"
|
179
|
+
emit "new "
|
180
|
+
process sexp[1]
|
181
|
+
else
|
182
|
+
process sexp[1]
|
183
|
+
emit "::"
|
184
|
+
emit sexp[3][1]
|
185
|
+
end
|
186
|
+
else
|
187
|
+
process sexp[1]
|
188
|
+
emit "->"
|
189
|
+
emit sexp[3][1]
|
190
|
+
end
|
162
191
|
when :command_call
|
163
192
|
if sexp[1][0] == :var_ref && sexp[1][1][0] == :@ident && sexp[2] == :"." &&
|
164
193
|
sexp[3][0] == :@ident && sexp[4][0] == :args_add_block
|
@@ -168,6 +197,19 @@ module Phaad
|
|
168
197
|
emit "("
|
169
198
|
process sexp[4]
|
170
199
|
emit ")"
|
200
|
+
elsif sexp[1][0] == :var_ref && sexp[1][1][0] == :@const &&
|
201
|
+
sexp[3][0] == :@ident && sexp[4][0] == :args_add_block
|
202
|
+
if sexp[3][1] == "new"
|
203
|
+
emit "new "
|
204
|
+
process sexp[1]
|
205
|
+
else
|
206
|
+
process sexp[1]
|
207
|
+
emit "::"
|
208
|
+
emit sexp[3][1]
|
209
|
+
end
|
210
|
+
emit "("
|
211
|
+
process sexp[4]
|
212
|
+
emit ")"
|
171
213
|
else
|
172
214
|
raise NotImplementedError, sexp.inspect
|
173
215
|
end
|
@@ -249,6 +291,37 @@ module Phaad
|
|
249
291
|
emit ") {\n"
|
250
292
|
process_statements sexp[3]
|
251
293
|
emit "}\n"
|
294
|
+
when :case
|
295
|
+
emit "switch("
|
296
|
+
process sexp[1]
|
297
|
+
emit ") {\n"
|
298
|
+
indent
|
299
|
+
# exp stores the next statement.
|
300
|
+
exp = sexp[2]
|
301
|
+
while exp
|
302
|
+
if exp[0] == :when
|
303
|
+
exp[1].each_with_index do |each_case, i|
|
304
|
+
emit "case "
|
305
|
+
process each_case
|
306
|
+
emit ":"
|
307
|
+
emit " " if i < exp[1].size - 1
|
308
|
+
end
|
309
|
+
emit "\n"
|
310
|
+
process_statements exp[2] if exp[2]
|
311
|
+
elsif exp[0] == :else
|
312
|
+
emit "default:"
|
313
|
+
emit "\n"
|
314
|
+
process_statements exp[1] if exp[1]
|
315
|
+
else
|
316
|
+
raise NotImplementedError, sexp.inspect
|
317
|
+
end
|
318
|
+
indent
|
319
|
+
emit "break;\n"
|
320
|
+
outdent
|
321
|
+
exp = exp[3]
|
322
|
+
end
|
323
|
+
outdent
|
324
|
+
emit "}\n"
|
252
325
|
when :def
|
253
326
|
raise NotImplementedError, sexp.inspect unless sexp[1][0] == :@ident
|
254
327
|
emit "function "
|
@@ -264,6 +337,21 @@ module Phaad
|
|
264
337
|
emit ") {\n"
|
265
338
|
process_statements [sexp[3]]
|
266
339
|
emit "}\n"
|
340
|
+
when :defs
|
341
|
+
raise NotImplementedError, sexp.inspect unless sexp[3][0] == :@ident
|
342
|
+
emit "static function "
|
343
|
+
emit sexp[3][1]
|
344
|
+
emit "("
|
345
|
+
if sexp[4][0] == :params
|
346
|
+
process sexp[4] # params
|
347
|
+
elsif sexp[4][0] == :paren && sexp[4][1][0] == :params
|
348
|
+
process sexp[4][1]
|
349
|
+
else
|
350
|
+
raise NotImplementedError, sexp.inspect
|
351
|
+
end
|
352
|
+
emit ") {\n"
|
353
|
+
process_statements [sexp[5]]
|
354
|
+
emit "}\n"
|
267
355
|
when :class
|
268
356
|
if sexp[1][1][0] != :@const || (sexp[2] && sexp[2][1][0] != :@const)
|
269
357
|
raise NotImplementedError, sexp.inspect
|
@@ -295,7 +383,7 @@ module Phaad
|
|
295
383
|
process param[1]
|
296
384
|
end
|
297
385
|
end
|
298
|
-
when :array, :hash
|
386
|
+
when :array, :hash, :bare_assoc_hash
|
299
387
|
emit "array("
|
300
388
|
if sexp[1]
|
301
389
|
if sexp[1][0] == :assoclist_from_args
|
data/lib/phaad/version.rb
CHANGED
data/phaad.gemspec
CHANGED
@@ -22,4 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency 'slop', '~>1.6.0'
|
23
23
|
s.add_dependency 'fssm', '~>0.2.7'
|
24
24
|
s.add_development_dependency 'rspec', '~>2.6.0'
|
25
|
+
s.add_development_dependency 'guard-rspec', '~>0.4.3'
|
26
|
+
s.add_development_dependency 'growl_notify', '~>0.0.1' if RUBY_PLATFORM.include?("darwin")
|
25
27
|
end
|
@@ -24,6 +24,7 @@ describe Phaad::Generator, 'array creation' do
|
|
24
24
|
it "should create simple arrays" do
|
25
25
|
compile("{a => :b, 1 => 2, /foo/ => /bar/}").should ==
|
26
26
|
'array($a => "b", 1 => 2, "/foo/" => "/bar/");'
|
27
|
+
compile("{a: b, c: 1}").should == 'array("a" => $b, "c" => 1);'
|
27
28
|
end
|
28
29
|
|
29
30
|
it "should create nested arrays" do
|
@@ -52,4 +52,29 @@ describe Phaad::Generator, "binary" do
|
|
52
52
|
it "should parse << as ." do
|
53
53
|
compile("'foo' << 'bar'").should == '"foo" . "bar";'
|
54
54
|
end
|
55
|
+
|
56
|
+
context "operator assign" do
|
57
|
+
it "should parse += -= *= /= %=" do
|
58
|
+
compile("a += 1").should == "$a += 1;"
|
59
|
+
compile("a -= 1").should == "$a -= 1;"
|
60
|
+
compile("a *= 1").should == "$a *= 1;"
|
61
|
+
compile("a /= 1").should == "$a /= 1;"
|
62
|
+
compile("a %= 1").should == "$a %= 1;"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should parse |= &= ^=" do
|
66
|
+
compile("a |= 1").should == "$a |= 1;"
|
67
|
+
compile("a &= 1").should == "$a &= 1;"
|
68
|
+
compile("a ^= 1").should == "$a ^= 1;"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should parse && ||" do
|
72
|
+
compile("a &&= false").should == "$a &&= FALSE;"
|
73
|
+
compile("a ||= false").should == "$a ||= FALSE;"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should parse <<= into .=" do
|
77
|
+
compile("a <<= b").should == "$a .= $b;"
|
78
|
+
end
|
79
|
+
end
|
55
80
|
end
|
@@ -10,28 +10,57 @@ describe Phaad::Generator, 'call a function' do
|
|
10
10
|
compile("a b c d, e, f()").should == "a(b(c($d, $e, f())));"
|
11
11
|
end
|
12
12
|
|
13
|
-
it "should not add brackets when calling global
|
13
|
+
it "should not add brackets when calling global, echo, var, public" do
|
14
14
|
compile("echo a").should == "echo $a;"
|
15
15
|
compile("echo a, b").should == "echo $a, $b;"
|
16
16
|
compile("global a").should == "global $a;"
|
17
17
|
compile("global a, b").should == "global $a, $b;"
|
18
|
+
compile("var a").should == "var $a;"
|
19
|
+
compile("var a, b").should == "var $a, $b;"
|
20
|
+
compile("public a").should == "public $a;"
|
21
|
+
compile("public a, b").should == "public $a, $b;"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should print new ClassName when ClassName.new is called" do
|
25
|
+
compile("Foo.new").should == "new Foo;"
|
26
|
+
compile("Foo.new a, b, c").should == "new Foo($a, $b, $c);"
|
27
|
+
compile("Foo.new(a, b, c)").should == "new Foo($a, $b, $c);"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should call using :: when a function is called on a Constant" do
|
31
|
+
compile("Foo.bar()").should == "Foo::bar();"
|
32
|
+
compile("Foo.bar a, b, c").should == "Foo::bar($a, $b, $c);"
|
33
|
+
compile("Foo.bar(a, b, c)").should == "Foo::bar($a, $b, $c);"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should accept named params and pass it as an array" do
|
37
|
+
compile("Foo.bar :a => 1, 'b' => 2").should == 'Foo::bar(array("a" => 1, "b" => 2));'
|
18
38
|
end
|
19
39
|
end
|
20
40
|
|
21
41
|
describe Phaad::Generator, 'define a function' do
|
22
|
-
|
23
|
-
|
24
|
-
|
42
|
+
context "normal function" do
|
43
|
+
it "should define a function without params" do
|
44
|
+
compile("def f\nend").should == "function f() {\n}"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should define a function with basic params" do
|
48
|
+
compile("def f a\nend").should == "function f($a) {\n}"
|
49
|
+
compile("def f(a)\nend").should == "function f($a) {\n}"
|
50
|
+
compile("def f a, b\nend").should == "function f($a, $b) {\n}"
|
51
|
+
compile("def f(a, b)\nend").should == "function f($a, $b) {\n}"
|
52
|
+
end
|
25
53
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
compile("def f(a, b)\nend").should start_with("function f($a, $b)")
|
54
|
+
it "should define a function with params with default values" do
|
55
|
+
compile("def f a = 4\nend").should == "function f($a = 4) {\n}"
|
56
|
+
compile("def f a, b = 4\nend").should == "function f($a, $b = 4) {\n}"
|
57
|
+
end
|
31
58
|
end
|
32
59
|
|
33
|
-
|
34
|
-
|
35
|
-
|
60
|
+
context "static (self) function" do
|
61
|
+
it "should define a function with/without params" do
|
62
|
+
compile("def self.f\nend").should == "static function f() {\n}"
|
63
|
+
compile("def self.f(a, b)\nend").should == "static function f($a, $b) {\n}"
|
64
|
+
end
|
36
65
|
end
|
37
66
|
end
|
@@ -31,6 +31,11 @@ describe Phaad::Generator, 'string' do
|
|
31
31
|
'"a " . $b . " " . foo("bar", "baz") . " ";'
|
32
32
|
end
|
33
33
|
|
34
|
+
it "should add brackets to interpolation except simple variable / function calls" do
|
35
|
+
compile('"a #{b + c} d"').should == '"a " . ($b + $c) . " d";'
|
36
|
+
compile('"a #{b(e) + c} d"').should == '"a " . (b($e) + $c) . " d";'
|
37
|
+
end
|
38
|
+
|
34
39
|
it "should handle empty \#{} properly" do
|
35
40
|
compile('"a #{b} #{} "').should == '"a " . $b . " " . " ";'
|
36
41
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Phaad::Generator, "switch" do
|
4
|
+
it "should parse case statements" do
|
5
|
+
compile("case a\nwhen b\nc\nend").should == "switch($a) {\n case $b:\n $c;\n break;\n}"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should parse multiple when statements" do
|
9
|
+
compile("case a\nwhen b\nc\nwhen d\ne\nend").should ==
|
10
|
+
"switch($a) {\n case $b:\n $c;\n break;\n case $d:\n $e;\n break;\n}"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should parse else statement" do
|
14
|
+
compile("case a\nwhen b\nc\nwhen d\ne\nelse\nf\nend").should ==
|
15
|
+
"switch($a) {\n case $b:\n $c;\n break;\n case $d:\n $e;\n break;\n" +
|
16
|
+
" default:\n $f;\n break;\n}"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should parse multiple case in single when statement" do
|
20
|
+
compile("case a\nwhen b, c, d\ne\nend").should ==
|
21
|
+
"switch($a) {\n case $b: case $c: case $d:\n $e;\n break;\n}"
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phaad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-09-04 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: slop
|
16
|
-
requirement: &
|
16
|
+
requirement: &70365216887360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70365216887360
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fssm
|
27
|
-
requirement: &
|
27
|
+
requirement: &70365216886480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.2.7
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70365216886480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70365216884980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,7 +43,29 @@ dependencies:
|
|
43
43
|
version: 2.6.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70365216884980
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-rspec
|
49
|
+
requirement: &70365216883640 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.3
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70365216883640
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: growl_notify
|
60
|
+
requirement: &70365216882460 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.0.1
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70365216882460
|
47
69
|
description: A beautiful way to write PHP
|
48
70
|
email:
|
49
71
|
- utkarshkukreti@gmail.com
|
@@ -55,6 +77,7 @@ files:
|
|
55
77
|
- .gitignore
|
56
78
|
- .rspec
|
57
79
|
- Gemfile
|
80
|
+
- Guardfile
|
58
81
|
- README.md
|
59
82
|
- Rakefile
|
60
83
|
- bin/phaad
|
@@ -72,11 +95,13 @@ files:
|
|
72
95
|
- spec/generator/function_spec.rb
|
73
96
|
- spec/generator/if_spec.rb
|
74
97
|
- spec/generator/ivar_spec.rb
|
98
|
+
- spec/generator/keywords_spec.rb
|
75
99
|
- spec/generator/literal_spec.rb
|
76
100
|
- spec/generator/massign_spec.rb
|
77
101
|
- spec/generator/paren_spec.rb
|
78
102
|
- spec/generator/return_spec.rb
|
79
103
|
- spec/generator/string_spec.rb
|
104
|
+
- spec/generator/switch_spec.rb
|
80
105
|
- spec/generator/ternary_spec.rb
|
81
106
|
- spec/generator/unary_spec.rb
|
82
107
|
- spec/generator/while_spec.rb
|
@@ -103,8 +128,30 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
128
|
version: '0'
|
104
129
|
requirements: []
|
105
130
|
rubyforge_project: phaad
|
106
|
-
rubygems_version: 1.8.
|
131
|
+
rubygems_version: 1.8.10
|
107
132
|
signing_key:
|
108
133
|
specification_version: 3
|
109
134
|
summary: A beautiful way to write PHP
|
110
|
-
test_files:
|
135
|
+
test_files:
|
136
|
+
- spec/generator/array_spec.rb
|
137
|
+
- spec/generator/assign_spec.rb
|
138
|
+
- spec/generator/binary_spec.rb
|
139
|
+
- spec/generator/class_spec.rb
|
140
|
+
- spec/generator/constants_spec.rb
|
141
|
+
- spec/generator/for_spec.rb
|
142
|
+
- spec/generator/function_spec.rb
|
143
|
+
- spec/generator/if_spec.rb
|
144
|
+
- spec/generator/ivar_spec.rb
|
145
|
+
- spec/generator/keywords_spec.rb
|
146
|
+
- spec/generator/literal_spec.rb
|
147
|
+
- spec/generator/massign_spec.rb
|
148
|
+
- spec/generator/paren_spec.rb
|
149
|
+
- spec/generator/return_spec.rb
|
150
|
+
- spec/generator/string_spec.rb
|
151
|
+
- spec/generator/switch_spec.rb
|
152
|
+
- spec/generator/ternary_spec.rb
|
153
|
+
- spec/generator/unary_spec.rb
|
154
|
+
- spec/generator/while_spec.rb
|
155
|
+
- spec/generator/whitespace_spec.rb
|
156
|
+
- spec/phaad_spec.rb
|
157
|
+
- spec/spec_helper.rb
|