irust 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/CHANGES.md +7 -0
- data/README.md +2 -2
- data/lib/irust.rb +12 -18
- data/lib/irust/template.rs.erb +20 -0
- data/lib/irust/template_renderer.rb +22 -0
- data/lib/irust/version.rb +1 -1
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d71c1afd38f1f48fc58a4705783bd9de7f058f20
|
4
|
+
data.tar.gz: ae752373a7856bd1cb5b9fc2c81feee7e12ed0fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a90fcd4505d163b5f28ac2e496dfb14251386519039d35e9e41a7a57d24112763d8e98b879d0f873268cbd7078f740439edac06b4223dd33771ee0c225c714c
|
7
|
+
data.tar.gz: 1157872356efef33da734d5be8be7c9a344723463cbddba868138f2ef2b2d43b5a0135f7fac5ba4619438ce02b477afc0e3284b8cbd2428dcbedc78a4a2810bd
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
1.1.0 (2014-01-05)
|
2
|
+
------------------
|
3
|
+
* Keep a basic history
|
4
|
+
* Show the type of the return value
|
5
|
+
* Display the type and value of let and fn statements
|
6
|
+
* Rewrite internals around an ERB template
|
7
|
+
|
1
8
|
1.0.1 (2013-12-22)
|
2
9
|
------------------
|
3
10
|
* Exit properly when ^D is pressed
|
data/README.md
CHANGED
@@ -47,7 +47,7 @@ Now type some fancy Rust expressions and watch them get magically evaluated
|
|
47
47
|
before your eyes!
|
48
48
|
|
49
49
|
irust> 2+2
|
50
|
-
4
|
50
|
+
4 : int
|
51
51
|
irust>
|
52
52
|
|
53
53
|
Technology!
|
@@ -60,5 +60,5 @@ Technology!
|
|
60
60
|
|
61
61
|
## License
|
62
62
|
|
63
|
-
Copyright (c)
|
63
|
+
Copyright (c) 2014 Tony Arcieri. Distributed under the MIT License. See
|
64
64
|
LICENSE.txt for further details.
|
data/lib/irust.rb
CHANGED
@@ -2,6 +2,8 @@ require "readline"
|
|
2
2
|
require "tmpdir"
|
3
3
|
require "open3"
|
4
4
|
|
5
|
+
require "irust/template_renderer"
|
6
|
+
|
5
7
|
module IRust
|
6
8
|
module_function
|
7
9
|
|
@@ -9,21 +11,8 @@ module IRust
|
|
9
11
|
Readline.readline("irust> ", true)
|
10
12
|
end
|
11
13
|
|
12
|
-
def rust_program(line)
|
13
|
-
|
14
|
-
#[feature(globs, macro_rules, struct_variant)];
|
15
|
-
extern mod extra;
|
16
|
-
|
17
|
-
fn main() {
|
18
|
-
let r = {
|
19
|
-
fn type_of<T>(_: &T) -> &'static str { unsafe {
|
20
|
-
(*std::unstable::intrinsics::get_tydesc::<T>()).name } } struct
|
21
|
-
Foo<T>(T);
|
22
|
-
#{line}
|
23
|
-
};
|
24
|
-
println!("{:?}", r)
|
25
|
-
}
|
26
|
-
RUST
|
14
|
+
def rust_program(line, history)
|
15
|
+
IRust::TemplateRenderer.new(line, history).render
|
27
16
|
end
|
28
17
|
|
29
18
|
def compile(tmpdir)
|
@@ -39,20 +28,25 @@ RUST
|
|
39
28
|
end
|
40
29
|
end
|
41
30
|
|
42
|
-
def eval(line)
|
31
|
+
def eval(line, history = nil)
|
43
32
|
exit 0 if line.nil?
|
44
33
|
|
45
34
|
Dir.mktmpdir do |tmpdir|
|
46
35
|
input_src = File.join(tmpdir, "irust.rs")
|
47
|
-
File.write input_src, rust_program(line)
|
36
|
+
File.write input_src, rust_program(line, history)
|
48
37
|
|
49
38
|
if compile(tmpdir)
|
50
39
|
system input_src.sub(/\.rs$/, '')
|
40
|
+
history + ";\n" + line
|
41
|
+
else
|
42
|
+
history
|
51
43
|
end
|
52
44
|
end
|
53
45
|
end
|
54
46
|
|
55
47
|
def run
|
56
|
-
|
48
|
+
history = ""
|
49
|
+
loop { history = eval read, history }
|
57
50
|
end
|
58
51
|
end
|
52
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#[feature(globs, macro_rules, struct_variant)];
|
2
|
+
extern mod extra;
|
3
|
+
|
4
|
+
fn main() {
|
5
|
+
fn type_of<T>(_: &T) -> &'static str {
|
6
|
+
unsafe {
|
7
|
+
(*std::unstable::intrinsics::get_tydesc::<T>()).name
|
8
|
+
}
|
9
|
+
} struct Foo<T>(T);
|
10
|
+
|
11
|
+
<%= history %>;
|
12
|
+
|
13
|
+
<% if let_var %>
|
14
|
+
<%= rust_code %>;
|
15
|
+
println!("<%= let_var%> = {:?} : {:s}", <%= let_var %>, type_of(&<%= let_var %>));
|
16
|
+
<% else %>
|
17
|
+
let _result = { <%= rust_code %> };
|
18
|
+
println!("{:?} : {:s}", _result, type_of(&_result));
|
19
|
+
<% end %>
|
20
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module IRust
|
4
|
+
class TemplateRenderer
|
5
|
+
RUST_TEMPLATE = File.expand_path("../template.rs.erb", __FILE__)
|
6
|
+
|
7
|
+
attr_reader :rust_code, :history
|
8
|
+
|
9
|
+
def initialize(rust_code, history = nil)
|
10
|
+
@rust_code, @history = rust_code, history
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
template = File.read(RUST_TEMPLATE)
|
15
|
+
ERB.new(template).result(binding)
|
16
|
+
end
|
17
|
+
|
18
|
+
def let_var
|
19
|
+
rust_code[/^\s*(let|fn)\s+(mut\s+)?(\w+)/, 3]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/irust/version.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
description: iRust is an interactive REPL for Rust
|
@@ -46,7 +46,7 @@ executables:
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
-
- .gitignore
|
49
|
+
- ".gitignore"
|
50
50
|
- CHANGES.md
|
51
51
|
- Gemfile
|
52
52
|
- LICENSE.txt
|
@@ -55,6 +55,8 @@ files:
|
|
55
55
|
- bin/irust
|
56
56
|
- irust.gemspec
|
57
57
|
- lib/irust.rb
|
58
|
+
- lib/irust/template.rs.erb
|
59
|
+
- lib/irust/template_renderer.rb
|
58
60
|
- lib/irust/version.rb
|
59
61
|
homepage: https://github.com/tarcieri/irust
|
60
62
|
licenses:
|
@@ -66,17 +68,17 @@ require_paths:
|
|
66
68
|
- lib
|
67
69
|
required_ruby_version: !ruby/object:Gem::Requirement
|
68
70
|
requirements:
|
69
|
-
- -
|
71
|
+
- - ">="
|
70
72
|
- !ruby/object:Gem::Version
|
71
73
|
version: '0'
|
72
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
75
|
requirements:
|
74
|
-
- -
|
76
|
+
- - ">="
|
75
77
|
- !ruby/object:Gem::Version
|
76
78
|
version: '0'
|
77
79
|
requirements: []
|
78
80
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.0
|
81
|
+
rubygems_version: 2.2.0
|
80
82
|
signing_key:
|
81
83
|
specification_version: 4
|
82
84
|
summary: Read, Eval, and Print Rust code to your heart's desire!
|