Comment puis-je empêcher le mode flycheck de vérifier certains fichiers?

9

J'ai configuré Emacs pour ouvrir des fichiers nommés *.cfgen mode shell-script. Ce sont des fichiers de configuration, bien sûr, plutôt que des scripts shell, mais 90% du temps, il fait ce que je veux (principalement, de bonnes suppositions sur les visages pour les commentaires et l'affectation des variables). J'utilise le mode flycheck , et je l'aime assez pour l'avoir global-flycheck-modeactivé. Le problème est que, dans le cas des *.cfgfichiers, le mode flycheck suggère de nombreuses erreurs qui ne sont pas pertinentes.

Existe-t-il un moyen de désactiver le mode flycheck automatiquement en fonction du nom de fichier ou du chemin d'accès au fichier? Le plus proche que j'ai vu est flycheck-before-syntax-check-hook ... Je pourrais imaginer coller une vérification pour le chemin ou le nom de fichier, mais il s'exécute avant chaque vérification de la syntaxe (plutôt que de désactiver complètement les vérifications).

Saint Aardvark le Moquette
la source

Réponses:

10

La bonne façon

N'utilisez simplement pas le mode Sh pour les tampons qui ne contiennent pas de scripts shell. Écrivez votre propre mode à la place. C'est la manière canonique de gérer de telles situations dans Emacs.

Écrire un mode majeur personnalisé est facile. Vous pouvez simplement hériter du mode Sh pour obtenir toutes ses fonctionnalités et commandes, tout en ayant un mode indépendant. Ajoutez simplement ce qui suit à votre init.elpour un démarrage simple:

(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))

Étant donné que ce nouveau mode est indépendant du mode Sh, Flycheck n'essaiera pas d'utiliser des vérificateurs de syntaxe pour le mode Sh dans ce nouveau mode.

L'utilisation d'un mode séparé présente également d'autres avantages: vous pouvez configurer vos propres raccourcis clavier, indépendamment du mode Sh, ou étendre la coloration syntaxique spécifiquement pour ce style de fichiers de configuration.

La mauvaise façon

En tant que hack rapide, vous pouvez également simplement désactiver à nouveau Flycheck dans ces fichiers:

(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)))

Notez, cependant, qu'en parlant en tant que mainteneur Flycheck, je recommanderais contre cette solution. Soyez un bon citoyen Emacs et écrivez votre propre mode, vraiment.

lunaryorn
la source
7

Vous pouvez facilement désactiver les vérificateurs à l'aide de

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

La documentation Flycheck ajoute plus d'informations ici .

Vous pouvez également désactiver les vérificateurs dans un lambda pour auto-mode-alistle désactiver uniquement sur les .cfgfichiers.

(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))))
Gambo
la source
1
Vous voudrez peut-être que le setqtravail soit hors de la valeur existante de flycheck-disabled-checkers, comme dans (setq flycheck-disabled-checkers (append '(sh-shellscript sh-bash sh-zsh) flycheck-disabled-checkers)). De cette façon, si la variable est modifiée ailleurs, vous aurez toujours les autres choses en elle.
zck
@zck Il n'y a pas de valeur "existante" pour cette variable. Il est destiné à être défini localement, soit à setqpartir d'un crochet, soit avec des variables locales.
lunaryorn