# Getting Started

This guide walks through setting up an rsconstruct project for the two primary supported languages: Python and C++.

## Python

### Prerequisites

- rsconstruct installed ([Installation](installation.md))
- [ruff](https://docs.astral.sh/ruff/) on PATH

### Setup

Create a project directory and configuration:

```bash
mkdir myproject && cd myproject
```

```toml
# rsconstruct.toml
[processor.ruff]
```

Create a Python source file:

```bash
mkdir -p src
```

```python
# src/hello.py
def greet(name: str) -> str:
    return f"Hello, {name}!"

if __name__ == "__main__":
    print(greet("world"))
```

Run the build:

```bash
rsconstruct build
```

Expected output:

```
Processing ruff (1 product)
  hello.py
```

Run again — nothing has changed, so rsconstruct skips the check:

```
Processing ruff (1 product)
  Up to date
```

### Adding pylint

Install [pylint](https://pylint.readthedocs.io/) and add a section for it:

```toml
# rsconstruct.toml
[processor.ruff]

[processor.pylint]
```

Pass extra arguments via processor config:

```toml
[processor.pylint]
args = ["--disable=C0114,C0115,C0116"]
```

### Adding zspell for docs

If your project has markdown documentation, add a section for the zspell processor:

```toml
[processor.ruff]

[processor.pylint]

[processor.zspell]
```

Create a `.zspell-words` file in the project root with any custom words (one per line) that the zspeller should accept.

## C++

### Prerequisites

- rsconstruct installed ([Installation](installation.md))
- gcc/g++ on PATH

### Setup

Create a project directory and configuration:

```bash
mkdir myproject && cd myproject
```

```toml
# rsconstruct.toml
[processor.cc_single_file]
```

Create a source file under `src/`:

```bash
mkdir -p src
```

```c
// src/hello.c
#include <stdio.h>

int main() {
    printf("Hello, world!\n");
    return 0;
}
```

Run the build:

```bash
rsconstruct build
```

Expected output:

```
Processing cc_single_file (1 product)
  hello.elf
```

The compiled executable is at `out/cc_single_file/hello.elf`.

Run again — the source hasn't changed, so rsconstruct restores from cache:

```
Processing cc_single_file (1 product)
  Up to date
```

### Customizing compiler flags

Pass flags via processor config:

```toml
[processor.cc_single_file]
cflags = ["-Wall", "-Wextra", "-O2"]
cxxflags = ["-Wall", "-Wextra", "-O2"]
include_paths = ["include"]
```

See the [CC Single File](processors/cc_single_file.md) processor docs for the full configuration reference.

### Adding static analysis

Install [cppcheck](http://cppcheck.net/) and add a section for it:

```toml
[processor.cc_single_file]

[processor.cppcheck]
```

Both processors run on the same source files — rsconstruct handles them independently.

## Next Steps

- [Commands](commands.md) — full list of rsconstruct commands
- [Configuration](configuration.md) — all configuration options
- [Processors](processors.md) — detailed docs for each processor
