blob: 89eee1a1a85c26ce5128c38b8bc4a7d0fcecad6c [file] [log] [blame]
// Copyright 2017-2021 The Verible Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "verible/verilog/formatting/format-style-init.h"
#include "absl/flags/flag.h"
#include "verible/common/formatting/align.h"
#include "verible/common/formatting/basic-format-style-init.h"
#include "verible/common/formatting/basic-format-style.h"
#include "verible/verilog/formatting/format-style.h"
using verible::AlignmentPolicy;
using verible::IndentationStyle;
ABSL_FLAG(bool, try_wrap_long_lines, false,
"If true, let the formatter attempt to optimize line wrapping "
"decisions where wrapping is needed, else leave them unformatted. "
"This is a short-term measure to reduce risk-of-harm.");
ABSL_FLAG(bool, expand_coverpoints, false,
"If true, always expand coverpoints.");
// These flags exist in the short term to disable formatting of some regions.
// Do not expect to be able to use these in the long term, once they find
// a better home in a configuration struct.
// "indent" means 2 spaces, "wrap" means 4 spaces.
ABSL_FLAG(IndentationStyle, port_declarations_indentation,
IndentationStyle::kWrap, "Indent port declarations: {indent,wrap}");
ABSL_FLAG(IndentationStyle, formal_parameters_indentation,
IndentationStyle::kWrap, "Indent formal parameters: {indent,wrap}");
ABSL_FLAG(IndentationStyle, named_parameter_indentation,
IndentationStyle::kWrap,
"Indent named parameter assignments: {indent,wrap}");
ABSL_FLAG(IndentationStyle, named_port_indentation, IndentationStyle::kWrap,
"Indent named port connections: {indent,wrap}");
// For most of the following in this group, kInferUserIntent is a reasonable
// default behavior because it allows for user-control with minimal invasiveness
// and burden on the user.
ABSL_FLAG(AlignmentPolicy, port_declarations_alignment,
AlignmentPolicy::kInferUserIntent,
"Format port declarations: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, struct_union_members_alignment,
AlignmentPolicy::kInferUserIntent,
"Format struct/union members: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, named_parameter_alignment,
AlignmentPolicy::kInferUserIntent,
"Format named actual parameters: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, named_port_alignment,
AlignmentPolicy::kInferUserIntent,
"Format named port connections: {align,flush-left,preserve,infer}");
ABSL_FLAG(
AlignmentPolicy, module_net_variable_alignment, //
AlignmentPolicy::kInferUserIntent,
"Format net/variable declarations: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, formal_parameters_alignment,
AlignmentPolicy::kInferUserIntent,
"Format formal parameters: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, class_member_variable_alignment,
AlignmentPolicy::kInferUserIntent,
"Format class member variables: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, case_items_alignment,
AlignmentPolicy::kInferUserIntent,
"Format case items: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, distribution_items_alignment,
AlignmentPolicy::kInferUserIntent,
"Aligh distribution items: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, assignment_statement_alignment,
AlignmentPolicy::kInferUserIntent,
"Format various assignments: {align,flush-left,preserve,infer}");
ABSL_FLAG(AlignmentPolicy, enum_assignment_statement_alignment,
AlignmentPolicy::kInferUserIntent,
"Format assignments with enums: {align,flush-left,preserve,infer}");
ABSL_FLAG(bool, compact_indexing_and_selections, true,
"Use compact binary expressions inside indexing / bit selection "
"operators");
ABSL_FLAG(bool, wrap_end_else_clauses, false,
"Split end and else keywords into separate lines");
ABSL_FLAG(bool, port_declarations_right_align_packed_dimensions, false,
"If true, packed dimensions in contexts with enabled alignment are "
"aligned to the right.");
ABSL_FLAG(bool, port_declarations_right_align_unpacked_dimensions, false,
"If true, unpacked dimensions in contexts with enabled alignment are "
"aligned to the right.");
// -- Deprecated flags. These were typos. Remove after 2022-01-01
ABSL_RETIRED_FLAG(
AlignmentPolicy, net_variable_alignment, //
AlignmentPolicy::kInferUserIntent,
"Format net/variable declarations: {align,flush-left,preserve,infer}");
ABSL_RETIRED_FLAG(
AlignmentPolicy, class_member_variables_alignment,
AlignmentPolicy::kInferUserIntent,
"Format class member variables: {align,flush-left,preserve,infer}");
namespace verilog {
namespace formatter {
void InitializeFromFlags(FormatStyle *style) {
verible::InitializeFromFlags(style); // Initialize BasicFormatStyle
#define STYLE_FROM_FLAG(name) style->name = absl::GetFlag(FLAGS_##name)
// Simply in the sequence as declared in struct FormatStyle
STYLE_FROM_FLAG(port_declarations_indentation);
STYLE_FROM_FLAG(port_declarations_alignment);
STYLE_FROM_FLAG(struct_union_members_alignment);
STYLE_FROM_FLAG(named_parameter_indentation);
STYLE_FROM_FLAG(named_parameter_alignment);
STYLE_FROM_FLAG(named_port_indentation);
STYLE_FROM_FLAG(named_port_alignment);
STYLE_FROM_FLAG(module_net_variable_alignment);
STYLE_FROM_FLAG(assignment_statement_alignment);
STYLE_FROM_FLAG(enum_assignment_statement_alignment);
STYLE_FROM_FLAG(formal_parameters_indentation);
STYLE_FROM_FLAG(formal_parameters_alignment);
STYLE_FROM_FLAG(class_member_variable_alignment);
STYLE_FROM_FLAG(case_items_alignment);
STYLE_FROM_FLAG(distribution_items_alignment);
STYLE_FROM_FLAG(port_declarations_right_align_packed_dimensions);
STYLE_FROM_FLAG(port_declarations_right_align_unpacked_dimensions);
STYLE_FROM_FLAG(try_wrap_long_lines);
STYLE_FROM_FLAG(expand_coverpoints);
STYLE_FROM_FLAG(compact_indexing_and_selections);
STYLE_FROM_FLAG(wrap_end_else_clauses);
#undef STYLE_FROM_FLAG
}
} // namespace formatter
} // namespace verilog