Skip to content

Support C# format strings in config #4605

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Aug 9, 2025

Conversation

9swampy
Copy link
Contributor

@9swampy 9swampy commented Jun 28, 2025

Description

Support C# format strings in config

Related Issue

Fixes #4156

Motivation and Context

#4156

How Has This Been Tested?

I've implemented a number of formatters and added scenario coverage for implementation but a 4-eyes verification and feedback on appropriateness of scenarios included (or not) would be welcome. The specific scenrio noted on the wish-issue tested here and here.

I've an aversion to Helper classes but that's where I've dropped all this as an extension of the original StringFormatWith but please redirect if it should live elsewhere (or just needs some structure).

Screenshots (if appropriate):

image

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

@9swampy 9swampy marked this pull request as ready for review June 28, 2025 17:15
@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch 7 times, most recently from f192c56 to 92fa63f Compare June 28, 2025 22:21
@arturcic arturcic self-requested a review June 29, 2025 09:27
@arturcic
Copy link
Member

please rebase and resolve the conflicts

@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch from 92fa63f to 9a18634 Compare June 29, 2025 11:21
@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch 2 times, most recently from e7652ec to 16f557c Compare July 9, 2025 20:40
Copy link
Member

@asbjornu asbjornu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work! ❤️

@9swampy 9swampy requested a review from asbjornu July 15, 2025 18:55
@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch from 3e5bf0e to 65a39f5 Compare July 19, 2025 22:19
Copy link
Member

@asbjornu asbjornu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Besides the build failure, this is looking really good! The only missing part is documentation.

@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch 2 times, most recently from c7fbede to 646a634 Compare July 19, 2025 22:53
@9swampy 9swampy requested a review from asbjornu July 20, 2025 01:19
@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch 3 times, most recently from 53547ee to 625c32f Compare July 20, 2025 12:39
@arturcic
Copy link
Member

@9swampy if you don't mind I'll have a review of this in 2 weeks time as I'm on vacation. I need to understand it a bit in detail the changes as there is a chance we will need to maintain these changes.

@phatcher
Copy link
Contributor

Can I also suggest adding some tests that use the zero-suppression syntax so that we can get versions without a commits number e.g.

[TestCase(0, "{0:0000}", "0000")]
[TestCase(1, "{0:0000}", "0001")]
[TestCase(0, "{0:-0000;;''}", "")]
[TestCase(1, "{0:-0000;;''}", "-0001")]
public void ZeroFormatting(int value, string template, string expected)
{
    var candidate = string.Format(template, value);

    Assert.That(candidate, Is.EqualTo(expected));
}

@9swampy 9swampy force-pushed the SupportFormatStringsInConfig branch from 0c3e0c0 to f0e2983 Compare July 26, 2025 18:41
@arturcic
Copy link
Member

@9swampy could you please rebase your branch onto latest main and fix the conflict?

Copy link
Member

@asbjornu asbjornu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having now spun up the documentation and read through it, there's one thing I don't quite understand. In what looks like code examples, we find stuff like this:

# GitVersion.yml
template: "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}"

This gives the impression that template is a supported configuration key in GitVersion.yml. Afaik, it is not? Fixing the examples so they only provide code that actually works in GitVersion.yml and removing the test cases and I think we're good!

@9swampy
Copy link
Contributor Author

9swampy commented Aug 5, 2025

Having now spun up the documentation and read through it, there's one thing I don't quite understand. In what looks like code examples, we find stuff like this:

# GitVersion.yml
template: "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}"

This gives the impression that template is a supported configuration key in GitVersion.yml. Afaik, it is not? Fixing the examples so they only provide code that actually works in GitVersion.yml and removing the test cases and I think we're good!

No worries, it was AI generated. The way I read it was:

  • template = the key being set, from all possible valid keys
  • "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}" = the template being set

It didn't mean to imply there was a configuration key called template, but I see where you're coming from. This and the test verified examples: gone.

Really wasn't comfortable with the docs, that's why I marked them "draft". would be nice to make it in to the imminent release so if there's more tweaks don't be shy.

@arturcic
Copy link
Member

arturcic commented Aug 5, 2025

Having now spun up the documentation and read through it, there's one thing I don't quite understand. In what looks like code examples, we find stuff like this:

# GitVersion.yml
template: "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}"

This gives the impression that template is a supported configuration key in GitVersion.yml. Afaik, it is not? Fixing the examples so they only provide code that actually works in GitVersion.yml and removing the test cases and I think we're good!

No worries, it was AI generated. The way I read it was:

  • template = the key being set, from all possible valid keys
  • "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}" = the template being set

It didn't mean to imply there was a configuration key called template, but I see where you're coming from. This and the test verified examples: gone.

Really wasn't comfortable with the docs, that's why I marked them "draft". would be nice to make it in to the imminent release so if there's more tweaks don't be shy.

@asbjornu if you find all these changes good, please merge this PR

Copy link
Member

@asbjornu asbjornu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only one final question about backwards compatibility and we're good to go!

@arturcic
Copy link
Member

arturcic commented Aug 7, 2025

hey @9swampy I recently introduced sonarcloud quality checks, mind to check the new issues (they should be easy to fix), and please rebase the branch

@9swampy
Copy link
Contributor Author

9swampy commented Aug 7, 2025

hey @9swampy I recently introduced sonarcloud quality checks, mind to check the new issues (they should be easy to fix), and please rebase the branch

Have had to dance with that devil in several workplaces: no problem. Prevention's better than cure though IMHO, and there's very little that code analysers can't get in front of. Editorconfig's are fairly well respected now too.

@arturcic
Copy link
Member

arturcic commented Aug 7, 2025

@9swampy you have now the approvals, so please rebase and fix the sonar cloud issues and we are good to merge

@arturcic arturcic force-pushed the SupportFormatStringsInConfig branch from be3d7d7 to 27ef709 Compare August 9, 2025 19:37
@arturcic arturcic force-pushed the SupportFormatStringsInConfig branch from 530e243 to 5f509d8 Compare August 9, 2025 19:50
Copy link

sonarqubecloud bot commented Aug 9, 2025

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarQube Cloud

@arturcic arturcic enabled auto-merge August 9, 2025 20:01
@arturcic arturcic merged commit f84ce3a into GitTools:main Aug 9, 2025
88 checks passed
Copy link
Contributor

mergify bot commented Aug 9, 2025

Thank you @9swampy for your contribution!

arturcic added a commit that referenced this pull request Aug 9, 2025
gittools-bot pushed a commit that referenced this pull request Aug 9, 2025
Merge pull request #4605 from 9swampy/SupportFormatStringsInConfig

Support C# format strings in config
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support C# format strings in config
4 participants