def get_definition(self, info): """ 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 """ 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
def get_definition_from_file(self, filename, name, line_nr=-1): """Find the definition for an object in a filename""" with open(filename, 'rb') as fid: code = fid.read() code = encoding.decode(code)[0] return self.get_definition_with_regex(code, name, line_nr)