2015-12-03 69 views
1

我試圖獲得SublimeLinterHTMLTidy忽略某些php警告。特別是missing <!DOCTYPE> declarationinserting implicit <body>inserting missing 'title' element。它會告訴你正確的文檔如何做到這一點:當擴展指定時,SublimeLinter ignore_match不起作用

{ 
"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)" 
     ] 
} 

所以我複製了,改變了incphp,我仍然得到PHP文件這些警告。

這裏是我的SublimeLinter設置文件的htmltidy部分看起來像:

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

任何想法,爲什麼ignore_match的作品,因爲它應該是,直到我指定的擴展,它的ignore_match規則應適用於?

回答

1

這是SublimeLinter錯誤。設置分詞器允許在設置中替換令牌,如${project}${home}。它嘗試遞歸執行它,但在ignore_match字典中使用嵌套列表時會搞砸。

我測試過它,它改變了所有的字符串,將其包裝列出和分配列表名作爲關鍵字字典,所以:

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

轉換爲: {"ignore_match": None, "php": ["Error1","Error2"]}}

很難調試正在發生的事情,因此我必須建議在標記之前保存ignore_match設置,並在標記之後重置。類似的東西在林特/ 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 
+0

謝謝你這個答案。我試圖測試它,但不知道在'get_merged_settings'函數中我應該放置你提供的代碼。我想先把它放在'window = self.view.window()'之前嗎? –

+0

self.replace_settings_tokens(設置)是原始代碼,kursy用上面代碼保護ignore_match條目代替 – alkuzad

+0

再次感謝!由於時間不多,我可以在測試之前給你賞金。非常感激。 –