# 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](https://yamllint.readthedocs.io/en/stable/) and [perltidy](https://metacpan.org/pod/Perl::Tidy). 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](https://github.com/yaml/libyaml) and [perl YAML::LibYAML::API](https://metacpan.org/pod/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](https://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](.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 yt :%!yamltidy - Type `yt` to tidy the whole buffer :vnoremap yt :!yamltidy --partial - Visually select lines and type `yt`. The first level of indentation spaces will be kept. ## Tests yamltidy tests are using the [YAML Test Suite](https://github.com/yaml/yaml-test-suite). The tests currently make sure that at least the yamltidy output semantically matches the input.