A C/C++ minor mode powered by libclang
irony-mode
is an Emacs minor-mode that aims at improving the editing
experience for the C, C++ and Objective-C languages. It works by using a
combination of an Emacs package and a C++ program (irony-server
) that uses
libclang.
Features:
- Code completion:
- With Emacs' built-in
completion-at-point-functions
- With company-mode's backend: company-irony
- With auto-complete' source: ac-irony
- With Emacs' built-in
These dependencies will be installed automatically when using the standard installation procedure described below.
Package | Comment |
---|---|
cl-lib | Built-in since Emacs 24.3 |
YASnippet | Optional. Used only when available to provide snippets expansion of completion arguments |
irony-server
provides the libclang interface to irony-mode
.
It uses a simple protocol based on S-expression. This server, written in C++ and
requires the following packages to be installed on your system:
The recommended way to install irony-mode
and its dependencies is to use a
package manager.
-
Using MELPA
M-x package-install RET irony-mode RET
-
Using el-get
M-x el-get-install RET irony-mode RET
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'objc-mode-hook 'irony-mode)
;; replace the `completion-at-point' and `complete-symbol' bindings in
;; irony-mode's buffers by irony-mode's function
(defun my-irony-mode-hook ()
(define-key irony-mode-map [remap completion-at-point]
'irony-completion-at-point-async)
(define-key irony-mode-map [remap complete-symbol]
'irony-completion-at-point-async))
(add-hook 'irony-mode-hook 'my-irony-mode-hook)
On the first run, irony-mode
will ask you to build and install irony-server
.
To do so, type M-x irony-install-server RET
.
To tune irony-mode
, use customize
:
M-x customize-group RET irony RET
In order to provide context sensitive and accurate information, irony-mode
needs to know about the compiler flags used to parse the current buffer. The
best way to achieve this is to use a
Compilation Database.
In order to work correctly, irony-mode
needs to know the compile flags.
irony-cdb
aims to provide as automatic as possible compile flags discovery,
with minimal user input.
Type M-x irony-cdb-menu RET
to display the build configuration menu.
The menu should be self explanatory, it will let you chose amongst a list of compilation databases. It works great with the following ones:
- .clang_complete - A file at the root of your project
containing the compilation flags, one per line. This is compatible with the
with plugin Rip-Rip/clang_complete. If you want to
generate the
.clang_complete
automatically, take a look there: cc_args.py documentation.
It's slow, why?
A bug in old version of Clang (at least '3.1-8') caused the completion to fail on the standard library types. To eliminate this bug an optimisation has been disabled in the parsing of a translation unit. This result in a slower parsing.
This only affect old versions of Clang (< 3.2), it is suggested to update your libclang installation if you want to take advantage of the optimizations.
libclang.so: cannot open shared object file...
Compiling irony-server
succeed but you have the following message when you try
to run the irony-server
executable:
'irony-server: error while loading shared libraries: libclang.so: cannot open shared object file: No such file or directory
Maybe it's due to a non-standard location for your installation of libclang
. A
path such as /usr/local/lib
might not be in the path list of the dynamic
loader (see ld.so.conf).
To solve this issue you can try to build irony-server
with the following
command:
cmake -DUSE_RPATH=ON ..