Ensure non-async deactivate is run syncronously without await

This commit is contained in:
Damien Guard
2017-09-08 11:20:23 -07:00
parent 79fbef8e24
commit 524d483610
2 changed files with 29 additions and 12 deletions

View File

@@ -506,18 +506,30 @@ class Package
@configSchemaRegisteredOnActivate = false
@deactivateResources()
@deactivateKeymaps()
result = Promise.resolve()
if @mainActivated
try
result = Promise.resolve(@mainModule?.deactivate?()).then =>
@mainModule?.deactivateConfig?()
@mainActivated = false
@mainInitialized = false
catch e
console.error "Error deactivating package '#{@name}'", e.stack
result = result.then =>
unless @mainActivated
@emitter.emit 'did-deactivate'
result
return
try
deactivationResult = @mainModule?.deactivate?()
catch e
console.error "Error deactivating package '#{@name}'", e.stack
# We support then-able async promises as well as sync ones from deactivate
if deactivationResult?.then is 'function'
deactivationResult.then => @afterDeactivation()
else
@afterDeactivation()
afterDeactivation: ->
try
@mainModule?.deactivateConfig?()
catch e
console.error "Error deactivating package '#{@name}'", e.stack
@mainActivated = false
@mainInitialized = false
@emitter.emit 'did-deactivate'
deactivateResources: ->
grammar.deactivate() for grammar in @grammars