code: def completions(self, symbol, attribute, recursive = False):
          
          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
docs: 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.