forked from bartvdbraak/blender
d1d1d2b870
- 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.
95 lines
1.9 KiB
Python
95 lines
1.9 KiB
Python
#!BPY
|
|
"""
|
|
Name: 'Suggest All | Ctrl Space'
|
|
Blender: 246
|
|
Group: 'TextPlugin'
|
|
Shortcut: 'Ctrl+Space'
|
|
Tooltip: 'Performs suggestions based on the context of the cursor'
|
|
"""
|
|
|
|
# Only run if we have the required modules
|
|
try:
|
|
import bpy
|
|
from BPyTextPlugin import *
|
|
except ImportError:
|
|
OK = False
|
|
else:
|
|
OK = True
|
|
|
|
def check_membersuggest(line, c):
|
|
pos = line.rfind('.', 0, c)
|
|
if pos == -1:
|
|
return False
|
|
for s in line[pos+1:c]:
|
|
if not s.isalnum() and s != '_':
|
|
return False
|
|
return True
|
|
|
|
def check_imports(line, c):
|
|
pos = line.rfind('import ', 0, c)
|
|
if pos > -1:
|
|
for s in line[pos+7:c]:
|
|
if not s.isalnum() and s != '_':
|
|
return False
|
|
return True
|
|
pos = line.rfind('from ', 0, c)
|
|
if pos > -1:
|
|
for s in line[pos+5:c]:
|
|
if not s.isalnum() and s != '_':
|
|
return False
|
|
return True
|
|
return False
|
|
|
|
def main():
|
|
txt = bpy.data.texts.active
|
|
if not txt:
|
|
return
|
|
|
|
line, c = current_line(txt)
|
|
|
|
# Check we are in a normal context
|
|
if get_context(txt) != CTX_NORMAL:
|
|
return
|
|
|
|
# Check the character preceding the cursor and execute the corresponding script
|
|
|
|
if check_membersuggest(line, c):
|
|
import textplugin_membersuggest
|
|
textplugin_membersuggest.main()
|
|
return
|
|
|
|
elif check_imports(line, c):
|
|
import textplugin_imports
|
|
textplugin_imports.main()
|
|
return
|
|
|
|
# Otherwise we suggest globals, keywords, etc.
|
|
list = []
|
|
targets = get_targets(line, c)
|
|
desc = get_cached_descriptor(txt)
|
|
|
|
for k in KEYWORDS:
|
|
list.append((k, 'k'))
|
|
|
|
for k, v in get_builtins().items():
|
|
list.append((k, type_char(v)))
|
|
|
|
for k, v in desc.imports.items():
|
|
list.append((k, type_char(v)))
|
|
|
|
for k, v in desc.classes.items():
|
|
list.append((k, 'f'))
|
|
|
|
for k, v in desc.defs.items():
|
|
list.append((k, 'f'))
|
|
|
|
for k, v in desc.vars.items():
|
|
list.append((k, 'v'))
|
|
|
|
list.sort(cmp = suggest_cmp)
|
|
txt.suggest(list, targets[-1])
|
|
|
|
# Check we are running as a script and not imported as a module
|
|
if __name__ == "__main__" and OK:
|
|
main()
|