rouge-lang 0.0.1
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/.autotest +11 -0
- data/.gitignore +20 -0
- data/.rspec +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +6 -0
- data/LICENSE +19 -0
- data/README.md +119 -0
- data/Rakefile +8 -0
- data/bin/rouge +2 -0
- data/lib/boot.rg +402 -0
- data/lib/rouge.rb +56 -0
- data/lib/rouge/atom.rb +25 -0
- data/lib/rouge/builtins.rb +596 -0
- data/lib/rouge/compiler.rb +108 -0
- data/lib/rouge/context.rb +235 -0
- data/lib/rouge/metadata.rb +19 -0
- data/lib/rouge/namespace.rb +125 -0
- data/lib/rouge/printer.rb +78 -0
- data/lib/rouge/reader.rb +433 -0
- data/lib/rouge/repl.rb +82 -0
- data/lib/rouge/seq.rb +221 -0
- data/lib/rouge/symbol.rb +77 -0
- data/lib/rouge/var.rb +69 -0
- data/lib/rouge/version.rb +7 -0
- data/lib/rouge/wrappers.rb +27 -0
- data/misc/TODO +45 -0
- data/misc/vimrc +1 -0
- data/rouge-lang.gemspec +28 -0
- data/spec/atom_spec.rb +39 -0
- data/spec/builtins_spec.rb +708 -0
- data/spec/compiler_spec.rb +137 -0
- data/spec/context_spec.rb +293 -0
- data/spec/core_spec.rg +123 -0
- data/spec/metadata_spec.rb +59 -0
- data/spec/namespace_spec.rb +125 -0
- data/spec/printer_spec.rb +191 -0
- data/spec/reader_spec.rb +422 -0
- data/spec/rouge_spec.rb +66 -0
- data/spec/seq_spec.rb +202 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/symbol_spec.rb +35 -0
- data/spec/var_spec.rb +61 -0
- data/spec/wrappers_spec.rb +51 -0
- metadata +216 -0
data/spec/rouge_spec.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'rouge'
|
4
|
+
require 'term/ansicolor'
|
5
|
+
|
6
|
+
describe Rouge do
|
7
|
+
before do
|
8
|
+
Rouge.boot!
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "the rouge.core namespace" do
|
12
|
+
before do
|
13
|
+
@ns = Rouge[:"rouge.core"]
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should contain the defn macro" do
|
17
|
+
lambda {
|
18
|
+
@ns[:defn].should be_an_instance_of Rouge::Macro
|
19
|
+
}.should_not raise_exception(Rouge::Context::BindingNotFoundError)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "the user namespace" do
|
24
|
+
before do
|
25
|
+
@ns = Rouge[:user]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should refer rouge.builtin, rouge.core and ruby" do
|
29
|
+
@ns.refers.should include(Rouge[:"rouge.builtin"])
|
30
|
+
@ns.refers.should include(Rouge[:"rouge.core"])
|
31
|
+
@ns.refers.should include(Rouge[:"ruby"])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "the Rouge specs" do
|
36
|
+
Dir[relative_to_spec("*.rg")].each do |file|
|
37
|
+
it "should pass #{File.basename file}" do
|
38
|
+
begin
|
39
|
+
r = Rouge::Context.new(Rouge[:user]).readeval(File.read(file))
|
40
|
+
rescue => e
|
41
|
+
STDOUT.puts Term::ANSIColor.red("#{e.class}: #{e.message}")
|
42
|
+
STDOUT.puts Term::ANSIColor.red(e.backtrace.join("\n"))
|
43
|
+
r = {:passed => 0, :failed => [["exception"]]}
|
44
|
+
end
|
45
|
+
|
46
|
+
total = r[:passed] + r[:failed].length
|
47
|
+
|
48
|
+
message =
|
49
|
+
"#{total} example#{total == 1 ? "" : "s"}, " +
|
50
|
+
"#{r[:failed].length} failure#{r[:failed].length == 1 ? "" : "s"}"
|
51
|
+
|
52
|
+
if r[:failed].length > 0
|
53
|
+
STDOUT.puts Term::ANSIColor.red(message)
|
54
|
+
raise RuntimeError,
|
55
|
+
"#{r[:failed].length} failed " +
|
56
|
+
"case#{r[:failed].length == 1 ? "" : "s"} in #{file}:\n" +
|
57
|
+
r[:failed].map {|ex| " - #{ex.join(" -> ")}"}.join("\n")
|
58
|
+
else
|
59
|
+
STDOUT.puts Term::ANSIColor.green(message)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# vim: set sw=2 et cc=80:
|
data/spec/seq_spec.rb
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'rouge'
|
4
|
+
|
5
|
+
describe Rouge::Seq::ASeq do
|
6
|
+
let(:seq) do
|
7
|
+
Class.new do
|
8
|
+
include Rouge::Seq::ASeq
|
9
|
+
def to_a; [:q]; end
|
10
|
+
end.new
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#seq" do
|
14
|
+
it "should return the original object" do
|
15
|
+
seq.seq.should be seq
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "the unimplemented methods" do
|
20
|
+
it { expect { seq.first
|
21
|
+
}.to raise_exception NotImplementedError }
|
22
|
+
|
23
|
+
it { expect { seq.next
|
24
|
+
}.to raise_exception NotImplementedError }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#more" do
|
28
|
+
it "should return the value of next" do
|
29
|
+
r = double("next result")
|
30
|
+
seq.should_receive(:next).and_return(r)
|
31
|
+
seq.more.should be r
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should return an empty list if next returns nil" do
|
35
|
+
r = double("next result")
|
36
|
+
seq.should_receive(:next).and_return(nil)
|
37
|
+
seq.more.should eq Rouge::Seq::Empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#cons" do
|
42
|
+
let(:head) { double("head") }
|
43
|
+
|
44
|
+
before { Rouge::Seq::Cons.should_receive(:new).with(head, seq) }
|
45
|
+
it { seq.cons(head) }
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#[]" do
|
49
|
+
let(:numbers) { Rouge::Seq::Cons[1, 2, 3] }
|
50
|
+
|
51
|
+
it { numbers[0].should eq 1 }
|
52
|
+
it { numbers[1].should eq 2 }
|
53
|
+
|
54
|
+
# XXX: unlike Clojure. Thoughts?
|
55
|
+
it { numbers[5].should eq nil }
|
56
|
+
|
57
|
+
it { numbers[-1].should eq 3 }
|
58
|
+
it { numbers[-2].should eq 2 }
|
59
|
+
|
60
|
+
# XXX: or generic seqs/lazyseqs/arrayseqs ...?
|
61
|
+
# to preserve Ruby interop probably straight Arrays.
|
62
|
+
# We won't be using this form from Rouge itself anyway.
|
63
|
+
it { numbers[0..-1].should eq [1, 2, 3] }
|
64
|
+
it { numbers[0..-2].should eq [1, 2] }
|
65
|
+
it { numbers[0...-2].should eq [1] }
|
66
|
+
it { numbers[2...-1].should eq [] }
|
67
|
+
it { numbers[2..-1].should eq [3] }
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#==" do
|
71
|
+
it { Rouge::Seq::Array.new([:q], 0).should eq seq }
|
72
|
+
it { Rouge::Seq::Array.new([:q, :r], 0).
|
73
|
+
should eq Rouge::Seq::Cons[:q, :r] }
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#each" do
|
77
|
+
it { Rouge::Seq::Cons[1].each.should be_an_instance_of Enumerator }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe Rouge::Seq::Cons do
|
82
|
+
describe ".new" do
|
83
|
+
it { expect { Rouge::Seq::Cons.new(1, Rouge::Seq::Empty)
|
84
|
+
}.to_not raise_exception }
|
85
|
+
|
86
|
+
it { expect { Rouge::Seq::Cons.new(1, nil)
|
87
|
+
}.to_not raise_exception }
|
88
|
+
|
89
|
+
it { expect { Rouge::Seq::Cons.new(1, Rouge::Seq::Cons[:x])
|
90
|
+
}.to_not raise_exception }
|
91
|
+
|
92
|
+
it { expect { Rouge::Seq::Cons.new(1, Rouge::Seq::Array.new([], 0))
|
93
|
+
}.to_not raise_exception }
|
94
|
+
|
95
|
+
it { expect { Rouge::Seq::Cons.new(1, "blah")
|
96
|
+
}.to raise_exception(ArgumentError) }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe ".[]" do
|
100
|
+
it { Rouge::Seq::Cons[].should eq Rouge::Seq::Empty }
|
101
|
+
it { Rouge::Seq::Cons[1].
|
102
|
+
should eq Rouge::Seq::Cons.new(1, Rouge::Seq::Empty) }
|
103
|
+
it { Rouge::Seq::Cons[1].should eq Rouge::Seq::Cons.new(1, nil) }
|
104
|
+
it { Rouge::Seq::Cons[1, 2].
|
105
|
+
should eq Rouge::Seq::Cons.new(
|
106
|
+
1, Rouge::Seq::Cons.new(2, Rouge::Seq::Empty)) }
|
107
|
+
it { Rouge::Seq::Cons[1, 2, 3].
|
108
|
+
should eq Rouge::Seq::Cons.new(1,
|
109
|
+
Rouge::Seq::Cons.new(2,
|
110
|
+
Rouge::Seq::Cons.new(3, Rouge::Seq::Empty))) }
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "#inspect" do
|
114
|
+
it { Rouge::Seq::Cons[].inspect.should eq "()" }
|
115
|
+
it { Rouge::Seq::Cons[1].inspect.should eq "(1)" }
|
116
|
+
it { Rouge::Seq::Cons[1, 2].inspect.should eq "(1 2)" }
|
117
|
+
it { Rouge::Seq::Cons[1, 2, 3].inspect.should eq "(1 2 3)" }
|
118
|
+
it { Rouge::Seq::Cons[1, 2, 3].tail.inspect.should eq "(2 3)" }
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "the ASeq implementation" do
|
122
|
+
subject { Rouge::Seq::Cons[1, 2, 3] }
|
123
|
+
|
124
|
+
describe "#first" do
|
125
|
+
its(:first) { should eq 1 }
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "#next" do
|
129
|
+
its(:next) { should be_an_instance_of Rouge::Seq::Cons }
|
130
|
+
its(:next) { should eq Rouge::Seq::Cons[2, 3] }
|
131
|
+
it { subject.next.next.next.should eq nil }
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe Rouge::Seq::Array do
|
137
|
+
describe "#first" do
|
138
|
+
it { Rouge::Seq::Array.new([:a, :b, :c], 0).first.should eq :a }
|
139
|
+
it { Rouge::Seq::Array.new([:a, :b, :c], 1).first.should eq :b }
|
140
|
+
it { Rouge::Seq::Array.new([:a, :b, :c], 2).first.should eq :c }
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "#next" do
|
144
|
+
subject { Rouge::Seq::Array.new([:a, :b, :c], 0).next }
|
145
|
+
|
146
|
+
it { should be_an_instance_of Rouge::Seq::Array }
|
147
|
+
it { should eq [:b, :c] }
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe Rouge::Seq::Lazy do
|
152
|
+
let(:sentinel) { double("sentinel") }
|
153
|
+
let(:trigger) { Rouge::Seq::Lazy.new(lambda { sentinel.call }) }
|
154
|
+
let(:non_seq) { Rouge::Seq::Lazy.new(lambda { 7 }) }
|
155
|
+
let(:error) { Rouge::Seq::Lazy.new(lambda { raise "boom" }) }
|
156
|
+
|
157
|
+
describe "not evalled until necessary" do
|
158
|
+
context "not realised" do
|
159
|
+
before { sentinel.should_not_receive(:call) }
|
160
|
+
it { trigger }
|
161
|
+
end
|
162
|
+
|
163
|
+
context "realised" do
|
164
|
+
before { sentinel.should_receive(:call).and_return [1, 2] }
|
165
|
+
|
166
|
+
it { trigger.seq.should eq [1, 2] }
|
167
|
+
it { trigger.first.should eq 1 }
|
168
|
+
it { trigger.next.should eq [2] }
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "not multiply evalled on non-seq" do
|
173
|
+
it do
|
174
|
+
# Weird, but most similar to Clojure (by experiment).
|
175
|
+
expect { non_seq.seq }.to raise_exception
|
176
|
+
expect { non_seq.seq.should be Rouge::Seq::Empty
|
177
|
+
}.to_not raise_exception
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe "multiply evalled on error" do
|
182
|
+
it do
|
183
|
+
expect { error.seq }.to raise_exception
|
184
|
+
expect { error.seq }.to raise_exception
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe Rouge::Seq do
|
190
|
+
describe ".seq" do
|
191
|
+
context Array do
|
192
|
+
subject { Rouge::Seq.seq([:a]) }
|
193
|
+
it { should be_an_instance_of Rouge::Seq::Array }
|
194
|
+
it { should eq Rouge::Seq::Array.new([:a], 0) }
|
195
|
+
|
196
|
+
let(:arrayseq) { Rouge::Seq::Array.new([:a], 0) }
|
197
|
+
it { Rouge::Seq.seq(arrayseq).should be arrayseq }
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# vim: set sw=2 et cc=80:
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rspec/autorun'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.order = 'random'
|
5
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
6
|
+
end
|
7
|
+
|
8
|
+
def relative_to_spec name
|
9
|
+
File.join(File.dirname(File.absolute_path(__FILE__)), name)
|
10
|
+
end
|
11
|
+
|
12
|
+
# vim: set sw=2 et cc=80:
|
data/spec/symbol_spec.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'rouge'
|
4
|
+
|
5
|
+
describe Rouge::Symbol do
|
6
|
+
describe "lookup" do
|
7
|
+
it { Rouge::Symbol[:true].should be true }
|
8
|
+
it { Rouge::Symbol[:false].should be false }
|
9
|
+
it { Rouge::Symbol[:nil].should be nil }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe ".[]" do
|
13
|
+
it { Rouge::Symbol[:a].should_not be Rouge::Symbol[:a] }
|
14
|
+
# but:
|
15
|
+
it { Rouge::Symbol[:a].should eq Rouge::Symbol[:a] }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#ns, #name" do
|
19
|
+
it { Rouge::Symbol[:abc].ns.should be_nil }
|
20
|
+
it { Rouge::Symbol[:abc].name.should eq :abc }
|
21
|
+
it { Rouge::Symbol[:"abc/def"].ns.should eq :abc }
|
22
|
+
it { Rouge::Symbol[:"abc/def"].name.should eq :def }
|
23
|
+
it { Rouge::Symbol[:/].ns.should be_nil }
|
24
|
+
it { Rouge::Symbol[:/].name.should eq :/ }
|
25
|
+
it { Rouge::Symbol[:"rouge.core//"].ns.should eq :"rouge.core" }
|
26
|
+
it { Rouge::Symbol[:"rouge.core//"].name.should eq :/ }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#to_sym" do
|
30
|
+
it { Rouge::Symbol[:boo].to_sym.should eq :boo }
|
31
|
+
it { Rouge::Symbol[:"what/nice"].to_sym.should eq :"what/nice" }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# vim: set sw=2 et cc=80:
|
data/spec/var_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'rouge'
|
4
|
+
|
5
|
+
describe Rouge::Var do
|
6
|
+
describe "the constructor" do
|
7
|
+
it "creates an unbound var by default" do
|
8
|
+
v = Rouge::Var.new(:mop, :boo)
|
9
|
+
v.ns.should eq :mop
|
10
|
+
v.name.should eq :boo
|
11
|
+
v.deref.should be_an_instance_of Rouge::Var::Unbound
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates a bound var if requested" do
|
15
|
+
v = Rouge::Var.new(:quux, :huh, 99)
|
16
|
+
v.ns.should eq :quux
|
17
|
+
v.name.should eq :huh
|
18
|
+
v.deref.should eq 99
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "equality" do
|
23
|
+
it "considers two vars equal if their nses and names are equal" do
|
24
|
+
Rouge::Var.new(:a, :a, :v).should == Rouge::Var.new(:a, :a, :v)
|
25
|
+
Rouge::Var.new(:a, :a, :w).should == Rouge::Var.new(:a, :a, :w)
|
26
|
+
Rouge::Var.new(:b, :a, :v).should_not == Rouge::Var.new(:a, :b, :v)
|
27
|
+
Rouge::Var.new(:b, :a, :v).should_not == Rouge::Var.new(:a, :a, :v)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "the stack" do
|
32
|
+
it "should override a var's root" do
|
33
|
+
v = Rouge::Var.new(:moop, :hello, :frank)
|
34
|
+
v.deref.should eq :frank
|
35
|
+
|
36
|
+
Rouge::Var.push({:hello => :joe})
|
37
|
+
v.deref.should eq :joe
|
38
|
+
|
39
|
+
Rouge::Var.push({:hello => :mark})
|
40
|
+
v.deref.should eq :mark
|
41
|
+
|
42
|
+
Rouge::Var.pop
|
43
|
+
v.deref.should eq :joe
|
44
|
+
|
45
|
+
Rouge::Var.pop
|
46
|
+
v.deref.should eq :frank
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe Rouge::Var::Unbound do
|
52
|
+
describe "the constructor" do
|
53
|
+
it "creates an unbound var's value" do
|
54
|
+
v = Rouge::Var.new(:raisin, :boo)
|
55
|
+
ub = Rouge::Var::Unbound.new(v)
|
56
|
+
ub.var.should be v
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# vim: set sw=2 et cc=80:
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'rouge'
|
4
|
+
|
5
|
+
describe [
|
6
|
+
Rouge::Macro,
|
7
|
+
Rouge::Builtin,
|
8
|
+
Rouge::Dequote,
|
9
|
+
Rouge::Splice] do
|
10
|
+
describe "the constructor" do
|
11
|
+
it "should return a new wrapper" do
|
12
|
+
described_class.each do |klass|
|
13
|
+
klass.new(:abc).should be_an_instance_of klass
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should function with the alternate form" do
|
18
|
+
described_class.each do |klass|
|
19
|
+
klass[:aoeu].should eq klass.new(:aoeu)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "equality" do
|
25
|
+
it "should be true for two wrappers with the same underlying object" do
|
26
|
+
described_class.each do |klass|
|
27
|
+
klass.new(:xyz).should eq klass.new(:xyz)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "the inner getter" do
|
33
|
+
it "should return the object passed in" do
|
34
|
+
described_class.each do |klass|
|
35
|
+
klass.new(:boohoo).inner.should eq :boohoo
|
36
|
+
l = lambda {}
|
37
|
+
klass.new(l).inner.should eq l
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "the Puby pretty-printing" do
|
43
|
+
it "should resemble the [] constructor" do
|
44
|
+
described_class.each do |klass|
|
45
|
+
klass[:hello].inspect.should eq "#{klass.name}[:hello]"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# vim: set sw=2 et cc=80:
|
metadata
ADDED
@@ -0,0 +1,216 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rouge-lang
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Arlen Christian Mart Cuss
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: autotest
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: autotest-growl
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: autotest-fsevent
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: ZenTest
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: term-ansicolor
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
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
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Ruby + Clojure = Rouge.
|
127
|
+
email:
|
128
|
+
- ar@len.me
|
129
|
+
executables:
|
130
|
+
- rouge
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- .autotest
|
135
|
+
- .gitignore
|
136
|
+
- .rspec
|
137
|
+
- .travis.yml
|
138
|
+
- Gemfile
|
139
|
+
- LICENSE
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- bin/rouge
|
143
|
+
- lib/boot.rg
|
144
|
+
- lib/rouge.rb
|
145
|
+
- lib/rouge/atom.rb
|
146
|
+
- lib/rouge/builtins.rb
|
147
|
+
- lib/rouge/compiler.rb
|
148
|
+
- lib/rouge/context.rb
|
149
|
+
- lib/rouge/metadata.rb
|
150
|
+
- lib/rouge/namespace.rb
|
151
|
+
- lib/rouge/printer.rb
|
152
|
+
- lib/rouge/reader.rb
|
153
|
+
- lib/rouge/repl.rb
|
154
|
+
- lib/rouge/seq.rb
|
155
|
+
- lib/rouge/symbol.rb
|
156
|
+
- lib/rouge/var.rb
|
157
|
+
- lib/rouge/version.rb
|
158
|
+
- lib/rouge/wrappers.rb
|
159
|
+
- misc/TODO
|
160
|
+
- misc/vimrc
|
161
|
+
- rouge-lang.gemspec
|
162
|
+
- spec/atom_spec.rb
|
163
|
+
- spec/builtins_spec.rb
|
164
|
+
- spec/compiler_spec.rb
|
165
|
+
- spec/context_spec.rb
|
166
|
+
- spec/core_spec.rg
|
167
|
+
- spec/metadata_spec.rb
|
168
|
+
- spec/namespace_spec.rb
|
169
|
+
- spec/printer_spec.rb
|
170
|
+
- spec/reader_spec.rb
|
171
|
+
- spec/rouge_spec.rb
|
172
|
+
- spec/seq_spec.rb
|
173
|
+
- spec/spec_helper.rb
|
174
|
+
- spec/symbol_spec.rb
|
175
|
+
- spec/var_spec.rb
|
176
|
+
- spec/wrappers_spec.rb
|
177
|
+
homepage: http://rouge.io/
|
178
|
+
licenses: []
|
179
|
+
post_install_message:
|
180
|
+
rdoc_options: []
|
181
|
+
require_paths:
|
182
|
+
- lib
|
183
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
none: false
|
185
|
+
requirements:
|
186
|
+
- - ! '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
none: false
|
191
|
+
requirements:
|
192
|
+
- - ! '>='
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
requirements: []
|
196
|
+
rubyforge_project:
|
197
|
+
rubygems_version: 1.8.23
|
198
|
+
signing_key:
|
199
|
+
specification_version: 3
|
200
|
+
summary: An implementation of Clojure for Ruby.
|
201
|
+
test_files:
|
202
|
+
- spec/atom_spec.rb
|
203
|
+
- spec/builtins_spec.rb
|
204
|
+
- spec/compiler_spec.rb
|
205
|
+
- spec/context_spec.rb
|
206
|
+
- spec/core_spec.rg
|
207
|
+
- spec/metadata_spec.rb
|
208
|
+
- spec/namespace_spec.rb
|
209
|
+
- spec/printer_spec.rb
|
210
|
+
- spec/reader_spec.rb
|
211
|
+
- spec/rouge_spec.rb
|
212
|
+
- spec/seq_spec.rb
|
213
|
+
- spec/spec_helper.rb
|
214
|
+
- spec/symbol_spec.rb
|
215
|
+
- spec/var_spec.rb
|
216
|
+
- spec/wrappers_spec.rb
|