Serialize all included grammar scopes

This commit is contained in:
Ben Ogle
2014-06-20 16:49:16 -07:00
parent 8c3bfaa3a2
commit 0dadce1047
4 changed files with 23 additions and 10 deletions

View File

@@ -197,6 +197,11 @@ class PackageManager
getLoadedPackagesForTypes: (types) ->
pack for pack in @getLoadedPackages() when pack.getType() in types
getPackageForGrammarScopeName: (scopeName) ->
for pack in @getLoadedPackages()
return pack if scopeName in pack.getGrammarScopes()
null
# Public: Resolve the given package name to a path on disk.
resolvePackagePath: (name) ->
return name if fs.isDirectorySync(name)

View File

@@ -42,9 +42,8 @@ class Package
@name = @metadata?.name ? path.basename(@path)
@reset()
atom.syntax.on 'request-grammar-preload', (name) =>
return unless name in ['YAML', 'CoffeeScript'] and @name in ['language-yaml', 'language-coffee-script']
@loadGrammarsSync()
atom.syntax.on 'request-grammar-preload', ({packageName, scopeName}={}) =>
@loadGrammarsSync() if packageName == @name
enable: ->
atom.config.removeAtKeyPath('core.disabledPackages', @name)
@@ -181,7 +180,6 @@ class Package
loadGrammarsSync: ->
return if @grammarsLoaded
@grammars = []
grammarsDirPath = path.join(@path, 'grammars')
grammarPaths = fs.listSync(grammarsDirPath, ['json', 'cson'])
for grammarPath in grammarPaths
@@ -198,8 +196,6 @@ class Package
loadGrammars: ->
return if @grammarsLoaded
@grammars = []
loadGrammar = (grammarPath, callback) =>
atom.syntax.readGrammar grammarPath, (error, grammar) =>
if error?

View File

@@ -35,8 +35,8 @@ class Syntax extends GrammarRegistry
createToken: (value, scopes) -> new Token({value, scopes})
requestGrammarPreload: (grammarName) ->
@emit('request-grammar-preload', grammarName)
requestGrammarPreload: (grammarPackageAndScope) ->
@emit('request-grammar-preload', grammarPackageAndScope)
# Deprecated: Used by settings-view to display snippets for packages
@::accessor 'scopedProperties', ->

View File

@@ -47,12 +47,24 @@ class TokenizedBuffer extends Model
@reloadGrammar()
serializeParams: ->
packageNameForScope = (scope) ->
atom.packages.getPackageForGrammarScopeName(scopeName)?.name
scopeName = @grammar.scopeName
packageName = packageNameForScope(@grammar.scopeName)
grammars = [{scopeName, packageName}]
for scopeName in @grammar.includedGrammarScopes
grammars.push {scopeName, packageName: packageNameForScope(scopeName)}
bufferPath: @buffer.getPath()
tabLength: @tabLength
grammar: @grammar.name
grammars: grammars
deserializeParams: (params) ->
atom.syntax.requestGrammarPreload(params.grammar)
if params.grammars?
for grammar in params.grammars
atom.syntax.requestGrammarPreload(grammar)
params.buffer = atom.project.bufferForPathSync(params.bufferPath)
params