# 告警屏蔽规则,用于屏蔽代码检查工具生成的告警,避免告警影响代码质量。
# 每个规则包含以下字段:
# - 屏蔽规则编号:唯一标识该规则的编号
# - 语言:告警来源的编程语言,如C++、Python等
# - 告警来源:代码检查工具生成的告警来源,如超大函数、超大目录、超大圈复杂度等
# - 告警理由:告警的具体原因,用于解释为什么需要屏蔽该告警
# - 屏蔽选项:屏蔽该告警的选项,如规范例外的场景、临时忽略等
# - 屏蔽理由:屏蔽该告警的具体理由,用于解释为什么需要屏蔽该告警
#
# 对于屏蔽理由中[xx]中的部分请按照实际内容填写

rules:
  - 屏蔽规则编号: 1
    语言: C++
    告警来源: 超大函数[C++]
    告警理由: 超大函数[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 2
    语言: C++
    告警来源: 超大目录[C++]
    告警理由: 超大目录[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的目录, 拆分到多个目录中会影响到代码的可维护性和可读性

  - 屏蔽规则编号: 3
    语言: C++
    告警来源: 超大圈复杂度[C++]
    告警理由: 超大圈复杂度[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 4
    语言: C++
    告警来源: 超大深度函数[C++]
    告警理由: 超大深度函数[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 5
    语言: C++
    告警来源: 超大头文件[C++]
    告警理由: 超大头文件[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的头文件, 拆分到多个头文件中会影响到代码的可维护性和可读性

  - 屏蔽规则编号: 6
    语言: C++
    告警来源: 超大源文件[C++]
    告警理由: 超大源文件[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的源文件, 拆分到多个源文件中会影响到代码的可维护性和可读性

  - 屏蔽规则编号: 7
    语言: C++
    告警来源: G.CMT.05-CPP
    告警理由: 正式交付给客户的代码因该包含TODO/TBD/FIXME注释
    屏蔽选项: 误报
    屏蔽理由: PyPTO作为开源代码仓, 不是正式交付给客户的代码

  - 屏蔽规则编号: 8
    语言: C++
    告警来源: G.FMT.10
    告警理由: 指针类型'*'跟随变量名或者函数名[C]
    屏蔽选项: 规范例外的场景
    屏蔽理由: \*和&符号跟随变量名或者函数名, 在没有变量的场景, 添加空余用于强调和后面的标点区分, 提高可读性

  - 屏蔽规则编号: 9
    语言: C++
    告警来源: G.FMT.14-CPP
    告警理由: 指针类型'*'和引用类型'&'只跟随类型或者变量名 -- 引用类型
    屏蔽选项: 规范例外的场景
    屏蔽理由: \*和&符号跟随变量名或者函数名, 在没有变量的场景, 添加空余用于强调和后面的标点区分, 提高可读性

  - 屏蔽规则编号: 10
    语言: C++
    告警来源: G.FMT.14-CPP
    告警理由: 指针类型'*'和引用类型'&'只跟随类型或者变量名 -- 指针类型
    屏蔽选项: 规范例外的场景
    屏蔽理由: \*和&符号跟随变量名或者函数名, 在没有变量的场景, 添加空余用于强调和后面的标点区分, 提高可读性

  - 屏蔽规则编号: 11
    语言: C++
    告警来源: G.FUNC.01-CPP
    告警理由: 函数功能要单一 -- 函数大小
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 12
    语言: C++
    告警来源: G.FUNC.01-CPP
    告警理由: 函数功能要单一 -- 函数嵌套层次
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 13
    语言: Python
    告警来源: 超大函数[Python]
    告警理由: 超大函数[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 14
    语言: Python
    告警来源: 超大目录[Python]
    告警理由: 超大目录[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的目录, 拆分到多个目录中会影响到代码的可维护性和可读性

  - 屏蔽规则编号: 15
    语言: Python
    告警来源: 超大圈复杂度[Python]
    告警理由: 超大圈复杂度[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 16
    语言: Python
    告警来源: 超大深度函数[Python]
    告警理由: 超大深度函数[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的函数, 拆分到多个函数中会影响到函数的可维护性和可读性

  - 屏蔽规则编号: 17
    语言: Python
    告警来源: 超大源文件[Python]
    告警理由: 超大源文件[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的源文件, 拆分到多个源文件中会影响到代码的可维护性和可读性

  - 屏蔽规则编号: 18
    语言: Python
    告警来源: G.FMT.02
    告警理由: 行宽不超过120个字符
    屏蔽选项: 规范例外的场景
    屏蔽理由: 对于代码功能逻辑紧密关联的代码, 适合放到同一行维护, 拆分到多个行会影响到代码的可读性

  - 屏蔽规则编号: 19
    语言: Python
    告警来源: G.FMT.07
    告警理由: 导入部分(imports)应该按照标准库, 第三方库, 应用自定义模块的顺序排列导入
    屏蔽选项: 误报
    屏蔽理由: \[xxx]是第三方库, 已按照标准库, 第三方库, 应用自定义模块的顺序排列导入

  - 屏蔽规则编号: 20
    语言: Python
    告警来源: G.FMT.07
    告警理由: 导入部分(imports)应该按照标准库, 第三方库, 应用自定义模块的顺序排列导入
    屏蔽选项: 误报
    屏蔽理由: \[xxx]是自定义模块, 已按照标准库, 第三方库, 应用自定义模块的顺序排列导入

  - 屏蔽规则编号: 21
    语言: C++
    告警来源: 重复代码[C++]
    告警理由: 重复代码[C++]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分example等测试代码为提升可读性, 保留部分字段定义, 测试函数体定义等重复代码提升测试效率
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 22
    语言: Python
    告警来源: 重复代码[Python]
    告警理由: 重复代码[Python]
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分example等测试代码为提升可读性, 保留部分字段定义, 测试函数体定义等重复代码提升测试效率
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 23
    语言: Python
    告警来源:
    告警理由: 避免在类外或者子类中访问父类受保护成员
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分Python代码需要访问标准库或者第三方库中受保护接口以实现特定功能和性能优化
    备注: 优先使用公开接口, 仅在公开接口无法满足需求时, 才考虑访问受保护成员

  - 屏蔽规则编号: 24
    语言: Python
    告警来源: G.CLS.11
    告警理由: 避免在类外或者子类中访问父类受保护成员
    屏蔽选项: 误报
    屏蔽理由: |
      [xxx] 是当前类内部或者Package内部变量, 是明显的误报
    备注: 仅在告警误报场景使用

  - 屏蔽规则编号: 25
    语言: Python
    告警来源: G.FNM.03
    告警理由: 当参数个数比较多且有相关性时, 建议通过class/namedtuple/dataclass等具名形式进行封装
    屏蔽选项: 规范例外的场景
    屏蔽理由: |
      @pypto.frontend.jit修饰的函数是大融合算子的入口, 参数较多, 入参采用平铺方式,
      保留每个参数有助于现实具体的参数信息

  - 屏蔽规则编号: 26
    语言: Python
    告警来源: G.LOG.03
    告警理由: 使用日志记录工具实现日志功能
    屏蔽选项: 规范例外的场景
    屏蔽理由: Example代码是临时的一次性脚本或者代码片段, 使用print可以像用户直接展示必须的结果或者提示信息
    备注: 该规则不涉及tests, tests中过多的命令行输出打印影响测试效率

  - 屏蔽规则编号: 27
    语言: Python
    告警来源: G.EXP.03
    告警理由: 不应将lambda表达式赋值给变量, 应该使用常规函数
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分ut等测试代码, 在测试原生 Python  PIL 的翻译时,需要覆盖 lambda 表达式赋值场景,以验证其翻译与执行结果符合预期
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 28
    语言: Python
    告警来源: G.TYP.07
    告警理由: 使用dict[key]获取value时需要注意保证key在有效的范围内
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分ut等测试代码, 在测试原生 Python  PIL 的翻译行为时,需要覆盖 dict[key] 取值场景,以验证其翻译与执行结果符合预期
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 29
    语言: Python
    告警来源: G.EXP.04
    告警理由: 推导式和生成器表达式仅用于简单的逻辑表达
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分ut等测试代码, 在测试原生 Python  PIL 的翻译行为时,需要覆盖复杂推导式和生成器表达式场景,以验证其翻译与执行结果符合预期
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 30
    语言: Python
    告警来源: G.ERR.05
    告警理由: 使用有明确业务属性的异常类型
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分ut等测试代码, 在测试原生 Python  PIL 的翻译行为时,需要覆盖未显式指定异常类型的抛出场景,以验证其翻译与执行结果符合预期
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 31
    语言: Python
    告警来源: G.ERR.13
    告警理由: 捕获异常后避免直接重新抛出
    屏蔽选项: 规范例外的场景
    屏蔽理由: 部分ut等测试代码, 在测试原生 Python  PIL 的翻译行为时,需要覆盖捕获异常后直接重新抛出的场景,以验证其翻译与执行结果符合预期
    备注: 屏蔽范围限定为examples/tests相关代码

  - 屏蔽规则编号: 32
    语言: Python
    告警来源: G.FNM.03
    告警理由: 当参数个数比较多且有相关性时, 建议通过class/namedtuple/dataclass等具名形式进行封装
    屏蔽选项: 规范例外的场景
    屏蔽理由: |
      pypto operation 对外提供的基础算子接口,参数较多,入参采用平铺方式,
      遵循业界规范,同时有助于降低用户理解的复杂度