rcodetools 0.4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/CHANGES +18 -0
  2. data/README +34 -0
  3. data/README.emacs +54 -0
  4. data/README.method_analysis +13 -0
  5. data/README.vim +84 -0
  6. data/README.xmpfilter +202 -0
  7. data/Rakefile +123 -0
  8. data/Rakefile.method_analysis +30 -0
  9. data/THANKS +6 -0
  10. data/bin/rct-complete +37 -0
  11. data/bin/rct-doc +50 -0
  12. data/bin/rct-meth-args +392 -0
  13. data/bin/xmpfilter +75 -0
  14. data/icicles-rcodetools.el +31 -0
  15. data/lib/method_analyzer.rb +107 -0
  16. data/lib/rcodetools/completion.rb +282 -0
  17. data/lib/rcodetools/doc.rb +176 -0
  18. data/lib/rcodetools/options.rb +83 -0
  19. data/lib/rcodetools/xmpfilter.rb +208 -0
  20. data/lib/rcodetools/xmptestunitfilter.rb +197 -0
  21. data/rcodetools.el +162 -0
  22. data/rcodetools.vim +118 -0
  23. data/setup.rb +1585 -0
  24. data/test/data/add_markers-input.rb +2 -0
  25. data/test/data/add_markers-output.rb +2 -0
  26. data/test/data/bindings-input.rb +26 -0
  27. data/test/data/bindings-output.rb +31 -0
  28. data/test/data/completion-input.rb +1 -0
  29. data/test/data/completion-output.rb +2 -0
  30. data/test/data/completion_emacs-input.rb +1 -0
  31. data/test/data/completion_emacs-output.rb +5 -0
  32. data/test/data/completion_emacs_icicles-input.rb +1 -0
  33. data/test/data/completion_emacs_icicles-output.rb +5 -0
  34. data/test/data/doc-input.rb +1 -0
  35. data/test/data/doc-output.rb +1 -0
  36. data/test/data/method_analyzer-data.rb +33 -0
  37. data/test/data/method_args.data.rb +106 -0
  38. data/test/data/no_warnings-input.rb +3 -0
  39. data/test/data/no_warnings-output.rb +4 -0
  40. data/test/data/refe-input.rb +1 -0
  41. data/test/data/refe-output.rb +1 -0
  42. data/test/data/ri-input.rb +1 -0
  43. data/test/data/ri-output.rb +1 -0
  44. data/test/data/ri_emacs-input.rb +1 -0
  45. data/test/data/ri_emacs-output.rb +1 -0
  46. data/test/data/ri_vim-input.rb +1 -0
  47. data/test/data/ri_vim-output.rb +1 -0
  48. data/test/data/rspec-input.rb +48 -0
  49. data/test/data/rspec-output.rb +52 -0
  50. data/test/data/rspec_poetry-input.rb +48 -0
  51. data/test/data/rspec_poetry-output.rb +52 -0
  52. data/test/data/simple_annotation-input.rb +8 -0
  53. data/test/data/simple_annotation-output.rb +8 -0
  54. data/test/data/unit_test-input.rb +50 -0
  55. data/test/data/unit_test-output.rb +52 -0
  56. data/test/data/unit_test_poetry-input.rb +50 -0
  57. data/test/data/unit_test_poetry-output.rb +52 -0
  58. data/test/test_completion.rb +467 -0
  59. data/test/test_doc.rb +403 -0
  60. data/test/test_functional.rb +18 -0
  61. data/test/test_method_analyzer.rb +99 -0
  62. data/test/test_method_args.rb +134 -0
  63. data/test/test_run.rb +41 -0
  64. data/test/test_xmpfilter.rb +36 -0
  65. data/test/test_xmptestunitfilter.rb +84 -0
  66. metadata +139 -0
data/CHANGES ADDED
@@ -0,0 +1,18 @@
1
+
2
+ xmpfilter was integrated into rcodetools as of 0.4.0.
3
+
4
+ xmpfilter history
5
+ =================
6
+ User-visible changes since 0.3.1 (2006-10-17)
7
+ * implemented --debug
8
+ * --[no]-warnings
9
+ * --cd working_dir
10
+ * --rails
11
+ * --no-poetry
12
+ * more intelligent assertions: try to find which local variables hold the
13
+ values compared against in assertions/expectations
14
+ * editor-independent completion (-C, --completion-emacs, --completion-vim)
15
+ * quick method/class reference with -D (--refe, --ri*)
16
+
17
+ User-visible changes since 0.3.0 (2006-10-16)
18
+ * xmpfilter.rb --spec works on win32 too
data/README ADDED
@@ -0,0 +1,34 @@
1
+
2
+ rcodetools http://eigenclass.org/hiki.rb?rcodetools
3
+ Copyright (c) 2005-2006 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
4
+ Copyright (c) 2006 rubikitch <rubikitch@ruby-lang.org> http://www.rubyist.net/~rubikitch/
5
+ Use and distribution subject to the terms of the Ruby license.
6
+
7
+ = Overview
8
+ rcodetools is a collection of Ruby code manipulation tools.
9
+ It includes xmpfilter and editor-independent Ruby development helper tools,
10
+ as well as emacs and vim interfaces.
11
+
12
+ Currently, rcodetools comprises:
13
+ * xmpfilter: Automagic Test::Unit assertions/RSpec expectations and code annotations
14
+ * rct-complete: Accurate method/class/constant etc. completions
15
+ * rct-doc: Document browsing and code navigator
16
+ * rct-meth-args: Precise method info (meta-prog. aware) and TAGS generation
17
+
18
+ See also README.xmpfilter.
19
+
20
+ Originally rct-complete and rct-doc were subcommands of xmpfilter.
21
+ Actually they use xmpfilter's code heavily.
22
+ But the relationship between xmpfilter (annotation) and completion/doc is not
23
+ intuitive, so I (rubikitch) split it into separate executables.
24
+
25
+ = Usage
26
+ xmpfilter, rct-complete and rct-doc take its input from stdin and write to
27
+ stdout. They can run in several modes; see
28
+ xmpfilter -h
29
+ rct-complete -h
30
+ rct-doc -h
31
+ README.emacs and README.vim describe how to use rcodetools from your editor.
32
+
33
+ = License
34
+ rcodetools is licensed under the same terms as Ruby.
data/README.emacs ADDED
@@ -0,0 +1,54 @@
1
+
2
+ rcodetools.el allows you to run rcodetools on a buffer.
3
+
4
+ To eval the sexp, type C-e C-x C-e; `end-of-line' and `eval-last-sexp'.
5
+
6
+ installation
7
+ ============
8
+
9
+ If you use RI document feature, you must install ri-emacs first.
10
+ http://rubyforge.org/projects/ri-emacs/
11
+
12
+ If you feel RI and ri-emacs.rb startup is SLOW, you want to install FastRI.
13
+ FastRI offers ri-emacs compatible layer, so you can use it with ri-ruby.el.
14
+ http://eigenclass.org/hiki.rb?fastri
15
+
16
+ Copy <tt>rcodetools.el</tt> to the appropriate directory, which is in load-path.
17
+ Then require it.
18
+ (require 'rcodetools)
19
+
20
+ If you use icicles copy <tt>icicles-rcodetools.el</tt> too.
21
+ Then require it.
22
+ (require 'icicles-rcodetools)
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
26
+
27
+ xmpfilter on buffer
28
+ ===================
29
+
30
+ # [EVAL IT] (describe-function 'xmp)
31
+
32
+ If you want to add => marks, call comment-dwim twice.
33
+
34
+ # [EVAL IT] (describe-function 'comment-dwim)
35
+
36
+ method/class/constant completion
37
+ ================================
38
+
39
+ # [EVAL IT] (describe-function 'rct-complete-symbol)
40
+
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!!
43
+
44
+ show RI document / jump to the definition
45
+ =========================================
46
+
47
+ # [EVAL IT] (describe-function 'rct-ri)
48
+
49
+ By default rct-ri asks for a TAGS file, which is generated by tag generator like rtags.
50
+ If there is a TAGS file, this command jumps to the definition of current method.
51
+ If use do not use this feature, evaluate:
52
+ (setq rct-find-tag-if-available nil)
53
+
54
+ # [EVAL IT] (describe-variable 'rct-find-tag-if-available)
@@ -0,0 +1,13 @@
1
+
2
+ method_analyzer.rb can be used to gather precise information about the exact
3
+ methods called in your code, allowing you to explore it better with rct-doc
4
+ (see README.emacs and README.vim for more information). This requires high
5
+ code coverage, since it can only record such data when the code is executed.
6
+
7
+ rct-meth-args can be used to generate fairly complete TAGS files. It operates
8
+ by loading the specified files and tracking method definitions; therefore, it
9
+ is meta-programming aware, unlike other implementations.
10
+
11
+ You can use them conveniently by adding the code shown in
12
+ Rakefile.method_analysis to your Rakefile.
13
+
data/README.vim ADDED
@@ -0,0 +1,84 @@
1
+
2
+ Copy rcodetools.vim to your plugin directory (typically $HOME/.vim/plugin) in
3
+ order to enable accurate code completion, quick RI execution and exact tag
4
+ jumping.
5
+
6
+ Code completion
7
+ ===============
8
+ rcodetools.vim redefines user-defined completion for Ruby programs, so you can
9
+ use the intelligent, 100%-accurate completion with <C-X><C-U> in insert mode.
10
+ Note that this runs the code to obtain the exact candidate list.
11
+
12
+ Quick RI documentation and exact tag jumping
13
+ ============================================
14
+ When you're editing a Ruby file, <C-]> will jump to the definition of the
15
+ chosen element if found in the TAGS file; otherwise, it will call RI and show
16
+ the documentation in a new window.
17
+ You can specify the RI executable to use by adding something like
18
+ let g:RCT_ri_cmd = "ri -T -f plain "
19
+ to your .vimrc. (rcodetools.vim also honors b:RCT_RI_cmd and w:RCT_RI_cmd if set).
20
+ By default, "fri -f plain " will be used. fri (FastRI) is an improved RI
21
+ documentation browser, which features more intelligent search modes, gem
22
+ integration, vastly better performance... You can find it at
23
+ http://eigenclass.org/hiki.rb?fastri and it's also available in gem format
24
+ gem install fastri
25
+
26
+ If you want to call RI for the word the cursor is on (instead of jumping to
27
+ the definition if found), you can use this binding:
28
+ <LocalLeader>r (\r by default if you haven't changed your localleader)
29
+ You can specify another binding in your .vimrc as follows:
30
+ let g:RCT_ri_binding="<C-X><C-R>" " use ^X^R to call vim on current word
31
+
32
+ Using xmpfilter
33
+ ===============
34
+ xmpfilter takes code from stdin and outputs to stdout so you can filter
35
+ your code with ! as usual.
36
+
37
+ If you use xmpfilter often, you might want to use mappings like the
38
+ following, which allow you to:
39
+ * add annotations
40
+ * expand assertions
41
+ * insert/remove # => markers
42
+
43
+
44
+
45
+ " plain annotations
46
+ map <silent> <F10> !xmpfilter -a<cr>
47
+ nmap <silent> <F10> V<F10>
48
+ imap <silent> <F10> <ESC><F10>a
49
+
50
+ " Test::Unit assertions; use -s to generate RSpec expectations instead
51
+ map <silent> <S-F10> !xmpfilter -u<cr>
52
+ nmap <silent> <S-F10> V<S-F10>
53
+ imap <silent> <S-F10> <ESC><S-F10>a
54
+
55
+ " Annotate the full buffer
56
+ " I actually prefer ggVG to %; it's a sort of poor man's visual bell
57
+ nmap <silent> <F11> mzggVG!xmpfilter -a<cr>'z
58
+ imap <silent> <F11> <ESC><F11>
59
+
60
+ " assertions
61
+ nmap <silent> <S-F11> mzggVG!xmpfilter -u<cr>'z
62
+ imap <silent> <S-F11> <ESC><S-F11>a
63
+
64
+ " Add # => markers
65
+ vmap <silent> <F12> !xmpfilter -m<cr>
66
+ nmap <silent> <F12> V<F12>
67
+ imap <silent> <F12> <ESC><F12>a
68
+
69
+ " Remove # => markers
70
+ vmap <silent> <S-F12> ms:call RemoveRubyEval()<CR>
71
+ nmap <silent> <S-F12> V<S-F12>
72
+ imap <silent> <S-F12> <ESC><S-F12>a
73
+
74
+
75
+ function! RemoveRubyEval() range
76
+ let begv = a:firstline
77
+ let endv = a:lastline
78
+ normal Hmt
79
+ set lz
80
+ execute ":" . begv . "," . endv . 's/\s*# \(=>\|!!\).*$//e'
81
+ normal 'tzt`s
82
+ set nolz
83
+ redraw
84
+ endfunction
data/README.xmpfilter ADDED
@@ -0,0 +1,202 @@
1
+
2
+ xmpfilter http://eigenclass.org/hiki.rb?xmpfilter
3
+ Copyright (c) 2005-2006 Mauricio Fernandez <mfp@acm.org> http://eigenclass.org
4
+ Use and distribution subject to the terms of the Ruby license.
5
+
6
+ Overview
7
+ ========
8
+ xmpfilter is a small tool that can be used to
9
+ * generate Test::Unit assertions and RSpec expectations semi-automatically
10
+ * annotate source code with intermediate results (a bit like irb
11
+ --simple-prompt but only for the lines explicitly marked with # =>)
12
+ Very useful for example code (such as postings to ruby-talk).
13
+
14
+ Usage
15
+ =====
16
+ xmpfilter takes its input from stdin and writes to stdout. It can run in
17
+ several modes (annotation, Test::Unit assertion expansion, RSpec expectation
18
+ generation, marker insertion); see
19
+ xmpfilter -h
20
+ README.emacs and README.vim describe how to use xmpfilter from your editor.
21
+
22
+ Example: code annotation
23
+ ========================
24
+ Just add "# =>" markers to the lines whose values you want to be shown:
25
+
26
+ a, b = "foo", "baz"
27
+ a + b # =>
28
+ a.size # =>
29
+
30
+ will be expanded to (in one keypress in a decent editor, see README.emacs and
31
+ README.vim)
32
+
33
+ a, b = "foo", "baz"
34
+ a + b # => "foobaz"
35
+ a.size # => 3
36
+
37
+ This saves much cut&pasting when you're posting to ruby-talk/ruby-core (I use
38
+ it all the time).
39
+
40
+ Example: assertion generation
41
+ =============================
42
+
43
+ xmpfilter can generate assertions based on the current behavior of the code
44
+ to be tested (iow. the current behavior is assumed to be correct and is used
45
+ to generate assertions which won't be modified by further runs of
46
+ xmpfilter), making it quite useful for regression testing.
47
+
48
+ Imagine you have a ComplexClass you want to test. You might start with
49
+
50
+ class TestComplexClass < Test::Unit::TestCase
51
+ def setup; @o = ComplexClass.new("foo", false) end
52
+ end
53
+
54
+ and then want to add some tests:
55
+
56
+ def test_insertion
57
+ @o.insert "bar"
58
+ @o.insert "baz"
59
+ # ... assertions here
60
+ end
61
+
62
+ At this point, you want to add several assertions to verify that the values
63
+ returned by @o.size, @o.last, @o.first, @o.complex_computation and @o.last(2)
64
+ are correct. You can just write the following and feed the file to
65
+ xmpfilter in -u mode (the # => markers can also be inserted by
66
+ xmpfilter, see README.vim for more information:
67
+
68
+ def test_insertion
69
+ @o.insert "bar"
70
+ @o.insert "baz"
71
+ @o.size # =>
72
+ @o.last # =>
73
+ @o.first # =>
74
+ @o.complex_computation # =>
75
+ @o.last(2) # =>
76
+ end
77
+
78
+ xmpfilter will run the test and remember what happened in each marked line,
79
+ and then rewrite the code so that it looks for instance like
80
+
81
+ def test_insertion
82
+ @o.insert "bar"
83
+ @o.insert "baz"
84
+ assert_equal(2, @o.size)
85
+ assert_equal("baz", @o.last)
86
+ assert_equal("bar", @o.first)
87
+ assert_in_delta(3.14159265358979, @o.complex_computation, 0.0001)
88
+ assert_equal(["baz", "bar"], @o.last(2))
89
+ end
90
+
91
+ As you can see, it can save some typing.
92
+
93
+ You can edit the generated assertions as you want: xmpfilter will not
94
+ modify lines without the "# =>" marker. xmpfilter can be used repeatedly as
95
+ you add more assertions. Imagine you want to verify that @o.last(3) raises an
96
+ ArgumentError. You can simply add one line marked with # => :
97
+
98
+ ...
99
+ assert_in_delta(3.14159265358979, @o.complex_computation, 0.0001)
100
+ assert_equal(["baz", "bar"], @o.last(2))
101
+ @o.last(3) # =>
102
+ end
103
+
104
+ and have it expanded by xmpfilter:
105
+
106
+ ...
107
+ assert_in_delta(3.14159265358979, @o.complex_computation, 0.0001)
108
+ assert_equal(["baz", "bar"], @o.last(2))
109
+ assert_raise(ArgumentError){ @o.last(3) }
110
+ end
111
+
112
+
113
+ Example: RSpec expectations
114
+ ===========================
115
+ Here's some code before and after filtering it with xmpfilter:
116
+
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
126
+ end
127
+
128
+ context "Testing xmpfilter's expectation expansion" do
129
+ setup do
130
+ @o = X.new
131
+ end
132
+
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
142
+
143
+ specify "Should expand should_be_nil expectations" do
144
+ @o.baz # =>
145
+ end
146
+
147
+ specify "Should expand correct expectations for complex values" do
148
+ @o.babar # =>
149
+ end
150
+
151
+ specify "Should expand should_be_close expectations" do
152
+ @o.fubar(10) # =>
153
+ end
154
+ end
155
+
156
+
157
+ after piping it to xmpfilter -s:
158
+
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
197
+ end
198
+
199
+
200
+ License
201
+ =======
202
+ xmpfilter is licensed under the same terms as Ruby.
data/Rakefile ADDED
@@ -0,0 +1,123 @@
1
+
2
+ PKG_REVISION = ".0"
3
+ RCT_VERSION = "0.4.0"
4
+
5
+ $:.unshift "lib" if File.directory? "lib"
6
+ require 'rake/testtask'
7
+
8
+ desc "Run the unit tests in pure-Ruby mode ."
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << "ext/rcovrt"
11
+ t.test_files = FileList['test/test*.rb']
12
+ t.verbose = true
13
+ end
14
+
15
+ require 'rcov/rcovtask'
16
+ desc "Run rcov."
17
+ Rcov::RcovTask.new do |t|
18
+ t.rcov_opts << "--xrefs" # comment to disable cross-references
19
+ t.test_files = FileList['test/test_*.rb'].to_a - ["test/test_functional.rb"]
20
+ t.verbose = true
21
+ end
22
+
23
+ desc "Save current coverage state for later comparisons."
24
+ Rcov::RcovTask.new(:rcovsave) do |t|
25
+ t.rcov_opts << "--save"
26
+ t.test_files = FileList['test/test_*.rb'].to_a - ["test/test_functional.rb"]
27
+ t.verbose = true
28
+ end
29
+
30
+ task :default => :test
31
+
32
+ ## test data file dependency
33
+ basetestfiles = []
34
+ copy = lambda do |t|
35
+ cp t.prerequisites.first, t.name
36
+ end
37
+
38
+ # DO NOT EDIT!! EDITABLE
39
+ [ ["test/data/rspec_poetry-input.rb", "test/data/rspec-input.rb"],
40
+ ["test/data/unit_test_poetry-input.rb", "test/data/unit_test-input.rb"],
41
+ ["test/data/completion_emacs-input.rb", "test/data/completion-input.rb"]
42
+ ].each do |outfile, infile|
43
+ basetestfiles << outfile
44
+ file(outfile => infile, &copy)
45
+ end
46
+ for test in %w[refe ri ri_emacs ri_vim]
47
+ outfile = "test/data/#{test}-input.rb"
48
+ basetestfiles << outfile
49
+ file(outfile => "test/data/doc-input.rb", &copy)
50
+ end
51
+ task :base_update => basetestfiles
52
+ task :test => :base_update
53
+ task :rcov => :base_update
54
+
55
+ #{{{ Package tasks
56
+ PKG_FILES = FileList[
57
+ "bin/rct-complete", "bin/rct-doc", "bin/xmpfilter", "bin/rct-meth-args",
58
+ "lib/**/*.rb",
59
+ "CHANGES", "rcodetools.*", "icicles-rcodetools.el", "README", "README.*", "THANKS",
60
+ "Rakefile", "Rakefile.method_analysis",
61
+ "setup.rb",
62
+ "test/**/*.rb",
63
+ ]
64
+
65
+ begin
66
+ require 'rake/gempackagetask'
67
+ Spec = Gem::Specification.new do |s|
68
+ s.name = "rcodetools"
69
+ s.version = RCT_VERSION + PKG_REVISION
70
+ s.summary = "rcodetools is a collection of Ruby code manipulation tools"
71
+ s.description = <<EOF
72
+ rcodetools is a collection of Ruby code manipulation tools.
73
+ It includes xmpfilter and editor-independent Ruby development helper tools,
74
+ as well as emacs and vim interfaces.
75
+
76
+ Currently, rcodetools comprises:
77
+ * xmpfilter: Automagic Test::Unit assertions/RSpec expectations and code annotations
78
+ * rct-complete: Accurate method/class/constant etc. completions
79
+ * rct-doc: Document browsing and code navigator
80
+ * rct-meth-args: Precise method info (meta-prog. aware) and TAGS generation
81
+ EOF
82
+ s.files = PKG_FILES.to_a
83
+ s.require_path = 'lib'
84
+ s.author = "rubikitch and Mauricio Fernandez"
85
+ s.email = %{"rubikitch" <rubikitch@ruby-lang.org>, "Mauricio Fernandez" <mfp@acm.org>}
86
+ s.homepage = "http://eigenclass.org/hiki.rb?rcodetools"
87
+ s.bindir = "bin"
88
+ s.executables = %w[rct-complete rct-doc xmpfilter rct-meth-args]
89
+ s.has_rdoc = true
90
+ s.extra_rdoc_files = %w[README]
91
+ s.rdoc_options << "--main" << "README" << "--title" << 'rcodetools'
92
+ s.test_files = Dir["test/test_*.rb"]
93
+ s.post_install_message = <<EOF
94
+
95
+ ==============================================================================
96
+
97
+ rcodetools will work better if you use it along with FastRI, an alternative to
98
+ the standard 'ri' documentation browser which features intelligent searching,
99
+ better RubyGems integration, vastly improved performance, remote queries via
100
+ DRb... You can find it at http://eigenclass.org/hiki.rb?fastri and it is also
101
+ available in RubyGems format:
102
+
103
+ gem install fastri
104
+
105
+ Read README.emacs and README.vim for information on how to integrate
106
+ rcodetools in your editor.
107
+
108
+ ==============================================================================
109
+
110
+ EOF
111
+
112
+ end
113
+
114
+ task :gem => [:test]
115
+ Rake::GemPackageTask.new(Spec) do |p|
116
+ #p.need_tar = true
117
+ end
118
+
119
+ rescue LoadError
120
+ # RubyGems not installed
121
+ end
122
+
123
+ # vim: set sw=2 ft=ruby: