nginx config file formatter/beautifier written in Python with no additional dependencies. It can be used as library or standalone script. It formats nginx configuration files in consistent way, described below:
- All lines are indented in uniform manner, with 4 spaces per level. Number of spaces is customizable.
- Neighbouring empty lines are collapsed to at most two empty lines.
- Curly braces placement follows Java convention.
- Whitespaces are collapsed, except in comments and quotation marks.
Python 3.4 or later is needed to run this program. The easiest way is to download package from PyPI:
pip3 install nginxfmt
The simplest form of installation would be copying nginxfmt.py
to
your scripts' directory. It has no 3-rd party dependencies.
You can also clone the repository and symlink the executable:
cd
git clone https://github.com/slomkowski/nginx-config-formatter.git
ln -s ~/nginx-config-formatter/nginxfmt.py ~/bin/nginxfmt.py
It can format one or several files. Result is by default saved to the original file, but can be redirected to stdout.
It can also function in piping mode, with --pipe
switch.
usage: nginxfmt.py [-h] [-v] [-] [-p | -b] [-i INDENT] [config_files ...]
Formats nginx configuration files in consistent way.
positional arguments:
config_files configuration files to format
optional arguments:
-h, --help show this help message and exit
-v, --verbose show formatted file names
-, --pipe reads content from standard input, prints result to stdout
-p, --print-result prints result to stdout, original file is not changed
-b, --backup-original
backup original config file as filename.conf~
formatting options:
-i INDENT, --indent INDENT
specify number of spaces for indentation
Main logic is within Formatter
class, which can be used in 3rd-party code.
import nginxfmt
# initializing with standard FormatterOptions
f = nginxfmt.Formatter()
# format from string
formatted_text = f.format_string(unformatted_text)
# format file and save result to the same file
f.format_file(unformatted_file_path)
# format file and save result to the same file, original unformatted content is backed up
f.format_file(unformatted_file_path, backup_path)
Customizing formatting options:
import nginxfmt
fo = nginxfmt.FormatterOptions()
fo.indentation = 2 # 2 spaces instead of default 4
# initializing with standard FormatterOptions
f = nginxfmt.Formatter(fo)
Please create issue under https://github.com/slomkowski/nginx-config-formatter/issues. Be sure to add config snippets to reproduce the issue, preferably:
- snippet do be formatted
- actual result with invalid formatting
- desired result
Copyright 2021 Michał Słomkowski. License: Apache 2.0. Previously published under https://github.com/1connect/nginx-config-formatter.