Merge pull request #4307 from atom/bo-add-parse-errors

Integrate notifications into core
This commit is contained in:
Ben Ogle
2014-11-25 15:59:37 -08:00
6 changed files with 25 additions and 8 deletions

View File

@@ -20,7 +20,7 @@
"atomShellVersion": "0.19.4",
"dependencies": {
"async": "0.2.6",
"atom-keymap": "^2.2.2",
"atom-keymap": "^2.3.0",
"bootstrap": "git+https://github.com/atom/bootstrap.git#6af81906189f1747fd6c93479e3d998ebe041372",
"clear-cut": "0.4.0",
"coffee-script": "1.7.0",
@@ -97,11 +97,12 @@
"link": "0.26.0",
"markdown-preview": "0.110.0",
"metrics": "0.39.0",
"notifications": "0.4.0",
"open-on-github": "0.30.0",
"package-generator": "0.32.0",
"release-notes": "0.36.0",
"settings-view": "0.161.0",
"snippets": "0.56.0",
"snippets": "0.57.0",
"spell-check": "0.44.0",
"status-bar": "0.48.0",
"styleguide": "0.30.0",

View File

@@ -554,11 +554,13 @@ describe "Config", ->
describe "when the config file contains invalid cson", ->
beforeEach ->
spyOn(console, 'error')
spyOn(atom.notifications, 'addError')
fs.writeFileSync(atom.config.configFilePath, "{{{{{")
it "logs an error to the console and does not overwrite the config file on a subsequent save", ->
atom.config.loadUserConfig()
expect(console.error).toHaveBeenCalled()
expect(atom.notifications.addError.callCount).toBe 1
atom.config.set("hair", "blonde") # trigger a save
expect(atom.config.save).not.toHaveBeenCalled()
@@ -692,7 +694,6 @@ describe "Config", ->
expect(atom.config.get(['.source.ruby'], 'foo.bar')).toBe 'baz'
expect(atom.config.get(['.source.ruby'], 'foo.scoped')).toBe true
describe "when the config file changes to omit a setting with a default", ->
it "resets the setting back to the default", ->
fs.writeFileSync(atom.config.configFilePath, "foo: { baz: 'new'}")

View File

@@ -249,6 +249,7 @@ class Atom extends Model
@config = new Config({configDirPath, resourcePath})
@keymaps = new KeymapManager({configDirPath, resourcePath})
@keymap = @keymaps # Deprecated
@keymaps.subscribeToFileReadFailure()
@tooltips = new TooltipManager
@notifications = new NotificationManager
@commands = new CommandRegistry

View File

@@ -724,21 +724,26 @@ class Config
@configFileHasErrors = false
catch error
@configFileHasErrors = true
console.error "Failed to load user config '#{@configFilePath}'", error.message
console.error error.stack
@notifyFailure('Failed to load config.cson', error)
observeUserConfig: ->
try
@watchSubscription ?= pathWatcher.watch @configFilePath, (eventType) =>
@loadUserConfig() if eventType is 'change' and @watchSubscription?
catch error
console.error "Failed to watch user config '#{@configFilePath}'", error.message
console.error error.stack
@notifyFailure('Failed to watch user config', error)
unobserveUserConfig: ->
@watchSubscription?.close()
@watchSubscription = null
notifyFailure: (errorMessage, error) ->
message = "#{errorMessage}"
detail = error.stack
atom.notifications.addError(message, {detail, closable: true})
console.error message
console.error detail
save: ->
allSettings = global: @settings
allSettings = _.extend allSettings, @scopedSettingsStore.propertiesForSource('user-config')

View File

@@ -23,6 +23,10 @@ KeymapManager::loadUserKeymap = ->
if fs.isFileSync(userKeymapPath)
@loadKeymap(userKeymapPath, watch: true, suppressErrors: true)
KeymapManager::subscribeToFileReadFailure = ->
this.onDidFailToReadFile (error) ->
atom.notifications.addError('Failed to load keymap.cson', {detail: error.stack, closable: true})
# This enables command handlers registered via jQuery to call
# `.abortKeyBinding()` on the `jQuery.Event` object passed to the handler.
jQuery.Event::abortKeyBinding = ->

View File

@@ -13,7 +13,12 @@ class Notification
getTimestamp: -> @timestamp
getDetail: -> @optons.detail
getDetail: -> @options.detail
isEqual: (other) ->
@getMessage() == other.getMessage() \
and @getType() == other.getType() \
and @getDetail() == other.getDetail()
isClosable: ->
!!@options.closable