在编辑特定项目的文件时,在emacs中使用flycheck和eslint

6

通常在emacs中编辑JavaScript时,我使用flycheck和jshint来检查语法错误。因此,我已经全局安装了jshint,并在.emacs文件中使用以下命令在js-mode中使用flycheck:

(require 'flycheck)
(add-hook 'js-mode-hook
          (lambda () (flycheck-mode t)))

但我也为一个项目做出贡献,他们使用eslint来定义语法规则。在那个项目文件夹中,我有一个.dir-locals.el文件,目前只定义了必需的缩进:

((nil . ((tab-width . 4)
         (js-indent-level . 4)))

 (js-mode . ((tab-width . 4)
             (js-indent-level . 4)))

 (html-mode . ((tab-width . 4)
               (sgml-basic-offset . 4))))

通过使用 .dir-locals.el 文件,也许可以告诉emacs在这个特定的项目文件夹中使用eslint以及保持在其余项目中使用jshint的情况下使用flycheck吗?我听说以下几行代码可以实现从jshint切换到eslint,但我不太确定应该在哪里添加它们:

(setq flycheck-disabled-checkers '(javascript-jshint))
(setq flycheck-checkers '(javascript-eslint))

(你可以猜到,我对于设置emacs非常不擅长,所以如果能提供具体的操作说明,我将非常感激。)
1个回答

1
我和你处于同样的情况,只不过我希望eslint成为默认选项,并在一些旧的“遗留”项目中使用jshint。
dir-locals包含一个嵌套的alist,将模式映射到需要在该模式下设置的变量/值对。因此,您的setq可以轻松地转换为这样的alist:
((js-mode . ((flycheck-disabled-checkers . (javascript-jshint))
             (flycheck-checkers . (javascript-eslint)))))

只设置flycheck-disabled-checkers实际上更好,因为checkers已经包含了javascript-jshintjavascript-eslint,(它在您的配置中只是被禁用),而且flycheck-checkers被标记为“危险”变量(因为这会导致任意程序在输入上运行),因此每当您打开目录中的JS文件时都会引发问题。

抱歉回复晚了。我尝试了你的建议,但是我的emacs似乎仍然在使用jshint,尽管上面的代码已经写好了。当我在js文件中按下Meta-X并输入flycheck-select-checker并选择javascript-eslint时,我可以覆盖它,但是当我编辑你的代码为((js-mode . ((flycheck-select-checker . (javascript-eslint)))))并将其放置在.dir-locals.el中时,这并没有起作用。由于缺乏elisp知识,我完全没有主意 :-( - azangru
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - sjamaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接