semantic: Semanticdb Internals
3.3 Semanticdb Internals
========================
Semanticdb complexity is certainly an issue. It is a rather hairy
problem to try and solve.
‘semanticdb.el’
Defines a “database” and a “table” base class. You can instantiate
these classes, and use them, but they are not persistent.
This file also provides support for ‘semanticdb-minor-mode’, which
automatically associates files with tables in databases so that
tags are _saved_ while a buffer is not in memory.
The database and tables both also provide applicable cache
information, and cache flushing system. The semanticdb search
routines use caches to save data structures that are complex to
calculate.
Lastly, it provides the concept of “project root”. It is a system
by which a file can be associated with the root of a project, so if
you have a tree of directories and source files, it can find the
root, and allow a tag-search to span all available databases in
that directory hierarchy.
‘semanticdb-file.el’
Provides a subclass of the basic table so that it can be saved to
disk. Implements all the code needed to unbind/rebind tags to a
buffer and writing them to a file.
‘semanticdb-el.el’
Implements a special kind of “system” database that uses Emacs
internals to perform queries.
‘semanticdb-ebrowse.el’
Implements a system database that uses Ebrowse to parse files into
a table that can be queried for tag names. Successful tag hits
during a find causes Semantic to pick up and parse the reference
files to get the full details.
‘semanticdb-find.el’
Infrastructure for searching groups Semantic databases, and dealing
with the search results format.
‘semanticdb-ref.el’
Tracks crossreferences. Cross references are needed when buffer is
reparsed, and must alert other tables that any dependent caches may
need to be flushed. References are in the form of include files.