|  | # Static analysis | 
|  |  | 
|  | Static analysis is a way of analyzing source code without | 
|  | executing it. One of its applications 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 |