DebugClients/Ruby/Completer.rb

Fri, 01 Jan 2016 12:13:13 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 01 Jan 2016 12:13:13 +0100
branch
6_1_x
changeset 4632
ca310db386ed
parent 4021
195a471c327b
permissions
-rw-r--r--

Updated copyright for 2016.

0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
4632
ca310db386ed Updated copyright for 2016.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
3 # Copyright (c) 2005 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 =begin edoc
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 File implementing a command line completer class.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 =end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 # This code is mostly based on the completer found in irb of the Ruby package
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 # Original copyright
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 # by Keiju ISHITSUKA(keiju@ishitsuka.com)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 # From Original Idea of shugo@ruby-lang.org
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 #
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class Completer
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 =begin edoc
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Class implementing a command completer.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 =end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 ReservedWords = [
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 "BEGIN", "END",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 "alias", "and",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 "begin", "break",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 "case", "class",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 "def", "defined", "do",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 "else", "elsif", "end", "ensure",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 "false", "for",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 "if", "in",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 "module",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 "next", "nil", "not",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 "or",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 "redo", "rescue", "retry", "return",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 "self", "super",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 "then", "true",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 "undef", "unless", "until",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "when", "while",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 "yield",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 ]
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 def initialize(binding)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 =begin edoc
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 constructor
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param binding binding object used to determine the possible completions
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 =end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @binding = binding
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 def complete(input)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 =begin edoc
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 Public method to select the possible completions
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @param input text to be completed (String)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @return list of possible completions (Array)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 =end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 case input
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
58 when /^((["'`]).*\2)\.([^.]*)$/
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
59 # String
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
60 receiver = $1
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
61 message = $3
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
62
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
63 candidates = String.instance_methods.collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
64 select_message(receiver, message, candidates)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
65
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 when /^(\/[^\/]*\/)\.([^.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 # Regexp
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 receiver = $1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 message = Regexp.quote($2)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
71 candidates = Regexp.instance_methods.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 select_message(receiver, message, candidates)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 when /^([^\]]*\])\.([^.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 # Array
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 receiver = $1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 message = Regexp.quote($2)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
79 candidates = Array.instance_methods.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 select_message(receiver, message, candidates)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 when /^([^\}]*\})\.([^.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 # Proc or Hash
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 receiver = $1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 message = Regexp.quote($2)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
87 candidates = Proc.instance_methods.collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
88 candidates |= Hash.instance_methods.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 select_message(receiver, message, candidates)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 when /^(:[^:.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 # Symbol
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 if Symbol.respond_to?(:all_symbols)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 sym = $1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 candidates.grep(/^#{sym}/)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 else
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 when /^::([A-Z][^:\.\(]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 # Absolute Constant or class methods
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 receiver = $1
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
104 candidates = Object.constants.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
107 when /^([A-Z].*)::([^:.]*)$/
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 # Constant or class methods
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 receiver = $1
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 message = Regexp.quote($4)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 begin
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
112 candidates = eval("#{receiver}.constants.collect{|m| m.to_s}", bind)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
113 candidates |= eval("#{receiver}.methods.collect{|m| m.to_s}", bind)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 rescue Exception
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 candidates = []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 end
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
117 select_message(receiver, message, candidates, "::")
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
119 when /^(:[^:.]+)(\.|::)([^.]*)$/
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 # Symbol
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 receiver = $1
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
122 sep = $2
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
123 message = Regexp.quote($3)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
125 candidates = Symbol.instance_methods.collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
126 select_message(receiver, message, candidates, sep)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
128 when /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)(\.|::)([^.]*)$/
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 # Numeric
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 receiver = $1
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
131 sep = $5
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
132 message = Regexp.quote($6)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 begin
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
135 candidates = eval(receiver, @binding).methods.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 rescue Exception
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 candidates
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 end
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
139 select_message(receiver, message, candidates, sep)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
140
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
141 when /^(-?0x[0-9a-fA-F_]+)(\.|::)([^.]*)$/
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
142 # Numeric(0xFFFF)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
143 receiver = $1
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
144 sep = $2
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
145 message = Regexp.quote($3)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
146
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
147 begin
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
148 candidates = eval(receiver, bind).methods.collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
149 rescue Exception
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
150 candidates = []
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
151 end
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
152 select_message(receiver, message, candidates, sep)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 when /^(\$[^.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 # Global variable
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
158 when /^([^."].*)(\.|::)([^.]*)$/
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
159 # variable.func or func.func
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 receiver = $1
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
161 sep = $2
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 message = Regexp.quote($3)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
164 gv = eval("global_variables", @binding).collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
165 lv = eval("local_variables", @binding).collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
166 cv = eval("self.class.constants", @binding).collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
168 if (gv | lv | cv).include?(receiver) or \
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
169 /^[A-Z]/ =~ receiver && /\./ !~ receiver
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
170 # foo.func and foo is var. OR
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
171 # foo::func and foo is var. OR
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
172 # foo::Const and foo is var. OR
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 # Foo::Bar.func
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 begin
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
175 candidates = []
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
176 rec = eval(receiver, bind)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
177 if sep == "::" and rec.kind_of?(Module)
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
178 candidates = rec.constants.collect{|m| m.to_s}
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
179 end
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
180 candidates |= rec.methods.collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 rescue Exception
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 candidates = []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 else
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 # func1.func2
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 candidates = []
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 ObjectSpace.each_object(Module){|m|
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
188 begin
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
189 name = m.name
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
190 rescue Exception
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
191 name = ""
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
192 end
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
193 begin
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
194 next if m.name != "IRB::Context" and
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
195 /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
196 rescue Exception
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
197 next
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
198 end
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
199 candidates.concat m.instance_methods(false).collect{|x| x.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 }
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 candidates.sort!
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 candidates.uniq!
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 end
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
204 select_message(receiver, message, candidates, sep)
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 when /^\.([^.]*)$/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 # unknown(maybe String)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 receiver = ""
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 message = Regexp.quote($1)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
212 candidates = String.instance_methods(true).collect{|m| m.to_s}
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 select_message(receiver, message, candidates)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 else
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
216 candidates = eval(
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
217 "methods | private_methods | local_variables | self.class.constants",
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
218 @binding).collect{|m| m.to_s}
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
219
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 (candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 Operators = ["%", "&", "*", "**", "+", "-", "/",
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
226 "[]", "[]=", "^", "!", "!=", "!~"]
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
228 def select_message(receiver, message, candidates, sep = ".")
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 =begin edoc
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 Method used to pick completion candidates.
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @param receiver object receiving the message
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @param message message to be sent to object
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 @param candidates possible completion candidates
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
235 @param sep separater string
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 @return filtered list of candidates
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 =end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 candidates.grep(/^#{message}/).collect do |e|
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 case e
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 when /^[a-zA-Z_]/
2438
61bfcff921d8 First part of an attempt to fix the Ruby debugger backend.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
241 receiver + sep + e
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 when /^[0-9]/
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 when *Operators
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 #receiver + " " + e
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 end
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 end

eric ide

mercurial