| ======================= |
| External Clang Examples |
| ======================= |
| |
| Introduction |
| ============ |
| |
| This page provides some examples of the kinds of things that people have |
| done with Clang that might serve as useful guides (or starting points) from |
| which to develop your own tools. They may be helpful even for something as |
| banal (but necessary) as how to set up your build to integrate Clang. |
| |
| Clang's library-based design is deliberately aimed at facilitating use by |
| external projects, and we are always interested in improving Clang to |
| better serve our external users. Some typical categories of applications |
| where Clang is used are: |
| |
| - Static analysis. |
| - Documentation/cross-reference generation. |
| |
| If you know of (or wrote!) a tool or project using Clang, please send an |
| email to Clang's `development discussion mailing list |
| <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_ to have it added. |
| (or if you are already a Clang contributor, feel free to directly commit |
| additions). Since the primary purpose of this page is to provide examples |
| that can help developers, generally they must have code available. |
| |
| List of projects and tools |
| ========================== |
| |
| `<https://github.com/Andersbakken/rtags/>`_ |
| "RTags is a client/server application that indexes c/c++ code and keeps |
| a persistent in-memory database of references, symbolnames, completions |
| etc." |
| |
| `<https://rprichard.github.com/sourceweb/>`_ |
| "A C/C++ source code indexer and navigator" |
| |
| `<https://github.com/etaoins/qconnectlint>`_ |
| "qconnectlint is a Clang tool for statically verifying the consistency |
| of signal and slot connections made with Qt's ``QObject::connect``." |
| |
| `<https://github.com/woboq/woboq_codebrowser>`_ |
| "The Woboq Code Browser is a web-based code browser for C/C++ projects. |
| Check out `<https://code.woboq.org/>`_ for an example!" |
| |
| `<https://github.com/mozilla/dxr>`_ |
| "DXR is a source code cross-reference tool that uses static analysis |
| data collected by instrumented compilers." |
| |
| `<https://github.com/eschulte/clang-mutate>`_ |
| "This tool performs a number of operations on C-language source files." |
| |
| `<https://github.com/gmarpons/Crisp>`_ |
| "A coding rule validation add-on for LLVM/clang. Crisp rules are written |
| in Prolog. A high-level declarative DSL to easily write new rules is under |
| development. It will be called CRISP, an acronym for *Coding Rules in |
| Sugared Prolog*." |
| |
| `<https://github.com/drothlis/clang-ctags>`_ |
| "Generate tag file for C++ source code." |
| |
| `<https://github.com/exclipy/clang_indexer>`_ |
| "This is an indexer for C and C++ based on the libclang library." |
| |
| `<https://github.com/holtgrewe/linty>`_ |
| "Linty - C/C++ Style Checking with Python & libclang." |
| |
| `<https://github.com/axw/cmonster>`_ |
| "cmonster is a Python wrapper for the Clang C++ parser." |
| |
| `<https://github.com/rizsotto/Constantine>`_ |
| "Constantine is a toy project to learn how to write clang plugin. |
| Implements pseudo const analysis. Generates warnings about variables, |
| which were declared without const qualifier." |
| |
| `<https://github.com/jessevdk/cldoc>`_ |
| "cldoc is a Clang based documentation generator for C and C++. |
| cldoc tries to solve the issue of writing C/C++ software documentation |
| with a modern, non-intrusive and robust approach." |
| |
| `<https://github.com/AlexDenisov/ToyClangPlugin>`_ |
| "The simplest Clang plugin implementing a semantic check for Objective-C. |
| This example shows how to use the ``DiagnosticsEngine`` (emit warnings, |
| errors, fixit hints). See also `<http://l.rw.rw/clang_plugin>`_ for |
| step-by-step instructions." |
| |
| `<https://phabricator.kde.org/source/clazy>`_ |
| "clazy is a compiler plugin which allows clang to understand Qt semantics. |
| You get more than 50 Qt related compiler warnings, ranging from unneeded |
| memory allocations to misusage of API, including fix-its for automatic |
| refactoring." |
| |
| `<https://gerrit.libreoffice.org/gitweb?p=core.git;a=blob_plain;f=compilerplugins/README;hb=HEAD>`_ |
| "LibreOffice uses a Clang plugin infrastructure to check during the build |
| various things, some more, some less specific to the LibreOffice source code. |
| There are currently around 50 such checkers, from flagging C-style casts and |
| uses of reserved identifiers to ensuring that code adheres to lifecycle |
| protocols for certain LibreOffice-specific classes. They may serve as |
| examples for writing RecursiveASTVisitor-based plugins." |