Come posso impedire alla modalità flycheck di controllare determinati file?


9

Ho configurato Emacs per aprire i file denominati *.cfgin modalità shell-script. Questi sono file di configurazione, ovviamente, piuttosto che script di shell, ma il 90% delle volte fa quello che voglio (principalmente, buone supposizioni sui volti per i commenti e l'assegnazione delle variabili). Uso la modalità flycheck e mi piace abbastanza da averlo global-flycheck-modeabilitato. Il problema è che, nel caso dei *.cfgfile, la modalità flycheck suggerisce molti errori che non sono rilevanti.

Esiste un modo per disabilitare automaticamente la modalità flycheck in base al nome del file o al percorso del file? Il più vicino che ho visto è flycheck-before-syntax-check-hook ... Potrei immaginare di inserire un controllo per percorso o nome file, ma viene eseguito prima di ogni controllo di sintassi (piuttosto che disabilitare completamente i controlli).

Risposte:


10

La buona strada

Semplicemente non usare la modalità Sh per i buffer che non contengono script di shell. Scrivi invece la tua modalità. Questo è il modo canonico di gestire tali situazioni in Emacs.

Scrivere una modalità principale personalizzata è facile. Puoi semplicemente ereditare da Sh Mode per ottenere tutte le sue funzionalità e comandi, pur avendo una modalità indipendente. init.elPer iniziare, aggiungi quanto segue al tuo :

(define-derived-mode my-cfg-mode sh-mode "My CFg Mode"
  "A mode for my CFg files."
  (sh-set-shell "bash"))

(add-to-list 'auto-mode-alist '("\\.cfg\\'" . my-cfg-mode))

Dato che questa nuova modalità è indipendente dalla modalità Sh, Flycheck non proverà ad usare i controlli di sintassi per la modalità Sh in questa nuova modalità.

L'uso di una modalità separata presenta anche altri vantaggi: è possibile impostare le proprie combinazioni di tasti, indipendentemente dalla modalità Sh, oppure estendere l'evidenziazione della sintassi specificamente per questo stile di file di configurazione.

La cattiva strada

Come hack rapido, puoi semplicemente disabilitare nuovamente Flycheck in tali file:

(add-hook 'flycheck-mode-hook #'my-keep-flycheck-off)

(defun my-keep-flycheck-off ()
  (when (and (eq major-mode 'sh-mode)
             (buffer-file-name)
             (string= (file-name-extension (buffer-file-name)) "cfg"))
    (flycheck-mode -1)))

Si noti, tuttavia, che parlando come manutentore di Flycheck, raccomanderei contro questa soluzione. Sii un buon cittadino di Emacs e scrivi la tua modalità, davvero.


7

Puoi facilmente disabilitare le pedine usando

(setq flycheck-disabled-checkers '(sh-shellscript sh-bash sh-zsh))

La documentazione di Flycheck aggiunge ulteriori informazioni qui .

Puoi anche disabilitare gli ispettori in un lambda per auto-mode-alistaverlo disabilitato solo sui .cfgfile.

(add-to-list 'auto-mode-alist
             '("\\.cfg\\'" . (lambda ()
                               (setq flycheck-disabled-checkers  (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers))
                               (shell-script-mode))))

1
Potresti voler setqeliminare il lavoro dal valore esistente di flycheck-disabled-checkers, come in (setq flycheck-disabled-checkers (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers)). In questo modo, se la variabile viene modificata altrove, avrai comunque le altre cose.
zck,

@zck Non esiste un valore "esistente" per questa variabile. È progettato per essere impostato localmente, con setqun hook o con variabili locali.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.