You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
233 lines
5.9 KiB
233 lines
5.9 KiB
/**
|
|
* @file align.cpp
|
|
* Does all the aligning stuff.
|
|
*
|
|
* @author Ben Gardner
|
|
* @author Guy Maurel since version 0.62 for uncrustify4Qt
|
|
* October 2015, 2016
|
|
* @license GPL v2+
|
|
*/
|
|
|
|
#include "align.h"
|
|
|
|
#include "align_asm_colon.h"
|
|
#include "align_assign.h"
|
|
#include "align_braced_init_list.h"
|
|
#include "align_eigen_comma_init.h"
|
|
#include "align_func_params.h"
|
|
#include "align_func_proto.h"
|
|
#include "align_init_brace.h"
|
|
#include "align_left_shift.h"
|
|
#include "align_oc_decl_colon.h"
|
|
#include "align_oc_msg_colons.h"
|
|
#include "align_oc_msg_spec.h"
|
|
#include "align_preprocessor.h"
|
|
#include "align_same_func_call_params.h"
|
|
#include "align_stack.h"
|
|
#include "align_struct_initializers.h"
|
|
#include "align_trailing_comments.h"
|
|
#include "align_typedefs.h"
|
|
#include "align_var_def_brace.h"
|
|
#include "log_rules.h"
|
|
#include "quick_align_again.h"
|
|
|
|
constexpr static auto LCURRENT = LALIGN;
|
|
|
|
using namespace uncrustify;
|
|
|
|
|
|
/*
|
|
* Here are the items aligned:
|
|
*
|
|
* - enum value assignments
|
|
* enum {
|
|
* cat = 1,
|
|
* fred = 2,
|
|
* };
|
|
*
|
|
* - struct/union variable & bit definitions
|
|
* struct foo {
|
|
* char cat;
|
|
* int id : 5;
|
|
* int name_len : 6;
|
|
* int height : 12;
|
|
* };
|
|
*
|
|
* - variable definitions & assignments in normal code
|
|
* const char *cat = "feline";
|
|
* int id = 4;
|
|
* a = 5;
|
|
* bat = 14;
|
|
*
|
|
* - simple array initializers
|
|
* int a[] = {
|
|
* 1, 2, 3, 4, 5,
|
|
* 6, 7, 8, 9, 10
|
|
* };
|
|
*
|
|
* - c99 array initializers
|
|
* const char *name[] = {
|
|
* [FRED] = "fred",
|
|
* [JOE] = "joe",
|
|
* [PETER] = "peter",
|
|
* };
|
|
* struct foo b[] = {
|
|
* { .id = 1, .name = "text 1" },
|
|
* { .id = 567, .name = "text 2" },
|
|
* };
|
|
* struct foo_t bars[] =
|
|
* {
|
|
* [0] = { .name = "bar",
|
|
* .age = 21 },
|
|
* [1] = { .name = "barley",
|
|
* .age = 55 },
|
|
* };
|
|
*
|
|
* - compact array initializers
|
|
* struct foo b[] = {
|
|
* { 3, "dog" }, { 6, "spider" },
|
|
* { 8, "elephant" }, { 3, "cat" },
|
|
* };
|
|
*
|
|
* - multiline array initializers (2nd line indented, not aligned)
|
|
* struct foo b[] = {
|
|
* { AD_NOT_ALLOWED, "Sorry, you failed to guess the password.",
|
|
* "Try again?", "Yes", "No" },
|
|
* { AD_SW_ERROR, "A software error has occurred.", "Bye!", NULL, NULL },
|
|
* };
|
|
*
|
|
* - Trailing comments
|
|
*
|
|
* - Back-slash newline groups
|
|
*
|
|
* - Function prototypes
|
|
* int foo();
|
|
* void bar();
|
|
*
|
|
* - Preprocessors
|
|
* #define FOO_VAL 15
|
|
* #define MAX_TIMEOUT 60
|
|
* #define FOO(x) ((x) * 65)
|
|
*
|
|
* - typedefs
|
|
* typedef uint8_t BYTE;
|
|
* typedef int32_t INT32;
|
|
* typedef uint32_t UINT32;
|
|
*/
|
|
void align_all()
|
|
{
|
|
LOG_FUNC_ENTRY();
|
|
|
|
if (options::align_typedef_span() > 0)
|
|
{
|
|
log_rule_B("align_typedef_span");
|
|
align_typedefs(options::align_typedef_span());
|
|
}
|
|
|
|
if (options::align_left_shift())
|
|
{
|
|
log_rule_B("align_left_shift");
|
|
align_left_shift();
|
|
}
|
|
|
|
if (options::align_eigen_comma_init())
|
|
{
|
|
log_rule_B("align_eigen_comma_init");
|
|
align_eigen_comma_init();
|
|
}
|
|
|
|
if (options::align_oc_msg_colon_span() > 0)
|
|
{
|
|
log_rule_B("align_oc_msg_colon_span");
|
|
align_oc_msg_colons();
|
|
}
|
|
|
|
if ( (options::align_var_def_span() > 0)
|
|
|| (options::align_var_struct_span() > 0)
|
|
|| (options::align_var_class_span() > 0))
|
|
{
|
|
// Align variable definitions
|
|
log_rule_B("align_var_def_span");
|
|
log_rule_B("align_var_struct_span");
|
|
log_rule_B("align_var_class_span");
|
|
align_var_def_brace(Chunk::GetHead(), options::align_var_def_span(), nullptr);
|
|
}
|
|
|
|
if ( (options::align_enum_equ_span() > 0)
|
|
|| (options::align_assign_span() > 0))
|
|
{
|
|
// Align assignments
|
|
log_rule_B("align_enum_equ_span");
|
|
log_rule_B("align_assign_span");
|
|
align_assign(Chunk::GetHead(),
|
|
options::align_assign_span(),
|
|
options::align_assign_thresh(),
|
|
nullptr);
|
|
}
|
|
|
|
if ( (options::align_braced_init_list_span() > 0) // Issue #750
|
|
|| (options::align_braced_init_list_thresh() > 0))
|
|
{
|
|
// Align braced initializers lists
|
|
align_braced_init_list(Chunk::GetHead(),
|
|
options::align_braced_init_list_span(),
|
|
options::align_braced_init_list_thresh(),
|
|
nullptr);
|
|
}
|
|
|
|
if (options::align_struct_init_span() > 0)
|
|
{
|
|
// Align structure initializers
|
|
log_rule_B("align_struct_init_span");
|
|
align_struct_initializers();
|
|
}
|
|
|
|
if ( (options::align_func_proto_span() > 0)
|
|
&& !options::align_mix_var_proto())
|
|
{
|
|
// Align function prototypes
|
|
log_rule_B("align_func_proto_span");
|
|
log_rule_B("align_mix_var_proto");
|
|
align_func_proto(options::align_func_proto_span());
|
|
}
|
|
|
|
if (options::align_oc_msg_spec_span() > 0)
|
|
{
|
|
// Align OC message spec
|
|
log_rule_B("align_oc_msg_spec_span");
|
|
align_oc_msg_spec(options::align_oc_msg_spec_span());
|
|
}
|
|
|
|
if (options::align_oc_decl_colon())
|
|
{
|
|
// Align OC colons
|
|
log_rule_B("align_oc_decl_colon");
|
|
align_oc_decl_colon();
|
|
}
|
|
|
|
if (options::align_asm_colon())
|
|
{
|
|
// Align ASM colons
|
|
log_rule_B("align_asm_colon");
|
|
align_asm_colon();
|
|
}
|
|
|
|
if ( options::align_func_params()
|
|
|| options::align_func_params_span() > 0)
|
|
{
|
|
// Align variable definitions in function prototypes
|
|
log_rule_B("align_func_params");
|
|
log_rule_B("align_func_params_span");
|
|
align_func_params();
|
|
}
|
|
|
|
if (options::align_same_func_call_params())
|
|
{
|
|
// Align parameters in function call
|
|
log_rule_B("align_same_func_call_params");
|
|
align_same_func_call_params();
|
|
}
|
|
// Just in case something was aligned out of order... do it again
|
|
quick_align_again();
|
|
} // align_all
|