Finds all possible symbol completions of the given symbol that belong
        to this module and its dependencies.

        :arg symbol: the code symbol that needs to be completed.
        :arg attribute: one of ['dependencies', 'publics', 'members', 
          'types', 'executables'] for specifying which collections to search.
        :arg result: the possible completions collected so far in the search.

def completions(self, symbol, attribute, recursive = False):
        """Finds all possible symbol completions of the given symbol that belong
        to this module and its dependencies.

        :arg symbol: the code symbol that needs to be completed.
        :arg attribute: one of ['dependencies', 'publics', 'members', 
          'types', 'executables'] for specifying which collections to search.
        :arg result: the possible completions collected so far in the search.
        """
        possible = []
        for ekey in self.collection(attribute):
            if symbol in ekey:
                possible.append(ekey)

        #Try this out on all the dependencies as well to find all the possible
        #completions.
        if recursive:
            for depkey in self.dependencies:
                #Completions need to be fast. If the module for the parent isn't already
                #loaded, we just ignore the completions it might have.
                if depkey in self.parent.modules:
                    possible.extend(self.parent.modules[depkey].completions(symbol, attribute))
            
        return possible