Как можно трактовать строку shebang вида
#! /usr/bin/env node
как строку комментария при использовании js2-mode
? Я попробовал пару вещей, одну как модификацию того, что предложил Стефан в другом потоке (не могу найти сейчас), например. модификация syntax-propertize-rules
,
(defalias 'my-js2-syntax-propertize-shebang
(syntax-propertize-rules
("\\`\\(#\\)!.*/[^ \t\n]+" (1 "!"))))
(defun my-js2-hook ()
(add-function :before (local 'syntax-propertize-rules)
#'my-js2-syntax-propertize-shebang))
, которая, кажется, не имеет никакого эффекта. Итак, я просто добавил еще одно регулярное выражение через font-lock-add-keywords
, например.
(defun my-js2-font-lock-additions ()
(font-lock-add-keywords
nil
'(("\\`\\(#!\\s-*.*/[^ \t\n]+\\)\\s-*\\([^ \t\n]+\\)\\s-*$"
(1 font-lock-comment-face t)
(2 font-lock-type-face t))))
(font-lock-flush)
(font-lock-ensure))
, что приводит к тому, что строка shebang была определена, но синтаксический анализатор js2-mode
все еще пытается проанализировать ее, обрабатывает ее как ошибки, и добавляет соответствующие наложения. Как я могу сказать js2-mode
игнорировать эту строку или сделать что-то вроде пометки ее как внешней по отношению к AST / буферу или что-то в этом роде?