| # Static analysis |
| |
| Static analysis is a way of analyzing source code without |
| executing it. One of its aplications is to find |
| [code smells](https://en.wikipedia.org/wiki/Code_smell) and bugs. |
| |
| Fuchsia uses Clang as its compiler. Clang has several tools |
| to analyze the code statically. Fuchsia enables a large set |
| of useful warning messages and compiles with warnings as errors. |
| |
| ## Prerequisites |
| |
| Before you do static analysis, make sure you have the following: |
| |
| * Toolchain: You can either use the prebuilt toolchain or compile compile a toolchain. For |
| information on compiling a toolchain, see the [toolchain guide][toolchain]. |
| Note: This guide assumes that you are using the prebuilt toolchain. |
| * Compilation database: You need the compilation database to use `clang-tidy` and Clang static |
| analyzer. |
| Note: You must run this command daily to make sure that the compilation database is up to |
| date. |
| |
| ``` |
| fx compdb |
| ``` |
| |
| ## Clang tidy |
| |
| There is a more detailed guide available [here][lint]. |
| |
| ## Clang static analyzer |
| |
| ### Prerequisites |
| |
| Install `scan-build-py`: |
| |
| ``` |
| pip install scan-build --user |
| ``` |
| |
| You might get a warning that `~/.local/bin` is not part of the `PATH`. Either |
| add it to your `PATH` environment variable or install `scan-build` globally (without the `--user` flag). |
| |
| ### Run |
| |
| From your Fuchsia directory, run the Clang static analyzer: |
| |
| ``` |
| analyze-build --cdb compile_commands.json --use-analyzer path/to/checkout/prebuilt/third_party/clang/linux-x64/bin/clang --output path/to/output |
| ``` |
| |
| ### View the results |
| |
| View the results of Clang static analyzer with Chrome: |
| |
| ``` |
| chrome path/to/output/scan-build-date-hash/index.html |
| ``` |
| |
| ## Resources |
| |
| * [Clang Tidy](https://clang.llvm.org/extra/clang-tidy/) |
| * [Clang Static Analyzer](https://clang.llvm.org/docs/ClangStaticAnalyzer.html) |
| |
| [toolchain]: /docs/development/build/toolchain.md |
| [lint]: /docs/development/languages/c-cpp/lint.md |