Merge pull request #17521 from Aerijo/patch-1

Support activation hooks by grammar scope
This commit is contained in:
David Wilson 2018-06-26 12:13:46 -07:00 committed by GitHub
commit d82c3979ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 1 deletions

View File

@ -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()

View File

@ -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`.