-
Notifications
You must be signed in to change notification settings - Fork 262
Enable use of clang format #345
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| Language: Cpp | ||
| BasedOnStyle: LLVM | ||
| AccessModifierOffset: -4 | ||
| AlignAfterOpenBracket: false | ||
| AlignConsecutiveAssignments: | ||
| Enabled: true | ||
| AcrossEmptyLines: false | ||
| AcrossComments: false | ||
| AlignConsecutiveDeclarations: | ||
| Enabled: true | ||
| AcrossEmptyLines: false | ||
| AcrossComments: false | ||
| AlignEscapedNewlines: Left | ||
| AlignOperands: true | ||
| AlignConsecutiveShortCaseStatements: | ||
| Enabled: true | ||
| AcrossEmptyLines: true | ||
| AcrossComments: true | ||
| AlignCaseColons: false | ||
| AlignTrailingComments: | ||
| Kind: Always | ||
| OverEmptyLines: 2 | ||
| AllowAllArgumentsOnNextLine: false | ||
| AllowAllParametersOfDeclarationOnNextLine: false | ||
| AllowShortBlocksOnASingleLine: Empty | ||
| AllowShortCaseLabelsOnASingleLine: true | ||
| AllowShortFunctionsOnASingleLine: Inline | ||
| AllowShortIfStatementsOnASingleLine: Never | ||
| AllowShortLambdasOnASingleLine: Empty | ||
| AllowShortLoopsOnASingleLine: false | ||
| AlwaysBreakAfterReturnType: None | ||
| AlwaysBreakBeforeMultilineStrings: true | ||
| BinPackArguments: false | ||
| BinPackParameters: false | ||
| BreakBeforeBraces: Custom | ||
| BraceWrapping: | ||
| AfterClass: true | ||
| AfterControlStatement: true | ||
| AfterEnum: true | ||
| AfterFunction: true | ||
| AfterNamespace: true | ||
| AfterStruct: true | ||
| AfterUnion: true | ||
| BeforeCatch: true | ||
| BeforeElse: true | ||
| BeforeLambdaBody: true | ||
| SplitEmptyFunction: false | ||
| SplitEmptyRecord: false | ||
| #requires clang-format 22 | ||
| #BreakAfterOpenBracketFunction: true | ||
| #BreakBeforeCloseBracketFunction: true | ||
| BreakBeforeBinaryOperators: All | ||
| BreakBeforeTernaryOperators: false | ||
| BreakConstructorInitializers: BeforeColon | ||
| BreakInheritanceList: BeforeColon | ||
| BreakTemplateDeclarations: Yes | ||
| ColumnLimit: 140 | ||
| ConstructorInitializerAllOnOneLineOrOnePerLine: true | ||
| Cpp11BracedListStyle: false | ||
| FixNamespaceComments: true | ||
| IndentCaseLabels: false | ||
| IndentExternBlock: Indent | ||
| IndentPPDirectives: None | ||
| IndentWidth: 4 | ||
| InsertNewlineAtEOF: true | ||
| LineEnding: CRLF | ||
| NamespaceIndentation: All | ||
| PackConstructorInitializers: Never | ||
| PointerAlignment: Left | ||
| ReflowComments: true | ||
| SortIncludes: false | ||
| SpaceAfterCStyleCast: false | ||
| #requires clang format 21 | ||
| #SpaceAfterOperatorKeyword: true | ||
| SpaceAfterTemplateKeyword: false | ||
| SpaceBeforeAssignmentOperators: true | ||
| SpaceBeforeCaseColon: false | ||
| SpaceBeforeCtorInitializerColon: true | ||
| SpaceBeforeParens: ControlStatements | ||
| SpaceInEmptyParentheses: false | ||
| SpacesInAngles: false | ||
| SpacesInCStyleCastParentheses: false | ||
| SpacesInContainerLiterals: false | ||
| SpacesInParentheses: false | ||
| Standard: c++17 | ||
| TabWidth: 4 | ||
| UseTab: Never | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,5 +4,8 @@ | |
| ".git", | ||
| "LICENSE", | ||
| "Tests" | ||
| ] | ||
| ], | ||
| "Disable": { | ||
| "IndentSize": true | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| <# | ||
|
|
||
| .NOTES | ||
| Copyright (c) Microsoft Corporation. | ||
| Licensed under the MIT License. | ||
|
|
||
| .SYNOPSIS | ||
| Runs clang-format on the source code. | ||
|
|
||
| .DESCRIPTION | ||
| This is use to clang-format the code using the rules in .github\linters\.clang-format. | ||
|
|
||
| The clang-format version must match the version used by GitHub Super-Linter or false positives can be found. | ||
| You can install this version locally using: | ||
|
|
||
| winget install --id=LLVM.LLVM --version 21.1.2 | ||
|
|
||
| .PARAMETER Check | ||
| Runs clang-format without modifying the files in place. | ||
|
|
||
| .PARAMETER LLVM | ||
| Normally clang-format is found on the path. If you use this switch, then it looks for it in C:\Program Files\LLVM\bin. | ||
|
|
||
| .LINKS | ||
| https://github.com/microsoft/DirectXMath | ||
|
|
||
| #> | ||
|
|
||
| [CmdletBinding()] | ||
| param( | ||
| [switch] $Check, | ||
| [Alias('UseLLVM')] | ||
| [switch] $LLVM | ||
| ) | ||
|
|
||
| $ErrorActionPreference = 'Stop' | ||
|
|
||
| $repoRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path | ||
| $configFile = Join-Path $repoRoot '.github\linters\.clang-format' | ||
|
|
||
| if (-not (Test-Path -LiteralPath $configFile -PathType Leaf)) { | ||
| throw "clang-format configuration was not found: $configFile" | ||
| } | ||
|
|
||
| $clangFormatPath = if ($LLVM) { | ||
| 'C:\Program Files\LLVM\bin\clang-format.exe' | ||
| } | ||
| else { | ||
| (Get-Command clang-format -ErrorAction SilentlyContinue).Source | ||
| } | ||
|
|
||
| if (-not $clangFormatPath -or -not (Test-Path -LiteralPath $clangFormatPath -PathType Leaf)) { | ||
| if ($LLVM) { | ||
| throw "clang-format was not found at: $clangFormatPath" | ||
| } | ||
|
|
||
| throw 'clang-format was not found on PATH.' | ||
| } | ||
|
|
||
| # This has to match the version used by GitHub super-linter or results will not match. | ||
| $requiredClangFormatVersion = '21.1.2' | ||
| $clangFormatVersion = (& $clangFormatPath '--version' 2>&1 | Out-String).Trim() | ||
| if ($LASTEXITCODE -ne 0) { | ||
| throw "Unable to determine clang-format version." | ||
| } | ||
|
|
||
| if ($clangFormatVersion -notmatch "\b$([regex]::Escape($requiredClangFormatVersion))\b") { | ||
| throw "clang-format version $requiredClangFormatVersion is required; found: $clangFormatVersion" | ||
| } | ||
|
|
||
| $sourceFiles = Get-ChildItem -LiteralPath $repoRoot -Recurse| | ||
| Where-Object { | ||
| $_.FullName -notmatch '\\(?:\.git|\.vs|build|Tests|vcpkg_installed)\\' -and $_.Extension -in '.c','.cc','.cpp','.cxx','.h','.hh','.hpp','.inl' | ||
|
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. While this script works for .inl files, I am trying to figure out how to get super-linter to include .inl files as C++ files when it runs clang-format for validation.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Super-Linter doesn't have support for inl files yet, so this PR is blocked until this is addressed. |
||
| } | ||
|
|
||
| if ($sourceFiles.Count -eq 0) { | ||
| Write-Output 'No C/C++ source files found.' | ||
| exit 0 | ||
| } | ||
|
|
||
| $arguments = @( | ||
| '--style=file:{0}' -f $configFile | ||
| ) | ||
|
|
||
| if ($Check) { | ||
| $arguments += '--dry-run' | ||
| $arguments += '--Werror' | ||
| } | ||
| else { | ||
| $arguments += '-i' | ||
| } | ||
|
|
||
| foreach ($sourceFile in $sourceFiles) { | ||
| & $clangFormatPath @arguments $sourceFile.FullName | ||
| if ($LASTEXITCODE -ne 0) { | ||
| throw "clang-format failed for $($sourceFile.FullName)." | ||
| } | ||
| } | ||
|
|
||
| if ($Check) { | ||
| Write-Output "Checked $($sourceFiles.Count) C/C++ source files." | ||
| } | ||
| else { | ||
| Write-Output "Formatted $($sourceFiles.Count) C/C++ source files." | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Once GitHub Super-Linter is updated to 22, I want to enable this to get the 'desired' layout of multi-line function calls. For now, the first parameter is always on the same line as the function name.