From 68c1222725b55c8cbc2004c0694fd34b6b6935d7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 1 Sep 2021 16:38:38 -0700 Subject: [PATCH 01/13] Add scripts that download clang-format. --- eng/formatting/download-tools.ps1 | 30 +++++++++++++++++++++++++ eng/formatting/download-tools.sh | 37 +++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 eng/formatting/download-tools.ps1 create mode 100644 eng/formatting/download-tools.sh diff --git a/eng/formatting/download-tools.ps1 b/eng/formatting/download-tools.ps1 new file mode 100644 index 0000000000000..b756aac93cd61 --- /dev/null +++ b/eng/formatting/download-tools.ps1 @@ -0,0 +1,30 @@ +$downloadPathFolder = Split-Path $PSScriptRoot -Parent | Split-Path -Parent | Join-Path -ChildPath "artifacts" | Join-Path -ChildPath "tools" + +mkdir $downloadPathFolder -ErrorAction SilentlyContinue + +if (-not $(ls $downloadPathFolder | Where-Object {$_.Name -eq "clang-format.exe"})) +{ + $baseBackoffSeconds = 15; + + $success = $false + for ($i = 0; $i -lt 5; $i++) { + $status = Invoke-WebRequest -Uri "https://clrjit.blob.core.windows.net/clang-tools/windows/clang-format.exe" -OutFile $(Join-Path $downloadPathFolder -ChildPath "clang-format.exe") + echo $status + if ($status.StatusCode -lt 400) + { + $success = $true + break + } else { + Write-Output "Download attempt $($i+1) failed. Trying again in $($baseBackoffSeconds + $baseBackoffSeconds * $i) seconds" + Start-Sleep -Seconds $($baseBackoffSeconds + $baseBackoffSeconds * $i) + } + } + if (-not $success) + { + Write-Output "Failed to download clang-format" + return 1 + } +} + +# Add to path to enable scripts to skip additional downloading steps since the tools will already be on the path. +$env:PATH = "$downloadPathFolder;$env:PATH" diff --git a/eng/formatting/download-tools.sh b/eng/formatting/download-tools.sh new file mode 100644 index 0000000000000..0d7394e9549c7 --- /dev/null +++ b/eng/formatting/download-tools.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -ue + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +engFolder="$(cd -P "$( dirname "$scriptroot" )" && pwd )" +downloadPathFolder="$(cd -P "$( dirname "$engFolder" )" && pwd )/artifacts/tools" + +mkdir -p "$downloadPathFolder" + +. "$scriptroot/../common/tools.sh" + +InitializeDotNetCli true + +targetPlatform=$(dotnet --info |grep RID:) +targetPlatform=${targetPlatform##*RID:* } + +clangFormatUrl=https://clrjit.blob.core.windows.net/clang-tools/${targetPlatform}/clang-format +clangFormatOutput=${downloadPathFolder}/clang-format + +if [[ ! -x "$downloadPathFolder/clang-format" ]]; then + curl --retry 5 -o "${clangFormatOutput}" "$clangFormatUrl" + chmod 751 $clangFormatOutput +fi + +export PATH=$downloadPathFolder:$PATH From 1339006421e894dbe03d1ed5bb348a877dc1c613 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 2 Sep 2021 09:48:56 -0700 Subject: [PATCH 02/13] Also download clang-tidy --- eng/formatting/download-tools.ps1 | 56 ++++++++++++++++++++----------- eng/formatting/download-tools.sh | 26 ++++++++------ 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/eng/formatting/download-tools.ps1 b/eng/formatting/download-tools.ps1 index b756aac93cd61..132606eeab0d0 100644 --- a/eng/formatting/download-tools.ps1 +++ b/eng/formatting/download-tools.ps1 @@ -1,30 +1,46 @@ -$downloadPathFolder = Split-Path $PSScriptRoot -Parent | Split-Path -Parent | Join-Path -ChildPath "artifacts" | Join-Path -ChildPath "tools" - -mkdir $downloadPathFolder -ErrorAction SilentlyContinue -if (-not $(ls $downloadPathFolder | Where-Object {$_.Name -eq "clang-format.exe"})) +function DownloadClangTool { - $baseBackoffSeconds = 15; + param ( + [string] + $toolName, + [string] + $downloadOutputPath + ) + + $baseUri = "https://clrjit.blob.core.windows.net/clang-tools/windows" - $success = $false - for ($i = 0; $i -lt 5; $i++) { - $status = Invoke-WebRequest -Uri "https://clrjit.blob.core.windows.net/clang-tools/windows/clang-format.exe" -OutFile $(Join-Path $downloadPathFolder -ChildPath "clang-format.exe") - echo $status - if ($status.StatusCode -lt 400) + if (-not $(ls $downloadOutputPath | Where-Object {$_.Name -eq "$toolName.exe"})) + { + $baseBackoffSeconds = 15; + + $success = $false + for ($i = 0; $i -lt 5; $i++) { + echo "Attempting download of '$baseUri/$toolName.exe'" + $status = Invoke-WebRequest -Uri "$baseUri/$toolName.exe" -OutFile $(Join-Path $downloadOutputPath -ChildPath "$toolName.exe") + if ($status.StatusCode -lt 400) + { + $success = $true + break + } else { + echo "Download attempt $($i+1) failed. Trying again in $($baseBackoffSeconds + $baseBackoffSeconds * $i) seconds" + Start-Sleep -Seconds $($baseBackoffSeconds + $baseBackoffSeconds * $i) + } + } + if (-not $success) { - $success = $true - break - } else { - Write-Output "Download attempt $($i+1) failed. Trying again in $($baseBackoffSeconds + $baseBackoffSeconds * $i) seconds" - Start-Sleep -Seconds $($baseBackoffSeconds + $baseBackoffSeconds * $i) + Write-Output "Failed to download clang-format" + return 1 } } - if (-not $success) - { - Write-Output "Failed to download clang-format" - return 1 - } } +$downloadPathFolder = Split-Path $PSScriptRoot -Parent | Split-Path -Parent | Join-Path -ChildPath "artifacts" | Join-Path -ChildPath "tools" + +mkdir $downloadPathFolder -ErrorAction SilentlyContinue + +DownloadClangTool "clang-format" "$downloadPathFolder" +DownloadClangTool "clang-tidy" "$downloadPathFolder" + # Add to path to enable scripts to skip additional downloading steps since the tools will already be on the path. $env:PATH = "$downloadPathFolder;$env:PATH" diff --git a/eng/formatting/download-tools.sh b/eng/formatting/download-tools.sh index 0d7394e9549c7..d8f8b0b93ac87 100644 --- a/eng/formatting/download-tools.sh +++ b/eng/formatting/download-tools.sh @@ -14,6 +14,20 @@ while [[ -h "$source" ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" +function DownloadClangTool { + targetPlatform=$(dotnet --info |grep RID:) + targetPlatform=${targetPlatform##*RID:* } + + toolUrl=https://clrjit.blob.core.windows.net/clang-tools/${targetPlatform}/$1 + toolOutput=$2/$1 + + if [[ ! -x "$toolOutput" ]]; then + curl --retry 5 -o "${toolOutput}" "$toolUrl" + chmod 751 $toolOutput + fi +} + + engFolder="$(cd -P "$( dirname "$scriptroot" )" && pwd )" downloadPathFolder="$(cd -P "$( dirname "$engFolder" )" && pwd )/artifacts/tools" @@ -23,15 +37,7 @@ mkdir -p "$downloadPathFolder" InitializeDotNetCli true -targetPlatform=$(dotnet --info |grep RID:) -targetPlatform=${targetPlatform##*RID:* } - -clangFormatUrl=https://clrjit.blob.core.windows.net/clang-tools/${targetPlatform}/clang-format -clangFormatOutput=${downloadPathFolder}/clang-format - -if [[ ! -x "$downloadPathFolder/clang-format" ]]; then - curl --retry 5 -o "${clangFormatOutput}" "$clangFormatUrl" - chmod 751 $clangFormatOutput -fi +DownloadClangTool "clang-format" "$downloadPathFolder" +DownloadClangTool "clang-tidy" "$downloadPathFolder" export PATH=$downloadPathFolder:$PATH From df0b0d98b8144e443d1a014ae0b41c9d455ad688 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 2 Sep 2021 09:49:59 -0700 Subject: [PATCH 03/13] Reduce base retry backoff --- eng/formatting/download-tools.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/formatting/download-tools.ps1 b/eng/formatting/download-tools.ps1 index 132606eeab0d0..36959c784f555 100644 --- a/eng/formatting/download-tools.ps1 +++ b/eng/formatting/download-tools.ps1 @@ -12,7 +12,7 @@ function DownloadClangTool if (-not $(ls $downloadOutputPath | Where-Object {$_.Name -eq "$toolName.exe"})) { - $baseBackoffSeconds = 15; + $baseBackoffSeconds = 2; $success = $false for ($i = 0; $i -lt 5; $i++) { From a03865d99e5f146457a8f7631ad5b23d60aee44f Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 2 Sep 2021 10:09:29 -0700 Subject: [PATCH 04/13] Update formatting script uesd in CI to use the new download scripts to pull down the formatting tools. --- eng/formatting/download-tools.sh | 5 +++++ src/tests/Common/scripts/format.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) mode change 100644 => 100755 eng/formatting/download-tools.sh diff --git a/eng/formatting/download-tools.sh b/eng/formatting/download-tools.sh old mode 100644 new mode 100755 index d8f8b0b93ac87..4534c41de7b17 --- a/eng/formatting/download-tools.sh +++ b/eng/formatting/download-tools.sh @@ -25,6 +25,11 @@ function DownloadClangTool { curl --retry 5 -o "${toolOutput}" "$toolUrl" chmod 751 $toolOutput fi + + if [[ ! -x "$toolOutput" ]]; then + echo "Failed to download $1" + exit 1 + fi } diff --git a/src/tests/Common/scripts/format.py b/src/tests/Common/scripts/format.py index dcb3ef1ddf500..f6d0133ccbcbe 100644 --- a/src/tests/Common/scripts/format.py +++ b/src/tests/Common/scripts/format.py @@ -105,6 +105,23 @@ def main(argv): my_env = os.environ + # Download formatting tools + repoRoot = os.path.dirname(os.path.dirname(os.path.dirname(coreclr))) + formattingScriptFolder = os.path.join(repoRoot, "eng", "formatting") + formattingDownloadScriptCommand = [] + if platform == 'Linux' or platform == 'OSX': + formattingDownloadScriptCommand = [os.path.join(formattingScriptFolder, "download-tools.sh")] + elif platform == 'windows': + formattingDownloadScriptCommand = ["powershell", os.path.join(formattingScriptFolder, "download-tools.ps1")] + + proc = subprocess.Popen(formattingDownloadScriptCommand) + + if proc.wait() != 0: + print("Formatting tool download failed") + return -1 + + my_env["PATH"] = os.path.join(repoRoot, "artifacts", "tools") + os.pathsep + my_env["PATH"] + # Download bootstrap bootstrapFilename = "" From eb54a66134a4f39e100fd81ee4cfc0519721a952 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 2 Sep 2021 11:04:28 -0700 Subject: [PATCH 05/13] Start formatting tools guidelines with instructions for hooking up clang-format with the new download scripts. --- .../code-formatting-tools.md | 61 +++++++++++++++++++ docs/coding-guidelines/coding-style.md | 2 +- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 docs/coding-guidelines/code-formatting-tools.md diff --git a/docs/coding-guidelines/code-formatting-tools.md b/docs/coding-guidelines/code-formatting-tools.md new file mode 100644 index 0000000000000..dd2fe6b57bba4 --- /dev/null +++ b/docs/coding-guidelines/code-formatting-tools.md @@ -0,0 +1,61 @@ +# Code Formatting Tools in dotnet/runtime + +In this repository, we use various different formatting conventions depending on who owns the code. Additionally, we use different formatting tools depending on if the code is managed C# or VB code or if the code is native C or C++ code. + +To help enable an easy workflow and reduce the number of formatting changes requested, this document provides steps to download and enable the various different tools in different development environments to enable a seamless workflow for ensuring that keeping code formatted is a pleasant experience. + +## Downloading formatting tools + +### C#/VB + +C# and VB code in the repository use the built-in Roslyn support for EditorConfig to enable auto-formatting in many IDEs. As a result, no additional tools are required to enable keeping your code formatted. + +### C/C++ + +To download the formatting tools for C++, run the `download-tools.ps1/sh` script in the `eng/formatting` folder. Specifically, run the `download-tools.ps1` script if you're on Windows, or the `download-tools.sh` script otherwise. + +This script will download the `clang-format` and `clang-tidy` tools to the `artifacts/tools` folder in your clone of the repository. Only specific parts of the repository use `clang-tidy`, so this document primarily focuses on setting up `clang-format` for C and C++ scenarios. + +## Setting up automatic formatting + +To make the formatting workflow more seamless for contributors, instructions are included below to help enable "format-on-save" or other forms of automatic formatting in various different IDEs or as a Git pre-commit hook for IDEs that do not support "format-on-save" scenarios. + +This section is open to contributions for instructions on how to enable "format-on-save"-like semantics in IDEs and editors not mentioned. + +### Visual Studio Code + +Enabling a "format-on-save" experience in VSCode is quite easy. Add the following setting to your `.vscode/settings.json` file to enable "format-on-save": + +```json + "editor.formatOnSave": true, +``` + +The sections below include any additional instructions to configure the experience for different languages. + +#### C#/VB + +TODO: Omnisharp doesn't install a VSCode "formatter" + +#### C/C++ + +VSCode ships with a different version of clang-format than we use in this repo, so you will need to add a few more settings to get VSCode to run the correct clang-format for "format-on-save". + +You can add the following setting on Windows to your `.vscode/settings.json` file to configure clang-format for the repository: + +```json + "C_Cpp.clang_format_path": "./artifacts/tools/clang-format.exe" +``` + +On non-Windows, you can add the following setting instead: + +```json + "C_Cpp.clang_format_path": "./artifacts/tools/clang-format" +``` + +### Visual Studio + +#### C#/VB + +#### C/C++ + +### Git Hooks diff --git a/docs/coding-guidelines/coding-style.md b/docs/coding-guidelines/coding-style.md index 856ce8f5bb4ea..709d4719d1c68 100644 --- a/docs/coding-guidelines/coding-style.md +++ b/docs/coding-guidelines/coding-style.md @@ -1,7 +1,7 @@ C# Coding Style =============== -For C++ files (*.cpp and *.h), we use clang-format (version 3.6+) to ensure code styling. After changing any Cpp or H file and before merging, src/Native/format-code.sh must be run. This script will ensure that all native code files adhere to the coding style guidelines. +For C++ files (*.cpp and *.h), we use clang-format (version 3.8) to ensure code styling. After changing any Cpp or H file and before merging, src/Native/format-code.sh must be run. This script will ensure that all native code files adhere to the coding style guidelines. For other types of files (xml, bat, sh, etc), our current best guidance is consistency. When editing files, keep new code and changes consistent with the style in the files. For new files, it should conform to the style for that component. If there is a completely new component, anything that is reasonably broadly accepted is fine. For script files, please refer to the scripting blog for [tips](https://devblogs.microsoft.com/scripting/tag/powertip) and [best practices](https://devblogs.microsoft.com/scripting/tag/best-practices). From fb0d8aa09610e27a409af91b84b660c0e56c853d Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 3 Sep 2021 14:28:54 -0700 Subject: [PATCH 06/13] Add script to enable "format on commit" functionality for when "format on save" is unavailable. --- .../code-formatting-tools.md | 12 +++++- eng/formatting/format.sh | 37 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 eng/formatting/format.sh diff --git a/docs/coding-guidelines/code-formatting-tools.md b/docs/coding-guidelines/code-formatting-tools.md index dd2fe6b57bba4..1432b861862e8 100644 --- a/docs/coding-guidelines/code-formatting-tools.md +++ b/docs/coding-guidelines/code-formatting-tools.md @@ -34,7 +34,7 @@ The sections below include any additional instructions to configure the experien #### C#/VB -TODO: Omnisharp doesn't install a VSCode "formatter" + #### C/C++ @@ -54,8 +54,18 @@ On non-Windows, you can add the following setting instead: ### Visual Studio +Visual Studio does not have a "format-on-save" feature but it does have settings for "format on end of statement" or "format on end of block" that can provide some auto-formatting features. + +Using these features in combination with the steps specified in the [Git Hooks](#git-hooks) section will enable a seamless formatting experience. + #### C#/VB #### C/C++ ### Git Hooks + +Git provides a number of hooks to enable running scripts before commit, push, pull, etc. This section describes adding a pre-commit hook to automatically format code before committing to make formatting seamless even when your development environment doesn't support "format-on-save" or similar functionality with the formatting tools this repository uses. + +#### Auto-format before committing + +To enable auto-formatting before committing, you can create a `.git/hooks/pre-commit` file in your local `dotnet/runtime` clone and add a call to the script located at `eng/formatting/format.sh` to auto-format your code before committing. Since Git for Windows also installs Git Bash, this script will work for both Windows and non-Windows platforms. diff --git a/eng/formatting/format.sh b/eng/formatting/format.sh new file mode 100644 index 0000000000000..8fb60739cfac6 --- /dev/null +++ b/eng/formatting/format.sh @@ -0,0 +1,37 @@ +#!/bin/sh +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + + +hooksFolder="$(cd -P "$( dirname "$scriptroot" )" && pwd )" +gitFolder="$(cd -P "$( dirname "$hooksFolder" )" && pwd )" +repoRoot="$(cd -P "$( dirname "$gitFolder" )" && pwd )" + +LC_ALL=C +# Select files to format +NATIVE_FILES=$(git diff --cached --name-only --diff-filter=ACM "*.h" "*.hpp" "*.c" "*.cpp" "*.inl" | sed 's| |\\ |g') +MANAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM "*.cs" "*.vb" | sed 's| |\\ |g') + +if [[ -n "$NATIVE_FILES" ]]; then + # Format all selected files + echo "$NATIVE_FILES" | cat | xargs | sed -e 's/ /,/g' | xargs "$repoRoot/artifacts/tools/clang-format" -style=file -i + + # Add back the modified files to staging + echo "$NATIVE_FILES" | xargs git add +fi +if [[ -n "$MANAGED_FILES" ]]; then + # Format all selected files + echo "$MANAGED_FILES" | cat | xargs | sed -e 's/ /,/g' | dotnet format --include + + # Add back the modified files to staging + echo "$MANAGED_FILES" | xargs git add +fi + + +exit 0 From bfdb42a25a1a9854410ebe05b1aef9331b21a073 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 20 Sep 2021 13:35:57 -0700 Subject: [PATCH 07/13] Simplify format.sh script based on the rules of the pre-commit Git hook. --- eng/formatting/format.sh | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/eng/formatting/format.sh b/eng/formatting/format.sh index 8fb60739cfac6..5a9edf4c33997 100644 --- a/eng/formatting/format.sh +++ b/eng/formatting/format.sh @@ -1,26 +1,15 @@ #!/bin/sh -while [[ -h "$source" ]]; do - scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" - source="$(readlink "$source")" - # if $source was a relative symlink, we need to resolve it relative to the path where the - # symlink file was located - [[ $source != /* ]] && source="$scriptroot/$source" -done -scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" - - -hooksFolder="$(cd -P "$( dirname "$scriptroot" )" && pwd )" -gitFolder="$(cd -P "$( dirname "$hooksFolder" )" && pwd )" -repoRoot="$(cd -P "$( dirname "$gitFolder" )" && pwd )" LC_ALL=C # Select files to format NATIVE_FILES=$(git diff --cached --name-only --diff-filter=ACM "*.h" "*.hpp" "*.c" "*.cpp" "*.inl" | sed 's| |\\ |g') MANAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM "*.cs" "*.vb" | sed 's| |\\ |g') +exec 1>&2 + if [[ -n "$NATIVE_FILES" ]]; then # Format all selected files - echo "$NATIVE_FILES" | cat | xargs | sed -e 's/ /,/g' | xargs "$repoRoot/artifacts/tools/clang-format" -style=file -i + echo "$NATIVE_FILES" | cat | xargs | sed -e 's/ /,/g' | xargs "./artifacts/tools/clang-format" -style=file -i # Add back the modified files to staging echo "$NATIVE_FILES" | xargs git add From 8e40f8a639f9fece8aa18f85df4dd972557e2cd5 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 20 Sep 2021 13:38:06 -0700 Subject: [PATCH 08/13] Add a sample of the pre-commit file contents for the auto-formatter. --- docs/coding-guidelines/code-formatting-tools.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/coding-guidelines/code-formatting-tools.md b/docs/coding-guidelines/code-formatting-tools.md index 1432b861862e8..3e06509fb5b91 100644 --- a/docs/coding-guidelines/code-formatting-tools.md +++ b/docs/coding-guidelines/code-formatting-tools.md @@ -69,3 +69,11 @@ Git provides a number of hooks to enable running scripts before commit, push, pu #### Auto-format before committing To enable auto-formatting before committing, you can create a `.git/hooks/pre-commit` file in your local `dotnet/runtime` clone and add a call to the script located at `eng/formatting/format.sh` to auto-format your code before committing. Since Git for Windows also installs Git Bash, this script will work for both Windows and non-Windows platforms. + +The following code block can be used as the contents of the `pre-commit` file to enable the auto-formatting hook: + +```sh +#!/bin/sh +./eng/formatting/format.sh + +``` From 84d1f2eaf6da06aad53f5270c1cfce5a7af702cd Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 20 Sep 2021 13:41:34 -0700 Subject: [PATCH 09/13] Add the dotnet-format tool to the dotnet tools to ensure that it is available for the formatter script. --- .config/dotnet-tools.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 527cf66d1f6df..6e6f1e9a97f1b 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -25,6 +25,12 @@ "commands": [ "slngen" ] + }, + "dotnet-format": { + "version": "6.0.240501", + "commands": [ + "dotnet-format" + ] } } } From 29affbd9e46a8b9061cdf4dd7daf8f2207700842 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 20 Sep 2021 16:02:53 -0700 Subject: [PATCH 10/13] Fix repoRoot calculation in format.py --- src/tests/Common/scripts/format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/Common/scripts/format.py b/src/tests/Common/scripts/format.py index f6d0133ccbcbe..3e8d5509de4ae 100644 --- a/src/tests/Common/scripts/format.py +++ b/src/tests/Common/scripts/format.py @@ -106,7 +106,7 @@ def main(argv): my_env = os.environ # Download formatting tools - repoRoot = os.path.dirname(os.path.dirname(os.path.dirname(coreclr))) + repoRoot = os.path.dirname(os.path.dirname(coreclr)) formattingScriptFolder = os.path.join(repoRoot, "eng", "formatting") formattingDownloadScriptCommand = [] if platform == 'Linux' or platform == 'OSX': From 3623142971377970a4cc05b8e3b8dd07aea4166c Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 21 Sep 2021 13:35:37 -0700 Subject: [PATCH 11/13] Add root clang-format config file to disable automatic formatting for any dir that doesn't already have a style configured. --- .clang-format | 1 + 1 file changed, 1 insertion(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000000..e3845288a2aec --- /dev/null +++ b/.clang-format @@ -0,0 +1 @@ +DisableFormat: true From 91f8257fbdd2fc622dda030f783e873ff4c531fe Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 21 Sep 2021 17:07:03 -0700 Subject: [PATCH 12/13] Add mentions about jitutils and how to set up dotnet-format. --- docs/coding-guidelines/code-formatting-tools.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/coding-guidelines/code-formatting-tools.md b/docs/coding-guidelines/code-formatting-tools.md index 3e06509fb5b91..241624071aa2b 100644 --- a/docs/coding-guidelines/code-formatting-tools.md +++ b/docs/coding-guidelines/code-formatting-tools.md @@ -8,7 +8,7 @@ To help enable an easy workflow and reduce the number of formatting changes requ ### C#/VB -C# and VB code in the repository use the built-in Roslyn support for EditorConfig to enable auto-formatting in many IDEs. As a result, no additional tools are required to enable keeping your code formatted. +C# and VB code in the repository use the built-in Roslyn support for EditorConfig to enable auto-formatting in many IDEs. As a result, no additional tools are required to enable keeping your code formatted. If you want to use `dotnet format` to do formatting or are using the git pre-commit hook mentioned later in this document, you can run `./dotnet.cmd tool restore` or `./dotnet.sh tool restore` from the root of the repository to enable the `dotnet format` command. ### C/C++ @@ -16,6 +16,10 @@ To download the formatting tools for C++, run the `download-tools.ps1/sh` script This script will download the `clang-format` and `clang-tidy` tools to the `artifacts/tools` folder in your clone of the repository. Only specific parts of the repository use `clang-tidy`, so this document primarily focuses on setting up `clang-format` for C and C++ scenarios. +#### CoreCLR JIT + +The JIT team uses a special `jit-format` tool that runs `clang-format` and `clang-tidy` on their directory with their settings. You can get the `jit-format` tool from the [dotnet/jitutils repository](https://github.com/dotnet/jitutils). + ## Setting up automatic formatting To make the formatting workflow more seamless for contributors, instructions are included below to help enable "format-on-save" or other forms of automatic formatting in various different IDEs or as a Git pre-commit hook for IDEs that do not support "format-on-save" scenarios. From cc87b1c5b2ddb3aabdf51645da6e77f765d0656c Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Wed, 22 Sep 2021 13:56:01 -0700 Subject: [PATCH 13/13] Fill out the rest of the docs. --- docs/coding-guidelines/code-formatting-tools.md | 12 +++++++++++- docs/coding-guidelines/vs-cpp-formatting.png | Bin 0 -> 67399 bytes docs/coding-guidelines/vs-csharp-formatting.png | Bin 0 -> 49252 bytes 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 docs/coding-guidelines/vs-cpp-formatting.png create mode 100644 docs/coding-guidelines/vs-csharp-formatting.png diff --git a/docs/coding-guidelines/code-formatting-tools.md b/docs/coding-guidelines/code-formatting-tools.md index 241624071aa2b..c5cb1ce48f55d 100644 --- a/docs/coding-guidelines/code-formatting-tools.md +++ b/docs/coding-guidelines/code-formatting-tools.md @@ -38,7 +38,7 @@ The sections below include any additional instructions to configure the experien #### C#/VB - +There are currently some limitations in OmniSharp that causes issues with the auto-formatting. Once a VSCode C# extension releases with both https://github.com/OmniSharp/omnisharp-roslyn/pull/2227 and https://github.com/OmniSharp/omnisharp-vscode/pull/4738, then format-on-save should be possible to enable in VSCode for C# and Visual Basic sources. #### C/C++ @@ -62,10 +62,20 @@ Visual Studio does not have a "format-on-save" feature but it does have settings Using these features in combination with the steps specified in the [Git Hooks](#git-hooks) section will enable a seamless formatting experience. +The settings for C#, VB, C, and C++ are all in a dialog under the `Tools > Options` menu item. + #### C#/VB +In the options view, go to `Text Editor > C# > Code Style > Formatting > General` for C# settings. Make sure to check the various options for whenever you want Visual Studio to auto-format your code. + +![C# formatting settings in Visual Studio](./vs-csharp-formatting.png) + #### C/C++ +In the options view, go to `Text Editor > C/C++ > Code Style > Formatting > General` for C# settings. Make sure to check the various options for whenever you want Visual Studio to auto-format your code. + +![C/C++ formatting settings in Visual Studio](./vs-cpp-formatting.png) + ### Git Hooks Git provides a number of hooks to enable running scripts before commit, push, pull, etc. This section describes adding a pre-commit hook to automatically format code before committing to make formatting seamless even when your development environment doesn't support "format-on-save" or similar functionality with the formatting tools this repository uses. diff --git a/docs/coding-guidelines/vs-cpp-formatting.png b/docs/coding-guidelines/vs-cpp-formatting.png new file mode 100644 index 0000000000000000000000000000000000000000..2808145ca1650f8023dabaed5da1ee13e7787406 GIT binary patch literal 67399 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 PB@rwoAg6Z{{vqM%(JL_s}s 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 VZOTmWrh~NK+L{Kp%5ONt{1?K21TO#p literal 0 HcmV?d00001 diff --git a/docs/coding-guidelines/vs-csharp-formatting.png b/docs/coding-guidelines/vs-csharp-formatting.png new file mode 100644 index 0000000000000000000000000000000000000000..c459efc12b878a393f101d26cae67821a1025c03 GIT binary patch literal 49252 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