1 | ======================= |
2 | External Clang Examples |
3 | ======================= |
4 | |
5 | Introduction |
6 | ============ |
7 | |
8 | This page provides some examples of the kinds of things that people have |
9 | done with Clang that might serve as useful guides (or starting points) from |
10 | which to develop your own tools. They may be helpful even for something as |
11 | banal (but necessary) as how to set up your build to integrate Clang. |
12 | |
13 | Clang's library-based design is deliberately aimed at facilitating use by |
14 | external projects, and we are always interested in improving Clang to |
15 | better serve our external users. Some typical categories of applications |
16 | where Clang is used are: |
17 | |
18 | - Static analysis. |
19 | - Documentation/cross-reference generation. |
20 | |
21 | If you know of (or wrote!) a tool or project using Clang, please send an |
22 | email to Clang's `development discussion mailing list |
23 | <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_ to have it added. |
24 | (or if you are already a Clang contributor, feel free to directly commit |
25 | additions). Since the primary purpose of this page is to provide examples |
26 | that can help developers, generally they must have code available. |
27 | |
28 | List of projects and tools |
29 | ========================== |
30 | |
31 | `<https://github.com/Andersbakken/rtags/>`_ |
32 | "RTags is a client/server application that indexes c/c++ code and keeps |
33 | a persistent in-memory database of references, symbolnames, completions |
34 | etc." |
35 | |
36 | `<https://rprichard.github.com/sourceweb/>`_ |
37 | "A C/C++ source code indexer and navigator" |
38 | |
39 | `<https://github.com/etaoins/qconnectlint>`_ |
40 | "qconnectlint is a Clang tool for statically verifying the consistency |
41 | of signal and slot connections made with Qt's ``QObject::connect``." |
42 | |
43 | `<https://github.com/woboq/woboq_codebrowser>`_ |
44 | "The Woboq Code Browser is a web-based code browser for C/C++ projects. |
45 | Check out `<https://code.woboq.org/>`_ for an example!" |
46 | |
47 | `<https://github.com/mozilla/dxr>`_ |
48 | "DXR is a source code cross-reference tool that uses static analysis |
49 | data collected by instrumented compilers." |
50 | |
51 | `<https://github.com/eschulte/clang-mutate>`_ |
52 | "This tool performs a number of operations on C-language source files." |
53 | |
54 | `<https://github.com/gmarpons/Crisp>`_ |
55 | "A coding rule validation add-on for LLVM/clang. Crisp rules are written |
56 | in Prolog. A high-level declarative DSL to easily write new rules is under |
57 | development. It will be called CRISP, an acronym for *Coding Rules in |
58 | Sugared Prolog*." |
59 | |
60 | `<https://github.com/drothlis/clang-ctags>`_ |
61 | "Generate tag file for C++ source code." |
62 | |
63 | `<https://github.com/exclipy/clang_indexer>`_ |
64 | "This is an indexer for C and C++ based on the libclang library." |
65 | |
66 | `<https://github.com/holtgrewe/linty>`_ |
67 | "Linty - C/C++ Style Checking with Python & libclang." |
68 | |
69 | `<https://github.com/axw/cmonster>`_ |
70 | "cmonster is a Python wrapper for the Clang C++ parser." |
71 | |
72 | `<https://github.com/rizsotto/Constantine>`_ |
73 | "Constantine is a toy project to learn how to write clang plugin. |
74 | Implements pseudo const analysis. Generates warnings about variables, |
75 | which were declared without const qualifier." |
76 | |
77 | `<https://github.com/jessevdk/cldoc>`_ |
78 | "cldoc is a Clang based documentation generator for C and C++. |
79 | cldoc tries to solve the issue of writing C/C++ software documentation |
80 | with a modern, non-intrusive and robust approach." |
81 | |
82 | `<https://github.com/AlexDenisov/ToyClangPlugin>`_ |
83 | "The simplest Clang plugin implementing a semantic check for Objective-C. |
84 | This example shows how to use the ``DiagnosticsEngine`` (emit warnings, |
85 | errors, fixit hints). See also `<http://l.rw.rw/clang_plugin>`_ for |
86 | step-by-step instructions." |
87 | |
88 | `<https://phabricator.kde.org/source/clazy>`_ |
89 | "clazy is a compiler plugin which allows clang to understand Qt semantics. |
90 | You get more than 50 Qt related compiler warnings, ranging from unneeded |
91 | memory allocations to misusage of API, including fix-its for automatic |
92 | refactoring." |
93 | |
94 | `<https://gerrit.libreoffice.org/gitweb?p=core.git;a=blob_plain;f=compilerplugins/README;hb=HEAD>`_ |
95 | "LibreOffice uses a Clang plugin infrastructure to check during the build |
96 | various things, some more, some less specific to the LibreOffice source code. |
97 | There are currently around 50 such checkers, from flagging C-style casts and |
98 | uses of reserved identifiers to ensuring that code adheres to lifecycle |
99 | protocols for certain LibreOffice-specific classes. They may serve as |
100 | examples for writing RecursiveASTVisitor-based plugins." |
101 | |