<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
    "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!-- 阿里Java开发手册规范配置 - Checkstyle 10.18.1 -->
<module name="Checker">
    <property name="charset" value="UTF-8"/>
    <property name="severity" value="warning"/>

    <!-- 文件长度检查 -->
    <module name="FileLength">
        <property name="max" value="2000"/>
    </module>

    <!-- 禁止Tab字符 -->
    <module name="FileTabCharacter">
        <property name="eachLine" value="true"/>
    </module>

    <!-- 行长度检查 -->
    <module name="LineLength">
        <property name="max" value="120"/>
        <property name="ignorePattern" value="^package.*|^import.*|http://|https://|ftp://"/>
    </module>

    <!-- 文件编码检查 -->
    <module name="NewlineAtEndOfFile"/>

    <module name="TreeWalker">
        <!-- ========== 命名规范 ========== -->

        <!-- 常量命名：全部大写，下划线分隔 -->
        <module name="ConstantName">
            <property name="format" value="^[A-Z][A-Z0-9_]*$"/>
        </module>

        <!-- 方法命名：小驼峰，动词开头 -->
        <module name="MethodName">
            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
        </module>

        <!-- 包命名：全部小写，点分隔 -->
        <module name="PackageName">
            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
        </module>

        <!-- 类/接口命名：大驼峰，名词或名词短语 -->
        <module name="TypeName">
            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
        </module>

        <!-- ========== 代码规范 ========== -->

        <!-- 禁止多余的Import -->
        <module name="UnusedImports"/>

        <!-- Import顺序：按阿里开发手册规范 -->
        <!-- 临时调整为info级别，避免日志刷屏，后续逐步修复 -->
        <module name="ImportOrder">
            <property name="groups" value="java,javax,jakarta,io,lombok,lombok.extern,ch.qos,org,com.fasterxml.jackson,com,net"/>
            <property name="ordered" value="true"/>
            <property name="option" value="bottom"/>
            <property name="severity" value="info"/>
        </module>

        <!-- 禁止方法过长 -->
        <module name="MethodLength">
            <property name="max" value="150"/>
        </module>

        <!-- 禁止参数过多 -->
        <module name="ParameterNumber">
            <property name="max" value="7"/>
        </module>

        <!-- 禁止嵌套if超过3层 -->
        <module name="NestedIfDepth">
            <property name="max" value="3"/>
        </module>

        <!-- 禁止嵌套循环超过2层 -->
        <module name="NestedForDepth">
            <property name="max" value="2"/>
        </module>
    </module>
</module>
