Skip to content
This repository has been archived by the owner on Mar 3, 2023. It is now read-only.

Support activation hooks by grammar scope #17521

Merged
merged 3 commits into from Jun 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 28 additions & 0 deletions spec/workspace-spec.js
Expand Up @@ -1299,6 +1299,34 @@ describe('Workspace', () => {
})
})

describe('the root-scope-used hook', () => {
it('fires when opening a file or changing the grammar of an open file', async () => {
await atom.packages.activatePackage('language-javascript')
await atom.packages.activatePackage('language-coffee-script')

const observeTextEditorsSpy = jasmine.createSpy('observeTextEditors')
const javascriptGrammarUsed = jasmine.createSpy('javascript')
const coffeeScriptGrammarUsed = jasmine.createSpy('coffeescript')

atom.packages.triggerDeferredActivationHooks()
atom.packages.onDidTriggerActivationHook('source.js:root-scope-used', () => {
atom.workspace.observeTextEditors(observeTextEditorsSpy)
javascriptGrammarUsed()
})
atom.packages.onDidTriggerActivationHook('source.coffee:root-scope-used', coffeeScriptGrammarUsed)

expect(javascriptGrammarUsed).not.toHaveBeenCalled()
expect(observeTextEditorsSpy).not.toHaveBeenCalled()
const editor = await atom.workspace.open('sample.js', {autoIndent: false})
expect(javascriptGrammarUsed).toHaveBeenCalled()
expect(observeTextEditorsSpy.callCount).toBe(1)

expect(coffeeScriptGrammarUsed).not.toHaveBeenCalled()
atom.grammars.assignLanguageMode(editor, 'source.coffee')
expect(coffeeScriptGrammarUsed).toHaveBeenCalled()
})
})

describe('::reopenItem()', () => {
it("opens the uri associated with the last closed pane that isn't currently open", () => {
const pane = workspace.getActivePane()
Expand Down
3 changes: 2 additions & 1 deletion src/workspace.js
Expand Up @@ -1268,7 +1268,8 @@ module.exports = class Workspace extends Model {

handleGrammarUsed (grammar) {
if (grammar == null) { return }
return this.packageManager.triggerActivationHook(`${grammar.packageName}:grammar-used`)
this.packageManager.triggerActivationHook(`${grammar.scopeName}:root-scope-used`)
this.packageManager.triggerActivationHook(`${grammar.packageName}:grammar-used`)
}

// Public: Returns a {Boolean} that is `true` if `object` is a `TextEditor`.
Expand Down