Manual Configuration
Codeflash is installed and configured on a per-project basis.
codeflash init
should guide you through the configuration process, but if you need to manually configure Codeflash or set advanced settings, you can do so by editing the pyproject.toml
file in the root directory of your project.
Configuration Options
Codeflash config looks like the following
[tool.codeflash]
module-root = "my_module"
tests-root = "tests"
test-framework = "pytest"
formatter-cmds = ["black $file"]
# optional configuration
ignore-paths = ["my_module/build/"]
pytest-cmd = "pytest"
disable-imports-sorting = false
disable-telemetry = false
All file paths are relative to the directory of the pyproject.toml
file.
Required Options:
module-root
: The Python module you want Codeflash to optimize going forward. Only code under this directory will be optimized. It should also have an__init__.py
file to make the module importable.tests-root
: The directory where your tests are located. Codeflash will use this directory to discover existing tests as well as generate new tests.test-framework
: The test framework you use for your project. Codeflash supportspytest
andunittest
.
Optional Configuration:
ignore-paths
: A list of paths withing themodule-root
to ignore when optimizing code. Codeflash will not optimize code in these paths. Useful for ignoring build directories or other generated code. You can also leave this empty if not needed.pytest-cmd
: The command to run your tests. Defaults topytest
. You can specify extra commandline arguments here for pytest.formatter-cmds
: The command line to run your code formatter or linter. Defaults to["black $file"]
. In the command line$file
refers to the current file being optimized. The assumption with using tools here is that they overwrite the same file and returns a zero exit code. You can also specify multiple tools here that run in a chain as a toml array. You can also disable code formatting by setting this to["disabled"]
.ruff
- A recommended way to run ruff linting and formatting is["ruff check --exit-zero --fix $file", "ruff format $file"]
. To makeruff check --fix
return a 0 exit code please add a--exit-zero
argument.
disable-imports-sorting
: By default, codeflash uses isort to organize your imports before creating suggestions. You can disable this by setting this field totrue
. This could be useful if you don't sort your imports or while using linters like ruff that sort imports too.disable-telemetry
: Disable telemetry data collection. Defaults tofalse
. Set this totrue
to disable telemetry data collection. Codeflash collects anonymized telemetry data to understand how users are using Codeflash and to improve the product. Telemetry does not collect any code data.
Example Configuration
Here's an example project with the following structure:
acme-project/
|- foo_module/
| |- __init__.py
| |- foo.py
| |- main.py
|- tests/
| |- __init__.py
| |- test_script.py
|- pyproject.toml
Here's a sample pyproject.toml
file for the above project:
[tool.codeflash]
module-root = "foo_module"
tests-root = "tests"
test-framework = "pytest" # or "unittest"
ignore-paths = []