From 972fa41528ba8e2a8ac06cd577e2d88927f47649 Mon Sep 17 00:00:00 2001 From: probablycorey Date: Thu, 6 Feb 2014 11:15:34 -0800 Subject: [PATCH] Package loading is always synchronous, activation can be async --- src/package-manager.coffee | 10 +++++----- src/package.coffee | 4 ++-- src/text-mate-package.coffee | 27 +++++++++++---------------- 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 85b598009..1629f3dfc 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -87,7 +87,7 @@ class PackageManager # Private: Activate a single package by name activatePackage: (name, options) -> return pack if pack = @getActivePackage(name) - if pack = @loadPackage(name, options) + if pack = @loadPackage(name) @activePackages[pack.name] = pack pack.activate(options) pack @@ -139,7 +139,7 @@ class PackageManager @observingDisabledPackages = true # Private: - loadPackages: (options) -> + loadPackages: -> # Ensure atom exports is already in the require cache so the load time # of the first package isn't skewed by being the first to require atom require '../exports/atom' @@ -147,16 +147,16 @@ class PackageManager packagePaths = @getAvailablePackagePaths() packagePaths = packagePaths.filter (packagePath) => not @isPackageDisabled(path.basename(packagePath)) packagePaths = _.uniq packagePaths, (packagePath) -> path.basename(packagePath) - @loadPackage(packagePath, options) for packagePath in packagePaths + @loadPackage(packagePath) for packagePath in packagePaths @emit 'loaded' # Private: - loadPackage: (nameOrPath, options) -> + loadPackage: (nameOrPath) -> if packagePath = @resolvePackagePath(nameOrPath) name = path.basename(nameOrPath) return pack if pack = @getLoadedPackage(name) - pack = Package.load(packagePath, options) + pack = Package.load(packagePath) @loadedPackages[pack.name] = pack if pack? pack else diff --git a/src/package.coffee b/src/package.coffee index 2c4eb9043..1a117f705 100644 --- a/src/package.coffee +++ b/src/package.coffee @@ -23,9 +23,9 @@ class Package pack - @load: (path, options) -> + @load: (path) -> pack = @build(path) - pack?.load(options) + pack?.load() pack @loadMetadata: (path, ignoreErrors=false) -> diff --git a/src/text-mate-package.coffee b/src/text-mate-package.coffee index 3daf8d353..420c321d3 100644 --- a/src/text-mate-package.coffee +++ b/src/text-mate-package.coffee @@ -12,13 +12,13 @@ class TextMatePackage extends Package packageName = path.basename(packageName) /(^language-.+)|((\.|_|-)tmbundle$)/.test(packageName) - @getLoadQueue: -> - return @loadQueue if @loadQueue - @loadQueue = async.queue (pack, done) -> + @getActivationQueue: -> + return @activationQueue if @activationQueue? + @activationQueue = async.queue (pack, done) -> pack.loadGrammars -> pack.loadScopedProperties(done) - @loadQueue + @activationQueue constructor: -> super @@ -28,21 +28,16 @@ class TextMatePackage extends Package getType: -> 'textmate' - load: ({sync}={}) -> + load: -> @measure 'loadTime', => @metadata = Package.loadMetadata(@path, true) - if sync - @loadGrammarsSync() - @loadScopedPropertiesSync() - else - TextMatePackage.getLoadQueue().push(this) - - activate: -> - @measure 'activateTime', => - grammar.activate() for grammar in @grammars - for { selector, properties } in @scopedProperties - atom.syntax.addProperties(@path, selector, properties) + activate: ({sync}={})-> + if sync + @loadGrammarsSync() + @loadScopedPropertiesSync() + else + TextMatePackage.getActivationQueue().push(this) activateConfig: -> # noop