rcodetools 0.4.0.0 → 0.4.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ rcodetools history
2
+ ==================
3
+ User-visible changes since 0.4.0
4
+ * rct-meth-args: implemented -I
5
+ * many bug fixes
1
6
 
2
7
  xmpfilter was integrated into rcodetools as of 0.4.0.
3
8
 
data/README CHANGED
@@ -28,6 +28,7 @@ stdout. They can run in several modes; see
28
28
  xmpfilter -h
29
29
  rct-complete -h
30
30
  rct-doc -h
31
+ rct-meth-args -h
31
32
  README.emacs and README.vim describe how to use rcodetools from your editor.
32
33
 
33
34
  = License
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
1
 
2
2
  PKG_REVISION = ".0"
3
- RCT_VERSION = "0.4.0"
4
3
 
5
4
  $:.unshift "lib" if File.directory? "lib"
5
+ require 'rcodetools/xmpfilter'
6
6
  require 'rake/testtask'
7
7
 
8
+ RCT_VERSION = XMPFilter::VERSION
9
+
8
10
  desc "Run the unit tests in pure-Ruby mode ."
9
11
  Rake::TestTask.new(:test) do |t|
10
12
  t.libs << "ext/rcovrt"
@@ -120,4 +122,9 @@ rescue LoadError
120
122
  # RubyGems not installed
121
123
  end
122
124
 
125
+ desc "install by setup.rb"
126
+ task :install do
127
+ sh "sudo ruby setup.rb install"
128
+ end
129
+
123
130
  # vim: set sw=2 ft=ruby:
@@ -24,7 +24,7 @@ task :analyze do
24
24
  end
25
25
 
26
26
  file "TAGS" => FileList["lib/rt/*.rb"] do
27
- sh "method_args.rb -t lib/rt/*.rb > TAGS"
27
+ sh "rct-meth-args -t lib/rt/*.rb > TAGS"
28
28
  end
29
29
 
30
30
 
data/bin/rct-meth-args CHANGED
@@ -9,22 +9,24 @@
9
9
  $VERBOSE = nil
10
10
  $__method_args_off = true
11
11
 
12
- if ARGV.empty?
12
+ if ARGV.empty? or ARGV.include? '-h' or ARGV.include? '--help'
13
13
  puts <<EOF
14
- rct-meth-args [-i] [-m] [-c] [-n] <file> [<file> ...]
14
+ rct-meth-args [-Idirectory] [-i] [-m] [-c] [-n] <file> [<file> ...]
15
15
 
16
- -i omit instance methods defined in classes
17
- -m omit instance methods defined in modules
18
- -c omit class methods
16
+ -Idirectory specify $LOAD_PATH directory (same as ruby)
19
17
 
20
- -n print the filename and line number with output lines
21
- -t generate TAGS output
18
+ -i omit instance methods defined in classes
19
+ -m omit instance methods defined in modules
20
+ -c omit class methods
21
+
22
+ -n print the filename and line number with output lines
23
+ -t generate TAGS output
22
24
 
23
25
  The given files will be #require()d in order.
24
26
  Examples:
25
- ruby method_args.rb complex
26
- ruby method_args.rb thread
27
- ruby method_args.rb -c rubygems
27
+ rct-meth-args complex
28
+ rct-meth-args thread
29
+ rct-meth-args -c rubygems
28
30
  EOF
29
31
  exit
30
32
  end
@@ -246,13 +248,22 @@ new_args = []
246
248
  omissions = {}
247
249
  $__with_location = false
248
250
  $__printer = Printer.new
251
+ i_opt_p = false
249
252
 
250
253
  ARGV.each do |arg|
251
254
  case arg
252
255
  when "-n"; $__with_location = true
253
256
  when "-t"; $__printer = TagsPrinter.new; $__with_location = true
257
+ when /-I(.+)$/; $:.unshift $1
258
+ when "-I"; i_opt_p = true
254
259
  when /-./; omissions[$&] = true
255
- else new_args << arg
260
+ else
261
+ if i_opt_p
262
+ $:.unshift arg
263
+ i_opt_p = false
264
+ else
265
+ new_args << arg
266
+ end
256
267
  end
257
268
  end
258
269
 
@@ -21,7 +21,7 @@ See also `rct-interactive'."
21
21
  (insert result)) ;/function
22
22
  "rct-complete: " ;prompt
23
23
  rct-method-completion-table
24
- nil t pattern nil nil nil
24
+ nil nil pattern nil nil nil
25
25
  ((end (point)) beg
26
26
  pattern klass
27
27
  (icicle-candidate-help-fn
@@ -190,38 +190,44 @@ class XMPCompletionFilter < XMPFilter
190
190
  @prefix = expr
191
191
  case expr
192
192
  when /^\$\w+$/ # global variable
193
- __prepare_line 'global_variables'
193
+ __prepare_line 'nil', 'global_variables'
194
194
  when /^@@\w+$/ # class variable
195
- __prepare_line 'Module === self ? class_variables : self.class.class_variables'
195
+ __prepare_line 'nil', 'Module === self ? class_variables : self.class.class_variables'
196
196
  when /^@\w+$/ # instance variable
197
- __prepare_line 'instance_variables'
198
- when /^([A-Z].*)::(.*)$/ # nested constants / class methods
197
+ __prepare_line 'nil', 'instance_variables'
198
+ when /^([A-Z].*)::([^.]*)$/ # nested constants / class methods
199
199
  @prefix = $2
200
- __prepare_line "#$1.constants | #$1.methods(true)"
200
+ __prepare_line $1, "#$1.constants | #$1.methods(true)"
201
201
  when /^[A-Z]\w*$/ # normal constants
202
- __prepare_line 'Module.constants'
203
- when /^::(.+)::(.*)$/ # toplevel nested constants
202
+ __prepare_line 'nil', 'Module.constants'
203
+ when /^(.*::.+)\.(.+)$/ # toplevel class methods
204
204
  @prefix = $2
205
- __prepare_line "::#$1.constants | ::#$1.methods"
205
+ __prepare_line $1, "#$1.methods"
206
+ when /^(::.+)::(.*)$/ # toplevel nested constants
207
+ @prefix = $2
208
+ __prepare_line $1, "#$1.constants | #$1.methods"
206
209
  when /^::(.*)/ # toplevel constant
207
210
  @prefix = $1
208
- __prepare_line 'Object.constants'
211
+ __prepare_line 'nil', 'Object.constants'
209
212
  when /^(:[^:.]*)$/ # symbol
210
- __prepare_line 'Symbol.all_symbols.map{|s| ":" + s.id2name}'
213
+ __prepare_line 'nil', 'Symbol.all_symbols.map{|s| ":" + s.id2name}'
211
214
  when /\.([^.]*)$/ # method call
212
215
  @prefix = $1
213
- __prepare_line "(#{Regexp.last_match.pre_match}).methods(true)"
216
+ recv = Regexp.last_match.pre_match
217
+ __prepare_line recv, "(#{recv}).methods(true)"
214
218
  else # bare words
215
- __prepare_line "methods | private_methods | local_variables | self.class.constants"
219
+ __prepare_line 'self', "methods | private_methods | local_variables | self.class.constants"
216
220
  end
217
221
  end
218
222
 
219
- def __prepare_line(all_completion_expr)
223
+ def __prepare_line(recv, all_completion_expr)
220
224
  v = "#{VAR}"
221
225
  idx = 1
222
226
  oneline_ize(<<EOC)
223
227
  #{v} = (#{all_completion_expr}).grep(/^#{Regexp.quote(@prefix)}/)
224
- $stderr.puts("#{MARKER}[#{idx}] => " + #{v}.class.to_s + " " + #{v}.join(" ")) || #{v}
228
+ #{v}2 = (#{recv})
229
+ #{v}2 = Module === #{v}2 ? #{v}2 : #{v}2.class
230
+ $stderr.puts("#{MARKER}[#{idx}] => " + #{v}2.to_s + " " + #{v}.join(" ")) || #{v}
225
231
  exit
226
232
  EOC
227
233
  end
@@ -72,6 +72,10 @@ $stderr.print("#{MARKER}[#{idx}] => " + #{v}.class.to_s + " ")
72
72
  if #{ancestor_class}
73
73
  $stderr.puts(#{ancestor_class}.to_s + #{flag} + '#{meth}')
74
74
  else
75
+ if '#{meth}' == 'new' and #{v}.private_method_defined?(:initialize)
76
+ $stderr.puts(#{v}.to_s + #{flag} + '#{meth}'); exit
77
+ end
78
+
75
79
  [Kernel, Module, Class].each do |k|
76
80
  if (k.instance_methods(false) + k.private_instance_methods(false)).include? '#{meth}'
77
81
  $stderr.printf("%s#%s\\n", k, '#{meth}'); exit
@@ -4,7 +4,7 @@
4
4
  # Use and distribution subject to the terms of the Ruby license.
5
5
 
6
6
  class XMPFilter
7
- VERSION = "0.4.0"
7
+ VERSION = "0.4.1"
8
8
 
9
9
  MARKER = "!XMP#{Time.new.to_i}_#{Process.pid}_#{rand(1000000)}!"
10
10
  XMP_RE = Regexp.new("^" + Regexp.escape(MARKER) + '\[([0-9]+)\] (=>|~>|==>) (.*)')
@@ -110,8 +110,9 @@ end || #{v}
110
110
  def execute_tmpfile(code)
111
111
  stdin, stdout, stderr = (1..3).map do |i|
112
112
  fname = "xmpfilter.tmpfile_#{Process.pid}-#{i}.rb"
113
- at_exit { File.unlink fname }
114
- File.open(fname, "w+")
113
+ f = File.open(fname, "w+")
114
+ at_exit { f.close unless f.closed?; File.unlink fname }
115
+ f
115
116
  end
116
117
  stdin.puts code
117
118
  stdin.close
data/rcodetools.el CHANGED
@@ -77,11 +77,11 @@ See also `rct-interactive'. "
77
77
  "Function to use rct-complete-symbol.")
78
78
  ;; (setq rct-complete-symbol-function 'rct-complete-symbol--icicles)
79
79
 
80
- (defun rct-complete-symbol ()
80
+ (defun rct-complete-symbol (&optional option)
81
81
  "Perform ruby method and class completion on the text around point.
82
82
  This command only calls a function according to `rct-complete-symbol-function'.
83
83
  See also `rct-interactive', `rct-complete-symbol--normal', and `rct-complete-symbol--icicles'."
84
- (interactive)
84
+ (interactive (rct-interactive))
85
85
  (call-interactively rct-complete-symbol-function))
86
86
 
87
87
  (defun rct-complete-symbol--normal (&optional option)
@@ -1 +1 @@
1
- Array.new(3).uni
1
+ 1.div
@@ -1,5 +1,5 @@
1
1
  (progn
2
- (setq rct-method-completion-table '(("uniq") ("uniq!") ))
3
- (setq pattern "uni")
4
- (setq klass "Array")
2
+ (setq rct-method-completion-table '(("div") ("divmod") ))
3
+ (setq pattern "div")
4
+ (setq klass "Fixnum")
5
5
  )
@@ -116,6 +116,11 @@ EOC
116
116
  assert_equal(["popen"], doit('::File::pop',1))
117
117
 
118
118
  assert_equal(["popen"], doit('File.pop',1))
119
+ assert_equal(["popen"], doit('::File.pop',1))
120
+
121
+ assert_equal(["new"], doit('::File::Stat.ne',1))
122
+ assert_equal(["new"], doit('File::Stat.ne',1))
123
+
119
124
  end
120
125
 
121
126
 
@@ -464,4 +469,27 @@ EOC
464
469
  def XXtest_oneline
465
470
  assert_equal(["aaa"], doit('aaa=1; aa', 1))
466
471
  end
472
+
473
+ ################################################################
474
+
475
+ def get_class(code, lineno, column=nil, options={})
476
+ xmp = XMPCompletionFilter.new options
477
+ klass, = xmp.runtime_data_with_class(code, lineno, column).sort
478
+ klass
479
+ end
480
+
481
+ def test_class__Class
482
+ assert_equal("File", get_class("File::n", 1))
483
+ assert_equal("File", get_class("File.n", 1))
484
+ assert_equal("File::Stat", get_class("File::Stat::n", 1))
485
+ assert_equal("File::Stat", get_class("File::Stat.n", 1))
486
+
487
+ assert_equal("FileTest", get_class("FileTest.exis", 1))
488
+ assert_equal("FileTest", get_class("FileTest::exis", 1))
489
+ end
490
+
491
+ def test_class__NotClass
492
+ assert_equal("Fixnum", get_class("1.ch", 1))
493
+ assert_equal("String", get_class("'a'.siz", 1))
494
+ end
467
495
  end
data/test/test_doc.rb CHANGED
@@ -39,6 +39,25 @@ $hoge.popen
39
39
  EOC
40
40
  end
41
41
 
42
+ # not File::Stat.methods(false).include? 'new'
43
+ def test_class_method__File_Stat_new
44
+ assert_equal("File::Stat.new", doit("File::Stat.new", 1))
45
+ assert_equal("File::Stat.new", doit("File::Stat::new", 1))
46
+
47
+ assert_equal("File::Stat.new", doit("::File::Stat.new", 1))
48
+ assert_equal("File::Stat.new", doit("::File::Stat::new", 1))
49
+ end
50
+
51
+ # IO.methods(false).include? 'new'
52
+ def test_class_method__IO_new
53
+ assert_equal("IO.new", doit("IO.new", 1))
54
+ assert_equal("IO.new", doit("IO::new", 1))
55
+
56
+ assert_equal("IO.new", doit("::IO.new", 1))
57
+ assert_equal("IO.new", doit("::IO::new", 1))
58
+ end
59
+
60
+
42
61
  def test_constant__File
43
62
  assert_equal("File", doit("File", 1))
44
63
  assert_equal("File", doit("::File", 1))
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rcodetools
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.4.0.0
7
- date: 2006-12-29 00:00:00 +01:00
6
+ version: 0.4.1.0
7
+ date: 2007-01-13 00:00:00 +01:00
8
8
  summary: rcodetools is a collection of Ruby code manipulation tools
9
9
  require_paths:
10
10
  - lib