◆ ただし修正必要


前に動かなかった Light Table の Tern JS
そろそろ直ってないかな と github を除いてみると 最近更新があったみたい

期待して最新の Light Table 0.8.1 を入れてプラグインで Tern JS をインストール!


さて 結果は……











動かない!!


相変わらず動かない
エラーは pipe broken とか spawn とか

なんか前と変わってる気はする

ぐぐってみるとこんなページがありました
https://github.com/mortalapeman/LT-TernJS/issues/26

最近の投稿ですし それっぽいです

JavaScript 修正する

原因は node のパスがおかしくて起動できてないことみたいです
Light Table 0.8.0 で nw.js から electron に変わって それに合わせて変更しないといけないのにしていなかったみたい

0.8.0 って開発中のだと去年の中頃の話だよね……
なぜこんな対応が遅いんだろ
やっぱ需要無いの?

元のパスは

app/plugins/node/node

ここに設置するか electron 用にコードを修正するかです
修正版は github にはすでに公開されています

diff

変更点はこんなの

[src/lt/plugins/tern.cljs]
(defn node-exe []
(if (platform/win?)
"/plugins/node/node.exe"
"/plugins/node/node"))
を削除
#js {:execPath (files/lt-home (node-exe))
#js {:execPath (.-executable js/process)

これはまだ プラグインマネージャでインストールできるバージョンでは対応されていないので 自分でプラグインを書き換えればいいんですね




……



…………




…………… コンパイルされてる!!!!


Light Table ですから? コードは Clojure で書かれています
electron で動かすために JavaScript 化が必要なので JavaScript にコンパイルされています

ファイルの場所はここです

AppData\LightTable\plugins\TernJS\ternjs_compiled.js

Windows 以外なら appdata より上の階層は 違いますがたいていホームディレクトリ内のどこかだと思います


とりあえず コンパイル済みの JavaScript の方を書き換えます
結果的には
"execPath": lt.objs.files.lt_home.call(null,lt.plugins.tern.node_exe.call(null))
"execPath": process.executable

にすれば 動きました

node-exe 関数は もうひとつの変更のところで使ってるだけなので 消さなくて放置でも問題なしです
なので (files/lt-home (node-exe)) を (.-executable js/process) に変更するだけです

とはいっても Clojure の知識がほぼないので 関数呼び出してるくらいにしか読めないです

同じ Clojure のファイル内で似たことしているところを色々見て それと対応する JavaScript と比べていると
  • js/xxxx は JavaScript の関数 xxxx のことで xxxx だけになる
  • .-yyyy zzzz は zzzz.yyyy というプロパティを参照してる

らしい というのがわかりました

なので "execPath": のバリュー部分を process.executable に置き換えます

これで完了

Tern JS

動くようになった TernJS です

lt-tern


補完ができてますね

TernJS がなくても Light Table は補完してくれますけど スコープなどをみないで そのファイルの中にある文字列から補完になるので ↓ の画像みたいに xyz が候補にあります

lt-no-tern


TernJS を入れると

lt-tern02

その場所で見えない変数名は出てきません
プロパティもちゃんと判断してくれます

lt-tern-prop


TernJS なしでは プロパティ判断はせずに補完します

lt-no-tern-prop


特にこういうのが補完されるってすごいですよね

lt-tern03


一般的に補完といえば Ctrl+Space ですが Light Table だと Ctrl+Space を押すとエディタのコマンド入力するところがでてきます
なので TernJS では Tab キーで補完項目を表示します
使い方書いていないので 見つけるまでに苦労しました

TernJS の機能は readme によると
  • Auto-completion
  • In-line documentation
  • Jump to definition

の 3 つがあるようです

Auto-completion はできたのですが 残りの 2 つは?
補完のリストでビルトイン関数にカーソル合わせても特に何も出てきません

ジャンプも方法がわからないのでできるのか不明です


使えるようになっても まだ完成してないところも多いのかな
brackets くらい使えるようになってくれると嬉しいのですけど

brackets-tern