3.3 Semanticdb Internals

Semanticdb complexity is certainly an issue. It is a rather hairy problem to try and solve.

semantic/db.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.

semantic/db-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.

semantic/db-el.el

Implements a special kind of system database that uses Emacs internals to perform queries.

semantic/db-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.

semantic/db-find.el

Infrastructure for searching groups Semantic databases, and dealing with the search results format.

semantic/db-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.