google / google/yamlfmt

Inconsistent formatting depending on platform: comment above list item moved below it on Windows

Open
#198 4 comments 2 reactions 0 assignees View on GitHub
yaml_v3_problem
Dominant language
Go
Stars
1.8k
Forks
75
PR merge metrics
No merged PRs in 30d

Description

Hi,

thanks for the great library. :heart:

I found an inconsistency between a run on Ubuntu 22.04 and Windows 11.
I run `yamlfmt` via pre-commit. In a second step I tried to pin the go-lang version by adding `language_version: 1.22.5` to the hook definition.

`.pre-commit-config.yaml`

**`.pre-commit-config.yaml`**
```yaml
️️️ - repo: https://github.com/google/yamlfmt
rev: 5607b62b215d44fe90ca71a5329efff63a1a0d18 # frozen: v0.13.0
hooks:
- id: yamlfmt
language_version: 1.22.5
```

Originally I was using those formatter arguments, but removed them for the output file below.

```yaml
args:
- -formatter
- retain_line_breaks_single=true
- -formatter
- pad_line_comments=2 # two spaces before # comments, like in python
- -formatter
- scan_folded_as_literal=true # so > blocks will not get collapsed
```
️️️

**Diff**

```diff
diff --git a/demo_yamlfmt_comment_swap.yaml b/demo_yamlfmt_comment_swap.yaml
index d042395..ba164a5 100644
--- a/demo_yamlfmt_comment_swap.yaml
+++ b/demo_yamlfmt_comment_swap.yaml
@@ -3,8 +3,8 @@ some_gitlab_ci_job:
# when $TAG_LATEST_COMMIT_SOURCE_BRANCH is defined and matches $CI_COMMIT_BRANCH -> add job
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH != null && $TAG_LATEST_COMMIT_SOURCE_BRANCH==$CI_COMMIT_BRANCH
when: always
- # when $TAG_LATEST_COMMIT_SOURCE_BRANCH is not defined, and we run on $CI_DEFAULT_BRANCH -> add job
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH == null && $CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH
+ # when $TAG_LATEST_COMMIT_SOURCE_BRANCH is not defined, and we run on $CI_DEFAULT_BRANCH -> add job
when: always
- # demo comment above when:never
- when: never # do not run otherwise
+ # demo comment above when:never
```

Before: demo_yamlfmt_comment_swap.yaml

️️️
**Input file**

```yaml
some_gitlab_ci_job:
rules:
# when $TAG_LATEST_COMMIT_SOURCE_BRANCH is defined and matches $CI_COMMIT_BRANCH -> add job
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH != null && $TAG_LATEST_COMMIT_SOURCE_BRANCH==$CI_COMMIT_BRANCH
when: always
# when $TAG_LATEST_COMMIT_SOURCE_BRANCH is not defined, and we run on $CI_DEFAULT_BRANCH -> add job
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH == null && $CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH
when: always
# demo comment above when:never
- when: never # do not run otherwise

```

️️️

After: demo_yamlfmt_comment_swap.yaml

️️️
**Output file**

```yaml
some_gitlab_ci_job:
rules:
# when $TAG_LATEST_COMMIT_SOURCE_BRANCH is defined and matches $CI_COMMIT_BRANCH -> add job
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH != null && $TAG_LATEST_COMMIT_SOURCE_BRANCH==$CI_COMMIT_BRANCH
when: always
- if: $TAG_LATEST_COMMIT_SOURCE_BRANCH == null && $CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH
# when $TAG_LATEST_COMMIT_SOURCE_BRANCH is not defined, and we run on $CI_DEFAULT_BRANCH -> add job

when: always
- when: never # do not run otherwise
# demo comment above when:never
```

️️️

The same file passes yamlfmt on linux in both versions.

Is there some workaround to have the same behavior cross platform?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.