mirror of
https://github.com/atom/atom.git
synced 2026-01-23 22:08:08 -05:00
Merge pull request #12375 from atom/mb-fix-grammar-used-hook
Trigger grammar-used hooks no matter how text editors are created
This commit is contained in:
@@ -1618,20 +1618,35 @@ describe "Workspace", ->
|
||||
expect(pane.getPendingItem()).toBeFalsy()
|
||||
|
||||
describe "grammar activation", ->
|
||||
beforeEach ->
|
||||
waitsForPromise ->
|
||||
atom.packages.activatePackage('language-javascript')
|
||||
|
||||
it "notifies the workspace of which grammar is used", ->
|
||||
editor = null
|
||||
atom.packages.triggerDeferredActivationHooks()
|
||||
|
||||
grammarUsed = jasmine.createSpy()
|
||||
atom.workspace.handleGrammarUsed = grammarUsed
|
||||
javascriptGrammarUsed = jasmine.createSpy('js grammar used')
|
||||
rubyGrammarUsed = jasmine.createSpy('ruby grammar used')
|
||||
cGrammarUsed = jasmine.createSpy('c grammar used')
|
||||
|
||||
atom.packages.onDidTriggerActivationHook('language-javascript:grammar-used', javascriptGrammarUsed)
|
||||
atom.packages.onDidTriggerActivationHook('language-ruby:grammar-used', rubyGrammarUsed)
|
||||
atom.packages.onDidTriggerActivationHook('language-c:grammar-used', cGrammarUsed)
|
||||
|
||||
waitsForPromise -> atom.packages.activatePackage('language-ruby')
|
||||
waitsForPromise -> atom.packages.activatePackage('language-javascript')
|
||||
waitsForPromise -> atom.packages.activatePackage('language-c')
|
||||
waitsForPromise -> atom.workspace.open('sample-with-comments.js')
|
||||
|
||||
waitsForPromise -> atom.workspace.open('sample-with-comments.js').then (o) -> editor = o
|
||||
waitsFor -> grammarUsed.callCount is 1
|
||||
runs ->
|
||||
expect(grammarUsed.argsForCall[0][0].name).toBe 'JavaScript'
|
||||
# Hooks are triggered when opening new editors
|
||||
expect(javascriptGrammarUsed).toHaveBeenCalled()
|
||||
|
||||
# Hooks are triggered when changing existing editors grammars
|
||||
atom.workspace.getActiveTextEditor().setGrammar(atom.grammars.grammarForScopeName('source.c'))
|
||||
expect(cGrammarUsed).toHaveBeenCalled()
|
||||
|
||||
# Hooks are triggered when editors are added in other ways.
|
||||
atom.workspace.getActivePane().splitRight(copyActiveItem: true)
|
||||
atom.workspace.getActiveTextEditor().setGrammar(atom.grammars.grammarForScopeName('source.ruby'))
|
||||
expect(rubyGrammarUsed).toHaveBeenCalled()
|
||||
|
||||
describe ".checkoutHeadRevision()", ->
|
||||
editor = null
|
||||
|
||||
@@ -88,6 +88,7 @@ class Workspace extends Model
|
||||
subscribeToEvents: ->
|
||||
@subscribeToActiveItem()
|
||||
@subscribeToFontSize()
|
||||
@subscribeToAddedItems()
|
||||
|
||||
consumeServices: ({serviceHub}) ->
|
||||
@directorySearchers = []
|
||||
@@ -160,6 +161,13 @@ class Workspace extends Model
|
||||
@activeItemSubscriptions.add(titleSubscription) if titleSubscription?
|
||||
@activeItemSubscriptions.add(modifiedSubscription) if modifiedSubscription?
|
||||
|
||||
subscribeToAddedItems: ->
|
||||
@onDidAddPaneItem ({item, pane, index}) =>
|
||||
if item instanceof TextEditor
|
||||
grammarSubscription = item.observeGrammar(@handleGrammarUsed.bind(this))
|
||||
item.onDidDestroy -> grammarSubscription.dispose()
|
||||
@emitter.emit 'did-add-text-editor', {textEditor: item, pane, index}
|
||||
|
||||
# Updates the application's title and proxy icon based on whichever file is
|
||||
# open.
|
||||
updateWindowTitle: =>
|
||||
@@ -383,8 +391,7 @@ class Workspace extends Model
|
||||
#
|
||||
# Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
|
||||
onDidAddTextEditor: (callback) ->
|
||||
@onDidAddPaneItem ({item, pane, index}) ->
|
||||
callback({textEditor: item, pane, index}) if item instanceof TextEditor
|
||||
@emitter.on 'did-add-text-editor', callback
|
||||
|
||||
###
|
||||
Section: Opening
|
||||
@@ -551,10 +558,7 @@ class Workspace extends Model
|
||||
@project.bufferForPath(filePath, options).then (buffer) =>
|
||||
editor = @buildTextEditor(Object.assign({buffer, largeFileMode}, options))
|
||||
disposable = atom.textEditors.add(editor)
|
||||
grammarSubscription = editor.observeGrammar(@handleGrammarUsed.bind(this))
|
||||
editor.onDidDestroy ->
|
||||
grammarSubscription.dispose()
|
||||
disposable.dispose()
|
||||
editor.onDidDestroy -> disposable.dispose()
|
||||
editor
|
||||
|
||||
handleGrammarUsed: (grammar) ->
|
||||
|
||||
Reference in New Issue
Block a user