Included Modules

Files

Rcodetools::XMPCompletionFilter

Nearly 100% accurate completion for any editors!!

 by rubikitch <rubikitch@ruby-lang.org>

Attributes

candidates_with_description_flag[RW]
prefix[R]

String completion begins with this.

Public Class Methods

run(code, opts) click to toggle source
     # File lib/rcodetools/completion.rb, line 205
205:   def self.run(code, opts)
206:     new(opts).completion_code(code, opts[:lineno], opts[:column])
207:   end

Public Instance Methods

___prepare_line(recv, all_completion_expr) click to toggle source
     # File lib/rcodetools/completion.rb, line 273
273:   def ___prepare_line(recv, all_completion_expr)
274:     v = "#{VAR}"
275:     rcv = "#{VAR}_recv"
276:     idx = 1
277:     oneline_ize(#{rcv} = (#{recv})#{v} = (#{all_completion_expr}).map{|x| x.to_s}.grep(/^#{Regexp.quote(@prefix)}/)#{rcv} = Module === #{rcv} ? #{rcv} : #{rcv}.class$stderr.puts("#{MARKER}[#{idx}] => " + #{rcv}.to_s  + " " + #{v}.join(" ")) || #{v}exit)
278:   end
__prepare_line(recv, all_completion_expr, all_completion_expr_verbose) click to toggle source
     # File lib/rcodetools/completion.rb, line 264
264:   def __prepare_line(recv, all_completion_expr, all_completion_expr_verbose)
265:     if self.class.candidates_with_description_flag
266:       ___prepare_line(recv, all_completion_expr_verbose.gsub(/%n/, '('+all_completion_expr+')'))
267:     else
268:       ___prepare_line(recv, all_completion_expr) 
269:     end
270: 
271:   end
candidates(code, lineno, column=nil) click to toggle source
     # File lib/rcodetools/completion.rb, line 294
294:   def candidates(code, lineno, column=nil)
295:     candidates_with_class(code, lineno, column)[1]
296:   end
candidates_with_class(code, lineno, column=nil) click to toggle source
     # File lib/rcodetools/completion.rb, line 286
286:   def candidates_with_class(code, lineno, column=nil)
287:     klass, methods = runtime_data_with_class(code, lineno, column) rescue ["", ""]
288:     raise NoCandidates, "No candidates." if methods.nil? or methods.empty?
289:     [klass, methods.split(/ /).sort]
290:   end
completion_code(code, lineno, column=nil) click to toggle source

Completion code for editors.

     # File lib/rcodetools/completion.rb, line 299
299:   def completion_code(code, lineno, column=nil)
300:     candidates(code, lineno, column).join("\n") rescue "\n"
301:   end
magic_help_code(recv, meth) click to toggle source
     # File lib/rcodetools/completion.rb, line 209
209:   def magic_help_code(recv, meth)
210:     oneline_ize __magic_help_code("#{VAR}_result", recv, meth)
211:   end
methods_map_code(recv) click to toggle source
     # File lib/rcodetools/completion.rb, line 213
213:   def methods_map_code(recv)
214:     # delimiter is \0
215:     m = "#{VAR}_m"
216:     mhc = magic_help_code((recv), m)
217:     %[map{|%s| "\#{%s}\\0" + %s}] % [m, m, mhc]
218:   end
prepare_line(expr, column) click to toggle source
     # File lib/rcodetools/completion.rb, line 224
224:   def prepare_line(expr, column)
225:     set_expr_and_postfix!(expr, column){|c| /^.{#{c}}/ }
226:     @prefix = expr
227:     case expr
228:     when /^\$\w*$/              # global variable
229:       __prepare_line 'nil', 'global_variables', '%n'
230:     when /^@@\w*$/              # class variable
231:       __prepare_line 'nil', 'Module === self ? class_variables : self.class.class_variables', '%n'
232:     when /^@\w*$/               # instance variable
233:       __prepare_line 'nil', 'instance_variables', '%n'
234:     when /^([A-Z].*)::([^.]*)$/    # nested constants / class methods
235:       @prefix = $2
236:       __prepare_line $1, "#$1.constants | #$1.methods(true)",
237:       %[#$1.constants + #$1.methods(true).#{methods_map_code($1)}]
238:     when /^[A-Z]\w*$/           # normal constants
239:       __prepare_line 'nil', 'Module.constants', '%n'
240:     when /^(.*::.+)\.(.*)$/       # toplevel class methods
241:       @prefix = $2
242:       __prepare_line $1, "#$1.methods",
243:       %[%n.#{methods_map_code($1)}]
244:     when /^(::.+)::(.*)$/       # toplevel nested constants
245:       @prefix = $2
246:       __prepare_line $1, "#$1.constants | #$1.methods",
247:       %[#$1.constants + #$1.methods.#{methods_map_code($1)}]
248:     when /^::(.*)/              # toplevel constant
249:       @prefix = $1
250:       __prepare_line 'nil', 'Object.constants', '%n'
251:     when /^(:[^:.]*)$/          # symbol
252:       __prepare_line 'nil', 'Symbol.all_symbols.map{|s| ":" + s.id2name}', '%n'
253:     when /\.([^.]*)$/           # method call
254:       @prefix = $1
255:       recv = Regexp.last_match.pre_match
256:       __prepare_line recv, "(#{recv}).methods(true)",
257:       %[%n.#{methods_map_code(recv)}]
258:     else                        # bare words
259:       __prepare_line 'self', "methods | private_methods | local_variables | self.class.constants",
260:       %[(methods | private_methods).#{methods_map_code('self')} + local_variables | self.class.constants]
261:     end
262:   end
split_method_info(minfo) click to toggle source
     # File lib/rcodetools/completion.rb, line 220
220:   def split_method_info(minfo)
221:     minfo.split(/\00//,2)
222:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.