# Configuration of clang-format # ============================= # # Tested to work with versions: 8 to 11. # This causes parameters on continuations to align to the opening brace. # # like_this_long_name(parameter_one, # parameter_two, # parameter_three); # AlignAfterOpenBracket: 'Align' # Disallow short functions on one line; break them up. AllowShortBlocksOnASingleLine: false # These two settings trigger stacking of parameters in most cases; this is # easier to read and also makes diffs easier to read (since an added or removed # parameter is obvious). For example, function calls will look like this: # # like_this_long_name(parameter_one, # parameter_two, # parameter_three, # parameter_four, # parameter_five, # parameter_six); # # Instead of: # # like_this_long_name(parameter_one, parameter_two, parameter_three, parameter_four, # parameter_five, parameter_six); # BinPackArguments: false BinPackParameters: false # Line width (don't exceed 100). ColumnLimit: 99 # Cause initializer lists to have one member initialized per line, in the case # that all initializers can't fit on a single line. ConstructorInitializerAllOnOneLineOrOnePerLine: true # Indent the : after a constructor. For example: # # explicit foo_class () # : member1_(5) # { # } # ConstructorInitializerIndentWidth: 4 # Make access modifier slightly more visible. AccessModifierOffset: -1 # This will unfortunately use spaces in some cases where it's not desired (like # function calls) but the overall result is better since it will allow # alignment to work properly with different tab width settings. ContinuationIndentWidth: 4 # This tries to match Blender's style as much as possible. One BreakBeforeBraces: Custom BraceWrapping: { AfterClass: 'false' AfterControlStatement: 'false' AfterEnum : 'false' AfterFunction : 'true' AfterNamespace : 'false' AfterStruct : 'false' AfterUnion : 'false' BeforeCatch : 'true' BeforeElse : 'true' IndentBraces : 'false' AfterObjCDeclaration: 'true' } # For switch statements, indent the cases. IndentCaseLabels: true # Indent after the hash inside preprocessor directives IndentPPDirectives: AfterHash BreakBeforeTernaryOperators: false SpaceAfterTemplateKeyword: false # Handy comment at the end of each C++ name space. FixNamespaceComments: true # Use "if (...)" instead of "if(...)", but have function calls like foo(). SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false # Use two spaces before trailing comments, for example # # foo = bar; // comment # # Note that this doesn't work for C-style comments. SpacesBeforeTrailingComments: 2 # Reflow comments, developers must disable formatting as with code to override this. ReflowComments: true # Never use tabs for indentation. # Note: TabWidth and IndentWidth must be the same, or strange things happen. UseTab: Never TabWidth: 2 IndentWidth: 2 # Add a big penalty on breaking after the return type of functions. For example, # # static void foo(...) # # Instead of: # # static void # foo(very long content here that maybe could be stacked) # PenaltyReturnTypeOnItsOwnLine: 10000 # Avoid having function calls broken onto a new line: # # int a = foo( # long, list, of, many, params); # # Instead of: # # int a = # foo(long, list, of, many, params); # PenaltyBreakAssignment: 100 AllowShortFunctionsOnASingleLine: None SortIncludes: true # Don't right align escaped newlines to the right because we have a wide default AlignEscapedNewlines: DontAlign # Always break: # # const char *foo = # "multi" # "line"; # # Instead of: # # const char *foo = "multi" # "line"; # AlwaysBreakBeforeMultilineStrings: true # We don't want literal strings to break, # however clang-format seems to ignore this (sigh). PenaltyBreakString: 1000000 # There are macros in Blender for custom for loops; tell Clang to treat them # like loops rather than an expression, and so put the { on the same line. # # To find these use multi-line regex search: # "^\s+[A-Z][A-Z0-9_]+\s*\([^\n]*\)\n\s*\{" ForEachMacros: - BEGIN_ANIMFILTER_SUBCHANNELS - BKE_pbvh_vertex_iter_begin - BLI_FOREACH_SPARSE_RANGE - BLI_SMALLSTACK_ITER_BEGIN - BMO_ITER - BMO_ITER_INDEX - BMW_ITER - BM_FACES_OF_VERT_ITER_BEGIN - BM_ITER_BPY_BM_SEQ - BM_ITER_ELEM - BM_ITER_ELEM_INDEX - BM_ITER_MESH - BM_ITER_MESH_INDEX - BM_ITER_MESH_MUTABLE - BM_LOOPS_OF_VERT_ITER_BEGIN - BOOST_FOREACH - CTX_DATA_BEGIN - CTX_DATA_BEGIN_WITH_ID - DEG_OBJECT_ITER_BEGIN - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN - DRW_ENABLED_ENGINE_ITER - DRIVER_TARGETS_LOOPER_BEGIN - DRIVER_TARGETS_USED_LOOPER_BEGIN - FOREACH_BASE_IN_EDIT_MODE_BEGIN - FOREACH_BASE_IN_MODE_BEGIN - FOREACH_BEGIN - FOREACH_COLLECTION_BEGIN - FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN - FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN - FOREACH_EDIT_OBJECT_BEGIN - FOREACH_MAIN_ID_BEGIN - FOREACH_MAIN_LISTBASE_BEGIN - FOREACH_MAIN_LISTBASE_ID_BEGIN - FOREACH_MESH_BUFFER_CACHE - FOREACH_NODETREE_BEGIN - FOREACH_OBJECT_BEGIN - FOREACH_OBJECT_FLAG_BEGIN - FOREACH_OBJECT_IN_EDIT_MODE_BEGIN - FOREACH_OBJECT_IN_MODE_BEGIN - FOREACH_OBJECT_RENDERABLE_BEGIN - FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN - FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN - FOREACH_SCENE_COLLECTION_BEGIN - FOREACH_SCENE_OBJECT_BEGIN - FOREACH_SELECTED_BASE_BEGIN - FOREACH_SELECTED_BEZT_BEGIN - FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN - FOREACH_SELECTED_OBJECT_BEGIN - FOREACH_TRANS_DATA_CONTAINER - FOREACH_VIEW_LAYER_TO_RENDER_BEGIN - FOREACH_VISIBLE_BASE_BEGIN - FOREACH_VISIBLE_OBJECT_BEGIN - GHASH_FOREACH_BEGIN - GHASH_ITER - GHASH_ITER_INDEX - GPU_SELECT_LOAD_IF_PICKSEL_LIST - GP_EDITABLE_STROKES_BEGIN - GP_EVALUATED_STROKES_BEGIN - GSET_FOREACH_BEGIN - GSET_ITER - GSET_ITER_INDEX - ITER_BEGIN - ITER_PIXELS - ITER_SLOTS - ITER_SLOTS_BEGIN - LOOP_EDITED_POINTS - LOOP_KEYS - LOOP_POINTS - LOOP_SELECTED_KEYS - LOOP_SELECTED_POINTS - LOOP_TAGGED_KEYS - LOOP_TAGGED_POINTS - LOOP_UNSELECTED_POINTS - LOOP_VISIBLE_KEYS - LOOP_VISIBLE_POINTS - LISTBASE_CIRCULAR_BACKWARD_BEGIN - LISTBASE_CIRCULAR_FORWARD_BEGIN - LISTBASE_FOREACH - LISTBASE_FOREACH_BACKWARD - LISTBASE_FOREACH_MUTABLE - LISTBASE_FOREACH_BACKWARD_MUTABLE - LISTBASE_FOREACH_INDEX - MAN_ITER_AXES_BEGIN - NODE_INSTANCE_HASH_ITER - NODE_SOCKET_TYPES_BEGIN - NODE_TREE_TYPES_BEGIN - NODE_TYPES_BEGIN - PIXEL_LOOPER_BEGIN - PIXEL_LOOPER_BEGIN_CHANNELS - RENDER_PASS_ITER_BEGIN - RNA_BEGIN - RNA_PROP_BEGIN - RNA_STRUCT_BEGIN - RNA_STRUCT_BEGIN_SKIP_RNA_TYPE - SCULPT_VERTEX_DUPLICATES_AND_NEIGHBORS_ITER_BEGIN - SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN - SEQ_ALL_BEGIN - SEQ_ITERATOR_FOREACH - SURFACE_QUAD_ITER_BEGIN - foreach - ED_screen_areas_iter - SLOT_PROBING_BEGIN - SET_SLOT_PROBING_BEGIN - MAP_SLOT_PROBING_BEGIN - VECTOR_SET_SLOT_PROBING_BEGIN - WL_ARRAY_FOR_EACH - FOREACH_SPECTRUM_CHANNEL StatementMacros: - PyObject_HEAD - PyObject_VAR_HEAD - ccl_gpu_kernel_postfix MacroBlockBegin: "^OSL_CLOSURE_STRUCT_BEGIN$" MacroBlockEnd: "^OSL_CLOSURE_STRUCT_END$"