150
|
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."
|