環境
- OS X Yosemite 10.10.3
- Atom 1.0.0
- 中の人=CoffeeScript初心者。自作package初挑戦なので大絶賛修行中でっす。
概要
自作packageの開発中、表題の事象に直面しました。例えば次のようなコードがあった場合、
ore.coffee
getEditor: ->
atom.workspace.getActiveTextEditor()
createDecoration: ->
range = new Range([9, 0], [10, 0])
marker = @getEditor().markBufferRange(range, invalidate: 'never')
@getEditor().decorateMarker(marker, type: 'line', class: 'myClass')
アクティブなエディタの9行目にmyClassが適用されることを期待したのですが、実際はrangeの値に関係なく1行目にのみ適用されます。
原因
変数rangeはAtom API Rangeのインスタンスだと思っていたのですが、なんと中身はネイティブのRangeになっており、start, endが効いていませんでした。
解決方法
前述のore.coffeeの先頭に以下の行を追加します。
ore.coffee
{ Range } = require 'atom'
余談
- 最初はconsole.log(foo)などと書いてDeveloper ToolsのConsoleでデバッグしていたのですが、同じくDeveloper ToolsのSourcesでブレークポイント&ステップ実行、変数のウォッチができるのを知って効率がアップしました。