| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
| "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <title>Clang Tools</title> |
| <link type="text/css" rel="stylesheet" href="../menu.css"> |
| <link type="text/css" rel="stylesheet" href="../content.css"> |
| </head> |
| <body> |
| |
| <!--#include virtual="../menu.html.incl"--> |
| |
| <div id="content"> |
| |
| <h1>Clang Tools</h1> |
| <p>Clang Tools are standalone command line (and potentially GUI) tools design |
| for use by C++ developers who are already using and enjoying Clang as their |
| compiler. These tools provide developer-oriented functionality such as fast |
| syntax checking, automatic formatting, refactoring, etc.</p> |
| |
| <p>Only a couple of the most basic and fundamental tools are kept in the primary |
| Clang Subversion project. The rest of the tools are kept in a side-project so |
| that developers who don't want or need to build them don't. If you want to get |
| access to the extra Clang Tools repository, simply check it out into the tools |
| tree of your Clang checkout and follow the usual process for building and |
| working with a combined LLVM/Clang checkout:</p> |
| <ul> |
| <li>With Subversion: |
| <ul> |
| <li><tt>cd llvm/tools/clang/tools</tt></li> |
| <li><tt>svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk |
| extra</tt></li> |
| </ul> |
| </li> |
| <li>Or with Git: |
| <ul> |
| <li><tt>cd llvm/tools/clang/tools</tt></li> |
| <li><tt>git clone http://llvm.org/git/clang-tools-extra.git extra</tt></li> |
| </ul> |
| </li> |
| </ul> |
| |
| <p>This document describes a high-level overview of the organization of Clang |
| Tools within the project as well as giving an introduction to some of the more |
| important tools. However, it should be noted that this document is currently |
| focused on Clang and Clang Tool developers, not on end users of these tools.</p> |
| |
| <!-- ======================================================================= --> |
| <h2 id="org">Clang Tools Organization</h2> |
| <!-- ======================================================================= --> |
| |
| <p>Clang Tools are CLI or GUI programs that are intended to be directly used by |
| C++ developers. That is they are <em>not</em> primarily for use by Clang |
| developers, although they are hopefully useful to C++ developers who happen to |
| work on Clang, and we try to actively dogfood their functionality. They are |
| developed in three components: the underlying infrastructure for building |
| a standalone tool based on Clang, core shared logic used by many different tools |
| in the form of refactoring and rewriting libraries, and the tools |
| themselves.</p> |
| |
| <p>The underlying infrastructure for Clang Tools is the |
| <a href="LibTooling.html">LibTooling</a> platform. See its documentation for |
| much more detailed information about how this infrastructure works. The common |
| refactoring and rewriting toolkit-style library is also part of LibTooling |
| organizationally.</p> |
| |
| <p>A few Clang Tools are developed along side the core Clang libraries as |
| examples and test cases of fundamental functionality. However, most of the tools |
| are developed in a side repository to provide easy separation from the core |
| libraries. We intentionally do not support public libraries in the side |
| repository, as we want to carefully review and find good APIs for libraries as |
| they are lifted out of a few tools and into the core Clang library set.</p> |
| |
| <p>Regardless of which repository Clang Tools' code resides in, the development |
| process and practices for all Clang Tools are exactly those of Clang itself. |
| They are entirely within the Clang <em>project</em>, regardless of the version |
| control scheme.</p> |
| |
| |
| <!-- ======================================================================= --> |
| <h2 id="coretools">Core Clang Tools</h2> |
| <!-- ======================================================================= --> |
| |
| <p>The core set of Clang tools that are within the main repository are tools |
| that very specifically compliment, and allow use and testing of <em>Clang</em> |
| specific functionality.</p> |
| |
| <h3 id="clang-check"><tt>clang-check</tt></h3> |
| <p>This tool combines the LibTooling framework for running a Clang tool with the |
| basic Clang diagnostics by syntax checking specific files in a fast, command line |
| interface. It can also accept flags to re-display the diagnostics in different |
| formats with different flags, suitable for use driving an IDE or editor.</p> |
| |
| <p>FIXME: Link to user-oriented clang-check documentation.</p> |
| |
| <h3 id="clang-fixit"><tt>clang-fixit</tt> (Not yet implemented!)</h3> |
| <p>A tool which specifically applies the Clang fix-it hint diagnostic technology |
| on top of a dedicated tool. It is designed to explore alternative interfaces for |
| applying fix-it hints, including automatic application, prompting users with |
| options for different fixes, etc.</p> |
| |
| <p><b>NB:</b> The clang-fixit tool is planned, but not yet implemented.</p> |
| |
| <p>FIXME: Link to user-oriented clang-fixit documentation.</p> |
| |
| <!-- ======================================================================= --> |
| <h2 id="registerplugin">Extra Clang Tools</h2> |
| <!-- ======================================================================= --> |
| |
| <p>As various categories of Clang Tools are added to the extra repository, |
| they'll be tracked here. The focus of this documentation is on the scope and |
| features of the tools for other tool developers; each tool should provide its |
| own user-focused documentation.</p> |
| |
| </div> |
| </body> |
| </html> |
| |