# 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 a
lot of 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).

### 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/](../common) contains all language-agnostic libraries and tools
*   [verilog/](../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.
