Documentation for version 0.10
This short introduction will briefly guide you through the project setup and the user interface of Coati. The bullet point lists will tell you what to do:
Coati is an interactive source explorer that simplifies navigation in existing source code. Coati's aim is to give answers to all your questions about your source code. Coati first indexes your code and gathers data about its structure and then provides you a simple interface consisting of three interactive views, each playing a key role in getting information:
Coati currently only supports the languages C/C++ and Java. Much of the UI design is therefore based on these languages and might change as soon as other languages are supported. For more information have a look at supported languages.
Once you installed Coati successfully you are ready to run the application.
When running the full version of Coati for the first time you are greeted with the enter license window. You need to enter the license key you received via e-mail when you purchased your Coati license.
On every start of Coati you are shown the start window. It allows for creating new projects or opening existing ones.
When creating a new Coati project you will use the project setup wizard. This wizard splits the setup process into several subsequent steps.
Coati will now ask you whether you want to start indexing. Click Start and wait for the indexing to finish, which might take a little while. The Indexing Dialog and the status bar will give you information about the progress. Otherwise the UI will be empty. Coati indexes all named symbols and their relationships throughout the provided source files.
After indexing has finished, Coati will show an overview of all indexed symbols in the graph view and some statistics in the code view. If the indexing yielded errors, the code view will display them. You can see the error message by hovering an error's location.
As already mentioned Coati's user interface is split into three main views. Their arrangement can be changed however you wish, you can even detach them from the main window and put them on different screens (see Window Widgets).
The three views show information about the currently selected symbol. The search field provides the name, the graph visualization shows its relationships to other symbols and the code view displays all locations the symbol gets referenced throughout the codebase.
The search field allows for easy access to all indexed symbols. Use it to find all the classes and functions you wish to investigate. Apart from that is also holds the UI buttons for navigating back & forward as well as refreshing.
When entering a search query the autocompletion popup will provide you with a concise list of all matching symbols. Note that Coati uses a fuzzy matching algorithm, that allows you to skip characters while entering a query.
The graph visualization displays the currently selected symbol in an active state and all other symbols it shares relationships with. The visualization is made up of nodes and edges.
The different node and edge types are also displayed using different colors. The default color scheme uses this convention:
| Color | Node | Edge |
|---|---|---|
| gray | types and classes | type use |
| yellow | functions and methods | calls |
| blue | variables and fields | variable access |
Nodes displayed with a striped hatching, are nodes that were used within your indexed source files, but were not defined. Clicking them shows all locations where they are used, without providing their declaration.
The code view displays all locations of the currently active symbol within the indexed source files. It does not allow for editing the source code. Syntax highlighting is used to increase readability. Source locations that are surrounded by a box when hovered can be clicked to activate the respective symbol. Active source locations are highlighted.
The source locations are displayed as code snippets, containing the line of interest and extra lines added to the top and bottom to give information about its context. Code snippets are then bundled together into files.
Note: A file can be selected as active symbol by clicking its name in the title bar. By clicking the icons on the right hand side of the title bar, the file can switch between 3 different states:
For more information please have a look at Code View Files.
After reading this quick guide, you know the basics of Coati's user interface and you are able to start exploring your codebase. Coati will allow you to see your source code from a whole new perspective, by giving you a concise overview of its parts and a faster way of drilling down to its internals, while always maintaining the connection to the implementation details of the actual source code.
For more detailed information please have a look at the much more extensive instruction manual below.
If you have feedback for us, please don't hesitate and let us know by writing to support@coati.io, we'd be glad to hear from you.
The Coati team wishes you a good start with our product, lots of saved time, increased productivity and much cleaner code.
This document is the official documentation of Coati and explains everything you need to know about working with it.
If you have questions not answered by this document, please write us an e-mail to support@coati.io.
C support is powered by Clang 3.8. If you have a problem loading C code, please have a look at Clang language compatibility or report a bug at our bug tracker.
C++ support is powered by Clang 3.8. For more Information please visit Clang C++ Status. If you have a problem loading C++ code, please have a look at Clang language compatibility or report a bug at our bug tracker.
Coati 0.8 includes an early version of Java 8 support which is powered by JavaParser and JavaSymbolSolver. In this version Java support still has some minor issues when matching a method's call to a proper definition. If you encounter any of these issues, please let us know by providing a minimal example at our bug tracker.
Coati does two things with the data collected during indexing:
.coatidb file in the same directory as the .coatiproject file. This database file is used by Coati to serve its purpose of letting you navigate your source code. And it allows Coati to reopen the project without reindexing the source code every time.Download and open the zip file and extract its contents into a temporary folder of your choice. Run the setup.exe and go through the wizard. You can now launch Coati from your start menu.
Download and open the Coati.dmg file and drag Coati.app into the applications folder. You can now launch Coati from your Applications.
Download Coati.tar.gz file and extract it. To start Coati run the Coati.sh script. Coati creates a folder ~/.config/coati at the first run, this is the folder for Coati settings. To Install Coati run the setup/install.sh Script with sudo, it will install Coati to /opt/coati and create /usr/bin/coati symlink.
The data folder holds certain files that are used by Coati to run the program. After following the installation instructions the data folder should be located in the following locations on your platform.
| Platform | Location |
|---|---|
| Windows | C:/Users/You/AppData/Local/Coati Software/Coati (used for dynamic data and settings) install_directory/Coati Software/Coati/data (used for static app data) |
| Mac | ~/Library/Application Support/Coati |
| Linux | ~/.config/coati |
These files usually ship with your compiler. For the Visual Studio IDE the system headers can be found at:
<path_to_visual_studio>/VC/include/
If you don't use the Visual Studio IDE you can also try to find your system headers in a subdirectory of:
C:/Program Files (x86)/Windows Kits/
Run this command in your terminal:
gcc -x c++ -v -E /dev/null
You will find the header search paths your compiler uses in the output between these two lines:
#include <...> search starts here:
.
.
.
End of search list.
gcc -x c++ -v -E /dev/nullor
clang -x c++ -v -E /dev/null
You will find the header search paths your compiler uses in the output between these two lines:
#include <...> search starts here:
.
.
.
End of search list.
The current version of Coati requires Java 8 to index any Java project. To locate the required library file, please refer to the applicable description below.
The Java Runtime Library (called jvm.dll) can be found inside of your JRE install folder and looks like this:
<path_to_jre>/bin/client/jvm.dll
The Java Runtime Library (called libjvm.dylib) can be found inside of your JRE install folder. Run the following command in your terminal to find the location of your default Java installation:
/usr/libexec/java_home
This should give you a path looking like this:
/Library/Java/JavaVirtualMachines/<jdk_version>/Contents/HomeThe
"libjvm.dylib" should be available at:
/Library/Java/JavaVirtualMachines/<jdk_version>/Contents/Home/jre/lib/server/libjvm.dylib
Insert the full path to libjvm.dylib into the Java Path setting in the Preferences Window.
The Java Runtime Library (called libjvm.so) can be found inside of your JRE install folder and looks like this:
<path_to_jre>/lib/<arch>/server/libjvm.so
Coati's three views are organized into Widgets Windows, which can be freely arranged within the Main Window or detached from it. Each Widget Window has a title bar displaying its name and 2 buttons for closing the Widget Window and for detaching it from the Main Window.
The Statusbar is located on the bottom of the Main Window and is used to convey information about Coati's status and currently running processes to the user.
If indexing yielded errors the status bar will display their count on the right side.
Interactions:
On every start of Coati you are shown the start window. It allows for creating new projects or opening existing ones.
The Path List Box is a user interface element that is used within the Preferences Window and the Project Setup Wizard. It allows for entering a list of file and directory paths.
By pressing the pen icon in the bottom right corner you can open the plain text edition dialog. It allows you to edit the whole list within a text field. Each line will be one list item.
The Preferences window lets you define settings for all projects. You can open the Preferences from the menu via Edit/Preferences.
| Setting | Description |
|---|---|
| Font face | Define the font face used throughout the UI |
| Font size | Set the font size used throughout the UI. It can also be changed with the actions in the View Menu |
| Tab width | Define the space width of tabs in the code view. |
| Color scheme | Choose which color scheme Coati should display. The color schemes are located in data/color_schemes/ |
| Scroll Speed | Define a multiplyer for the default scroll speed. Values smaller than 1 slow down scrolling while values greater than 1 increase the scroll speed. |
| Logging | Ticking this box enables logging to console and to a log file. This option is disabled by default to speed up Coati. If you encounter problems while running Coati, we recommend to enable this option so you have somewhere to start looking for a cause. |
| Indexer threads | Define how many parallel threads are used during indexing. |
| Non-Fatal Errors | Enable this option if you want Coati to display non-fatal errors in files that do not get indexed by Coati. Fatal errors will be displayed regardless of their location within the project because they tend to affect the indexers coverage. |
| Coati Port | Port number that Coati uses to listen for incoming messages from plugins. |
| Plugin Port | Port number that Coati sends outgoing messages to. |
| Java Path | If you want to use Coati on Java source code, please specify a path to your Java 8 runtime library. Please keep in mind that a 32 bit Coati requires a 32 bit version of Java while a 64 bit Coati requires a 64 bit Java to be working correctly. You can either use the button below for automatic detection or add the path manually. For instructions on how to find your Java runtime path see Finding Java Runtime Library Location. |
| Global Include Paths | Set header search paths that are used for all of your projects (e.g. std headers). An option for automatic detection of these paths is available for Clang, GCC and the Visual Studio compiler. For instructions on how to add paths manually see Path List Box. For instructions on how to find the system header paths see Finding System Header Locations. |
| Global Framework Search Paths | Mac only. Define the search paths for .framework files for all of your projects. An option for automatic detection of these paths is available for Clang and GCC. For instructions on how to add paths see Path List Box. |
The Project Setup Wizard consists of a sequence of windows that let you create a new Coati project. After selecting the programming language for your project Coati offers several ways for you to provide all the required information.
This is the way to go if you just have some source files you want to index. In case you have a build instructions file, you might want to check out one of the other options for project setup described below.
Project Meta DataIn the first step you need to enter meta information about the project.
| Setting | Description |
|---|---|
| Name | The name of the project. This will also be the name of the .coatiproject file generated by Coati. |
| Location | Choose the location of the project file from the dialog. |
| Standard | Select the language standard that should be used for indexing your project. Usually the most recent language standard is preselected here. (See Language Support) |
Provide the paths that contain your project's files. Coati will index all the source and header files in the specified paths, including subdirectories.
| Setting | Description |
|---|---|
| Project Paths | Specify one or multiple locations that contain all the source and header files that should be indexed by Coati. (For instructions on how to add paths see Path List Box.) |
| Source File Extensions | Define the valid extensions for source files including the dot e.g. .cpp |
Coati needs you to specify all the include paths the indexed source and header files rely on. The include paths are those paths your project's #include directives are relative to. If your project requires additional includes to compile (e.g. Boost for C++, etc.), please specify their location here.
Additionally you can also specify Global Include Paths, which will be used by all your projects. These are usually the paths to system headers, which can also be auto detected by choosing a compiler below and pressing detect.
| Setting | Description |
|---|---|
| Include Paths | These paths are used to find the files specified by #include directives. (For instructions on how to add paths see Path List Box.) |
| Lazy Include Search | When checked Coati also looks for included files within the project paths and all their subdirectories. Use this option if you are not familiar with the project to save yourself from figuring the projects include paths. Warning: When activated indexing speed is slower. |
| Global Include Paths | These Header Search Paths will be used in all your projects. (For instructions on how to add paths see Path List Box. For instructions on how to find the system header paths see Finding System Header Locations) |
Coati needs you to specify the locations of .framework files, your indexed source and header files rely on.
Additionally you can also specify Global Framework Search Paths, which will be used by all your projects. They can also be auto detected by choosing a compiler below and pressing detect.
| Setting | Description |
|---|---|
| Framework Search Paths | These paths are used to find .framework files used by your project. (For instructions on how to add paths see Path List Box.) |
| Global Framework Search Paths | These Framework Search Paths will be used in all your projects. (For instructions on how to add paths see Path List Box. For instructions on how to find the system header paths see Finding System Header Locations) |
If you already have a Visual Studio solution file, this is the way to go. Just select the solution file in the file picker and Coati will automatically analyze it to prepopulate the New Project Summary Window (this may take a second or two).
If you are using CMake you can export compile commands by defining the CMAKE_EXPORT_COMPILE_COMMANDS flag and then use the exportet .json file for Coati project setup.
For non-CMake projects you can use Bear. Bear generates a .json file during the simulated build process. Bear has been tested on FreeBSD, GNU/Linux and OS X.
In the first step you need to enter meta information about the project and define the compilation database.
| Setting | Description |
|---|---|
| Name | The name of the project. This will also be the name of the .coatiproject file generated by Coati. |
| Location | Choose the location of the project file from the dialog. |
| Compilation Database | Select the compilation database .json for the project. Coati will index the project based on the compile commands in this file. If the compilation database changes you can Refresh Coati to the new files. |
In the next step you can see which source files are in the compilation database and define the locations of the corresponding header files.
Header files will only be indexed if they are included in one of the source files.
| Setting | Description |
|---|---|
| Source Files | Clicking show source files will show you a list of all source files in the compilation database |
| Indexed Header Paths | Specify one or multiple locations that contain the header files to the source files defined in the compilation database. (For instructions on how to add paths see Path List Box.) |
Choose this option if you want to use Coati on a Java code base.
Project Meta DataThis is the same window as described above.
Project PathsIn this step you provide all the information Coati needs to know about your code base.
| Setting | Description |
|---|---|
| Project Paths | Provide the root path of your Java project. This is the path where all your package names are relative to. You may provide multiple paths here. For an example this may be required it your project's source code resides in one location but generated source files are kept at a different location. |
| Class Path | Add one entry per jar file that is required for the project to compile. You can also add the root path of the class files your project depends on, or add a mixture if you have class files for some of the dependencies and jar files for the rest of them. |
This window appears at the end of the Project Setup Wizard to summarize all the information entered before. It is the same as the Edit Project Window.
This window displays all the information relevant for your Coati project.
| Setting | Description |
|---|---|
| Name | The name of the project. This will also be the name of the .coatiproject file generated by Coati. |
| Location | Choose the location of the project file from the dialog. |
| Language | This field displays the language you chose for the project. (See Language Support) |
| Standard | Select the language standard that should be used for indexing your project. Usually the most recent language standard is preselected here. (See Language Support) |
| Project Paths | Add all directories or files you want Coati to index. Providing a directory here will recursively add all the contained files. Usually these are all source and header files of your project or a subset of them. |
| Setting | Description for C/C++ |
|---|---|
| Visual Studio Solution | Only when using Setup from Visual Studio Solution. Provide the path to your Visual Studio Solution. Clicking the refresh arrow inside the text box will refresh the Project Paths and the Header Search Paths below. |
| Compilation Database | Only when using Setup from Compilation Database. Provide the path to your Compilation Database. |
| Indexed Header Paths | Only when using Setup from Compilation Database. Even though the compilation database specifies all the include paths required to compile the project, you may not want to spend a lot of time indexing all of these. Every time Coati encounters a header it will check if the file is located in one of these paths to decide whether or not to index it. |
| Include Paths | Specify where Coati should be looking for included headers. |
| Lazy Include Search | If this checkbox is checked Coati also looks into the project paths (including subdirectories) when resolving #include directives. Use this option when you know that the project is self contained but don't know which paths you should specify as include paths. |
| Global Include Paths | Same as Include Paths but these are used application wide for all of your Coati projects. |
| Framework Search Paths | Mac only. Define the search paths for .framework files for your project. (For instructions on how to add paths see Path List Box.) |
| Global Framework Search Paths | Mac only. Same as Framework Search Paths but these are used application wide for all of your Coati projects. |
| Setting | Description for Java |
|---|---|
| Project Paths | Provide the root path of your Java project. This is the path where all your package names are relative to. You may provide multiple paths here. For an example this may be required it your project's source code resides in one location but generated source files are kept at a different location. |
| Class Path | Add one entry per jar file that is required for the project to compile. You can also add the root path of the class files your project depends on, or add a mixture if you have class files for some of the dependencies and jar files for the rest of them. |
| Advanced Setting | Description |
|---|---|
| Source File Extensions | Define extensions for source files including the dot e.g. .cpp or .java |
| Exclude Paths | Define files and directories that should not be indexed by Coati, although they appear in the Project Paths. |
| Advanced Setting | Description for C/C++ |
|---|---|
| Compiler Flags | Define compiler flags used during indexing e.g. -v |
The Enter License Window appears on your first start of Coati and is used to enter and check your Coati license key.
These dialogs will be used while Coati indexes your project. The whole user interface will be frozen as long as these dialogs are visible.
This dialog displays the number of files for indexing and clearing before indexing starts.
This dialog shows that Coati is currently doing processing that can't be interrupted.
This dialog shows the indexing progress of your project, by displaying the number of already indexed files, the last file that was started indexing, the number of errors and a progress estimate in percent.
This dialog is shown after indexing finished, giving you information about indexed files, duration and errors.
| Shortcut | Windows | Mac OS X | Linux |
|---|---|---|---|
| Preferences | Ctrl + , | Cmd + , | Ctrl + , |
| New Project | Ctrl + N | Cmd + N | Ctrl + N |
| Open Project | Ctrl + O | Cmd + O | Ctrl + O |
| Close Window | Alt + F4 | Cmd + W | Ctrl + W |
| Hide Window | Cmd + H | ||
| Refresh | F5 | Cmd + R | F5 |
| Force Refresh | Shift + F5 | Cmd + Shift + R | Shift + F5 |
| Back | Ctrl + Z / Backspace | Cmd + Z / Backspace | Ctrl + Z / Backspace |
| Forward | Ctrl + Shift + Z | Cmd + Shift + Z | Ctrl + Shift + Z |
| Find Symbol | Ctrl + F | Cmd + F | Ctrl + F |
| Find Text | Ctrl + Shift + F | Cmd + Shift + F | Ctrl + Shift + F |
| Code Reference Next | Ctrl + G | Cmd + G | Ctrl + G |
| Code Reference Previous | Ctrl + Shift + G | Cmd + Shift + G | Ctrl + Shift + G |
| To overview | Ctrl + Home | Cmd + Home / Cmd + Up | Ctrl + Home |
| Larger Font | Ctrl + + | Cmd + + | Ctrl + + |
| Smaller Font | Ctrl + - | Cmd + - | Ctrl + - |
| Reset Font Size | Ctrl + 0 | Cmd + 0 | Ctrl + 0 |
The graph view visualizes the currently selected symbol and all its relationships to other symbols as an interactive graph visualization.
Colors are corresponding to the default color scheme.
| Node Type | Image |
|---|---|
| File | ![]() |
| Type & Template Parameter | ![]() |
| Typedef | ![]() |
| Class & Struct: Display their members nested, and separated by access type: public, protected, private. By default only members with edges are shown. The arrow icon allows to expand and collapse them. The number tells how many nodes are hidden. | ![]() |
| Variable & Field | ![]() |
| Function & Method | ![]() |
| Enum | ![]() |
| Undefined: Nodes that were not defined within the indexed files are shown with hatched background. | ![]() |
| Bundle: A bundle node combines multiple nodes to reduce the size of the graph visualization. The name describes what kind of nodes are bundled. The number tells how many nodes are bundled. | ![]() |
Colors are corresponding to the default color scheme.
| Edge Type | Image |
|---|---|
| File Include | ![]() |
| Type Use | ![]() |
| Variable Use | ![]() |
| Function Call | ![]() |
| Inheritance | ![]() |
| Method Override | ![]() |
| Template Parameter Use & Template Argument Use | ![]() |
| Aggregation: Bundles multiple edges between the child nodes of the 2 nodes. The thickness gives an impression of how many edges are bundled. Hover the edge to get the number of bundled edges. | ![]() |
The code view displays the corresponding source code of the currently selected symbols. The code view contains a list of one or more files.
Each file has a title bar with the file's name and buttons to change its display state. There are 3 different states:
A code snippet contains the lines of interest for the currently active symbol surrounded by some more lines to provide some context. Other symbols that were indexed by Coati are framed by a box when hovered. Here Coati distinguishes between local symbols and symbols that can be related to any other part of the code base. In case the snippet is part of a class, function or namespace, an additional line at the top of the snippet provides information about the snippet’s context (e.g. the surrounding scope).
The Search View contains the search field and some other related user interface elements.
The left Backward button lets you undo your last navigation actions (see Back) and the right Forward button lets you redo your undone navigation actions again (see Forward). Both buttons are only enabled when the respective actions are available at the moment.
The refresh button allows you to refresh the current project and reindex all updated, added and removed files. To reindex the whole project choose the Force Refresh option from the Edit Menu.
Show the overview screen, which gives a summary of the loaded project. The overview screen is shown after the project was loaded. Alternatively use the shortcut To overview.
The search bar allows you to enter search requests to find one of Coati's indexed symbols. It doesn't allow for full text searching across all files so far. The search field allows for most text editing interactions common to text fields. When typing your request the Autocompletion Popup will show you search results matching to your entered string.
The Autocompletion Popup displays all Nodes matching your search request within all indexed symbols. The match results are determined by a fuzzy matching algorithm, that allows you to skip characters. The popup shows which characters in the words are matching and displays their corresponding node color. The node type is displayed on the right.
Additionally the search view provides specific keywords that select a certein group of symbols.
| keyword | effect |
|---|---|
| overview | Shows an overview of all indexed symbols in the graph view and some statistics in the code view. |
| error | Shows all errors in the code view. |
Search for a certain string in all indexed files by putting ? at the front of your search query. The default full text search is case-insensitive, use ?? to search case-sensitive.
? or use the Find Text action to do a case-insensitive full text serach.?? to do a case-sensitive full text search.The Log View is a view with different tabs which provide information about your project. This view is by default hidden. Currently there is only the Error Tab
Tabs:This list shows errors occured durring indexing.
The following informations are provided:
In order to make Coati the perfect partner for your development workflow you can connect Coati with different code editors. You can find the plugins in Coati's download package located in the folder /ide_plugins. Have a look at the following list of supported code editors to find out what editors are currently supported.
We are eager to expand the range of supported editors, so if you can't find a plugin for the code editor you are using, please let us know by writing to support@coati.io.
The plugins are Opensource and available on github.
Supported Editors:The communication between Coati and the code editor is achieved using a local TCP connection. Coati uses the port 6667 to listen for incoming messages. Outgoing messages will be sent to the port 6666. The port numbers can be edited in the Preferences Window.
Outgoing messages are in the form:
moveCursor>>absolute/file_path>>line_number>>column_number<EOM>
Incoming messages are in the form:
setActiveToken>>absolute/file_path>>line_number>>column_number<EOM>
If you want your editor to open a file at a specific location from within Coati, you can achieve this by either selecting the option Set IDE Cursor from the right-click menu in the Code View or by simply clicking into a line in the Code View while holding down the Ctrl or Cmd key.
By using a Coati plugin for your code editor, you can select a location within a source file and Coati will show you all symbols found at this location. Please have look at the list below to see which plugins are currently available and how they are used.
https://github.com/CoatiSoftware/atom-coati
Installation
Edit -> Preferences or Ctrl + ,To start the Tcp Server got Packages -> Coati -> Start Server
To send a location to Coati, place the cursor and right-click and select Send location to Coati
or Packages -> Coati -> Send location to Coati
https://github.com/CoatiSoftware/idea-coati
Installation
If you want IntelliJ/CLion to activate a certain element in Coati, right-click that element to bring up the context menu and choose the “Sent Location” option.
https://github.com/CoatiSoftware/eCoati
Installation
Help -> Install new Software...Work with: fieldAdd... and add the address aboveHelp -> Install new Software...Add... ButtonLocal... Button select the updatesite folder in the unzipped folderIf you want Eclipse to activate a certain element in Coati, right-click that element to bring up the context menu and choose the “Set active Token” option.
https://github.com/CoatiSoftware/emacs-coati
Installationpackage-install-filelist-packagesIf you want Emacs to activate a certain element in Coati, set your cursor to that element and
M + x and type in coati-send-location.
To get Location from Coati the coati-mode need to be active. To active the coati-mode
press M + x and type in coati-mode
https://github.com/CoatiSoftware/sublime-coati
Installationide_plugins/sublime_text to your SublimeText/Packages folder
Package Controll: Install PackagecoatiIf you want Sublime to activate a certain element in Coati, click a location to place the cursor, right-click to bring up the context menu and choose the “Coati - Set active Token” option. Please note that the position of the cursor will be sent to Coati and not the position you opened the context menu at.
https://github.com/CoatiSoftware/vim-coati
Installation
Please visit the vim-coati repository on Github for details.
UseIf you want Vim to activate a certain element in Coati, go to the code location and use
:CoatiActivateToken, now Coati should display your the chosen location.
Use:help coati.txt get get more information about the plugin
To install the Coati plugin for any version of Visual Studio, just execute the corresponding vsix file located in your ide_plugins/visual_studio.
If you want Visual Studio to activate a certain element in Coati, right-click that element to bring up the context menu and choose the “Set active Token” option.
You can create a compilation database (CDB) from your VS solution. Coati projects can be created from CDBs. This feature will replace solution parsing as implemented in current Coati versions. The workflow from VS to Coati will be automated in the future. As of now CDBs have to be loaded manually in Coati.
The CDB wizard is located in the Coati section in the VS menu bar. Note that the option is only useable if a solution containing at least one C/C++ project is loaded.
In the CDB wizard you can select projects you want to include in the CDB as well as the desired build target platform and configuration and a number of other options.
| Option | Description |
|---|---|
| Select Projects | The list of C/C++ projects in your solution. Check all projects you want to be included in the CDB. |
| De/Select All | Will select all projects if at least one project is not selected. If all projects are selected they will all be unselected. |
| Configuration | A dropdown list of the available build configurations. The selected configuration determines include paths and compile flags for the CDB. |
| Platform | A dropdown list of the available target platforms. The selected platform determines include paths and compile flags for the CDB. |
| Browse | Opens a folder browser to select the directory where the CDB will be created in. By default it is the directory of your solution. Instead of using the folder browser you can also paste a path into the adjacent text field. |
| CDB Name | This is the name for the CDB file. By default it is the same name as your solution. |
| C Standard | A dropdown list of all C standards supported by Coati. If your projects contain C files select the appropriate standard. Note that we aim to automate this selection in the future. |
| Cancel | Aborts the process and closes the wizard. |
| Create | Creates the CDB using the specified options. Note that at least one project has to be selected to start creating. |
Once the CDB was successfully created it can be found in the specified target directory. From this CDB you can create a Coati project as described above.
SettingsNetwork settings and logging options can be changed in the plugin's Tools/Options entry.
| Option | Description |
|---|---|
| Coati Port | The port on which Coati will receive messages. Note that this must match the port setting in Coati itself. |
| VS Port | The port on which Visual Studio will receive messages. Note that this must match the port setting in Coati itself. |
| File Logging | Enable log output for the plugin. Additionaly to the output file, log messages will also be displayed in VS' |
| Log Obfuscation | Obfuscate project- and file names as well as directories in the log output. Note that already logged data will not be obfuscated retroactively. A dictionary, mapping obfuscated names to original names, will be created in a seperate file. |
The plugin offers optional file logging. Should you ever have problems with the plugin we recommend to turn logging on. This will help to pinpoint and resolve the issue faster.
Logs will be created in ..\AppData\Local\Coati Software\Plugins\VS folder. A new log file will be created every time you restart VS and logging is enabled.
Note that the logs will include project- and file names as well as directories specific to your project. If you wish to keep this informatin secret you can use log obfuscation.
Project- and file names as well as directories will be replaced by an alphanumeric sequence. The sequence has the form a0, b0, c0,..., a1, b1, c1,.... Note that after switching on obfuscation, already logged data will not be obfuscated retroactively. No log files will be send to Coati Software automatically. You can check any file you may want to send us for sensible information before sending it.
A dictionary, mapping obfuscated names to original names, will be created in your log folder if log obfuscation is switched on. When during the support process we refer to project items by their obfuscated name you can still make sense of it. Do not send the dictionary to anybody else.
Lastly, log messages are also displayed in the VS output window. This is tied to file logging and is not en- or disabled separately.
Coati's IDE plugins communicate with Coati via sockets, using TCP. Coati implements a number of messages to provide an interface for the plugins.
This chapter explains the general structure of those messages, followed by a list of possible message types.
The basic structure of the messages used by Coati plugins consists of a prefix to identify the message type, followed by no, one, or multiple parameters and ends with an 'end-of-message' token. Parameters and tokens are seperated by a 'divider' token.
| Name | Token | Description |
|---|---|---|
| messageType | see below | A string that determines how the message will be interpreted by Coati or the plugin |
| divider | >> | Seperates the tokens of the message |
| parameter | see below | Typically an integer or string |
| endOfMessage | <EOM> | Helps to determine the end of a message |
Messages have the following form:
messageType<<parameter<<...<<parameter<EOM>
Coati does implement a number of message types that can be used by Coati plugins. In the following is a list of the messages that Coati may send to plugins and messages that may be sent by a plugin to Coati.
Note that you can chose which messages you want to implement. Coati will not make problems if you chose to ignore certain messages.
Incoming messagesThese messages may be received by a plugin.
| Message | Parameters | Description |
|---|---|---|
moveCursor | fileLocation: string row: integer column: integer | Set the cursor of your editor or IDE to the given file location. Note that fileLocation is the absolute path and name of the target file. |
createCDB | Coati may send this message to prompt your plugin to create a Compilation Database (CDB). Once the CDB is ready you may want to respond with a createCDBProject message. | |
ping | Coati may send a ping to determine if anybody is listening. Respond with a ping message yourself. Coati will not respond to this message. |
Your plugin may send these messages to Coati.
| Message | Parameters | Description |
|---|---|---|
setActiveToken | fileLocation: string row: integer column: integer | Tells Coati to shift focus to the token located at the given position. Note that fileLocation is the absolute path and name of the target file. |
createCDBProject | cdbPath: string headerPaths: string | If your plugin can provide a Compilation Database this message can prompt Coati to import it and display an appropriate dialog for the user. headerPaths is a list of the base project's header include paths. Seperate the single paths using the divider token. You can add as many paths as you need. |
ping | Your plugin may send this message to Coati to tell it it's listening. |