Skip to content
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

--folder option is different in SDK bundled tool vs. mainline #1385

Open
am11 opened this issue Oct 14, 2021 · 7 comments
Open

--folder option is different in SDK bundled tool vs. mainline #1385

am11 opened this issue Oct 14, 2021 · 7 comments

Comments

@am11
Copy link
Member

am11 commented Oct 14, 2021

Using the nightly (5 hours old) .NET SDK 6.0.100-rtm.21514.1 with bundled dotnet-format, --folder option doesn't have any effect.

$ dotnet6 format --version
6.0.251401+3ec0d2e1ffc98b76dca28aa23326ba0a1425dd82

# note that despite --folder, it is trying to load the workspace from csproj
$ ls *.cs | dotnet6 format --include - --folder -v:d
  The dotnet runtime version is '6.0.0-rtm.21513.22'.
  Formatting code files in workspace '/home/am11/projects/cs1/cs1.csproj'.
    Determining projects to restore...
  Restored /home/am11/projects/cs1/cs1.csproj (in 251 ms).
  Project cs1 is using configuration from '/home/am11/projects/cs1/obj/Debug/net5.0/cs1.GeneratedMSBuildEditorConfig.editorconfig'.
  Project cs1 is using configuration from '/home/am11/.dotnet6/sdk/6.0.100-rtm.21514.1/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_5_default.editorconfig'.
  Running 1 analyzers on cs1.
  Formatted 0 of 4 files.
  Format complete in 10099ms.

with latest 5x (3 days old) downloaded from nuget.org, we get:

$ dotnet-format --version
5.1.250801+4a851ea9707f87d381166c2fc2b2d4b58a10a222

$ ls *.cs | dotnet-format --include - --folder -v:d
  The dotnet format version is '5.1.250801+4a851ea9707f87d381166c2fc2b2d4b58a10a222'.
  Formatting code files in workspace '/home/am11/projects/cs1'.
/home/am11/projects/cs1/Program.cs(1,1): error WHITESPACE: Fix whitespace formatting. [/home/am11/projects/cs1]
/home/am11/projects/cs1/Program2.cs(1,1): error WHITESPACE: Fix whitespace formatting. [/home/am11/projects/cs1]
  Formatted code file '/home/am11/projects/cs1/Program.cs'.
  Formatted code file '/home/am11/projects/cs1/Program2.cs'.
  Formatted 2 of 2 files.
  Format complete in 3514ms.

The expected behavior implemented by #790.

Was it intentionally dropped out of .NET 6?

@JoeRobich
Copy link
Member

@am11 As part of our move into the dotnet SDK, we reworked our options (see breaking changes listed in #1292). The --folder option is now under the whitespace subcommand (dotnet whitespace --folder). I am surprised there was no warning about using an invalid option against the root command.

@am11
Copy link
Member Author

am11 commented Oct 15, 2021

@JoeRobich, thanks for the info. I am still lost on the why part; was the --folder option conflicting with something in the SDK scenario?
Some non-whitespace rules we are using work fine with dotnet format --include *.cs --folder:

[*.{cs,vb}]
# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true

# IDE0005: Using directive is unnecessary.
#     (this does not work with --folder, but it's fine,
#      it just gets skipped in a non-fatal manner)
dotnet_diagnostic.IDE0005.severity = warning

now with .NET 6 SDK's dotnet format whitespcae --include *.cs --folder, it has no effect since --folder has been stripped down to to a whitespace-only option.

@JoeRobich
Copy link
Member

@am11 The default dotnet format command was expanded from only applying whitespace formatting to also applying code style and third-party analyzer fixes by default. Since the --folder command has always been a whitespace-only option it was moved under the whitespace subcommand.

You also got hit by another breaking change, the organize imports formatter was moved from a whitespace formatter to be a style formatter, since it was not whitespace related and was in fact enforcing a code style rule. There has been some discussion about possibly enabling the --folder option to the subset of the code style formatting and fixing that does not require semantic information but, without hearing more feedback, it is not a priority.

CC: @jmarolf in case you have any thoughts

@jmarolf
Copy link
Contributor

jmarolf commented Oct 16, 2021

would need to understand if --folder was used for performance or some other reason. If it was just performance then I would prefer to just make everything faster.

@am11
Copy link
Member Author

am11 commented Oct 16, 2021

Yup, I'm mainly using it for performance because the default, project workspace, takes ages in large projects. 🙂

@cliffchapmanrbx
Copy link

As we're rolling out .NET 6 across our build infrastructure we got burned by this today.

We have a repository with over 1700 separate csproj files and around 800 SLN files. All told there's approximately 5.5 million LoC in the repo. To keep the entire repository in line we've been using an automated dotnet tool run dotnet-format --folder . command on the root of the repo for automatically applying fixes to folk's pull requests. This workflow has worked great to keep things in check, especially as we have a well defined .editorconfig based on the Roslyn one with all of the rules written out.

It doesn't appear that there is any way to replicate the current 5.X folder functionality, as the --folder option is only available for whitespace and not style.

@maxisam
Copy link

maxisam commented Sep 20, 2023

@cliffchapmanrbx i am trying to solve the same issue as well. My current solution is create a custom github action find out what projects are involved in the change and use matrix to run dotnet format targeting those projects separately. I wonder what is your solution in the end?

akoeplinger added a commit to akoeplinger/runtime that referenced this issue Nov 16, 2023
…json

We're no longer using the separate dotnet-format tool since it is integrated into the dotnet SDK now.

With the move to the SDK the options changed a bit so we now need to use the `whitespace` format command so we can continue using the `--folder` option: dotnet/format#1385

To run not just whitespace but code style formatters as well we'd need a workspace context (i.e. pass the .csproj to dotnet format), but inferring that from just the changed file list is hard.
akoeplinger added a commit to dotnet/runtime that referenced this issue Nov 16, 2023
…json (#94839)

We're no longer using the separate dotnet-format tool since it is integrated into the dotnet SDK now.

With the move to the SDK the options changed a bit so we now need to use the `whitespace` format command so we can continue using the `--folder` option: dotnet/format#1385

To run not just whitespace but code style formatters as well we'd need a workspace context (i.e. pass the .csproj to dotnet format), but inferring that from just the changed file list is hard.
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

No branches or pull requests

5 participants