Integrates the free CleanupCode command line tool from ReSharper Command Line Tools with git to provide low friction .net linting for teams without requiring everyone to install ReSharper.
CleanupCode supports formatting c# as well as vb.net, c++, html, asp.net, razor, javascript, typescript, css, xml, & xaml.
ReGitLint puts and end to style wars by making it easy to add git hooks and CI checks to ensure code is formatted consistenlty. Your team will be holding hands and singing kum ba yah in no time!
Formatting options are specified in .editorconfig so everyone can use their favorite editor. There are many formatting options supported... Here's a reference
dotnet format
is cool, but currently doesn't support .editorconfig
max_line_length. For curmudgeons like me this is a deal breaker. There's an
open issue for it but so far
no fix.
If you don't already have a tool manifest in your project
dotnet new tool-manifest
Install jb & regitlint
dotnet tool install JetBrains.ReSharper.GlobalTools
dotnet tool install ReGitLint
Now to clean up the whole solution run
dotnet regitlint
To keep everything formatted you can add a pre-commit hook and build step. Don't panic!!! ReGitLint has options to format only what's changed so it's fast!
Add the following to .git/hooks/pre-commit
#!/bin/sh
dotnet regitlint -f staged --fail-on-diff
ReGitLint will run CleanupCode to format all staged files. If they don't match .editorconfig the commit will fail and you'll see a message like:
!!!! Process Aborted !!!!
Code formatter changed the following files:
* Directory/SomeCode.cs
To enforce code formatting on the build server add this to your build script
dotnet tool restore
dotnet regitlint -f commits -a $env.GIT_PREVIOUS_SUCCESSFUL_COMMIT -b $env.GIT_COMMIT --fail-on-diff --print-diff
Or if you use jenkins you can just add this
dotnet tool restore
dotnet regitlint --jenkins
This will only format the files changed between the commit that triggered the build and the commit that triggered the last successful build. This saves a lot of time when compared to formatting all files on a large project.
-
Run cleanup on entire solution
dotnet regitlint
-
Format only, don't run a full code cleanup
dotnet regitlint --format-only
-
Clean up all staged files
dotnet regitlint -f staged
-
Clean up all modified files
dotnet regitlint -f modified
-
Clean up only c# files
dotnet regitlint -p "**/*.cs"
-
Clean up only js files
dotnet regitlint -p "**/*.js"
-
Clean up all files modified by commit 3796556
dotnet regitlint -f commits -a 3796556
-
Clean up all files modified between commit 6708090 and 3796556
dotnet regitlint -f commits -a 6708090 -b 3796556
-
Clean up all files modified by the last four commits
dotnet regitlint -f commits -a head^^^^ -b head
-
Clean up all files modified by the last four commits, including staged and unstaged changes
dotnet regitlint -f staged,modified,commits -a head^^^^ -b head
-
Clean up staged files, return 1 if files change. Handy for git hooks.
dotnet regitlint -f staged --fail-on-diff
-
Clean up files between commits and return 1 if files change. Handy for enforcing code formatting on build server.
dotnet regitlint -f commits -a 6708090 -b 3796556 --fail-on-diff
-
Enforce code formatting on jenkins
dotnet regitlint --jenkins
-
Enforce code formatting on other build servers
dotnet regitlint -f commits -a $env.GIT_PREVIOUS_SUCCESSFUL_COMMIT -b $env.GIT_COMMIT --fail-on-diff --print-diff
-
Pass options through to jb cleanupcode
dotnet regitlint --jb --toolset=16.0 --jb --exclude="**/*.html"
If you've found ReGitLint helpful you can buy me a coffee to say thanks. Happy linting!