'Find the definition for an object within a set of source code
This is used to find the path of python-like modules
(e.g. cython and enaml) for a goto definition'

def get_definition(self, info):

    if (not info['is_python_like']):
        return
    token = info['obj']
    lines = info['lines']
    source_code = info['source_code']
    filename = info['filename']
    line_nr = None
    if (token is None):
        return
    if ('.' in token):
        token = token.split('.')[(-1)]
    line_nr = get_definition_with_regex(source_code, token, len(lines))
    if (line_nr is None):
        return
    line = info['line']
    exts = python_like_exts()
    if (not (osp.splitext(filename)[(-1)] in exts)):
        return (filename, line_nr)
    if (line.startswith('import    ') or line.startswith('from    ')):
        alt_path = osp.dirname(filename)
        source_file = python_like_mod_finder(line, alt_path=alt_path, stop_token=token)
        if ((not source_file) or (not (osp.splitext(source_file)[(-1)] in exts))):
            line_nr = get_definition_with_regex(source_code, token, line_nr)
            return (filename, line_nr)
        mod_name = osp.basename(source_file).split('.')[0]
        if ((mod_name == token) or (mod_name == '__init__')):
            return (source_file, 1)
        else:
            with open(filename, 'rb') as fid:
                code = fid.read()
            code = encoding.decode(code)[0]
            line_nr = get_definition_with_regex(code, token)
    return (filename, line_nr)
