diff --git a/package.json b/package.json index 194dcb847..915d1b33f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "reactionary-atom-fork": "^1.0.0", "runas": "1.0.1", "scandal": "1.0.3", - "scoped-property-store": "^0.14.0", + "scoped-property-store": "^0.15.0", "scrollbar-style": "^1.0.2", "season": "^1.0.2", "semver": "2.2.1", diff --git a/spec/config-spec.coffee b/spec/config-spec.coffee index cdd071091..e46585d6e 100644 --- a/spec/config-spec.coffee +++ b/spec/config-spec.coffee @@ -1075,6 +1075,13 @@ describe "Config", -> atom.config.setDefaults("foo", hasDefault: 'ok') expect(atom.config.get([".source.coffee", ".string.quoted.single"], "foo.hasDefault")).toBe 'ok' + describe 'setting priority', -> + describe 'when package settings are added after user settings', -> + it "returns the user's setting because the user's setting has higher priority", -> + atom.config.set(".source.coffee", "foo.bar.baz", 100) + atom.config.addScopedSettings("some-package", ".source.coffee", foo: bar: baz: 1) + expect(atom.config.get([".source.coffee"], "foo.bar.baz")).toBe 100 + describe ".set(scope, keyPath, value)", -> it "sets the value and overrides the others", -> atom.config.addScopedSettings("config", ".source.coffee .string.quoted.double.coffee", foo: bar: baz: 42) diff --git a/src/config.coffee b/src/config.coffee index 163116f71..0983fa966 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -314,6 +314,7 @@ class Config @settings = {} @scopedSettingsStore = new ScopedPropertyStore @usersScopedSettings = new CompositeDisposable + @usersScopedSettingPriority = {priority: 1000} @configFileHasErrors = false @configFilePath = fs.resolve(@configDirPath, 'config', ['json', 'cson']) @configFilePath ?= path.join(@configDirPath, 'config.cson') @@ -537,7 +538,7 @@ class Config settings = @scopedSettingsStore.propertiesForSourceAndSelector('user-config', scopeSelector) @scopedSettingsStore.removePropertiesForSourceAndSelector('user-config', scopeSelector) _.setValueForKeyPath(settings, keyPath, undefined) - @addScopedSettings('user-config', scopeSelector, settings) + @addScopedSettings('user-config', scopeSelector, settings, @usersScopedSettingPriority) @save() unless @configFileHasErrors @getDefault(scopeSelector, keyPath) else @@ -881,13 +882,13 @@ class Config resetUserScopedSettings: (newScopedSettings) -> @usersScopedSettings?.dispose() @usersScopedSettings = new CompositeDisposable - @usersScopedSettings.add @scopedSettingsStore.addProperties('user-config', newScopedSettings) + @usersScopedSettings.add @scopedSettingsStore.addProperties('user-config', newScopedSettings, @usersScopedSettingPriority) @emitter.emit 'did-change' - addScopedSettings: (source, selector, value) -> + addScopedSettings: (source, selector, value, options) -> settingsBySelector = {} settingsBySelector[selector] = value - disposable = @scopedSettingsStore.addProperties(source, settingsBySelector) + disposable = @scopedSettingsStore.addProperties(source, settingsBySelector, options) @emitter.emit 'did-change' new Disposable => disposable.dispose() @@ -901,7 +902,7 @@ class Config settingsBySelector = {} settingsBySelector[selector] = value - @usersScopedSettings.add @scopedSettingsStore.addProperties('user-config', settingsBySelector) + @usersScopedSettings.add @scopedSettingsStore.addProperties('user-config', settingsBySelector, @usersScopedSettingPriority) @emitter.emit 'did-change' getRawScopedValue: (scopeDescriptor, keyPath) ->