blob: 58c605a9a836384cd3236064c7a50c3dfe6e20cd [file] [log] [blame]
Sean Silvaf2a472a2013-02-19 17:29:01 +00001=======================
2External Clang Examples
3=======================
Sean Silva63c3af62013-02-19 16:58:15 +00004
Sean Silvae3931a12013-02-19 17:21:23 +00005Introduction
6============
Sean Silva63c3af62013-02-19 16:58:15 +00007
Sean Silvae3931a12013-02-19 17:21:23 +00008This page provides some examples of the kinds of things that people have
9done with Clang that might serve as useful guides (or starting points) from
10which to develop your own tools. They may be helpful even for something as
11banal (but necessary) as how to set up your build to integrate Clang.
12
13Clang's library-based design is deliberately aimed at facilitating use by
14external projects, and we are always interested in improving Clang to
15better serve our external users. Some typical categories of applications
16where Clang is used are:
17
18- Static analysis.
19- Documentation/cross-reference generation.
20
21If you know of (or wrote!) a tool or project using Clang, please send an
22email to Clang's `development discussion mailing list
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +000023<https://lists.llvm.org/mailman/listinfo/cfe-dev>`_ to have it added.
Sean Silvae3931a12013-02-19 17:21:23 +000024(or if you are already a Clang contributor, feel free to directly commit
25additions). Since the primary purpose of this page is to provide examples
26that can help developers, generally they must have code available.
Sean Silva63c3af62013-02-19 16:58:15 +000027
28List of projects and tools
29==========================
30
Sean Silva983caaa2013-03-12 16:07:31 +000031`<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
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +000036`<https://rprichard.github.com/sourceweb/>`_
Sean Silva03bfc672013-03-12 02:11:17 +000037 "A C/C++ source code indexer and navigator"
38
Sean Silva63c3af62013-02-19 16:58:15 +000039`<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.
Eugene Zelenkoadcb3f52019-01-23 20:39:07 +000045 Check out `<https://code.woboq.org/>`_ for an example!"
Sean Silva63c3af62013-02-19 16:58:15 +000046
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>`_
Sean Silvae3931a12013-02-19 17:21:23 +000073 "Constantine is a toy project to learn how to write clang plugin.
Sean Silva63c3af62013-02-19 16:58:15 +000074 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."
Dmitri Gribenkod2bbdcf2014-03-07 09:06:12 +000081
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
Kevin Funk83143a82017-02-24 08:29:46 +000088`<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."
Stephan Bergmannb6ae5282017-03-22 08:45:49 +000093
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."