指定扩展名时 SublimeLinter ignore_match 不工作

SublimeLinter ignore_match not working when extension is specified

我正在尝试让 SublimeLinterHTMLTidy 忽略某些 php 警告。特别是 missing <!DOCTYPE> declarationinserting implicit <body>inserting missing 'title' element。它在文档中告诉您如何执行此操作:

{
"ignore_match": [
    "missing <!DOCTYPE> declaration",
    "inserting (?:implicit <body>|missing 'title' element)"
    ]
}

来源:Linter Settings

将其添加到我的 SublimeLinter 用户设置文件中效果很好。问题是我希望它只应用于 PHP 文件,因为仅使用上面的内容也会在 HTML 文件上忽略它。

文档中有一个仅将 ignore_match 应用于特定扩展的示例:

{
"ignore_match": {
    "inc": [
        "missing <!DOCTYPE> declaration",
        "inserting (?:implicit <body>|missing 'title' element)"
        ]
}

所以我复制了它并将 inc 更改为 php 我仍然在 php 文件上收到这些警告。

我的 SublimeLinter 设置文件的 htmltidy 部分如下所示:

"htmltidy": {
            "@disable": false,
            "args": [],
            "excludes": [],
            "ignore_match": {
                "php": [
                    "missing <!DOCTYPE> declaration",
                    "inserting (?:implicit <body>|missing 'title' element)"
                ]
            }
        }

在我指定 ignore_match 规则应该适用的扩展之前,知道为什么 ignore_match 会按预期工作吗?

这是 SublimeLinter 的错误。 settings tokenizer 允许替换设置中的 ${project}${home} 等标记。它尝试递归地执行它但是当你在 ignore_match 字典中使用嵌套列表时会搞砸。

我已经测试过它,它会更改所有字符串,将其包装到列表中并将列表名称指定为字典的键,因此:

{"ignore_match": { "php": ["Error1", "Error2"]}}

转换为: {"ignore_match": None, "php": ["Error1","Error2"]}}

调试正在发生的事情非常困难,所以我必须建议在标记化之前保存 ignore_match 设置并在标记化之后重置。 lint/linter.py get_merged_settings:

中的类似内容
ims = None
if 'ignore_match' in settings.keys():
    ims = settings['ignore_match']
    del settings['ignore_match']
self.replace_settings_tokens(settings)
if ims:
    settings['ignore_match'] = ims