Fri, 01 Jan 2016 12:13:13 +0100
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 |