diff --git a/src/config.coffee b/src/config.coffee index 3cc6be6b0..a598575c0 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -9,6 +9,7 @@ pathWatcher = require 'pathwatcher' {deprecate} = require 'grim' ScopedPropertyStore = require 'scoped-property-store' +ScopeDescriptor = require './scope-descriptor' # Essential: Used to access all of Atom's configuration details. # @@ -335,7 +336,7 @@ class Config # # do stuff with value # ``` # - # * `scopeDescriptor` (optional) {Array} of {String}s describing a path from + # * `scopeDescriptor` (optional) {ScopeDescriptor} describing a path from # the root of the syntax tree to a token. Get one by calling # {editor.getLastCursor().getScopeDescriptor()}. See {::get} for examples. # See [the scopes docs](https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors) @@ -373,7 +374,7 @@ class Config # Essential: Add a listener for changes to a given key path. If `keyPath` is # not specified, your callback will be called on changes to any key. # - # * `scopeDescriptor` (optional) {Array} of {String}s describing a path from + # * `scopeDescriptor` (optional) {ScopeDescriptor} describing a path from # the root of the syntax tree to a token. Get one by calling # {editor.getLastCursor().getScopeDescriptor()}. See {::get} for examples. # See [the scopes docs](https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors) @@ -444,7 +445,7 @@ class Config # atom.config.get(scopeDescriptor, 'editor.tabLength') # => 2 # ``` # - # * `scopeDescriptor` (optional) {Array} of {String}s describing a path from + # * `scopeDescriptor` (optional) {ScopeDescriptor} describing a path from # the root of the syntax tree to a token. Get one by calling # {editor.getLastCursor().getScopeDescriptor()} # See [the scopes docs](https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors) @@ -877,8 +878,8 @@ class Config @emitter.emit 'did-change' getRawScopedValue: (scopeDescriptor, keyPath) -> - scopeChain = @scopeChainForScopeDescriptor(scopeDescriptor) - @scopedSettingsStore.getPropertyValue(scopeChain, keyPath) + scopeDescriptor = ScopeDescriptor.create(scopeDescriptor) + @scopedSettingsStore.getPropertyValue(scopeDescriptor.getScopeChain(), keyPath) observeScopedKeyPath: (scopeDescriptor, keyPath, callback) -> oldValue = @get(scopeDescriptor, keyPath) @@ -905,19 +906,8 @@ class Config # * language mode uses it for one thing. # * autocomplete uses it for editor.completions settingsForScopeDescriptor: (scopeDescriptor, keyPath) -> - scopeChain = scopeDescriptor - .map (scope) -> - scope = ".#{scope}" unless scope[0] is '.' - scope - .join(' ') - @scopedSettingsStore.getProperties(scopeChain, keyPath) - - scopeChainForScopeDescriptor: (scopeDescriptor) -> - scopeDescriptor - .map (scope) -> - scope = ".#{scope}" unless scope[0] is '.' - scope - .join(' ') + scopeDescriptor = ScopeDescriptor.create(scopeDescriptor) + @scopedSettingsStore.getProperties(scopeDescriptor.getScopeChain(), keyPath) # Base schema enforcers. These will coerce raw input into the specified type, # and will throw an error when the value cannot be coerced. Throwing the error diff --git a/src/scope-descriptor.coffee b/src/scope-descriptor.coffee new file mode 100644 index 000000000..55cbb9216 --- /dev/null +++ b/src/scope-descriptor.coffee @@ -0,0 +1,23 @@ + +# Extended: +module.exports = +class ScopeDescriptor + @create: (descriptor) -> + if descriptor instanceof ScopeDescriptor + descriptor + else + new ScopeDescriptor({descriptor}) + + ### + Section: Construction and Destruction + ### + + # Public: + constructor: ({@descriptor}) -> + + getScopeChain: -> + @descriptor + .map (scope) -> + scope = ".#{scope}" unless scope[0] is '.' + scope + .join(' ')