Browse Source

Add formatting settings

- Added `RunClangFormat` shell script
- Added workflow to check if formatting was applied to PR's
pull/1912/head
duckdoom5 4 months ago
parent
commit
2f5b92b4c3
  1. 89
      .clang-format
  2. 90
      .editorconfig
  3. 29
      .github/workflows/clang-format-check.yml
  4. 4
      .github/workflows/main.yml
  5. 122
      RunClangFormat.bat

89
.clang-format

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
Language : Cpp
BasedOnStyle : Microsoft
Standard : Latest
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
AccessModifierOffset : -4
AlignTrailingComments :
Kind : Always
OverEmptyLines : 0
AllowAllParametersOfDeclarationOnNextLine : false
AllowShortBlocksOnASingleLine : Empty
AllowShortIfStatementsOnASingleLine : Never
AllowShortLoopsOnASingleLine : false
AllowShortCaseLabelsOnASingleLine : true
AllowShortFunctionsOnASingleLine : Inline
AllowShortLambdasOnASingleLine : Empty
AlwaysBreakTemplateDeclarations : Yes
BinPackParameters : false
BreakBeforeBraces : Custom
BraceWrapping :
AfterCaseLabel : true
AfterClass : true
AfterControlStatement : Always
AfterEnum : true
AfterFunction : true
AfterNamespace : false
AfterObjCDeclaration : true
AfterStruct : true
AfterUnion : true
AfterExternBlock : true
BeforeCatch : true
BeforeElse : true
BeforeLambdaBody : true
BeforeWhile : true
IndentBraces : false
SplitEmptyFunction : true
SplitEmptyRecord : false
SplitEmptyNamespace : true
BreakAfterAttributes : Leave
BreakBeforeTernaryOperators : false
BreakConstructorInitializers : BeforeComma
BreakBeforeConceptDeclarations : Always
ColumnLimit : 0
Cpp11BracedListStyle : false
CompactNamespaces : true
IndentWidth : 4
IndentCaseLabels : true
IndentRequiresClause : true
IncludeBlocks : Regroup
KeepEmptyLinesAtTheStartOfBlocks : true
MaxEmptyLinesToKeep : 2
EmptyLineAfterAccessModifier : Leave
EmptyLineBeforeAccessModifier : LogicalBlock
NamespaceIndentation : All
PointerAlignment : Left
SpacesBeforeTrailingComments : 1
SpacesInAngles : Never
SpacesInSquareBrackets : false
RequiresClausePosition : OwnLine
RequiresExpressionIndentation : Keyword
SpacesInLineCommentPrefix :
Minimum : 1
Maximum : -1
TabWidth : 4
UseTab : Never
IncludeCategories :
- Regex : '^"'
Priority : 97
- Regex : '<[[:alnum:].]+>'
Priority : 99
- Regex : '^<.*'
Priority : 98
- Regex : '.*'
Priority : 1
SortPriority : 0
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
---
Language: CSharp
BasedOnStyle : Microsoft
Standard : Latest

90
.editorconfig

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
[*.cs]
# IDE0011: Add braces
csharp_prefer_braces = false:silent
# IDE0008: Use explicit type
dotnet_diagnostic.IDE0008.severity = none
csharp_indent_labels = one_less_than_current
csharp_using_directive_placement = outside_namespace:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_style_namespace_declarations = block_scoped:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_throw_expression = true:suggestion
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_style_prefer_method_group_conversion = true:silent
csharp_space_around_binary_operators = before_and_after
[*.{cs,vb}]
#### Naming styles ####
# Naming rules
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# Naming styles
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4
indent_size = 4
end_of_line = lf
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
dotnet_style_namespace_match_folder = true:suggestion

29
.github/workflows/clang-format-check.yml

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
name: clang-format Check
on: [push, pull_request, workflow_dispatch]
# Cancel any previous workflows if the pull request was updated
concurrency:
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
cancel-in-progress: true
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- 'src'
- 'tests'
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf programs.
uses: jidicula/clang-format-action@v4.14.0
with:
clang-format-version: 19
check-path: ${{ matrix.path }}
exclude-regex: '(?:(?:Bindings|CLI)\\)|(?:CppParser\\(?:Parse)?(?:Expr|Stmt))'

4
.github/workflows/main.yml

@ -35,8 +35,6 @@ jobs: @@ -35,8 +35,6 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
fetch-depth: '0'
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v11
@ -127,8 +125,6 @@ jobs: @@ -127,8 +125,6 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
fetch-depth: '0'
- name: Set version
run: nbgv cloud --all-vars

122
RunClangFormat.bat

@ -0,0 +1,122 @@ @@ -0,0 +1,122 @@
@echo off
setlocal enabledelayedexpansion
echo Looking for clang-format...
set "FOLDERS=src examples tests"
set "ALLOWED_EXTENSIONS=*.cpp *.hpp *.c *.h *.inl"
set CLANG_FORMAT_PATH=VC\Tools\Llvm\bin\clang-format.exe
set VSWHERE_PATH="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
set CLANG_FORMAT_OPTIONS=--fallback-style=none -i
: =================================================================================
: Check vswhere
if not exist %VSWHERE_PATH% (
echo Could not locate vshere.exe at: %VSWHERE_PATH%
pause
exit
)
: Find visual studio installation path
for /f "usebackq tokens=*" %%i in (`call %VSWHERE_PATH% -latest -products * -property installationPath`) do (
set VS_INSTALL_DIR=%%i
)
: Find visual studio installation path
if not exist "%VS_INSTALL_DIR%" (
echo Visual Studio Installation directory not found. Tried looking at: %VS_INSTALL_DIR%
pause
exit
)
set CLANG_FORMAT_ABSOLUTE_PATH="%VS_INSTALL_DIR%\%CLANG_FORMAT_PATH%"
: Verify clang-format actually exists as well
if not exist %CLANG_FORMAT_ABSOLUTE_PATH% (
echo clang-format.exe could not be located at: %CLANG_FORMAT_ABSOLUTE_PATH%
pause
exit
)
: =================================================================================
echo Found clang-format.exe at: %CLANG_FORMAT_ABSOLUTE_PATH%
: Display clang-format version
%CLANG_FORMAT_ABSOLUTE_PATH% --version
set DRY_RUN=0
: set /p DRY_RUN="Dry run? (1/0): "
if %DRY_RUN%==1 (
set CLANG_FORMAT_OPTIONS=%CLANG_FORMAT_OPTIONS% --dry-run --Werror
)
: Format all files, in the specified list of directories
: Loop through each file in the directory (and subdirectories)
for %%p in (%FOLDERS%) do (
echo Formatting files in folder "%%p"...
cd %%p
for /r %%f in (%ALLOWED_EXTENSIONS%) do (
: Skip certain folders
call :shouldSkipFile %%f
if not errorlevel 1 (
%CLANG_FORMAT_ABSOLUTE_PATH% %CLANG_FORMAT_OPTIONS% %%f
)
:: else (
:: echo Skipping file %%f...
:: )
)
cd ..
)
echo Done!
pause
exit
:shouldSkipFile
: Skip auto generated files
call :findInString %1 Bindings\
if errorlevel 1 (
exit /B 1
)
call :findInString %1 CppParser\Expr
if errorlevel 1 (
exit /B 1
)
call :findInString %1 CppParser\ParseExpr
if errorlevel 1 (
exit /B 1
)
call :findInString %1 CppParser\Stmt
if errorlevel 1 (
exit /B 1
)
call :findInString %1 CppParser\ParseStmt
if errorlevel 1 (
exit /B 1
)
: Skip CLI files (clang-format doesn't support them properly)
call :findInString %1 CLI\
if errorlevel 1 (
exit /B 1
)
exit /B 0
:findInString
set searchString=%1
set key=%2
call set keyRemoved=%%searchString:%key%=%%
if not "x%keyRemoved%"=="x%searchString%" (
exit /B 1
) else (
exit /B 0
)
Loading…
Cancel
Save