| # Development Resources | |
| This document will help getting started [contributing](../CONTRIBUTING.md) to | |
| Verible. Collecting development aids and design concepts. | |
| ## Searching and Navigating Verible's Source Code | |
| https://cs.opensource.google/verible/verible is a search-indexed mirror of | |
| [Verible's source code](https://github.com/chipsalliance/verible). | |
| Expect to spend some time here as you familiarize yourself with the codebase. | |
| https://developers.google.com/code-search/reference provides a reference for | |
| search syntax and more. | |
| To learn more about how to use Kythe to | |
| [index the source code yourself, read here](./indexing.md). | |
| To allow your editor to navigate the code base, make sure it uses the | |
| `clangd` language server. With | |
| ``` | |
| .github/bin/make-compilation-db.sh | |
| ``` | |
| You can create the compilation database it needs. | |
| ### Automated tools that allow to keep things clean | |
| If you have a compilation database, you can run the clang-tidy checker: | |
| ``` | |
| .github/bin/run-clang-tidy-cached.cc | |
| ``` | |
| Note, this will take a while the first time, but it caches the result. | |
| To run all litmus diagnostics before submitting, there is this convenient | |
| script, run it before creating a pull request to see if you haven't missed | |
| anything (the Continuous Integration on github will catch it, but nice to | |
| run this locally): | |
| ``` | |
| .github/bin/before-submit.sh | |
| ``` | |
| This will also run `clang-tidy`, and so will take a while the first time | |
| you run it. | |
| ### Tips | |
| * Read the test code. Most `.h` and `.cc` files come with a `_test.cc` set of | |
| unit tests. The tests are never outdated because they are kept passing. | |
| * Find examples. Dig through history. Follow blame and annotation layers to | |
| see when particular lines of code were touched. Look for related closed | |
| issues and see the commits that addressed them. | |
| ## Code Organization | |
| Each directory in the source tree contains a short README.md describing the | |
| contents. | |
| * [common/](../verible/common) contains all language-agnostic libraries and tools | |
| * [verilog/](../verible/verilog) contains Verilog-specific libraries and tools | |
| * [external_libs/](../external_libs) contains some library dependencies | |
| ## Verilog Front-End | |
| * [Lexer and Parser design](./parser_design.md) | |
| ## Analyzers | |
| * [How to implement lint rules](./style_lint.md) | |
| ## Transformers | |
| ## Formatting | |
| * [Formatter](./foramtter.md): How the formatter works, and how to debug it. |