読者です 読者をやめる 読者になる 読者になる

tech memorandom

Webに関して調査したことや、メディアアート系(Max,Processing)で調査したことなどを書いていきます。

emacs js2-modeのUndeclared variableについて

javascript-modeからjs2-modeに変えてみた。fly-makeなどを使わなくてもエラーチェックを行なってくれるしすごく良い感じ。
しかし1つ困った点があってUndeclared variableがechoされつづけてしまう。そういった変数が存在すること自体は確かに問題であるけど、別ですでに定義済みだったりすると常に出続けてしまうと思われる。

検索などができない状態なので表示をとめることにした。
正しい処置とは思わないし、他に設定がありそうも気にするけど暫定処置としてコメントアウト。
これでいちおUndeclared variableのワーニングがて続ける、という状態から開放されます。

メモがてら残しておきます。

js2.elの7000行あたりです。

(defun js2-highlight-undeclared-vars ()
"After entire parse is finished, look for undeclared variable assignments.
We have to wait until entire buffer is parsed, since JavaScript permits var
decls to occur after they're used.

If any undeclared var name is in `js2-externs' or `js2-additional-externs',
it is considered declared."
(let (name)
(dolist (entry js2-recorded-assignments)
(destructuring-bind (name-node scope pos end) entry
(setq name (js2-name-node-name name-node))
(unless (or (member name js2-global-externs)
(member name js2-default-externs)
(member name js2-additional-externs)
(js2-get-defining-scope scope name))
(js2-set-face pos end 'js2-external-variable-face 'record)
;; (js2-record-text-property pos end 'help-echo "Undeclared variable")
(js2-record-text-property pos end 'point-entered #'js2-echo-help))))
(setq js2-recorded-assignments nil)))

参考まで。

補足)
warningがでるのはコードが悪いんだろうと思っていたのですがどこかみつからず悩んでいたのですがコンストラクタ定義の際の型がぬけていました。そしてそういった変数はオレンジ色で表示してくれます。問題なく動作していたのでついつい見逃していました。

修正前

Hoge = function (){
   hoge;
}

修正後

var Hoge = function (){
   hoge;
}