# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# OpenTitan-specific style lint rule configurations

line-length=length:100

# we allow "classic" verilog string parameters without explicit type
explicit-parameter-storage-type=exempt_type:string

# localparam can be both ALL_CAPS and CamelCase according to our style
parameter-name-style=localparam_style:CamelCase|ALL_CAPS

# we allow nested struct definitions
-typedef-structs-unions
