Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Thompson <quornian@googlemail.com>2008-08-16 03:14:22 +0400
committerIan Thompson <quornian@googlemail.com>2008-08-16 03:14:22 +0400
commitd1d1d2b8702230138d4fddbafa63ce1e66a7ea0c (patch)
tree28921ba3040624639ec8348237dd659a47c59389 /release/scripts/textplugin_membersuggest.py
parentbda3e4f8e2cfc5de09f7fce9e37acebd9ba11415 (diff)
Improvements to the base BPyTextPlugin module:
- Added a centralized function for resolving targets (aaa.bbb.ccc) - Added documentation support for locally defined classes and methods - The time taken to parse now dictates how long to use the cache before parsing again - Other tweaks and comments and support for numeric var types The text plugin scripts have been updated to make use of these features.
Diffstat (limited to 'release/scripts/textplugin_membersuggest.py')
-rw-r--r--release/scripts/textplugin_membersuggest.py75
1 files changed, 32 insertions, 43 deletions
diff --git a/release/scripts/textplugin_membersuggest.py b/release/scripts/textplugin_membersuggest.py
index 2b261703e19..7c0de78b704 100644
--- a/release/scripts/textplugin_membersuggest.py
+++ b/release/scripts/textplugin_membersuggest.py
@@ -27,23 +27,15 @@ def main():
if get_context(txt) != CTX_NORMAL:
return
- pre = get_targets(line, c)
+ targets = get_targets(line, c)
- if len(pre) <= 1:
- return
-
- imports = get_imports(txt)
- builtins = get_builtins()
-
- # Identify the root (root.sub.sub.)
- obj = None
- if pre[0] == '':
- i = c - len('.'.join(pre)) - 1
+ if targets[0] == '': # Check if we are looking at a constant [] {} '' etc.
+ i = c - len('.'.join(targets)) - 1
if i >= 0:
if line[i] == '"' or line[i] == "'":
- obj = str
+ targets[0] = 'str'
elif line[i] == '}':
- obj = dict
+ targets[0] = 'dict'
elif line[i] == ']': # Could be array elem x[y] or list [y]
i = line.rfind('[', 0, i) - 1
while i >= 0:
@@ -54,47 +46,44 @@ def main():
break
i -= 1
if i < 0:
- obj = list
- elif imports.has_key(pre[0]):
- obj = imports[pre[0]]
- elif builtins.has_key(pre[0]):
- obj = builtins[pre[0]]
- else:
- desc = get_cached_descriptor(txt)
- if desc.vars.has_key(pre[0]):
- obj = desc.vars[pre[0]].type
+ targets[0] = 'list'
+ obj = resolve_targets(txt, targets[:-1])
if not obj:
return
- # Step through sub-attributes
- try:
- for name in pre[1:-1]:
- obj = getattr(obj, name)
- except AttributeError:
- print "Attribute not found '%s' in '%s'" % (name, '.'.join(pre))
- return
+ items = []
- try:
- attr = obj.__dict__.keys()
- except AttributeError:
- attr = dir(obj)
- else:
- if not attr:
- attr = dir(obj)
+ if isinstance(obj, VarDesc):
+ obj = obj.type
+
+ if isinstance(obj, Definition): # Locally defined
+ if hasattr(obj, 'classes'):
+ items.extend([(s, 'f') for s in obj.classes.keys()])
+ if hasattr(obj, 'defs'):
+ items.extend([(s, 'f') for s in obj.defs.keys()])
+ if hasattr(obj, 'vars'):
+ items.extend([(s, 'v') for s in obj.vars.keys()])
- items = []
- for k in attr:
+ else: # Otherwise we have an imported or builtin object
try:
- v = getattr(obj, k)
- except (AttributeError, TypeError): # Some attributes are not readable
- pass
+ attr = obj.__dict__.keys()
+ except AttributeError:
+ attr = dir(obj)
else:
- items.append((k, type_char(v)))
+ if not attr: attr = dir(obj)
+
+ for k in attr:
+ try:
+ v = getattr(obj, k)
+ except (AttributeError, TypeError): # Some attributes are not readable
+ pass
+ else:
+ items.append((k, type_char(v)))
if items != []:
items.sort(cmp = suggest_cmp)
- txt.suggest(items, pre[-1])
+ txt.suggest(items, targets[-1])
# Check we are running as a script and not imported as a module
if __name__ == "__main__" and OK: