mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
Re-tokenize buffer when its grammar is updated
This can happen if a grammar that the grammar includes is added or removed from the syntax global.
This commit is contained in:
@@ -328,6 +328,26 @@ describe "TokenizedBuffer", ->
|
||||
|
||||
expect(tokenizedBuffer.lineForScreenRow(2).text).toBe "#{tabAsSpaces} buy()#{tabAsSpaces}while supply > demand"
|
||||
|
||||
describe "when the language mode emits a 'grammar-updated' event based on an included grammar being activated", ->
|
||||
it "retokenizes the buffer", ->
|
||||
atom.activatePackage('ruby.tmbundle', sync: true)
|
||||
atom.activatePackage('ruby-on-rails-tmbundle', sync: true)
|
||||
|
||||
editSession = project.buildEditSession()
|
||||
editSession.setVisible(true)
|
||||
editSession.setGrammar(syntax.selectGrammar('test.erb'))
|
||||
editSession.buffer.setText("<div class='name'><%= User.find(2).full_name %></div>")
|
||||
tokenizedBuffer = editSession.displayBuffer.tokenizedBuffer
|
||||
fullyTokenize(tokenizedBuffer)
|
||||
|
||||
{tokens} = tokenizedBuffer.lineForScreenRow(0)
|
||||
expect(tokens[0]).toEqual value: "<div class='name'>", scopes: ["text.html.ruby"]
|
||||
|
||||
atom.activatePackage('html.tmbundle', sync: true)
|
||||
fullyTokenize(tokenizedBuffer)
|
||||
{tokens} = tokenizedBuffer.lineForScreenRow(0)
|
||||
expect(tokens[0]).toEqual value: '<', scopes: ["text.html.ruby","meta.tag.block.any.html","punctuation.definition.tag.begin.html"]
|
||||
|
||||
describe "when a Git commit message file is tokenized", ->
|
||||
beforeEach ->
|
||||
atom.activatePackage('git.tmbundle', sync: true)
|
||||
|
||||
@@ -34,6 +34,7 @@ class LanguageMode
|
||||
return if grammar is @grammar
|
||||
@grammar = grammar
|
||||
@currentGrammarScore = score ? grammar.getScore(@buffer.getPath(), @buffer.getText())
|
||||
@subscribe @grammar, 'grammar-updated', => @trigger 'grammar-updated'
|
||||
@trigger 'grammar-changed', grammar
|
||||
|
||||
reloadGrammar: ->
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
Token = require 'token'
|
||||
EventEmitter = require 'event-emitter'
|
||||
_ = require 'underscore'
|
||||
|
||||
###
|
||||
# Internal #
|
||||
@@ -14,3 +16,5 @@ class NullGrammar
|
||||
{ tokens: [new Token(value: line, scopes: ['null-grammar.text.plain'])] }
|
||||
|
||||
grammarAddedOrRemoved: -> # no op
|
||||
|
||||
_.extend NullGrammar.prototype, EventEmitter
|
||||
|
||||
@@ -28,6 +28,7 @@ class TokenizedBuffer
|
||||
@resetScreenLines()
|
||||
@buffer.on "changed.tokenized-buffer#{@id}", (e) => @handleBufferChange(e)
|
||||
@languageMode.on 'grammar-changed', => @resetScreenLines()
|
||||
@languageMode.on 'grammar-updated', => @resetScreenLines()
|
||||
|
||||
resetScreenLines: ->
|
||||
@screenLines = @buildPlaceholderScreenLinesForRows(0, @buffer.getLastRow())
|
||||
|
||||
Reference in New Issue
Block a user