   # atom.config.get(scopeDescriptor, 'editor.tabLength') # => 2
   # ```
   #
-  # * `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)
-  #   for more information.
   # * `keyPath` The {String} name of the key to retrieve.
+  # * `options` (optional) {Object}
+  #   * `sources` (optional) {Array} of {String} source names. If provided, only
+  #     values that were associated with these sources during {::set} will be used.
+  #   * `excludeSources` (optional) {Array} of {String} source names. If provided,
+  #     values that  were associated with these sources during {::set} will not
+  #     be used.
+  #   * `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)
+  #     for more information.
   #
   # Returns the value from Atom's default settings, the user's configuration
   # file in the type specified by the configuration schema.
   get: ->
     if arguments.length > 1
       if typeof arguments[0] is 'string' or not arguments[0]?
-        keyPath = arguments[0]
-        options = arguments[1]
+        [keyPath, options] = arguments
         {scope} = options
       else
         Grim.deprecate """
           Passing a scope descriptor as the first argument to Config::get is deprecated.
           Pass a `scope` in an options hash as the final argument instead.
         """
-        scope = arguments[0]
-        keyPath = arguments[1]
-    else
-      keyPath = arguments[0]
+        [scope, keyPath] = arguments
+    else
+      [keyPath] = arguments
 
     if scope?
       value = @getRawScopedValue(scope, keyPath, options)


  # Deprecated: Restore the global setting at `keyPath` to its default value.
  #
  # * `scopeSelector` (optional) {String}. eg. '.source.ruby'
  #   See [the scopes docs](https://atom.io/docs/latest/advanced/scopes-and-scope-descriptors)
  #   for more information.
  # * `keyPath` The {String} name of the key.
  #
  # Returns the new value.
  restoreDefault: (scopeSelector, keyPath) ->
    Grim.deprecate("Use ::unset instead.")
    @unset(scopeSelector, keyPath)

  # Extended: Get the global default value of the key path. _Please note_ that in most
  # cases calling this is not necessary! {::get} returns the default value when

  # 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.
  #
  # * `keyPath` (optional) {String} name of the key to observe. Must be
  #   specified if `scopeDescriptor` is specified.
  # * `optional` (optional) {Object}
  #   * `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)
  #     for more information.
  # * `callback` {Function} to call when the value of the key changes.
  #   * `event` {Object}
  #     * `newValue` the new value of the key
