创建自定义规则时收到警告“尝试将未知规则引用列入白名单:['L100']”

问题描述 投票:0回答:1

我正在尝试为我的团队创建 Sqlfluff 自定义规则,目前标准规则工作正常,但是当我尝试运行自定义规则时,会出现错误,表明 linter 未检测到自定义规则

有人知道如何在我的

.sqlfluff
文件中引用新的自定义规则吗?我创建了一个来评估它是否有效:

from sqlfluff.core.rules.base import BaseRule, LintResult
from sqlfluff.core.parser import KeywordSegment, RawSegment

class Rule_L100(BaseRule):

    def _eval(self, segment, **kwargs):
        if isinstance(segment, RawSegment):
            if segment.raw_upper in ["LIKE", "ILIKE"]:
                prev_segment = segment.get_direct_parent().segments[-2]
                if prev_segment.raw_upper != "COALESCE" and prev_segment.raw_upper != "IFNULL":
                    return LintResult(anchor=segment, description="LIKE/ILIKE without NULL handling.")
        return None

该文件位于 sqlfluff_custom_rules/L100.py。

我的模板器是 Jinja,这是我的 .sqlfluff 文件配置:

[sqlfluff]
templater = jinja

rules = AL01, AL02, AL03, AL04, AL05, AL06, AL07, AM01, AM02, AM03, AM04, AM05,
        AM06, AM07, CP01, CP02, CP03, CP04, CP05, CV01, CV02, CV03, CV04, CV05,
        CV06, CV07, CV08, CV09, CV10, CV11, JJ01, LT01, LT02, LT03, LT04, LT05,
        LT06, LT07, LT08, LT09, LT10, LT11, LT12, LT13, RF01, RF02, RF03,
        RF04, RF05, RF06, ST01, ST02, ST03, ST04, ST05, ST06, ST08, TQ01

[sqlfluff:rules]
custom_rules = custom_rules::Rule_L100

我正在运行命令:

sqlfluff lint models/intermediate/any_model.sql --dialect redshift --rules L100

但我收到警告:警告尝试将未知规则引用列入白名单:['L100']

有人可以帮我解决这个问题吗?我已经搜索了文档和其他来源,但是关于如何在 SQLFluff 中实现自定义规则没有明确的答案,并且一些相关链接似乎已损坏。

我还想知道这个问题是否可能是因为自定义规则不可用,除非它们作为插件实现。这样是不是更有意义?

dbt linter sqlfluff
1个回答
0
投票

您是对的,自定义规则只能作为插件实现。 SQLFluff 使用 pluggy 作为插件引擎,它依赖于 python 打包索引来发现已安装的插件。您不需要公开发布您的插件即可使其工作,您只需要能够在本地安装它(即

pip install -e /path/to/my/local/plugin
)。对于必要的结构,您的插件必须具有 SQLFluff GitHub 存储库中的示例插件

© www.soinside.com 2019 - 2024. All rights reserved.