summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/rules/yaml.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/ansiblelint/rules/yaml.md')
-rw-r--r--src/ansiblelint/rules/yaml.md58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/ansiblelint/rules/yaml.md b/src/ansiblelint/rules/yaml.md
index 8dc56eb..654f80e 100644
--- a/src/ansiblelint/rules/yaml.md
+++ b/src/ansiblelint/rules/yaml.md
@@ -1,6 +1,8 @@
# yaml
-This rule checks YAML syntax and is an implementation of `yamllint`.
+This rule checks YAML syntax by using [yamllint] library but with a
+[specific default configuration](#yamllint-configuration), one that is
+compatible with both, our internal reformatter (`--fix`) and also [prettier].
You can disable YAML syntax violations by adding `yaml` to the `skip_list` in
your Ansible-lint configuration as follows:
@@ -53,6 +55,7 @@ Some of the detailed error codes that you might see are:
- `yaml[empty-lines]` - _too many blank lines (...> ...)_
- `yaml[indentation]` - _Wrong indentation: expected ... but found ..._
- `yaml[key-duplicates]` - _Duplication of key "..." in mapping_
+- `yaml[line-length]` - _Line too long (... > ... characters)_
- `yaml[new-line-at-end-of-file]` - _No new line character at the end of file_
- `yaml[octal-values]`: forbidden implicit or explicit [octal](#octals) value
- `yaml[syntax]` - YAML syntax is broken
@@ -72,6 +75,13 @@ for it does check these. If for some reason, you do not want to follow our
defaults, you can create a `.yamllint` file in your project and this will take
precedence over our defaults.
+## Additional Information for Multiline Strings
+
+Adhering to yaml[line-length] rule, for writing multiline strings we recommend
+using Block Style Indicator: literal style indicated by a pipe (|) or folded
+style indicated by a right angle bracket (>), instead of escaping the newlines
+with backslashes. Reference [guide] for writing multiple line strings in yaml.
+
## Problematic code
```yaml
@@ -91,7 +101,53 @@ foo2: "0o777" # <-- Explicitly quoting octal is less risky.
bar: ... # Correct comment indentation.
```
+## Yamllint configuration
+
+If you decide to add a custom yamllint config to your project, ansible-lint
+might refuse to run if it detects that some of your options are incompatible and
+ask you to correct them. When this happens, you will see a message like the one
+below:
+
+```
+CRITICAL Found incompatible custom yamllint configuration (.yamllint), please either remove the file or edit it to comply with:
+ - comments.min-spaces-from-content must be 1
+ - braces.min-spaces-inside must be 0
+ - braces.max-spaces-inside must be 1
+ - octal-values.forbid-implicit-octal must be true
+ - octal-values.forbid-explicit-octal must be true
+
+Read https://ansible.readthedocs.io/projects/lint/rules/yaml/ for more details regarding why we have these requirements.
+```
+
+!!! warning
+
+ [Auto-fix](../autofix.md) functionality will change **inline comment indentation to one
+ character instead of two**, which is the default of [yamllint]. The reason
+ for this decision was to keep reformatting compatibility
+ with [prettier], which is the most popular reformatter.
+
+ ```yaml title=".yamllint"
+ rules:
+ comments:
+ min-spaces-from-content: 1 # prettier compatibility
+ ```
+
+ There is no need to create this yamllint config file, but if you also
+ run yamllint yourself, you might want to create it to make it behave
+ the same way as ansible-lint.
+
+Below you can find the default yamllint configuration that our linter will use
+when there is no custom file present.
+
+```yaml
+{!../src/ansiblelint/data/.yamllint!}
+```
+
[1.1]: https://yaml.org/spec/1.1/
[1.2.0]: https://yaml.org/spec/1.2.0/
[1.2.2]: https://yaml.org/spec/1.2.2/
[yaml specification]: https://yaml.org/
+[guide]:
+ https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html#yaml-basics
+[prettier]: https://prettier.io/
+[yamllint]: https://yamllint.readthedocs.io/en/stable/