* sem-user.texi (Semantic mode, Idle Scheduler, Smart Completion)

(Smart Jump, Analyzer Debug): Copyedits.
(Semantic mode user commands): Link to new nodes.
(Speedbar, SymRef, MRU Bookmarks, Sticky Func Mode)
(Highlight Func Mode, Tag Decoration Mode): New nodes, from the
upstream Semantic manual.

* semantic.texi (Introduction): Minor fix to diagram.
This commit is contained in:
Chong Yidong 2009-12-14 04:11:43 +00:00
parent a0cefee5c1
commit 8e6874337f
3 changed files with 369 additions and 142 deletions

View file

@ -1,3 +1,14 @@
2009-12-14 Chong Yidong <cyd@stupidchicken.com>
* sem-user.texi (Semantic mode, Idle Scheduler, Smart Completion)
(Smart Jump, Analyzer Debug): Copyedits.
(Semantic mode user commands): Link to new nodes.
(Speedbar, SymRef, MRU Bookmarks, Sticky Func Mode)
(Highlight Func Mode, Tag Decoration Mode): New nodes, from the
upstream Semantic manual.
* semantic.texi (Introduction): Minor fix to diagram.
2009-12-09 Michael Albinus <michael.albinus@gmx.de>
* eshell.texi (History): Add the other built-in variables.

View file

@ -11,24 +11,31 @@
@c section entitled ``GNU Free Documentation License''.
You can begin using @semantic{} by enabling Semantic mode, a global
minor mode: type @kbd{M-x semantic-mode}, or click on the @samp{Source
Code Parsers (Semantic)} menu item in the @samp{Tools} menu.
minor mode: type @kbd{M-x semantic-mode}, or open the @samp{Tools}
menu and click on the menu item named @samp{Source Code Parsers
(Semantic)}. @xref{Semantic mode}.
When Semantic mode is turned on, Emacs automatically parses each file
you visit. This allows you to use @semantic{} user commands in those
buffers. It also enables a number of ``helper'' minor modes for
saving tags, displaying tag information, and so forth. @xref{Semantic
mode}.
you visit. You can then use @semantic{} user commands in those
buffers (@pxref{Semantic mode user commands}). You can also choose to
enable a number of ``helper'' minor modes for saving tags, displaying
tag information, and so forth.
To enable Semantic mode each time you start Emacs, add the line
@code{(semantic-mode 1)} to your initialization file. @xref{Init
File,,,emacs,Emacs manual}.
@menu
* Semantic mode:: Global minor mode for @semantic{}.
* SemanticDB:: Caching parsed buffers between sessions.
* Idle Scheduler:: Performing @semantic{} operations when idle.
* Analyzer:: Semantic tools for analyzing code.
* Semantic mode:: Global minor mode for @semantic{}.
* SemanticDB:: Caching parsed buffers between sessions.
* Idle Scheduler:: @semantic{} actions that occur when idle.
* Analyzer:: Semantic tools for analyzing code.
* Speedbar:: Using @semantic{} with the Speedbar.
* SymRef:: Interface to symbol reference tools.
* MRU Bookmarks:: Managing tag ``bookmarks''.
* Sticky Func Mode:: Showing declarations in the header line.
* Highlight Func Mode:: Highlight the current function declaration.
* Tag Decoration Mode:: Minor mode to decorate tags.
@end menu
@node Semantic mode
@ -38,8 +45,9 @@ File,,,emacs,Emacs manual}.
Semantic mode is a global minor mode for @semantic{} as a whole. When
enabled, each file you visit is automatically parsed, provided its
major mode is specified in the variable
@code{semantic-new-buffer-setup-functions} (the default is to parse
every buffer @semantic{} knows how to parse).
@code{semantic-new-buffer-setup-functions} (the default value of this
variable sets up parsing for all the parsers included with Emacs, but
you may add to it if you install additional parsers).
In each parser-enabled buffer, a number of @semantic{} commands are
available for navigating, querying, and editing source code.
@ -48,14 +56,13 @@ installs a @samp{Development} menu on the menu-bar, with many of these
commands.
In addition, enabling Semantic mode turns on certain auxiliary global
minor modes, as specified by the variable
@code{semantic-default-submodes}. The default auxiliary modes are
SemanticDB mode (@pxref{SemanticDB}) and Global Semantic Idle
Scheduler mode (@pxref{Idle Scheduler}). You can also toggle the
auxiliary minor modes separately, using their mode functions
(e.g. @kbd{M-x semanticdb-minor-mode}), or via the @samp{Development}
menu. These auxiliary minor modes are described in the following
sections.
minor modes. The variable @code{semantic-default-submodes} determines
which auxiliary modes are enabled; the defaults are SemanticDB mode
(@pxref{SemanticDB}) and Global Semantic Idle Scheduler mode
(@pxref{Idle Scheduler}). You can also toggle the auxiliary minor
modes separately, using their mode functions (e.g. @kbd{M-x
semanticdb-minor-mode}), or via the @samp{Development} menu. The
various auxiliary minor modes are described in the following sections.
@defvar semantic-new-buffer-setup-functions
The value of this variable is an alist of functions to call for
@ -78,14 +85,14 @@ auxiliary minor modes to enable when enabling Semantic mode. The
valid mode symbols are:
@itemize
@item @code{semantic-idle-scheduler-mode} (@pxref{Idle Scheduler}).
@item @code{semanticdb-minor-mode} (@pxref{SemanticDB}).
@item @code{semantic-idle-summary-mode} (@pxref{Idle Summary Mode}).
@item @code{semantic-idle-completions-mode} (@pxref{Idle Completions Mode}).
@item @code{semantic-highlight-func-mode}
@item @code{semantic-decoration-mode}
@item @code{semantic-stickyfunc-mode}
@item @code{semantic-mru-bookmark-mode}
@item @code{global-semantic-idle-scheduler-mode} (@pxref{Idle Scheduler}).
@item @code{global-semanticdb-minor-mode} (@pxref{SemanticDB}).
@item @code{global-semantic-idle-summary-mode} (@pxref{Idle Summary Mode}).
@item @code{global-semantic-idle-completions-mode} (@pxref{Idle Completions Mode}).
@item @code{global-semantic-highlight-func-mode} (@pxref{Highlight Func Mode}).
@item @code{global-semantic-decoration-mode} (@pxref{Tag Decoration Mode}).
@item @code{global-semantic-stickyfunc-mode} (@pxref{Sticky Func Mode}).
@item @code{global-semantic-mru-bookmark-mode} (@pxref{MRU Bookmarks}).
@end itemize
@end defvar
@ -123,11 +130,13 @@ Display a list of the possible completions of the current tag
@item C-c , g
Prompt for a tag, and display a list of tags that call it
(@code{semantic-symref-symbol}).
(@code{semantic-symref-symbol}). This relies on the presence of an
external symbol reference tool. @xref{SymRef}.
@item C-c , G
Display a list of tags that call the current tag
(@code{semantic-symref}).
(@code{semantic-symref}). This relies on the presence of an external
symbol reference tool. @xref{SymRef}.
@item C-c , p
Move point to the previous tag (@code{senator-previous-tag}).
@ -226,7 +235,6 @@ want to create it.
You can change the name of the SemanticDB directory by customizing the
variable @code{semanticdb-default-save-directory}.
@anchor{semanticdb-default-save-directory}
@deffn Option semanticdb-default-save-directory
The name of the directory where SemanticDB cache files are saved. If
the value is @code{nil}, SemanticDB saves its data into a single file,
@ -234,7 +242,6 @@ in the current directory, whose filename is given by
@code{semanticdb-default-file-name}.
@end deffn
@anchor{semanticdb-default-file-name}
@deffn Option semanticdb-default-file-name
The name of a cache file in which to save SemanticDB, when
@code{semanticdb-default-save-directory} is @code{nil}.
@ -244,7 +251,6 @@ You can force SemanticDB to save the data from only certain files, or
suppress saving altogether, by customizing
@code{semanticdb-persistent-path}:
@anchor{semanticdb-persistent-path}
@deffn Option semanticdb-persistent-path
List of valid paths for SemanticDB to cache. Each element should be a
directory name (a string); then the parse data from any file in that
@ -260,7 +266,6 @@ saving directory based on the variable
The default value is @code{(always)}.
@end deffn
@anchor{semanticdb-project-predicate-functions}
@defvar semanticdb-project-predicate-functions
The value of this variable is a list of predicates for indicating that
a directory belongs to a project. This list is used when the value of
@ -273,7 +278,6 @@ variable. This allows SemanticDB to save tag caches in directories
controlled by them.
@end defvar
@anchor{semanticdb-save-database-hooks}
@deffn Option semanticdb-save-database-hooks
Abnormal hook run after a database is saved. Each function is called
with one argument, the object representing the database recently
@ -303,9 +307,9 @@ based on whether the @code{#include} directive uses the @code{""} or
the @dfn{system include path} (@pxref{Include paths}).
@menu
* Search Throttle:: Controlling how semanticdb searches occur
* Semanticdb Roots:: Specifying the root of different projects
* Include paths:: Add/Remove directories to include search paths
* Search Throttle:: Controlling how semanticdb searches occur.
* Semanticdb Roots:: Specifying the root of different projects.
* Include paths:: Specifying the directories to search.
* Semanticdb search debugging commands::
@end menu
@ -328,7 +332,6 @@ for a given major mode, like this:
'(project unloaded system recursive))
@end example
@anchor{semanticdb-find-default-throttle}
@defvar semanticdb-find-default-throttle
The default throttle for @code{semanticdb-find} routines.
The throttle controls how detailed the list of database
@ -377,7 +380,6 @@ If you use EDE for project management, it will set the project roots
automatically. @xref{Top,,,ede,EDE manual}. You can also specify
them yourself.
@anchor{semanticdb-project-roots}
@deffn Option semanticdb-project-roots
The value of this variable is a list of directories (strings) that are
project roots. All subdirectories of a project root are considered
@ -385,7 +387,6 @@ part of the same project. This variable can be overriden by
@code{semanticdb-project-root-functions}.
@end deffn
@anchor{semanticdb-project-root-functions}
@defvar semanticdb-project-root-functions
The value of this variable is a list of functions to determine a given
directory's project root. These functions are called, one at a time,
@ -406,26 +407,22 @@ subdirectories on Unix-like operating systems.
You can add and remove system include paths using the following
commands:
@anchor{semantic-add-system-include}
@deffn Command semantic-add-system-include dir &optional mode
Prompts for a directory, @var{dir}, and add it as a system include
path for the current major mode. When called non-interactively, the
major mode can be specified with the @var{mode} argument.
@end deffn
@anchor{semantic-remove-system-include}
@deffn Command semantic-remove-system-include dir &optional mode
Prompt for a directory, @var{dir}, and remove it from the system
include path for the current major mode (or @var{mode}).
@end deffn
@anchor{semantic-customize-system-include-path}
@deffn Command semantic-customize-system-include-path &optional mode
Customize the system include path for the current major mode (or
@var{mode}).
@end deffn
@anchor{semanticdb-implied-include-tags}
@defun semanticdb-implied-include-tags
Include tags implied for all files of a given mode. You can set this
variable with @code{defvar-mode-local} for a particular mode so that
@ -446,11 +443,9 @@ encountered, but could not find on disk using @kbd{M-x
semanticdb-find-adebug-lost-includes}.
@deffn Command semanticdb-dump-all-table-summary
@anchor{semanticdb-dump-all-table-summary}
Dump a list of all databases in Emacs memory.
@end deffn
@anchor{semanticdb-find-test-translate-path}
@deffn Command semanticdb-find-test-translate-path &optional arg
Call and output results of @dfn{semanticdb-find-translate-path}. In
the displayed buffer, you can type @key{SPC} to expand items. With
@ -458,7 +453,6 @@ the displayed buffer, you can type @key{SPC} to expand items. With
@end deffn
@deffn Command semanticdb-find-adebug-lost-includes
@anchor{semanticdb-find-adebug-lost-includes}
Translate the current path, then display the lost includes.
Examines the variable @code{semanticdb-find-lost-includes}.
@end deffn
@ -466,7 +460,6 @@ Examines the variable @code{semanticdb-find-lost-includes}.
Lastly, you can test an explicit search term using this command:
@deffn Command semantic-adebug-searchdb regex
@anchor{semantic-adebug-searchdb}
Search the semanticdb for @var{regex} for the current buffer.
Display the results as a debug list.
@end deffn
@ -482,7 +475,6 @@ The default is to save databases in flat files. Alternatively, you
could write a new database backend that stores tags into a database,
or other storage system.
@anchor{semanticdb-new-database-class}
@defvar semanticdb-new-database-class
The default type of database created for new files. This can be
changed on a per file basis, so that some directories are saved using
@ -498,7 +490,6 @@ for them once, which will be used over and over for tools such as
summary-mode, or the analyzer.
@deffn Command semanticdb-create-ebrowse-database dir
@anchor{semanticdb-create-ebrowse-database}
Create an @var{ebrowse} database for directory @var{dir}.
The database file is stored in ~/.semanticdb, or whichever directory
is specified by @code{semanticdb-default-system-save-directory}.
@ -508,13 +499,13 @@ is specified by @code{semanticdb-default-system-save-directory}.
@section Idle Scheduler
@cindex Idle Scheduler
The @dfn{Semantic idle scheduler} is a part of @semantic{} that
The @dfn{Semantic Idle Scheduler} is a part of @semantic{} that
performs various operations while Emacs is waiting for user input
(idle time). Its primary job is to perform buffer parsing, but it is
also used for other purposes, such as displaying information about
tags.
(idle time). Its primary job is to perform buffer parsing during idle
time. You can also use the Idle Scheduler to display function
prototypes (@pxref{Idle Summary Mode}) or symbol completions
(@pxref{Idle Completions Mode}).
@anchor{global-semantic-idle-scheduler-mode}
@deffn Command global-semantic-idle-scheduler-mode &optional arg
This command toggles Semantic Idle Scheduler mode in every
@semantic{}-enabled buffer. This minor mode ensures that the buffer
@ -525,24 +516,22 @@ Mode}) and Semantic Idle Completions mode (@pxref{Idle Completions
Mode}).
@end deffn
@anchor{semantic-idle-scheduler-idle-time}
@deffn Option semantic-idle-scheduler-idle-time
The value of this variable is the amount of idle time, in seconds,
before the Semantic idle scheduler activates. The default is 1.
@end deffn
@anchor{semantic-idle-scheduler-verbose-flag}
@deffn Option semantic-idle-scheduler-verbose-flag
If this variable is non-@code{nil}, the idle scheduler prints verbose
messages while running, which are useful for debugging.
@end deffn
@menu
* Reparsing Options:: Reparsing the current buffer in idle time
* Idle Working Options:: Options for extra work done at idle time
* Debugging Idle Time Issues:: How to produce good bug reports
* Idle Summary Mode:: Display prototype of symbol under cursor
* Idle Completions Mode:: Smart completion pop-up help
* Reparsing Options:: Reparsing the current buffer in idle time.
* Idle Working Options:: Options for extra work done at idle time.
* Debugging Idle Time Issues:: How to produce good bug reports.
* Idle Summary Mode:: Display prototype of symbol under cursor.
* Idle Completions Mode:: Smart completion pop-up help.
@end menu
@node Reparsing Options
@ -552,26 +541,22 @@ When activated during idle time, the Semantic idle scheduler
automatically reparses all buffers that need it. Any arriving user
input cancels this, returning Emacs to its normal editing behavior.
@anchor{semantic-idle-scheduler-max-buffer-size}
@deffn Option semantic-idle-scheduler-max-buffer-size
Maximum size in bytes of buffers automatically reparsed. If this
value is less than or equal to @var{0}, buffers are automatically
reparsed regardless of their size.
@end deffn
@anchor{semantic-idle-scheduler-no-working-message}
@deffn Option semantic-idle-scheduler-no-working-message
If non-@code{nil}, disable display of working messages whie reparsing.
@end deffn
@anchor{semantic-idle-scheduler-working-in-modeline-flag}
@deffn Option semantic-idle-scheduler-working-in-modeline-flag
If non-@code{nil}, show working messages in the mode line. Normally,
re-parsing shows messages in the minibuffer; this moves the parse
message to the modeline instead.
@end deffn
@anchor{semantic-before-idle-scheduler-reparse-hook}
@defvar semantic-before-idle-scheduler-reparse-hook
This normal hook is run just before the idle scheduler begins
reparsing. If any hook function throws an error, the value of this
@ -579,7 +564,6 @@ variable is reset to @code{nil}. This hook is not protected from
lexical errors.
@end defvar
@anchor{semantic-after-idle-scheduler-reparse-hook}
@defvar semantic-after-idle-scheduler-reparse-hook
This normal hook is run after the idle scheduler finishes reparsing.
@ -609,13 +593,11 @@ Because this extra work is quite time-consuming, it is only carried
out after a longer idle delay. The following features control how the
idle work is performed.
@anchor{semantic-idle-scheduler-work-idle-time}
@deffn Option semantic-idle-scheduler-work-idle-time
The value of this variable is the amount of idle time, in seconds,
before commencing idle work. The default is 60.
@end deffn
@anchor{semantic-idle-work-parse-neighboring-files-flag}
@deffn Option semantic-idle-work-parse-neighboring-files-flag
If the value of this variable is non-@code{nil}, the Semantic idle
scheduler uses idle work time to parse files in the same directory as
@ -633,12 +615,10 @@ enable @code{debug-on-error}, because the idle scheduler inhibits the
debugger. Instead, use the following commands to debug the error:
@deffn Command semantic-debug-idle-function
@anchor{semantic-debug-idle-function}
Run the Semantic idle function with debugging turned on.
@end deffn
@deffn Command semantic-debug-idle-work-function
@anchor{semantic-debug-idle-work-function}
Run the Semantic idle work function with debugging turned on.
@end deffn
@ -650,8 +630,6 @@ summary of the symbol at point, such as its function prototype, in the
echo area. Its functionality is similar to what ElDoc mode provides
for Emacs Lisp (@pxref{Lisp Doc,,,emacs,Emacs manual}).
@anchor{global-semantic-idle-summary-mode}
@anchor{semantic-idle-summary-mode}
@deffn global-semantic-idle-summary-mode &optional arg
This command toggles Semantic Idle Summary mode in all
@semantic{}-enabled buffers. You can also toggle it via the
@ -666,14 +644,12 @@ the idle time, as given by @code{semantic-idle-scheduler-idle-time}
You can override the method for getting the current tag to display by
setting @code{idle-summary-current-symbol-info}.
@anchor{semantic-idle-summary-function}
@deffn Option semantic-idle-summary-function
The value of this variable should be a function to call to display tag
information during idle time. See the variable
@code{semantic-format-tag-functions} for a list of useful functions.
@end deffn
@anchor{semantic-idle-summary-out-of-context-faces}
@defvar semantic-idle-summary-out-of-context-faces
The value of this variable is a list of font-lock faces indicating
useless summary contexts. These are generally faces used to highlight
@ -692,8 +668,6 @@ different alternatives.
Semantic Idle Completions mode performs completion based on the
Semantic Analyzer (@pxref{Analyzer}).
@anchor{global-semantic-idle-completions-mode}
@anchor{semantic-idle-completions-mode}
@deffn global-semantic-idle-completions-mode &optional arg
This command toggles Semantic Idle Completions mode in every
@semantic{}-enabled buffer. You can also toggle it via the @samp{Show
@ -743,7 +717,6 @@ Quit without completing (@code{semantic-complete-inline-quit}).
You can also exit inline completion by issuing any other Emacs
command. The completion text then disappears from the buffer.
@anchor{semantic-complete-analyze-inline-idle}
@deffn Command semantic-complete-analyze-inline-idle
This is the command for performing inline code completion. It is
called by Semantic Idle Completions mode during idle time, but you can
@ -751,7 +724,6 @@ also call it yourself. It returns immediately, leaving the buffer in
a state for inline completion.
@end deffn
@anchor{semantic-complete-inline-analyzer-idle-displayor-class}
@deffn Option semantic-complete-inline-analyzer-idle-displayor-class
The value of this variable determines how
@code{semantic-complete-analyze-inline-idle} shows its completions.
@ -789,16 +761,14 @@ and navigating through source code.
@subsection Smart Completion
The Semantic Analyzer can be used to perform code completion in a
manner that takes the local context into account.
In addition to the user commands documented in this section, the
completions performed by Semantic Idle Completions mode also uses the
Semantic Analyzer. @xref{Idle Completions Mode}.
manner that takes the local context into account. (In addition to the
user commands in this section, Semantic Idle Completions mode also
uses the Semantic Analyzer. @xref{Idle Completions Mode}.)
@deffn Command semantic-analyze-possible-completions context
This is the most basic command for Semantic Analyzer-based completion.
Called interactively, it displays in another window a list of the
possible completions for the symbol at point.
Called interactively, it displays a list of the possible completions
for the symbol at point.
When called from a Lisp program,
@code{semantic-analyze-possible-completions} does not display a
@ -818,7 +788,6 @@ Most of the other commands documented in this section call
@code{semantic-analyze-possible-completions} internally.
@end deffn
@anchor{semantic-complete-analyze-inline}
@deffn Command semantic-complete-analyze-inline
This command is bound to @kbd{C-c , @key{SPC}} when Semantic mode is
enabled (@pxref{Semantic mode user commands}). It displays a list of
@ -836,7 +805,6 @@ explicitly, whereas Semantic Idle Completions mode completes during
idle time (@pxref{Idle Completions Mode}).
@end deffn
@anchor{semantic-complete-inline-analyzer-displayor-class}
@deffn Option semantic-complete-inline-analyzer-idle-displayor-class
The value of this variable determines how
@code{semantic-complete-analyze-inline} shows its completions.
@ -860,9 +828,8 @@ In addition to @code{semantic-complete-analyze-inline}, you can use
the simpler command @code{semantic-ia-complete-symbol point}. This
behaves like the usual @kbd{M-@key{TAB}} (@code{complete-symbol})
command (@pxref{Symbol Completion,,,emacs,Emacs manual}), except it
uses Semantic Analyzer.
uses the Semantic Analyzer.
@anchor{semantic-ia-complete-symbol}
@deffn Command semantic-ia-complete-symbol point
Complete the current symbol at @var{point}.
@end deffn
@ -870,22 +837,19 @@ Complete the current symbol at @var{point}.
@node Smart Summary
@subsection Smart Summary
You can use the commands in this section to find information about the
You can use the following commands to obtain information about the
code at point:
@anchor{semantic-ia-show-summary}
@deffn Command semantic-ia-show-summary pos
Display a summary for the symbol at @var{pos}. Called interactively,
@var{pos} defaults to point.
@end deffn
@anchor{semantic-ia-show-doc}
@deffn Command semantic-ia-show-doc pos
Display the code-level documentation for the symbol at @var{pos}.
Called interactively, @var{pos} defaults to point.
@end deffn
@anchor{semantic-ia-describe-class}
@deffn Command semantic-ia-describe-class typename
Prompt for the name of a data type, @var{typename}, and display its
components. For instance, if the type in question is a class, this
@ -900,17 +864,13 @@ Summary Mode}.
@subsection Smart Jump
The Semantic Analyzer can be used to jump directly to the definition
for a code symbol. Because it is based on code analysis, its behavior
is often more accurate than than the @code{find-tag} command
(@pxref{Tags,,,emacs,Emacs manual}).
for a code symbol.
@anchor{semantic-ia-fast-jump}
@deffn Command semantic-ia-fast-jump pos
Jump to the definition for the symbol at @var{pos}. Called
interactively, @var{pos} defaults to point.
@end deffn
@anchor{semantic-ia-fast-mouse-jump}
@defun semantic-ia-fast-mouse-jump event
Jump to the definition for the symbol at the position of the mouse
event @var{event}. This command is meant to be bound to a mouse
@ -921,6 +881,10 @@ command, like this:
@end example
@end defun
These commands are often more accurate than than the @code{find-tag}
command (@pxref{Tags,,,emacs,Emacs manual}), because the Semantic
Analyzer is context-sensitive.
You can also use @kbd{C-c , j} (@code{semantic-complete-jump-local})
and @kbd{C-c , J} (@code{semantic-complete-jump}) to navigate tags.
@xref{Semantic mode user commands}. Those commands do not make use of
@ -929,15 +893,15 @@ the Semantic Analyzer.
@node Analyzer Debug
@subsection Debugging the Semantic Analyzer
In the event that the Semantic Analyzer does not analyze your code
properly, you can take steps to identify and solve the problem. This
section was written with C/C++ in mind, but should be relevant for any
typed language.
If the Semantic Analyzer does not analyze your code properly, you can
take steps to identify and solve the problem. This section was
written with C/C++ in mind, but should be relevant for any typed
language.
@subsubsection Step 1: Check the context
The first thing to do is check the current context. You can do this
with @kbd{M-x semantic-analyze-current-context}.
To check the current context, type @kbd{M-x
semantic-analyze-current-context}.
@deffn Command semantic-analyze-current-context pos
Analyze the context at @var{pos}. This function is used by most of
@ -947,10 +911,10 @@ describing the context at @var{pos} (@pxref{Top,,,eieio,EIEIO
manual}).
When called interactively, this displays a @samp{*Semantic Context
Analysis*} buffer in a separate window. This buffer contains a
summary of the context at point.
Analysis*} buffer containing a summary of the context at point.
@end deffn
@noindent
The Prefix section of the @samp{*Semantic Context Analysis*} buffer
lists the tags based on the text at point. If it shows only a simple
string, the Semantic was unable to identify what the data type was.
@ -989,21 +953,15 @@ Prefix Types: class Foo @{@}
@subsubsection Step 2 : Check your include path
Once you know what symbol can't be found, the next thing to check is
your include path. Is the header or include file that has the
definitions you need actually in the list of headers @semantic{} is
searching through? To get a basic list, you can use @kbd{M-x
semanticdb-find-test-translate-path}. @xref{Semanticdb search
debugging commands}.
Once you know the missing symbol, check your include path. The header
or include file containing the needed definition may not be in the
list of headers @semantic{} is searching through. To get a basic
list, you can use @kbd{M-x semanticdb-find-test-translate-path}.
@xref{Semanticdb search debugging commands}.
For C++, check to make sure that your project level include files are
in quotes, and not angle brackets. Items in angle brackets are system
includes.
If items should be loaded but aren't, you may need to update the
search throttle. @xref{Search Throttle}. If you see some tables that
have 0 tags in them, then you you may have an incorrectly set
throttle. For example,
If items should be loaded but aren't, or if you see some tables that
have no tags in them, then you you may have an incorrectly-set search
throttle (@pxref{Search Throttle}). For example,
@example
*#<semanticdb-table main.cpp (4 tags DIRTY)>
@ -1011,9 +969,13 @@ throttle. For example,
@end example
Here, @semantic{} found @file{foo.hh}, but there are 0 tags. This may
be because the throttle was set to not read in and parse files that
Emacs has not yet loaded in. To fix this case, visit the file, and
let @semantic{} parse and save the tags table.
be because you had set the throttle to avoid reading and parsing files
that Emacs has not visited. To fix this, visit the file and let
@semantic{} parse it.
For C++, check also that the @samp{#include} statements for your
project-level files use quotes, not angle brackets; angle brackets are
for system files.
@subsubsection Step 3: Check the local scope
@ -1080,7 +1042,7 @@ contain all the datatypes in all included header files.
The @code{dependants} slot will specify other files that depend on
this one.
@section Step 5: Check the parser
@subsubsection Step 5: Check the parser
Go to the location where your unfound tag should be. You can call
@kbd{M-x bovinate}, and see a dump of the raw tag structure. To see a
@ -1104,6 +1066,271 @@ to account for it.
Or perhaps the parser needs to be fixed.
@end enumerate
@node Speedbar
@section Speedbar
@cindex speedbar
You can integrate @semantic{} with the Speedbar.
@xref{Speedbar,,,emacs,Emacs manual}. To do this, add the following
line to your init file:
@example
(add-hook 'speedbar-load-hook (lambda () (require 'semantic/sb)))
@end example
@noindent
Or, alternatively:
@example
(require 'semantic/sb)
@end example
Once installed, the Speedbar will use @semantic{} to find and display
tags. Tags from @semantic{} are displayed with more details than
ordinary Speedbar tags, such as function arguments and return type.
In addition, you can use the Speedbar to show the output of the
Semantic Analyzer (@pxref{Analyzer}). To do this, go to the
@samp{Display} menu item on the Speedbar menu and select
@samp{Analyze}; or type @kbd{M-x semantic-speedbar-analysis}.
@deffn Command semantic-speedbar-analysis
Start the Speedbar in Semantic Analysis mode.
@end deffn
In Semantic Analysis mode, the Speedbar displays information about the
local context, such as the current function, local arguments and
variables, and details on the prefix (the current symbol). Each entry
has an @samp{<i>} button; clicking on this shows a summary of what
@semantic{} knows about that variable or type. The Speedbar also
displays a list of possible completions at point.
@node SymRef
@section Symbol References
@cindex symref
@semantic{} can interface with external @dfn{symbol reference tools},
such as GNU Global and GNU Idutils. These tools provide information
about where different tags or symbols appear.
By default, @semantic{} tries to look for the best external symbol
reference tool that can be used. The supported tools are GNU Global,
GNU Idutils, CScope, and Grep (the fallback method). For best
results, use GNU Global. However, @semantic{} does not manage your
GNU Global tables for you; you must manage them yourself.
@defvar semantic-symref-tool
The value of this variable is a symbol that determines the external
symbol reference tool to use. The default value, @code{detect}, says
to look for the best available tool. Other possible values are
@code{global}, @code{idutils}, @code{cscope}, and @code{grep}. Note
that @code{grep} is much slower than the others.
@end defvar
The commands to display symbol references are @kbd{C-c , g}
(@code{semantic-symref-symbol} and @kbd{C-c , G}
(@code{semantic-symref}). These keybindings are available whenever
Semantic mode is enabled (@pxref{Semantic mode user commands}).
@deffn Command semantic-symref-symbol sym
This command (normally bound to @kbd{C-c , g}) prompts for a symbol
name, and uses an external reference tool to find references to that
tag.
@end deffn
@deffn Command semantic-symref
This command (normally bound to @kbd{C-c , G}) uses an external
reference tool to find references to the current tag.
@end deffn
Both @code{semantic-symref-symbol} and @code{semantic-symref} display
a list of symbol references in a separate buffer. The entries are
organized by file, and by function name. Typing @key{RET} on the
@samp{[+]} next to each function name ``expands'' that entry, listing
all references to the target symbol occurring within that function.
Typing @kbd{RET} on a reference line jumps to that reference.
@node MRU Bookmarks
@section MRU Bookmarks mode
@cindex semantic-mru-bookmark-mode
Semantic MRU Bookmarks mode is a minor mode that keeps track of the
tags you have edited, allowing you to quickly return to them later
(MRU stands for ``Most Recently Used'').
@deffn Command global-semantic-mru-bookmark-mode &optional arg
Toggle Semantic MRU Bookmarks mode globally. The minor mode can be
turned on only if the current buffer was set up for parsing. With
argument @var{arg}, turn the minor mode if @var{arg} is positive, and
off otherwise.
@end deffn
Semantic MRU Bookmarks mode takes note of each tag you edit.
Afterwards, you can type @kbd{C-x B}
(@code{semantic-mrub-switch-tags}) to return to a tag. This command
prompts for a tag name, completing with the names of edited tags; at
the prompt, you can use @kbd{M-p} and @kbd{M-n} to cycle through tags
in order of last modification time.
@node Sticky Func Mode
@section Sticky Function mode
Semantic Sticky Function minor mode displays a header line that shows
the declaration line of the function or tag on the topmost line in the
text area. This allows you to keep that declaration line in view at
all times, even if it is scrolls off the ``top'' of the screen.
In addition, clicking @kbd{Mouse-1} on the header line opens a context
menu that contains menu items for copying, killing, or narrowing to
that tag.
@deffn Command global-semantic-stickyfunc-mode &optional arg
Toggle Semantic Sticky Function mode in all Semantic-enabled buffers.
With an optional argument @var{arg}, enable if @var{arg} is positive,
and disable otherwise.
@end deffn
@defvar semantic-stickyfunc-sticky-classes
The value of this variable is a list of tag classes that Semantic
Sticky Function mode makes ``sticky''. The default is
@code{'(function type)}, meaning function declarations and type
declarations. Other possible tag classes are @code{variable},
@code{include}, and @code{package}.
@end defvar
@node Highlight Func Mode
@section Highlight Func Mode
@cindex semantic-highlight-func-mode
Semantic Highlight Function minor mode highlights the declaration line
of the current function or tag (that is to say, the first line that
describes the rest of the construct).
In addition, clicking @kbd{Mouse-3} on the highlighted declaration
line opens a context menu that contains menu items for copying,
killing, or narrowing to that tag.
The tag classes highlighted by Semantic Highlight Function mode are
the same ones given by @code{semantic-stickyfunc-sticky-classes}.
@xref{Sticky Func Mode}.
@defun global-semantic-highlight-func-mode &optional arg
Toggle Semantic Highlight Function mode in all Semantic-enabled
buffers. With an optional argument @var{arg}, enable if @var{arg} is
positive, and disable otherwise.
@end defun
@deffn Face semantic-highlight-func-current-tag-face
This face is used to highlight declaration lines in Semantic Highlight
Func mode.
@end deffn
@node Tag Decoration Mode
@section Tag Decoration Mode
@cindex semantic-decoration-mode
Semantic Tag Decoration mode ``decorates'' each tag based on certain
arbitrary features of that tag. Decorations are specified using the
variable @code{semantic-decoration-styles}.
@deffn Command global-semantic-decoration-mode &optional arg
Toggle Semantic Tag Decoration mode in all Semantic-enabled buffers.
With an optional argument @var{arg}, enable if @var{arg} is positive,
and disable otherwise.
@end deffn
@defvar semantic-decoration-styles
The value of this variable is a list of decoration styles for Semantic
Tag Decoration mode. Each element in this list should have the form
@code{(@var{name} . @var{flag})}, where @var{name} is a style name (a
symbol) and @var{flag} is non-@code{nil} if the style is enabled.
The following styles are available:
@table @code
@item semantic-tag-boundary
Place an overline in front of each long tag (excluding prototypes).
@item semantic-decoration-on-private-members
Highlight class members that are designated as private.
@item semantic-decoration-on-protected-members
Highlight class members that are designated as protected.
@item semantic-decoration-on-includes
Highlight class members that are includes. Clicking on the
highlighted include statements opens a context menu for configuring
@semantic{} includes.
@end table
@end defvar
To enable or disable specific decorations, use this function:
@deffn Command semantic-toggle-decoration-style name &optional arg
Prompt for a decoration style, @var{name}, and turn it on or off.
With prefix argument @var{arg}, turn on if positive, otherwise off.
Return non-@code{nil} if the decoration style is enabled.
@end deffn
@deffn Face semantic-tag-boundary-face
Face for long tags in the @code{semantic-tag-boundary} decoration
style.
@end deffn
@deffn Face semantic-decoration-on-private-members-face
Face for privately-scoped tags in the
@code{semantic-decoration-on-private-members} decoration style.
@end deffn
@deffn Face semantic-decoration-on-protected-members-face
Face for protected tags in the
@code{semantic-decoration-on-protected-members} decoration style.
@end deffn
@deffn Face semantic-decoration-on-includes
Face for includes that are not in some other state, in the
@code{semantic-decoration-on-includes} decoration style.
@end deffn
@deffn Face semantic-decoration-on-unknown-includes
Face for includes that cannot be found, in the
@code{semantic-decoration-on-includes} decoration style.
@end deffn
@deffn Face semantic-decoration-on-unparsed-includes
Face for includes that have not yet been parsed, in the
@code{semantic-decoration-on-includes} decoration style.
@end deffn
@subsection Creating New Decoration Modes
You can create new types of decorations using the following function:
@defun define-semantic-decoration-style name doc &rest flags
Define a new decoration style with @var{name}.
@var{doc} is a documentation string describing the decoration style @var{name}.
It is appended to auto-generated doc strings.
An Optional list of @var{flags} can also be specified. Flags are:
@code{:enabled} <value> - specify the default enabled value for @var{name}.
This defines two new overload functions respectively called @code{NAME-p}
and @code{NAME-highlight}, for which you must provide a default
implementation in respectively the functions @code{NAME-p-default} and
@code{NAME-highlight-default}. Those functions are passed a tag. @code{NAME-p}
must return non-@code{nil} to indicate that the tag should be decorated by
@code{NAME-highlight}.
To put primary decorations on a tag @code{NAME-highlight}, use
functions like @dfn{semantic-set-tag-face},
@dfn{semantic-set-tag-intangible}, etc., found in the
semantic-decorate library.
To add other kind of decorations on a tag, @code{NAME-highlight} must use
@dfn{semantic-decorate-tag}, and other functions of the semantic
decoration @var{api} found in this library.
@end defun
@ignore
arch-tag: 760dca58-7119-484e-8237-866cbaf36f79
@end ignore

View file

@ -153,8 +153,8 @@ distributed along with @semantic{}.
+---------------+ | COMMON | | COMMON |<--- SPEEDBAR
Java --->| JAVA PARSER |--->| PARSE | | |
+---------------+ | TREE | | PARSE |<--- SEMANTICDB
+---------------+ | FORMAT | | API |<--- ecb
Scheme --->| SCHEME PARSER |--->| | | |
+---------------+ | FORMAT | | API |
Scheme --->| SCHEME PARSER |--->| | | |<--- ecb
+---------------+ | | | |
+---------------+ | | | |
Texinfo --->| TEXI. PARSER |--->| | | |
@ -162,15 +162,6 @@ distributed along with @semantic{}.
... ... ... ...
+---------------+ | | | |<--- app. 1
Lang. A --->| A Parser |--->| | | |
+---------------+ | | | |<--- app. 2
+---------------+ | | | |
Lang. B --->| B Parser |--->| | | |<--- app. 3
+---------------+ | | | |
... ... ... ... ...
+---------------+ | | | |
Lang. Y --->| Y Parser |--->| | | |<--- app. ?
+---------------+ | | | |
@ -231,11 +222,9 @@ time. @xref{SemanticDB}.
@chapter Semantic Internals
This chapter provides an overview of the internals of @semantic{}.
This information would not be needed by neither application developers
nor grammar developers.
It would be useful mostly for the hackers who would like to learn
more about how @semantic{} works.
This information is usually not needed by application developers or
grammar developers; it is useful mostly for the hackers who would like
to learn more about how @semantic{} works.
@menu
* Parser code :: Code used for the parsers