#+TITLE: Semantic layer

#+TAGS: emacs|layer

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
- [[#key-bindings][Key bindings]]

* Description
CEDET is a *C*ollection of *E*macs *D*evelopment *E*nvironment *T*ools written
with the end goal of creating an advanced development environment in Emacs.
CEDET includes common features such as intelligent completion, source code
navigation, project management, code generation with templates. CEDET also
provides a framework for working with programming languages; support for new
programming languages can be added and use CEDET to provide IDE-like features.
This framework is called Semantic.

Semantic is a package that provides a framework for writing parsers. Parsing is
a process of analyzing source code based on programming language syntax. The
packages relies on Semantic for analyzing source code and uses its results to
perform smart code refactoring that based on code structure of the analyzed
language, instead of plain text structure. Semantic is the core of CEDET.

** Features:
- Display function or variable definition at the bottom.
- Display current function cursor is in at the top. See
  [[https://github.com/tuhdo/semantic-stickyfunc-enhance][this page]] for demos in some programming languages.
- Support common C/C++ refactoring with [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]]. See
  [[https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org][this page]] for demonstration of refactoring features.
- Support Lisp source code formatting with [[https://github.com/tuhdo/semantic-refactor][semantic-refactor]]. See
  [[https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos-elisp.org][this page]] for demonstration of Lisp formatting features.

* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =semantic= to the existing =dotspacemacs-configuration-layers= list in this
file.

* Key bindings

| Key binding | Description                              |
|-------------+------------------------------------------|
| ~SPC m r~   | srefactor: refactor thing at point.      |
| ~SPC T S~   | toggle =semantic-stickyfunc-mode=        |
| ~SPC T C-S~ | toggle =global-semantic-stickyfunc-mode= |
