yamltidy - Automatic cleanup of YAML files
This project is very new - a lot will change.
yamltidy is a formatter for YAML files.
It's is inspired by the great tools yamllint and perltidy.
yamllint is based in PyYAML and checks indentation, trailing spaces and more, based on your configuration.
perltidy takes perl programs and reformats the code.
yamltidy will take a configuration (YAML) file like yamllint, and fix indentation inconsistencies, trailing spaces and more.
It is based on C libyaml and perl YAML::LibYAML::API.
% yamltidy foo.yaml
---
a: # a comment
b:
c: d
# inplace - directly write result into original file
yamltidy --inplace foo.yaml
You can find results for several configurations here: perlpunk.github.io/yamltidy
Installation
If you don't have a Perl CPAN client to install modules, install cpanminus:
# debian example
% apt-get install cpanminus
# openSUSE
% zypper install perl-App-cpanminus
Install yamltidy
% cpanm YAML::Tidy
# faster without running tests
% cpanm --notest YAML::Tidy
If you just want to play with it, but don't want to install it globally, use this:
% cpanm -l ~/localyamltidy YAML::Tidy
% export PERL5LIB=~/localyamltidy/lib/perl5
% PATH=~/localyamltidy/bin:$PATH
Use Docker Image
% docker pull perlpunk/yamltidy
% docker run -i --rm perlpunk/yamltidy yamltidy - < in.yaml
Config
The configuration is similar as for yamllint.
It's written in YAML, and it searches for it in these places:
$PWD/.yamltidy~/.config/yamltidy/config.yaml~/.yamltidy
You can pass the configuration file via the -c/--config-file switch.
The default config: .yamltidy
An indentation of two spaces is recommended.
Sequences will by default be zero-indented, because the hyphen - counts
as indentation.
The option block-sequence-in-mapping can influence that.
The best output for 4 spaces is subject to discussion for a lot of test cases.
Usage
Tidy a file and print to stdout
% cat in.yaml
---
a:
b:
c: d
% yamltidy in.yaml
---
a:
b:
c: d
Tidy content from stdin
% echo '---
a:
b:
c: d' | yamltidy -
---
a:
b:
c: d
Tidy a file and save the result back
% yamltidy --inplace in.yaml
% cat in.yaml
---
a:
b:
c: d
Mappings for vim
:noremap <leader>yt :%!yamltidy -<CR>
Type <leader>yt to tidy the whole buffer
:vnoremap <leader>yt :!yamltidy --partial -<CR>
Visually select lines and type <leader>yt. The first level of indentation
spaces will be kept.
Tests
yamltidy tests are using the YAML Test Suite.
The tests currently make sure that at least the yamltidy output semantically matches the input.