def parse_package_db(pkgdb, defval=None): if isinstance(pkgdb, dict): pdb = get_value(pkgdb, 'package-db') return symbols.PackageDb(package_db=pdb) if pdb else defval if pkgdb == 'global-db': return symbols.PackageDb(global_db=True) if pkgdb == 'user-db': return symbols.PackageDb(user_db=True) return defval
def module(self, project_name, lookup='', search_type='prefix', project=None, file=None, module=None, deps=None, sandbox=None, cabal=False, symdb=None, package=None, source=False, standalone=False, **backend_args): modsyms = None if search_type == 'exact' and re.match(r'\w+(\.\w+)+', lookup): backend = self.project_backends.get(project_name) modinfo, err = backend.command_backend( 'browse -d -o ' + lookup) if backend is not None else [] if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod modules: resp =\n{0}'.format( pprint.pformat(modinfo))) if not err or 'EXCEPTION' not in ' '.join(err): moddecls = {} for mdecl in modinfo: decl = None name, declinfo = self.get_name_decl(mdecl) if declinfo.startswith('class '): ctx, args = self.split_context_args(name, declinfo[5:]) decl = symbols.Class(name, ctx, args) elif declinfo.startswith('data '): ctx, args = self.split_context_args(name, declinfo[5:]) decl = symbols.Data(name, ctx, args) elif declinfo.startswith('newtype '): ctx, args = self.split_context_args(name, declinfo[8:]) decl = symbols.Newtype(name, ctx, args) elif declinfo.startswith('type '): ctx, args = self.split_context_args(name, declinfo[5:]) decl = symbols.Type(name, ctx, args) else: # Default to function decl = symbols.Function(name, declinfo) if decl is not None: moddecls[name] = decl if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod modules: moddecls =\n{0}'.format( pprint.pformat(moddecls))) modsyms = symbols.Module(lookup, [], [], moddecls, symbols.PackageDb(global_db=True)) return self.dispatch_callbacks([modsyms] if modsyms else [], **backend_args)
def module(self, project_name, lookup='', search_type='prefix', project=None, file=None, module=None, deps=None, sandbox=None, cabal=False, symdb=None, package=None, source=False, standalone=False, **backend_args): modsyms = None if search_type == 'exact' and re.match(r'\w+(\.\w+)+', lookup): backend = self.project_backends.get(project_name) modinfo = backend.command_backend('browse -d -o ' + lookup) if backend is not None else [] if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod modules: resp =\n{0}'.format(pprint.pformat(modinfo))) impinfo = [symbols.Module(lookup)] moddecls = dict([(decl.name, decl) for decl in [self.parse_syminfo(mdecl, impinfo) for mdecl in modinfo]]) if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod modules: moddecls =\n{0}'.format(pprint.pformat(moddecls))) modsyms = symbols.Module(lookup, [], [], moddecls, symbols.PackageDb(global_db=True)) return self.dispatch_callbacks([modsyms] if modsyms else [], None, **backend_args)
def scope_modules(self, project_name, _filename, lookup='', search_type='prefix', **backend_args): def make_pkg(pkg): pkg_info = pkg.split('-', 2) pkg_name = pkg_info[0] if pkg_info: pkg_ver = pkg_info[1] else: pkg_ver = '<no version>' return symbols.Package(pkg_name, pkg_ver) backend = self.project_backends.get(project_name) modules, err = backend.command_backend( 'list -d') if backend is not None else ([], []) if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod scope_modules: resp =\n{0}'.format(modules)) if not err: filtered_mods = [ symbols.Module( mod[1], [], [], {}, symbols.InstalledLocation( make_pkg(mod[0]), symbols.PackageDb(global_db=True))) for mod in (m.split() for m in modules if self.lookup_match(m[1], lookup, search_type)) ] if Settings.COMPONENT_DEBUG.recv_messages or Settings.COMPONENT_DEBUG.all_messages: print('ghc-mod scope_modules: filtered_mods\n{0}'.format( pprint.pformat(filtered_mods))) return self.dispatch_callbacks(filtered_mods, err, **backend_args)