rcodetools 0.7.0.0 → 0.8.0.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.
Files changed (83) hide show
  1. data/CHANGES +12 -0
  2. data/README +1 -1
  3. data/README.emacs +21 -4
  4. data/README.ja +1 -1
  5. data/README.xmpfilter +159 -74
  6. data/Rakefile +3 -37
  7. data/anything-rcodetools.el +142 -0
  8. data/bin/rct-complete +1 -1
  9. data/bin/rct-doc +1 -1
  10. data/bin/rct-meth-args +33 -2
  11. data/bin/xmpfilter +5 -1
  12. data/lib/rcodetools/compat.rb +14 -0
  13. data/lib/rcodetools/completion.rb +8 -6
  14. data/lib/rcodetools/fork.rb +15 -8
  15. data/lib/rcodetools/options.rb +8 -0
  16. data/lib/rcodetools/xmpfilter.rb +80 -33
  17. data/lib/rcodetools/xmptestunitfilter.rb +76 -21
  18. data/lib/ruby_toggle_file.rb +1 -1
  19. data/rcodetools.el +213 -20
  20. data/test/test_functional.rb +36 -68
  21. data/test/test_method_analyzer.rb +28 -20
  22. data/test/test_ruby_toggle_file.rb +118 -69
  23. data/test/test_xmpfilter.rb +75 -47
  24. data/test/test_xmptestunitfilter.rb +12 -11
  25. metadata +83 -133
  26. data/test/data/add_markers-input.rb +0 -2
  27. data/test/data/add_markers-output.rb +0 -2
  28. data/test/data/bindings-input.rb +0 -26
  29. data/test/data/bindings-output.rb +0 -31
  30. data/test/data/completion-input.rb +0 -1
  31. data/test/data/completion-output.rb +0 -2
  32. data/test/data/completion_class_info-input.rb +0 -1
  33. data/test/data/completion_class_info-output.rb +0 -10
  34. data/test/data/completion_class_info_no_candidates-input.rb +0 -1
  35. data/test/data/completion_class_info_no_candidates-output.rb +0 -1
  36. data/test/data/completion_detect_rbtest-input.rb +0 -7
  37. data/test/data/completion_detect_rbtest-output.rb +0 -2
  38. data/test/data/completion_detect_rbtest2-input.rb +0 -1
  39. data/test/data/completion_detect_rbtest2-output.rb +0 -2
  40. data/test/data/completion_emacs-input.rb +0 -1
  41. data/test/data/completion_emacs-output.rb +0 -6
  42. data/test/data/completion_emacs_icicles-input.rb +0 -1
  43. data/test/data/completion_emacs_icicles-output.rb +0 -6
  44. data/test/data/completion_in_method-input.rb +0 -3
  45. data/test/data/completion_in_method-output.rb +0 -1
  46. data/test/data/completion_in_method-test.rb +0 -6
  47. data/test/data/completion_rbtest-input.rb +0 -7
  48. data/test/data/completion_rbtest-output.rb +0 -2
  49. data/test/data/doc-input.rb +0 -1
  50. data/test/data/doc-output.rb +0 -1
  51. data/test/data/doc_detect_rbtest-input.rb +0 -1
  52. data/test/data/doc_detect_rbtest-output.rb +0 -1
  53. data/test/data/doc_detect_rbtest2-input.rb +0 -7
  54. data/test/data/doc_detect_rbtest2-output.rb +0 -1
  55. data/test/data/doc_rbtest-input.rb +0 -7
  56. data/test/data/doc_rbtest-output.rb +0 -1
  57. data/test/data/no_warnings-input.rb +0 -3
  58. data/test/data/no_warnings-output.rb +0 -4
  59. data/test/data/refe-input.rb +0 -1
  60. data/test/data/refe-output.rb +0 -1
  61. data/test/data/ri-input.rb +0 -1
  62. data/test/data/ri-output.rb +0 -1
  63. data/test/data/ri_emacs-input.rb +0 -1
  64. data/test/data/ri_emacs-output.rb +0 -1
  65. data/test/data/ri_vim-input.rb +0 -1
  66. data/test/data/ri_vim-output.rb +0 -1
  67. data/test/data/rspec-input.rb +0 -48
  68. data/test/data/rspec-output.rb +0 -52
  69. data/test/data/rspec_poetry-input.rb +0 -48
  70. data/test/data/rspec_poetry-output.rb +0 -52
  71. data/test/data/simple_annotation-input.rb +0 -8
  72. data/test/data/simple_annotation-output.rb +0 -8
  73. data/test/data/unit_test-input.rb +0 -50
  74. data/test/data/unit_test-output.rb +0 -52
  75. data/test/data/unit_test_detect_rbtest-input.rb +0 -50
  76. data/test/data/unit_test_detect_rbtest-output.rb +0 -52
  77. data/test/data/unit_test_detect_rbtest2-input.rb +0 -6
  78. data/test/data/unit_test_detect_rbtest2-output.rb +0 -6
  79. data/test/data/unit_test_poetry-input.rb +0 -50
  80. data/test/data/unit_test_poetry-output.rb +0 -52
  81. data/test/data/unit_test_rbtest-input.rb +0 -6
  82. data/test/data/unit_test_rbtest-output.rb +0 -6
  83. data/test/test_run.rb +0 -45
data/CHANGES CHANGED
@@ -1,5 +1,17 @@
1
1
  rcodetools history
2
2
  ==================
3
+ User-visible changes since 0.7.0
4
+ --------------------------------
5
+ * Support Ruby 1.9!
6
+ * xmpfilter: multi-line annotation
7
+ * xmpfilter --expectations generates expectations by Jay Fields
8
+ * anything-rcodetools.el: new elisp
9
+ * --tmpfile, --tempfile: use temporary file instead of open3 on un*x
10
+ * rcodetools.el: smarter xmpfilter-command
11
+ * rcodetools.el: rct-fork interface
12
+ * rct-fork: require 'rubygems' initially
13
+ * rct-fork: more stable
14
+
3
15
  User-visible changes since 0.5.0
4
16
  --------------------------------
5
17
  * "test-driven completion" (TDC) support for Emacs and vim (see README.TDC)
data/README CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  rcodetools http://eigenclass.org/hiki.rb?rcodetools
3
3
  Copyright (c) 2005-2007 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
4
- Copyright (c) 2006-2007 rubikitch <rubikitch@ruby-lang.org> http://www.rubyist.net/~rubikitch/
4
+ Copyright (c) 2006-2008 rubikitch <rubikitch@ruby-lang.org> http://www.rubyist.net/~rubikitch/
5
5
  Use and distribution subject to the terms of the Ruby license.
6
6
 
7
7
  = Overview
data/README.emacs CHANGED
@@ -21,8 +21,15 @@ If you use icicles copy <tt>icicles-rcodetools.el</tt> too.
21
21
  Then require it.
22
22
  (require 'icicles-rcodetools)
23
23
  It provides wonderful `help on candidate' feature, RI document on each candidate during completion.
24
- I'm addicted to icicles!
25
- http://www.emacswiki.org/cgi-bin/wiki/Icicles
24
+
25
+ If you use anything.el copy <tt>anything-rcodetools.el</tt> too.
26
+ Then require it.
27
+ (require 'anything-rcodetools)
28
+ RI document on each candidate during completion.
29
+ I think anything-rcodetools is more convenient than icicles-rcodetools.
30
+
31
+ I'm addicted to anything!
32
+ http://www.emacswiki.org/cgi-bin/wiki/Anything
26
33
 
27
34
  xmpfilter on buffer
28
35
  ===================
@@ -38,8 +45,9 @@ method/class/constant completion
38
45
 
39
46
  # [EVAL IT] (describe-function 'rct-complete-symbol)
40
47
 
41
- If you use icicles-rcodetools, you can browse RI document for selected candidate
42
- by typing C-M-RET. It is wonderful icicles feature!!
48
+ If you use icicles-rcodetools or anything-rcodetools, you can browse RI document
49
+ for selected candidate by typing C-M-RET (icicles) or C-z (anything.
50
+ It is wonderful icicles and anything feature!!
43
51
 
44
52
  show RI document / jump to the definition
45
53
  =========================================
@@ -52,3 +60,12 @@ If use do not use this feature, evaluate:
52
60
  (setq rct-find-tag-if-available nil)
53
61
 
54
62
  # [EVAL IT] (describe-variable 'rct-find-tag-if-available)
63
+
64
+ speed-up xmpfilter and completion
65
+ =================================
66
+
67
+ # [EVAL IT] (describe-function 'rct-fork)
68
+ # [EVAL IT] (describe-function 'rct-fork-kill)
69
+
70
+ M-x rct-fork pre-loads heavy libraries (like rails).
71
+ You need not every time wait for loading them anymore!
data/README.ja CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  rcodetools http://eigenclass.org/hiki.rb?rcodetools
3
3
  Copyright (c) 2005-2007 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
4
- Copyright (c) 2006-2007 rubikitch <rubikitch@ruby-lang.org> http://www.rubyist.net/~rubikitch/
4
+ Copyright (c) 2006-2008 rubikitch <rubikitch@ruby-lang.org> http://www.rubyist.net/~rubikitch/
5
5
  Use and distribution subject to the terms of the Ruby license.
6
6
 
7
7
  = ����
data/README.xmpfilter CHANGED
@@ -1,12 +1,14 @@
1
1
 
2
2
  xmpfilter http://eigenclass.org/hiki.rb?xmpfilter
3
- Copyright (c) 2005-2006 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
3
+ Copyright (c) 2005-2008 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
4
+ rubikitch <rubikitch@ruby-lang.org>
4
5
  Use and distribution subject to the terms of the Ruby license.
5
6
 
6
7
  Overview
7
8
  ========
8
9
  xmpfilter is a small tool that can be used to
9
- * generate Test::Unit assertions and RSpec expectations semi-automatically
10
+ * generate Test::Unit assertions, RSpec expectations and
11
+ expectations blocks semi-automatically
10
12
  * annotate source code with intermediate results (a bit like irb
11
13
  --simple-prompt but only for the lines explicitly marked with # =>)
12
14
  Very useful for example code (such as postings to ruby-talk).
@@ -15,7 +17,7 @@ Usage
15
17
  =====
16
18
  xmpfilter takes its input from stdin and writes to stdout. It can run in
17
19
  several modes (annotation, Test::Unit assertion expansion, RSpec expectation
18
- generation, marker insertion); see
20
+ generation, expectations expectations generation, marker insertion); see
19
21
  xmpfilter -h
20
22
  README.emacs and README.vim describe how to use xmpfilter from your editor.
21
23
 
@@ -34,8 +36,33 @@ README.vim)
34
36
  a + b # => "foobaz"
35
37
  a.size # => 3
36
38
 
37
- This saves much cut&pasting when you're posting to ruby-talk/ruby-core (I use
38
- it all the time).
39
+ This saves much cut&pasting when you're posting to ruby-list/ruby-talk/ruby-core
40
+ (We use it all the time).
41
+
42
+
43
+ Example: multi-line code annotation
44
+ ===================================
45
+ Just add "# =>" markers to the next lines whose values you want to be shown with pp:
46
+
47
+ a = ["1111111111111111111111111111111111111111111111111111", 123334324234242342,
48
+ 1332333333,6,8 ]
49
+ 1 # =>
50
+ a
51
+ # =>
52
+
53
+ will be expanded to (in one keypress in a decent editor, see README.emacs and
54
+ README.vim)
55
+
56
+ a = ["1111111111111111111111111111111111111111111111111111", 123334324234242342,
57
+ 1332333333,6,8 ]
58
+ 1 # => 1
59
+ a
60
+ # => ["1111111111111111111111111111111111111111111111111111",
61
+ # 123334324234242342,
62
+ # 1332333333,
63
+ # 6,
64
+ # 8]
65
+
39
66
 
40
67
  Example: assertion generation
41
68
  =============================
@@ -114,88 +141,146 @@ Example: RSpec expectations
114
141
  ===========================
115
142
  Here's some code before and after filtering it with xmpfilter:
116
143
 
117
- class X
118
- Y = Struct.new(:a)
119
- def foo(b); b ? Y.new(2) : 2 end
120
- def bar; raise "No good" end
121
- def baz; nil end
122
- def fubar(x); x ** 2.0 + 1 end
123
- def babar; [1,2] end
124
- A = 1
125
- A = 1
144
+ class X
145
+ Y = Struct.new(:a)
146
+ def foo(b); b ? Y.new(2) : 2 end
147
+ def bar; raise "No good" end
148
+ def baz; nil end
149
+ def fubar(x); x ** 2.0 + 1 end
150
+ def babar; [1,2] end
151
+ A = 1
152
+ A = 1
153
+ end
154
+
155
+ context "Testing xmpfilter's expectation expansion" do
156
+ setup do
157
+ @o = X.new
126
158
  end
127
159
 
128
- context "Testing xmpfilter's expectation expansion" do
129
- setup do
130
- @o = X.new
131
- end
160
+ specify "Should expand should_equal expectations" do
161
+ @o.foo(true) # =>
162
+ @o.foo(true).a # =>
163
+ @o.foo(false) # =>
164
+ end
132
165
 
133
- specify "Should expand should_equal expectations" do
134
- @o.foo(true) # =>
135
- @o.foo(true).a # =>
136
- @o.foo(false) # =>
137
- end
138
-
139
- specify "Should expand should_raise expectations" do
140
- @o.bar # =>
141
- end
166
+ specify "Should expand should_raise expectations" do
167
+ @o.bar # =>
168
+ end
142
169
 
143
- specify "Should expand should_be_nil expectations" do
144
- @o.baz # =>
145
- end
170
+ specify "Should expand should_be_nil expectations" do
171
+ @o.baz # =>
172
+ end
146
173
 
147
- specify "Should expand correct expectations for complex values" do
148
- @o.babar # =>
149
- end
174
+ specify "Should expand correct expectations for complex values" do
175
+ @o.babar # =>
176
+ end
150
177
 
151
- specify "Should expand should_be_close expectations" do
152
- @o.fubar(10) # =>
153
- end
178
+ specify "Should expand should_be_close expectations" do
179
+ @o.fubar(10) # =>
154
180
  end
181
+ end
155
182
 
156
183
 
157
184
  after piping it to xmpfilter -s:
158
185
 
159
- class X
160
- Y = Struct.new(:a)
161
- def foo(b); b ? Y.new(2) : 2 end
162
- def bar; raise "No good" end
163
- def baz; nil end
164
- def fubar(x); x ** 2.0 + 1 end
165
- def babar; [1,2] end
166
- A = 1
167
- A = 1 # !> already initialized constant A
168
- end
169
-
170
- context "Testing xmpfilter's expectation expansion" do
171
- setup do
172
- @o = X.new
173
- end
174
-
175
- specify "Should expand should_equal expectations" do
176
- (@o.foo(true)).should_be_a_kind_of X::Y
177
- (@o.foo(true).inspect).should_equal "#<struct X::Y a=2>"
178
- (@o.foo(true).a).should_equal 2
179
- (@o.foo(false)).should_equal 2
180
- end
181
-
182
- specify "Should expand should_raise expectations" do
183
- lambda{(@o.bar)}.should_raise RuntimeError
184
- end
185
-
186
- specify "Should expand should_be_nil expectations" do
187
- (@o.baz).should_be_nil
188
- end
189
-
190
- specify "Should expand correct expectations for complex values" do
191
- (@o.babar).should_equal [1, 2]
192
- end
193
-
194
- specify "Should expand should_be_close expectations" do
195
- (@o.fubar(10)).should_be_close(101.0, 0.0001)
196
- end
186
+ class X
187
+ Y = Struct.new(:a)
188
+ def foo(b); b ? Y.new(2) : 2 end
189
+ def bar; raise "No good" end
190
+ def baz; nil end
191
+ def fubar(x); x ** 2.0 + 1 end
192
+ def babar; [1,2] end
193
+ A = 1
194
+ A = 1 # !> already initialized constant A
195
+ end
196
+
197
+ context "Testing xmpfilter's expectation expansion" do
198
+ setup do
199
+ @o = X.new
200
+ end
201
+
202
+ specify "Should expand should_equal expectations" do
203
+ (@o.foo(true)).should_be_a_kind_of X::Y
204
+ (@o.foo(true).inspect).should_equal "#<struct X::Y a=2>"
205
+ (@o.foo(true).a).should_equal 2
206
+ (@o.foo(false)).should_equal 2
207
+ end
208
+
209
+ specify "Should expand should_raise expectations" do
210
+ lambda{(@o.bar)}.should_raise RuntimeError
211
+ end
212
+
213
+ specify "Should expand should_be_nil expectations" do
214
+ (@o.baz).should_be_nil
215
+ end
216
+
217
+ specify "Should expand correct expectations for complex values" do
218
+ (@o.babar).should_equal [1, 2]
219
+ end
220
+
221
+ specify "Should expand should_be_close expectations" do
222
+ (@o.fubar(10)).should_be_close(101.0, 0.0001)
223
+ end
224
+ end
225
+
226
+
227
+ Example: expectations expectations
228
+ ==================================
229
+ Expectations is a light-weight unit testing framework by Jay Fields.
230
+ (http://expectations.rubyforge.org)
231
+
232
+ Here's some code before and after filtering it with xmpfilter:
233
+
234
+ require 'rubygems'
235
+ require 'expectations'
236
+
237
+ S = Struct.new :a
238
+ Expectations do
239
+ 1 + 1 # =>
240
+ "a".length # =>
241
+ [][1] # =>
242
+ 1.hoge # =>
243
+ 1.1 + 1.0 # =>
244
+ S.new(1) # =>
245
+ end
246
+
247
+ after piping it to xmpfilter --expectations:
248
+
249
+ require 'rubygems'
250
+ require 'expectations'
251
+
252
+ S = Struct.new :a
253
+ Expectations do
254
+ expect 2 do
255
+ 1 + 1
256
+ end
257
+
258
+ expect 1 do
259
+ "a".length
260
+ end
261
+
262
+ expect nil do
263
+ [][1]
264
+ end
265
+
266
+ expect NoMethodError do
267
+ 1.hoge
268
+ end
269
+
270
+ expect 2.0999..2.1001 do
271
+ 1.1 + 1.0
197
272
  end
198
273
 
274
+ expect S do
275
+ S.new(1)
276
+ end
277
+
278
+ expect "#<struct S a=1>" do
279
+ S.new(1).inspect
280
+ end
281
+
282
+ end
283
+
199
284
 
200
285
  License
201
286
  =======
data/Rakefile CHANGED
@@ -31,47 +31,13 @@ end
31
31
 
32
32
  task :default => :test
33
33
 
34
- ## test data file dependency
35
- basetestfiles = []
36
- copy = lambda do |t|
37
- cp t.prerequisites.first, t.name
38
- end
39
-
40
- # DO NOT EDIT!! EDITABLE
41
- [ ["test/data/rspec_poetry-input.rb", "test/data/rspec-input.rb"],
42
- ["test/data/unit_test_poetry-input.rb", "test/data/unit_test-input.rb"],
43
- ["test/data/completion_emacs-input.rb", "test/data/completion-input.rb"],
44
- ["test/data/unit_test_detect_rbtest-input.rb", "test/data/unit_test-input.rb"],
45
- ["test/data/unit_test_detect_rbtest-output.rb", "test/data/unit_test-output.rb"],
46
- ["test/data/unit_test_detect_rbtest2-input.rb", "test/data/unit_test_rbtest-input.rb"],
47
- ["test/data/unit_test_detect_rbtest2-output.rb", "test/data/unit_test_rbtest-output.rb"],
48
- ["test/data/completion_detect_rbtest-input.rb", "test/data/completion_rbtest-input.rb"],
49
- ["test/data/completion_detect_rbtest-output.rb", "test/data/completion_rbtest-output.rb"],
50
- ["test/data/completion_detect_rbtest2-input.rb", "test/data/completion-input.rb"],
51
- ["test/data/completion_detect_rbtest2-output.rb", "test/data/completion-output.rb"],
52
- ["test/data/doc_detect_rbtest-input.rb", "test/data/doc-input.rb"],
53
- ["test/data/doc_detect_rbtest-output.rb", "test/data/doc-output.rb"],
54
- ["test/data/doc_detect_rbtest2-input.rb", "test/data/doc_rbtest-input.rb"],
55
- ["test/data/doc_detect_rbtest2-output.rb", "test/data/doc_rbtest-output.rb"],
56
-
57
- ].each do |outfile, infile|
58
- basetestfiles << outfile
59
- file(outfile => infile, &copy)
60
- end
61
- for test in %w[refe ri ri_emacs ri_vim]
62
- outfile = "test/data/#{test}-input.rb"
63
- basetestfiles << outfile
64
- file(outfile => "test/data/doc-input.rb", &copy)
65
- end
66
- task :base_update => basetestfiles
67
- task :test => :base_update
68
- task :rcov => :base_update
69
34
 
70
35
  #{{{ Package tasks
71
36
  PKG_FILES = FileList[
72
37
  "bin/rct-complete", "bin/rct-doc", "bin/xmpfilter", "bin/rct-meth-args",
73
38
  "lib/**/*.rb",
74
- "CHANGES", "rcodetools.*", "icicles-rcodetools.el", "README", "README.*", "THANKS",
39
+ "CHANGES", "rcodetools.*", "icicles-rcodetools.el", "anything-rcodetools.el",
40
+ "README", "README.*", "THANKS",
75
41
  "Rakefile", "Rakefile.method_analysis",
76
42
  "setup.rb",
77
43
  "test/**/*.rb",
@@ -126,7 +92,7 @@ EOF
126
92
 
127
93
  end
128
94
 
129
- task :gem => [:test]
95
+ task :gem #=> [:test]
130
96
  Rake::GemPackageTask.new(Spec) do |p|
131
97
  #p.need_tar = true
132
98
  end
@@ -0,0 +1,142 @@
1
+ ;;; anything-rcodetools.el --- accurate Ruby method completion with anything
2
+ ;; $Id: anything-rcodetools.el,v 1.6 2008/01/14 17:59:34 rubikitch Exp $
3
+
4
+ ;;; Copyright (c) 2007 rubikitch
5
+
6
+ ;; Author: rubikitch <rubikitch@ruby-lang.org>
7
+ ;; URL: http://www.emacswiki.org/cgi-bin/wiki/download/anything-rcodetools.el
8
+
9
+ ;;; Use and distribution subject to the terms of the Ruby license.
10
+
11
+ ;;; Commentary:
12
+
13
+ ;; (0) You need rcodetools, anything.el and FastRI. Note that you do not have to
14
+ ;; configure anything.el if you use anything.el for this package.
15
+ ;; (1) You need to add to .emacs:
16
+ ;; (require 'anything)
17
+ ;; (require 'anything-rcodetools)
18
+ ;; ;; Command to get all RI entries.
19
+ ;; (setq rct-get-all-methods-command "PAGER=cat fri -l")
20
+ ;; ;; See docs
21
+ ;; (define-key anything-map "\C-z" 'anything-execute-persistent-action)
22
+
23
+ ;;; History:
24
+
25
+ ;; $Log: anything-rcodetools.el,v $
26
+ ;; Revision 1.6 2008/01/14 17:59:34 rubikitch
27
+ ;; * uniform format (anything-c-source-complete-ruby, anything-c-source-complete-ruby-all)
28
+ ;; * rename command: anything-c-ri -> anything-rct-ri
29
+ ;;
30
+ ;; Revision 1.5 2008/01/13 17:54:04 rubikitch
31
+ ;; anything-current-buffer advice.
32
+ ;;
33
+ ;; Revision 1.4 2008/01/08 14:47:34 rubikitch
34
+ ;; Added (require 'rcodetools).
35
+ ;; Revised commentary.
36
+ ;;
37
+ ;; Revision 1.3 2008/01/04 09:32:29 rubikitch
38
+ ;; *** empty log message ***
39
+ ;;
40
+ ;; Revision 1.2 2008/01/04 09:21:23 rubikitch
41
+ ;; fixed typo
42
+ ;;
43
+ ;; Revision 1.1 2008/01/04 09:21:05 rubikitch
44
+ ;; Initial revision
45
+ ;;
46
+
47
+ ;;; Code:
48
+
49
+ (require 'rcodetools)
50
+
51
+ ;;;; Compatibility code
52
+ (unless (fboundp 'anything-execute-persistent-action)
53
+ (defun anything-execute-persistent-action ()
54
+ "If a candidate was selected then perform the associated action without quitting anything."
55
+ (interactive)
56
+ (save-selected-window
57
+ (select-window (get-buffer-window anything-buffer))
58
+ (select-window (setq minibuffer-scroll-window
59
+ (if (one-window-p t) (split-window) (next-window (selected-window) 1))))
60
+ (let* ((anything-window (get-buffer-window anything-buffer))
61
+ (selection (if anything-saved-sources
62
+ ;; the action list is shown
63
+ anything-saved-selection
64
+ (anything-get-selection)))
65
+ (default-action (anything-get-action))
66
+ (action (assoc-default 'persistent-action (anything-get-current-source))))
67
+ (setq action (or action default-action))
68
+ (if (and (listp action)
69
+ (not (functionp action))) ; lambda
70
+ ;; select the default action
71
+ (setq action (cdar action)))
72
+ (set-window-dedicated-p anything-window t)
73
+ (unwind-protect
74
+ (and action selection (funcall action selection))
75
+ (set-window-dedicated-p anything-window nil))))))
76
+
77
+ (unless (boundp 'anything-current-buffer)
78
+ (defvar anything-current-buffer nil)
79
+ (defadvice anything (before get-current-buffer activate)
80
+ (setq anything-current-buffer (current-buffer))))
81
+
82
+ ;;;; Main code
83
+ (defun anything-rct-ri (pair)
84
+ (ri (substring (cadr (split-string pair "\t")) 1 -1)))
85
+
86
+ (defun anything-rct-complete (pair)
87
+ (save-excursion
88
+ (set-buffer anything-current-buffer)
89
+ (search-backward pattern)
90
+ (delete-char (length pattern)))
91
+ (insert (car (split-string pair "\t"))))
92
+
93
+ (setq rct-complete-symbol-function 'rct-complete-symbol--anything)
94
+ (defvar anything-c-source-complete-ruby
95
+ '((name . "Ruby Method Completion")
96
+ (candidates . rct-method-completion-table)
97
+ (init
98
+ . (lambda ()
99
+ (condition-case x
100
+ (rct-exec-and-eval rct-complete-command-name "--completion-emacs-icicles")
101
+ ((error) (setq rct-method-completion-table nil)))))
102
+ (action
103
+ ("Completion" . anything-rct-complete)
104
+ ("RI" . anything-rct-ri))
105
+ (volatile)
106
+ (persistent-action . anything-rct-ri)))
107
+
108
+ (defvar rct-get-all-methods-command "PAGER=cat fri -l")
109
+ (defun rct-get-all-methods ()
110
+ (interactive)
111
+ (setq rct-all-methods
112
+ (mapcar (lambda (fullname)
113
+ (replace-regexp-in-string "^.+[:#.]\\([^:#.]+\\)$"
114
+ "\\1\t[\\&]" fullname))
115
+ (split-string (shell-command-to-string rct-get-all-methods-command) "\n"))))
116
+
117
+ (defvar rct-all-methods (rct-get-all-methods))
118
+ (defvar anything-c-source-complete-ruby-all
119
+ '((name . "Ruby Method Completion (ALL)")
120
+ (candidates
121
+ . (lambda ()
122
+ (let ((case-fold-search nil)
123
+ (re (format "[:#.]%s" (with-current-buffer anything-current-buffer
124
+ (symbol-at-point)))))
125
+ (remove-if-not
126
+ (lambda (meth) (string-match re meth))
127
+ rct-all-methods))))
128
+ (action
129
+ ("Completion" . anything-rct-complete)
130
+ ("RI" . anything-rct-ri))
131
+ (persistent-action . anything-rct-ri)))
132
+
133
+ (defun rct-complete-symbol--anything ()
134
+ (interactive)
135
+ (let ((anything-sources (list anything-c-source-complete-ruby anything-c-source-complete-ruby-all)))
136
+ (anything)))
137
+
138
+ (provide 'anything-rcodetools)
139
+
140
+ ;; How to save (DO NOT REMOVE!!)
141
+ ;; (emacswiki-post "anything-rcodetools.el")
142
+ ;;; install-elisp.el ends here