flycheck检查html模版文件语法使用handlebars or tidy(on win)

flycheck检查html文件语法,用了html-tidy,这个处理完整的html文件可以,但检查包含数据在内的html模板文件似乎不太理想。

使用的是web-mode,发现flycheck在web-mode默认使用的后端是handlebars,去 npm install handlebars, m-x flycheck-verify-setup 显示已经enable了handlebars,但是不工作,然后在m-x flycheck-select-checker 手动输入handlebars提示:Flycheck cannot use this syntax checker for this buffer.

有人用过handlebars吗,这个如何能解决?

image

c-h v web-mode-engine-file-regexps包含handlebars的,我试了handlebars-mode,这回predicate:t 了,但也不行,只好还用tidy.

tidy总是提示我missing doctype or title…这些错误去不掉,google后找到了–show-body-only yes,http://api.html-tidy.org/tidy/quickref_next.html#show-body-only 这个设置可以只检查html片段 ,设置写到setq flycheck-tidyrc配置文件.tidyrc,怎么也不生效,但在命令行下是生效的,于是找到flycheck tidy的command把"–show-body-only" "yes"加进去

又发现我的web-mode没有web-mode-html-tag-unclosed-face,自定义未闭合的div标签显示的样式,升级到最新后也有了,现在应该没问题了

   (flycheck-define-checker html-tidy
    "A HTML syntax and style checker using Tidy.
    See URL `//github.com/htacg/tidy-html5'."
      :command ("tidy" (config-file "-config" flycheck-tidyrc)
            "-lang" "en" "-e" "-q" "--show-body-only" "yes")
      :standard-input t
      :error-patterns
     ((error line-start
          "line " line
          " column " column
          " - Error: " (message) line-end)
      (warning line-start
            "line " line
            " column " column
            " - Warning: " (message) line-end))

不知道往flycheck tidy command加参数还有没有其它写法?

@zhouchongzxc 不知道,web-mode下我也写php,js,在web-mode和php-mode换来换去的,flycheck应该是支持一个buffer同时使用多个后端语法检查器的吧? 但我没有成功,这个要是能成就好了

 (with-eval-after-load 'flycheck 
    (flycheck-add-mode 'html-tidy 'web-mode)
    (flycheck-add-mode 'php 'web-mode)
   ;(flycheck-add-mode 'javascript-eslint 'web-mode)
   ;(flycheck-add-mode 'handlebars 'web-mode)
)

handlebars不清楚有没有语法检查工具,我只是看flycheck在web-mode下默认会提示启用这个就以为有。

“首先要克服代码的分离”这个我觉得也不是必须的,至少php不用,我用了php自带的语法检查器: "php.exe" "-l" "d:/temp/temp.html",语法检查工具会忽略其中的html css js代码,只检查<?php ?>标签里面的的代码。

php所有代码都是写在<?php ?>标签里面包裹的,几乎没有例外,这让我感觉php就是一个html模板引擎。

js本来也是写在<script\>标签里面的,但好像没有开发工具支持,只好单独写成js文件。

web-mode-hook里执行flycheck-select-checke (或m-x flycheck-select–checke)后可以在当前buffer里同时使用两个语法检查器后端,感觉可用了,那天如果发现有工具可以检查<script\>标签内的js代码,就在加一个

 (flycheck-select-checker 'html-tidy)
 (flycheck-add-next-checker  'html-tidy 'php)