Expose User Script Functions in Auto Complete

I was thinking that it would be nice to allow user script packages/functions to be added to auto complete. Is this something that would have to be a custom module? I also wonder if you could write a script that could loop through a script package/file and return all of the contained function definitions and parameters?

It would be nice :slight_smile:
We’re actively working on improvements to the script editor. Autocomplete for user functions won’t make the first round of improvements, but is definitely on the list to add.

It wouldn’t really be possible through a custom module; you wouldn’t have any good place to hook in to deliver autocompletion even if you had it.

5 Likes

This isn’t too shabby for quick and dirty module inspection

Module: test

def testFunc1(a):
	x=1 	
def testFunc2(a,b):
	x=1 		
def testFunc3(a,b,c):
	x=1 	
def testFunc4(a,b,c,d):
	x=1 
code = test.getCode()
defs = code.split('def')
for definition in defs:
	print definition.split(':')[0]

Ouput

 testFunc1(a)
 testFunc2(a,b)
 testFunc3(a,b,c)
 testFunc4(a,b,c,d)

Blegh. What happens when the three letters “def” show up elsewhere? Instead, use dir() to give you all the symbols, getattr() to extract the objects, and callable() to distinguish code from variables.

Yea I suppose this sort of thing would break it

def coolMaths():
    # definitely change this later
    x =  1 / 0

If possible I think it would be very helpful if too that you autocomplete of user functions could grab the doc string of the function and display it the way the built-in’s work

def myFunct(a, b):
    """
    Show the stuff in here
    Args:
        a: int, description
        b: string, description
    Returns:
        someReturnVal
    """
    pass
2 Likes

I’m ignoring classes, methods, and the kwarg stuff for now…

from inspect import isfunction, getargspec
modObj = project.test
syms = dir(modObj)
for sym in syms:
	attr = getattr(modObj, sym)
	if isfunction(attr): 
		print "%s(%s)" % (sym, ','.join(getargspec(attr)[0]))
1 Like