rib 0.9.1 → 0.9.2
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/CHANGES.md +6 -0
- data/lib/rib/extra/autoindent.rb +65 -25
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +2 -2
- data/task/gemgem.rb +1 -1
- metadata +14 -14
data/CHANGES.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Rib CHANGES
|
2
2
|
|
3
|
+
## Rib 0.9.2 -- 2011-08-25
|
4
|
+
|
5
|
+
* [extra/autoindent] It has been greatly improved. A lot more accurate.
|
6
|
+
* [extra/autoindent] Fixed a bug when you're typing too fast upon rib
|
7
|
+
launching, it might eat your input. Thanks bootleq.
|
8
|
+
|
3
9
|
## Rib 0.9.1 -- 2011-08-19
|
4
10
|
|
5
11
|
* [extra/autoindent] Autoindent plugin help you indent multiline editing.
|
data/lib/rib/extra/autoindent.rb
CHANGED
@@ -40,13 +40,22 @@ module Rib::Autoindent
|
|
40
40
|
/^until/ => /^(end)\b/ ,
|
41
41
|
# consider cases:
|
42
42
|
# 'do
|
43
|
-
#
|
43
|
+
# ' do
|
44
|
+
# "' do
|
44
45
|
# /do
|
45
46
|
# '{
|
46
|
-
#
|
47
|
-
#
|
48
|
-
|
49
|
-
|
47
|
+
# %q{
|
48
|
+
# %q| do
|
49
|
+
# hey, two lines are even harder!
|
50
|
+
# "
|
51
|
+
# begin
|
52
|
+
/do( *\|.*\|)?$/ => /^(end)\b/ ,
|
53
|
+
/\{( *\|.*\|)?$/ => /^(\})\B/ ,
|
54
|
+
# those are too hard to deal with, so we use syntax error to double check
|
55
|
+
# what about this then?
|
56
|
+
# v = if true
|
57
|
+
# else
|
58
|
+
# end
|
50
59
|
}
|
51
60
|
|
52
61
|
# --------------- Rib API ---------------
|
@@ -59,43 +68,74 @@ module Rib::Autoindent
|
|
59
68
|
|
60
69
|
def get_input
|
61
70
|
return super if Autoindent.disabled?
|
71
|
+
# this is only a fix in case we don't autoindent correctly
|
72
|
+
# if we're autoindenting 100% correct, then this is a useless check
|
62
73
|
autoindent_stack.clear if multiline_buffer.empty?
|
74
|
+
|
75
|
+
# this should be called after ::Readline.readline, but it's blocking,
|
76
|
+
# and i don't know if there's any hook to do this, so here we use thread
|
63
77
|
Thread.new do
|
64
78
|
sleep(0.01)
|
65
|
-
|
66
|
-
|
67
|
-
::Readline.line_buffer = current_autoindent
|
79
|
+
::Readline.line_buffer = current_autoindent if
|
80
|
+
::Readline.line_buffer.empty?
|
68
81
|
end
|
82
|
+
|
69
83
|
super
|
70
84
|
end
|
71
85
|
|
72
|
-
def
|
86
|
+
def eval_input raw_input
|
73
87
|
return super if Autoindent.disabled?
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
88
|
+
input = raw_input.strip
|
89
|
+
indent = detect_autoindent(input)
|
90
|
+
result, err = if indent.first.to_s.start_with?('left')
|
91
|
+
super(handle_last_line(input))
|
92
|
+
else
|
93
|
+
super
|
94
|
+
end
|
95
|
+
handle_autoindent(input, indent, err)
|
96
|
+
[result, err]
|
79
97
|
end
|
80
98
|
|
81
99
|
# --------------- Plugin API ---------------
|
82
100
|
|
83
|
-
def
|
84
|
-
_,
|
85
|
-
if
|
86
|
-
|
87
|
-
nil
|
101
|
+
def detect_autoindent input
|
102
|
+
_, backmark = BLOCK_REGEXP.find{ |key, _| input =~ key }
|
103
|
+
if backmark # e.g. begin
|
104
|
+
[:right, backmark]
|
88
105
|
elsif input =~ autoindent_stack.last
|
89
|
-
if $1
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
handle_last_line(input, current_autoindent(autoindent_stack.size-1))
|
106
|
+
if $1 # e.g. end, }, etc
|
107
|
+
[:left_end]
|
108
|
+
else # e.g. elsif, rescue, etc
|
109
|
+
[:left_tmp]
|
94
110
|
end
|
111
|
+
else
|
112
|
+
[:stay]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def handle_autoindent input, indent, err
|
117
|
+
case indent.first
|
118
|
+
when :right # we need to go deeper
|
119
|
+
if multiline?(err)
|
120
|
+
if err.message =~ /unterminated \w+ meets end of file/
|
121
|
+
# skip if we're in the middle of a string or regexp
|
122
|
+
else
|
123
|
+
# indent.last is the way (input regexp matches) to go back
|
124
|
+
autoindent_stack << indent.last
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
when :left_end # we need to go back
|
129
|
+
# could happen in either multiline or not
|
130
|
+
autoindent_stack.pop
|
131
|
+
|
132
|
+
when :left_tmp # temporarily go back
|
133
|
+
handle_last_line(input) if multiline?(err)
|
95
134
|
end
|
96
135
|
end
|
97
136
|
|
98
|
-
def handle_last_line input,
|
137
|
+
def handle_last_line input,
|
138
|
+
indent=current_autoindent(autoindent_stack.size-1)
|
99
139
|
new_input = "#{indent}#{input}"
|
100
140
|
puts("\e[1A\e[K#{prompt}#{new_input}")
|
101
141
|
new_input
|
data/lib/rib/version.rb
CHANGED
data/rib.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rib}
|
5
|
-
s.version = "0.9.
|
5
|
+
s.version = "0.9.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = [%q{Lin Jen-Shin (godfat)}]
|
9
|
-
s.date = %q{2011-08-
|
9
|
+
s.date = %q{2011-08-25}
|
10
10
|
s.description = %q{Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
11
11
|
|
12
12
|
Rib is based on the design of [ripl][] and the work of [ripl-rc][], some of
|
data/task/gemgem.rb
CHANGED
@@ -160,7 +160,7 @@ task :test do
|
|
160
160
|
Bacon.extend(Bacon::TestUnitOutput)
|
161
161
|
Bacon.summary_on_exit
|
162
162
|
$LOAD_PATH.unshift('lib')
|
163
|
-
Dir['test/**/test_*.rb'].each{ |file|
|
163
|
+
Dir['./test/**/test_*.rb'].each{ |file| require file[0..-4] }
|
164
164
|
end
|
165
165
|
|
166
166
|
desc 'Run tests with shell'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
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-08-
|
12
|
+
date: 2011-08-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bond
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157793060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157793060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hirb
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157792580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157792580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: readline_buffer
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157792100 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2157792100
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bacon
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157791620 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2157791620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rr
|
60
|
-
requirement: &
|
60
|
+
requirement: &2157791140 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2157791140
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
|
-
requirement: &
|
71
|
+
requirement: &2157790660 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2157790660
|
80
80
|
description: ! 'Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
|
81
81
|
|
82
82
|
|