'Create a CodeIntel manager.
"db_base_dir" (optional) specifies the base directory for
the codeintel database. If not given it will default to
\'~/.codeintel\'.
"on_scan_complete" (optional) is a callback for Citadel scan
completion. It will be passed the ScanRequest instance
as an argument.
"extra_module_dirs" (optional) is a list of extra dirs
in which to look for and use "codeintel_*.py"
support modules (and "lang_*.py" modules, DEPRECATED).
"env" (optional) is an Environment instance (or subclass).
See environment.py for details.
"db_event_reporter" (optional) is a callback that will be called
db_event_reporter(<event-desc-string>)
before "significant" long processing events in the DB. This
may be useful to forward to a status bar in a GUI.
"db_catalog_dirs" (optional) is a list of catalog dirs in
addition to the std one to use for the CatalogsZone. All
*.cix files in a catalog dir are made available.
"db_import_everything_langs" (optional) is a set of langs for which
the extra effort to support Database
`lib.hits_from_lpath()\' should be made. See class
Database for more details.'

def __init__(self, db_base_dir=None, on_scan_complete=None, extra_module_dirs=None, env=None, db_event_reporter=None, db_catalog_dirs=None, db_import_everything_langs=None):

    threading.Thread.__init__(self, name='CodeIntel    Manager')
    self.setDaemon(True)
    Queue.__init__(self)
    self.citadel = Citadel(self)
    self._registered_module_canon_paths = set()
    self.silvercity_lexer_from_lang = {}
    self.buf_class_from_lang = {}
    self.langintel_class_from_lang = {}
    self._langintel_from_lang_cache = {}
    self.import_handler_class_from_lang = {}
    self._is_citadel_from_lang = {}
    self._is_cpln_from_lang = {}
    self._hook_handlers_from_lang = defaultdict(list)
    self.env = (env or DefaultEnvironment())
    self.db = Database(self, base_dir=db_base_dir, catalog_dirs=db_catalog_dirs, event_reporter=db_event_reporter, import_everything_langs=db_import_everything_langs)
    self.lidb = langinfo.get_default_database()
    self._register_modules(extra_module_dirs)
    self.idxr = indexer.Indexer(self, on_scan_complete)
