diff --git a/spec/app/autocomplete-spec.coffee b/spec/app/autocomplete-spec.coffee index 4cd1a9ee4..cc2f63635 100644 --- a/spec/app/autocomplete-spec.coffee +++ b/spec/app/autocomplete-spec.coffee @@ -60,24 +60,24 @@ describe "Autocomplete", -> describe 'when changes are made to the buffer', -> it 'updates word list', -> - wordList = autocomplete.wordListForBufferId[editor.buffer.id] + wordList = autocomplete.wordList expect(wordList).toContain "quicksort" expect(wordList).not.toContain "sauron" editor.buffer.change([[0,4],[0,13]], "sauron") - wordList = autocomplete.wordListForBufferId[editor.buffer.id] + wordList = autocomplete.wordList expect(wordList).not.toContain "quicksort" expect(wordList).toContain "sauron" describe "when editor's buffer is changed", -> it 'creates and uses a new word list based on new buffer', -> - wordList = autocomplete.wordListForBufferId[editor.buffer.id] + wordList = autocomplete.wordList expect(wordList).toContain "quicksort" expect(wordList).not.toContain "Some" editor.setBuffer new Buffer(require.resolve('fixtures/sample.txt')) - wordList = autocomplete.wordListForBufferId[editor.buffer.id] + wordList = autocomplete.wordList expect(wordList).not.toContain "quicksort" expect(wordList).toContain "Some" diff --git a/src/app/autocomplete.coffee b/src/app/autocomplete.coffee index 420774d74..0662ee49d 100644 --- a/src/app/autocomplete.coffee +++ b/src/app/autocomplete.coffee @@ -4,25 +4,29 @@ Range = require 'range' module.exports = class Autocomplete editor: null - wordListForBufferId = null + currentBuffer: null + wordList = null wordRegex: /\w+/g constructor: (@editor) -> - @wordListForBufferId = {} - @buildWordListForBuffer(@editor.buffer) + @setCurrentBuffer(@editor.buffer) @editor.on 'autocomplete:complete-word', => @completeWordAtEditorCursorPosition() - @editor.on 'buffer-path-change', => @buildWordListForBuffer(editor.buffer) - @editor.buffer.on 'change', => @buildWordListForBuffer(@editor.buffer) + @editor.on 'buffer-path-change', => @setCurrentBuffer(@editor.buffer) - buildWordListForBuffer: (buffer) -> - @wordListForBufferId[buffer.id] = _.unique(buffer.getText().match(@wordRegex)) + setCurrentBuffer: (buffer) -> + @currentBuffer = buffer + @currentBuffer.on 'change', => @buildWordList() + @buildWordList() + + buildWordList: () -> + @wordList = _.unique(@currentBuffer.getText().match(@wordRegex)) completeWordAtEditorCursorPosition: () -> position = @editor.getCursorBufferPosition() lineRange = [[position.row, 0], [position.row, @editor.lineLengthForBufferRow(position.row)]] [prefix, suffix] = ["", ""] - @editor.buffer.scanInRange @wordRegex, lineRange, (match, range, {stop}) -> + @currentBuffer.scanInRange @wordRegex, lineRange, (match, range, {stop}) -> if range.start.isLessThan(position) if range.end.isEqual(position) prefix = match[0] @@ -40,5 +44,4 @@ class Autocomplete matches: (prefix, suffix) -> regex = new RegExp("^#{prefix}(.+)#{suffix}$", "i") - wordList = @wordListForBufferId[@editor.buffer.id] - regex.exec(word) for word in wordList when regex.test(word) + regex.exec(word) for word in @wordList when regex.test(word)