Блокировка шрифта и отключение линии шебанга узла синтаксического анализа в режиме js2 - PullRequest
0 голосов
/ 08 марта 2020

Как можно трактовать строку 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 / буферу или что-то в этом роде?

...