Skip to content

snakefmt

GitHub stars formatter GitHub release (latest SemVer) GitHub last commit GitHub commit activity GitHub contributors

snakefmt is a formatter for Snakemake files that applies consistent styling and formatting to Snakefiles and .smk files. It standardizes indentation, spacing, line breaks, and overall code structure while preserving the semantic meaning of Snakemake workflows.

Key Features:

  • Consistent indentation standardizing whitespace across Snakemake files
  • Spacing normalization ensuring uniform spacing around operators and keywords
  • Line break optimization improving code readability and structure
  • Code structure preservation maintaining semantic meaning while improving format
  • Check mode support (--check) for validation without modification
  • Automatic formatting with intelligent handling of Snakemake syntax
  • Configuration support via .snakefmt.toml for project-specific settings
  • Compact diff output showing precise formatting changes
  • Workflow compatibility working with complex Snakemake workflow definitions
  • Team collaboration ensuring consistent style across development teams
  • Performance optimized for handling large Snakemake projects efficiently

snakefmt documentation

snakefmt - GitHub

Configuration in MegaLinter

Variable Description Default value
SNAKEMAKE_SNAKEFMT_ARGUMENTS User custom arguments to add in linter CLI call
Ex: -s --foo "bar"
SNAKEMAKE_SNAKEFMT_COMMAND_REMOVE_ARGUMENTS User custom arguments to remove from command line before calling the linter
Ex: -s --foo "bar"
SNAKEMAKE_SNAKEFMT_FILTER_REGEX_INCLUDE Custom regex including filter
Ex: (src\|lib)
Include every file
SNAKEMAKE_SNAKEFMT_FILTER_REGEX_EXCLUDE Custom regex excluding filter
Ex: (test\|examples)
Exclude no file
SNAKEMAKE_SNAKEFMT_CLI_LINT_MODE Override default CLI lint mode
- file: Calls the linter for each file
- project: Call the linter from the root of the project
file
SNAKEMAKE_SNAKEFMT_FILE_EXTENSIONS Allowed file extensions. "*" matches any extension, "" matches empty extension. Empty list excludes all files
Ex: [".py", ""]
[".smk"]
SNAKEMAKE_SNAKEFMT_FILE_NAMES_REGEX File name regex filters. Regular expression list for filtering files by their base names using regex full match. Empty list includes all files
Ex: ["Dockerfile(-.+)?", "Jenkinsfile"]
["Snakefile"]
SNAKEMAKE_SNAKEFMT_PRE_COMMANDS List of bash commands to run before the linter None
SNAKEMAKE_SNAKEFMT_POST_COMMANDS List of bash commands to run after the linter None
SNAKEMAKE_SNAKEFMT_UNSECURED_ENV_VARIABLES List of env variables explicitly not filtered before calling SNAKEMAKE_SNAKEFMT and its pre/post commands None
SNAKEMAKE_SNAKEFMT_CONFIG_FILE snakefmt configuration file name
Use LINTER_DEFAULT to let the linter find it
.snakefmt.toml
SNAKEMAKE_SNAKEFMT_RULES_PATH Path where to find linter configuration file Workspace folder, then MegaLinter default rules
SNAKEMAKE_SNAKEFMT_DISABLE_ERRORS Run linter but consider errors as warnings true
SNAKEMAKE_SNAKEFMT_DISABLE_ERRORS_IF_LESS_THAN Maximum number of errors allowed 0
SNAKEMAKE_SNAKEFMT_CLI_EXECUTABLE Override CLI executable ['snakefmt']

MegaLinter Flavors

This linter is available in the following flavors

Flavor Description Embedded linters Info
all Default MegaLinter Flavor 134 Docker Image Size (tag) Docker Pulls
c_cpp Optimized for pure C/C++ projects 56 Docker Image Size (tag) Docker Pulls
documentation MegaLinter for documentation projects 49 Docker Image Size (tag) Docker Pulls
dotnet Optimized for C, C++, C# or VB based projects 64 Docker Image Size (tag) Docker Pulls
dotnetweb Optimized for C, C++, C# or VB based projects with JS/TS 73 Docker Image Size (tag) Docker Pulls
formatters Contains only formatters 19 Docker Image Size (tag) Docker Pulls
go Optimized for GO based projects 51 Docker Image Size (tag) Docker Pulls
java Optimized for JAVA based projects 54 Docker Image Size (tag) Docker Pulls
javascript Optimized for JAVASCRIPT or TYPESCRIPT based projects 59 Docker Image Size (tag) Docker Pulls
php Optimized for PHP based projects 54 Docker Image Size (tag) Docker Pulls
python Optimized for PYTHON based projects 66 Docker Image Size (tag) Docker Pulls
ruby Optimized for RUBY based projects 50 Docker Image Size (tag) Docker Pulls
rust Optimized for RUST based projects 50 Docker Image Size (tag) Docker Pulls
salesforce Optimized for Salesforce based projects 56 Docker Image Size (tag) Docker Pulls
swift Optimized for SWIFT based projects 50 Docker Image Size (tag) Docker Pulls
terraform Optimized for TERRAFORM based projects 54 Docker Image Size (tag) Docker Pulls

Behind the scenes

How are identified applicable files

  • File extensions: .smk
  • File names (regex): Snakefile

How the linting is performed

  • snakefmt is called one time by identified file (file CLI lint mode)

Example calls

snakefmt --check --compact-diff Snakefile
snakefmt --check --compact-diff --config .snakefmt.toml Snakefile
snakefmt --config .snakefmt.toml Snakefile

Help content

Usage: snakefmt [OPTIONS] [SRC]...

  The uncompromising Snakemake code formatter.

  SRC specifies directories and files to format. Directories will be searched
  for file names that conform to the include/exclude patterns provided.

  Files are modified in-place by default; use diff, check, or  `snakefmt - <
  Snakefile` to avoid this.

Options:
  -l, --line-length INT       Lines longer than INT will be wrapped. [default:
                              88]
  -s, --sort / -S, --no-sort  Sort directives in rules and modules.  [default:
                              sort]
  --check                     Don't write the files back, just return the
                              status. Return code 0 means nothing would
                              change. Return code 1 means some files would be
                              reformatted. Return code 123 means there was an
                              error.
  -d, --diff                  Don't write the files back, just output a diff
                              for each file to stdout.
  --compact-diff              Same as --diff but only shows lines that would
                              change plus a few lines of context.
  --include PATTERN           A regular expression that matches files and
                              directories that should be included on recursive
                              searches.  An empty value means all files are
                              included regardless of the name.  Use forward
                              slashes for directories on all platforms
                              (Windows, too).  Exclusions are calculated
                              first, inclusions later.  [default:
                              (\.smk$|^Snakefile)]
  --exclude PATTERN           A regular expression that matches files and
                              directories that should be excluded on recursive
                              searches.  An empty value means no paths are
                              excluded. Use forward slashes for directories on
                              all platforms (Windows, too). Exclusions are
                              calculated first, inclusions later.  [default: (
                              \.snakemake/|\.eggs/|\.git/|\.hg/|\.mypy_cache/|
                              \.nox/|\.tox/|\.venv/|\.svn/|_build/|buck-
                              out/|/build/|/dist/|\.template/)]
  -c, --config PATH           Read configuration from PATH. By default, will
                              try to read from `./pyproject.toml`
  -h, --help                  Show this message and exit.
  -V, --version               Show the version and exit.
  -v, --verbose               Turns on debug-level logger.

Installation on mega-linter Docker image

  • Dockerfile commands :
# renovate: datasource=pypi depName=snakefmt
ARG PIP_SNAKEFMT_VERSION=1.0.0