From f9a0e038a5eab219c73af17af9bd4a6981cf0428 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 12:56:32 -0700 Subject: [PATCH 01/27] Use emissary for EventEmitter and Subscriber --- exports/atom.coffee | 5 +- package.json | 1 + spec/event-emitter-spec.coffee | 208 ------------------------------- spec/subscriber-spec.coffee | 54 -------- src/atom-package.coffee | 2 +- src/atom.coffee | 2 +- src/config.coffee | 2 +- src/cursor.coffee | 2 +- src/directory.coffee | 2 +- src/display-buffer-marker.coffee | 4 +- src/display-buffer.coffee | 4 +- src/edit-session.coffee | 4 +- src/event-emitter.coffee | 115 ----------------- src/file.coffee | 2 +- src/git.coffee | 4 +- src/keymap.coffee | 2 +- src/language-mode.coffee | 4 +- src/less-compile-cache.coffee | 3 +- src/null-grammar.coffee | 2 +- src/package-manager.coffee | 2 +- src/project.coffee | 2 +- src/selection.coffee | 2 +- src/space-pen-extensions.coffee | 2 +- src/subscriber.coffee | 39 ------ src/syntax.coffee | 2 +- src/task.coffee | 2 +- src/text-buffer.coffee | 4 +- src/text-mate-grammar.coffee | 2 +- src/theme-manager.coffee | 2 +- src/tokenized-buffer.coffee | 4 +- src/window-event-handler.coffee | 2 +- 31 files changed, 37 insertions(+), 450 deletions(-) delete mode 100644 spec/event-emitter-spec.coffee delete mode 100644 spec/subscriber-spec.coffee delete mode 100644 src/event-emitter.coffee delete mode 100644 src/subscriber.coffee diff --git a/exports/atom.coffee b/exports/atom.coffee index 4d33ee086..cbbb9bc48 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -1,5 +1,6 @@ {View, $$, $$$} = require '../src/space-pen-extensions' {Document, Point, Range, Site} = require 'telepath' +{EventEmitter, Subscriber} = require 'emissary' module.exports = _: require '../src/underscore-extensions' @@ -10,7 +11,7 @@ module.exports = BufferedProcess: require '../src/buffered-process' Directory: require '../src/directory' Document: Document - EventEmitter: require '../src/event-emitter' + EventEmitter: EventEmitter File: require '../src/file' fs: require '../src/fs-utils' Git: require '../src/git' @@ -19,7 +20,7 @@ module.exports = ScrollView: require '../src/scroll-view' Site: Site stringscore: require '../vendor/stringscore' - Subscriber: require '../src/subscriber' + Subscriber: Subscriber View: View # The following classes can't be used from a Task handler and should therefore diff --git a/package.json b/package.json index e00e5f0f0..f94619807 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "bootstrap": "git://github.com/twbs/bootstrap.git#v3.0.0", "coffee-script": "1.6.2", "coffeestack": "0.6.0", + "emissary": "0.5.0", "first-mate": "0.4.0", "git-utils": "0.26.0", "guid": "0.0.10", diff --git a/spec/event-emitter-spec.coffee b/spec/event-emitter-spec.coffee deleted file mode 100644 index 4ad427237..000000000 --- a/spec/event-emitter-spec.coffee +++ /dev/null @@ -1,208 +0,0 @@ -{_} = require 'atom' -EventEmitter = require '../src/event-emitter' - -describe "EventEmitter mixin", -> - [object, fooHandler1, fooHandler2, barHandler] = [] - - beforeEach -> - object = {} - _.extend(object, EventEmitter) - - fooHandler1 = jasmine.createSpy('fooHandler1') - fooHandler2 = jasmine.createSpy('fooHandler2') - barHandler = jasmine.createSpy('barHandler') - - object.on 'foo', fooHandler1 - object.on 'foo', fooHandler2 - object.on 'bar', barHandler - - describe ".on", -> - describe "when called with multiple space-separated event names", -> - it "subscribes to each event names", -> - object.on ' a.b c.d\te ', fooHandler1 - - object.trigger 'a' - expect(fooHandler1).toHaveBeenCalled() - - fooHandler1.reset() - object.trigger 'c' - expect(fooHandler1).toHaveBeenCalled() - - fooHandler1.reset() - object.trigger 'e' - expect(fooHandler1).toHaveBeenCalled() - - fooHandler1.reset() - object.trigger '' - expect(fooHandler1).not.toHaveBeenCalled() - - describe ".trigger", -> - describe "when called with a non-namespaced event name", -> - it "triggers all handlers registered for the given event name", -> - object.trigger 'foo', 'data' - expect(fooHandler1).toHaveBeenCalledWith('data') - expect(fooHandler2).toHaveBeenCalledWith('data') - expect(barHandler).not.toHaveBeenCalled() - - fooHandler1.reset() - fooHandler2.reset() - - object.trigger 'bar', 'stuff' - expect(barHandler).toHaveBeenCalledWith('stuff') - - describe "when there are namespaced handlers", -> - it "triggers only handlers registered with the given namespace / event combination", -> - barHandler2 = jasmine.createSpy('barHandler2') - object.on('bar.ns1', barHandler2) - - object.trigger('bar') - - expect(barHandler).toHaveBeenCalled() - expect(barHandler2).toHaveBeenCalled() - barHandler.reset() - barHandler2.reset() - - object.trigger('bar.ns1') - - expect(barHandler).not.toHaveBeenCalled() - expect(barHandler2).toHaveBeenCalled() - - it "does not raise exceptions when called with non-existent events / namespaces", -> - object.trigger('junk') - object.trigger('junk.garbage') - - describe ".off", -> - describe "when called with no arguments", -> - it "removes all subscriptions", -> - object.off() - object.trigger 'foo' - expect(fooHandler1).not.toHaveBeenCalled() - expect(fooHandler2).not.toHaveBeenCalled() - - describe "when called with multiple space-separated event names", -> - it "unsubscribes from each event name", -> - object.on 'a.b c.d e', fooHandler1 - object.off ' a.b\te ' - - object.trigger 'a' - expect(fooHandler1).not.toHaveBeenCalled() - - fooHandler1.reset() - object.trigger 'e' - expect(fooHandler1).not.toHaveBeenCalled() - - fooHandler1.reset() - object.trigger 'c.d' - expect(fooHandler1).toHaveBeenCalled() - - describe "when called with a non-namespaced event name", -> - it "removes all handlers for that event name", -> - object.off 'foo' - object.trigger 'foo' - expect(fooHandler1).not.toHaveBeenCalled() - expect(fooHandler2).not.toHaveBeenCalled() - - describe "when called with a non-namespaced event name and a handler function", -> - it "removes the specific handler", -> - object.off 'foo', fooHandler1 - object.trigger 'foo' - expect(fooHandler1).not.toHaveBeenCalled() - expect(fooHandler2).toHaveBeenCalled() - - it "does not throw an exception if there was not matching `on` call", -> - expect(-> object.off 'marco', -> "nothing").not.toThrow() - - describe "when there are namespaced event handlers", -> - [barHandler2, bazHandler1, bazHandler2, bazHandler3] = [] - - beforeEach -> - barHandler2 = jasmine.createSpy('barHandler2') - bazHandler1 = jasmine.createSpy('bazHandler1') - bazHandler2 = jasmine.createSpy('bazHandler2') - bazHandler3 = jasmine.createSpy('bazHandler3') - - object.on 'bar.ns1', barHandler2 - object.on 'baz.ns1', bazHandler1 - object.on 'baz.ns1', bazHandler2 - object.on 'baz.ns2', bazHandler3 - - describe "when called with a namespaced event name", -> - it "removes all handlers in that namespace", -> - object.trigger 'baz' - - expect(bazHandler1).toHaveBeenCalled() - expect(bazHandler2).toHaveBeenCalled() - expect(bazHandler3).toHaveBeenCalled() - - bazHandler1.reset() - bazHandler2.reset() - bazHandler3.reset() - - object.off 'baz.ns1' - object.trigger 'baz' - object.trigger 'baz.ns1' - - expect(bazHandler1).not.toHaveBeenCalled() - expect(bazHandler2).not.toHaveBeenCalled() - expect(bazHandler3).toHaveBeenCalled() - - describe "when called with just a namespace", -> - it "removes all handlers for all events on that namespace", -> - object.trigger 'bar' - expect(barHandler).toHaveBeenCalled() - expect(barHandler2).toHaveBeenCalled() - - barHandler.reset() - barHandler2.reset() - - object.trigger 'baz' - expect(bazHandler1).toHaveBeenCalled() - expect(bazHandler2).toHaveBeenCalled() - expect(bazHandler3).toHaveBeenCalled() - - bazHandler1.reset() - bazHandler2.reset() - bazHandler3.reset() - - object.off '.ns1' - - object.trigger 'bar' - object.trigger 'bar.ns1' - expect(barHandler).toHaveBeenCalled() - expect(barHandler2).not.toHaveBeenCalled() - - object.trigger 'baz' - object.trigger 'baz.ns1' - - expect(bazHandler1).not.toHaveBeenCalled() - expect(bazHandler2).not.toHaveBeenCalled() - expect(bazHandler3).toHaveBeenCalled() - - describe "when called with event names and namespaces that don't exist", -> - it "does not raise an exception", -> - object.off 'junk' - object.off '.garbage' - object.off 'junk.garbage' - - - describe ".one(event, callback)", -> - it "triggers the given callback once, then removes the subscription", -> - oneHandler = jasmine.createSpy('oneHandler') - object.one 'event', oneHandler - - object.trigger('event') - expect(oneHandler).toHaveBeenCalled() - oneHandler.reset() - - object.trigger('event') - expect(oneHandler).not.toHaveBeenCalled() - - describe ".subscriptionCount()", -> - it "returns the total number of subscriptions on the object", -> - expect(object.subscriptionCount()).toBe 3 - - object.on 'baz', -> - expect(object.subscriptionCount()).toBe 4 - - object.off 'foo' - expect(object.subscriptionCount()).toBe 2 diff --git a/spec/subscriber-spec.coffee b/spec/subscriber-spec.coffee deleted file mode 100644 index 1f00b8b86..000000000 --- a/spec/subscriber-spec.coffee +++ /dev/null @@ -1,54 +0,0 @@ -Subscriber = require '../src/subscriber' -EventEmitter = require '../src/event-emitter' -{_, $$} = require 'atom' - -describe "Subscriber", -> - [emitter1, emitter2, emitter3, event1Handler, event2Handler, event3Handler, subscriber] = [] - - class TestEventEmitter - _.extend TestEventEmitter.prototype, EventEmitter - - class TestSubscriber - _.extend TestSubscriber.prototype, Subscriber - - beforeEach -> - emitter1 = new TestEventEmitter - emitter2 = new TestEventEmitter - emitter3 = $$ -> - @div => - @a() - @span() - subscriber = new TestSubscriber - event1Handler = jasmine.createSpy("event1Handler") - event2Handler = jasmine.createSpy("event2Handler") - event3Handler = jasmine.createSpy("event3Handler") - subscriber.subscribe emitter1, 'event1', event1Handler - subscriber.subscribe emitter2, 'event2', event2Handler - subscriber.subscribe emitter3, 'event3', 'a', event3Handler - - it "subscribes to events on the specified object", -> - emitter1.trigger 'event1', 'foo' - expect(event1Handler).toHaveBeenCalledWith('foo') - - emitter2.trigger 'event2', 'bar' - expect(event2Handler).toHaveBeenCalledWith('bar') - - emitter3.find('span').trigger 'event3' - expect(event3Handler).not.toHaveBeenCalledWith() - - emitter3.find('a').trigger 'event3' - expect(event3Handler).toHaveBeenCalled() - - it "allows an object to unsubscribe en-masse", -> - subscriber.unsubscribe() - emitter1.trigger 'event1', 'foo' - emitter2.trigger 'event2', 'bar' - expect(event1Handler).not.toHaveBeenCalled() - expect(event2Handler).not.toHaveBeenCalled() - - it "allows an object to unsubscribe from a specific object", -> - subscriber.unsubscribe(emitter1) - emitter1.trigger 'event1', 'foo' - emitter2.trigger 'event2', 'bar' - expect(event1Handler).not.toHaveBeenCalled() - expect(event2Handler).toHaveBeenCalledWith('bar') diff --git a/src/atom-package.coffee b/src/atom-package.coffee index 0c0282dec..eb2958ba0 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -5,7 +5,7 @@ path = require 'path' _ = require './underscore-extensions' $ = require './jquery-extensions' CSON = require 'season' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' ### Internal: Loads and resolves packages. ### diff --git a/src/atom.coffee b/src/atom.coffee index 01b0d563d..50df8855c 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -11,7 +11,7 @@ dialog = remote.require 'dialog' app = remote.require 'app' {Document} = require 'telepath' DeserializerManager = require './deserializer-manager' -Subscriber = require './subscriber' +{Subscriber} = require 'emissary' # Public: Atom global for dealing with packages, themes, menus, and the window. # diff --git a/src/config.coffee b/src/config.coffee index 8c9c6e71d..d886b6304 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -1,6 +1,6 @@ fsUtils = require './fs-utils' _ = require './underscore-extensions' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' CSON = require 'season' fs = require 'fs' path = require 'path' diff --git a/src/cursor.coffee b/src/cursor.coffee index 0b3941f22..fc4fbb5a9 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -1,5 +1,5 @@ {Point, Range} = require 'telepath' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' _ = require './underscore-extensions' # Public: The `Cursor` class represents the little blinking line identifying diff --git a/src/directory.coffee b/src/directory.coffee index 0d96f05fe..db099c951 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -4,7 +4,7 @@ path = require 'path' fsUtils = require './fs-utils' pathWatcher = require 'pathwatcher' File = require './file' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' # Public: Represents a directory using {File}s module.exports = diff --git a/src/display-buffer-marker.coffee b/src/display-buffer-marker.coffee index a1eb17a6c..56a4db010 100644 --- a/src/display-buffer-marker.coffee +++ b/src/display-buffer-marker.coffee @@ -1,7 +1,7 @@ {Range} = require 'telepath' _ = require './underscore-extensions' -EventEmitter = require './event-emitter' -Subscriber = require './subscriber' +{EventEmitter} = require 'emissary' +{Subscriber} = require 'emissary' # Private: module.exports = diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 79b379175..0449fba48 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -4,11 +4,11 @@ telepath = require 'telepath' {Point, Range} = telepath TokenizedBuffer = require './tokenized-buffer' RowMap = require './row-map' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' Fold = require './fold' Token = require './token' DisplayBufferMarker = require './display-buffer-marker' -Subscriber = require './subscriber' +{Subscriber} = require 'emissary' ConfigObserver = require './config-observer' # Private: diff --git a/src/edit-session.coffee b/src/edit-session.coffee index 558d926d4..126a5b8a7 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -8,8 +8,8 @@ LanguageMode = require './language-mode' DisplayBuffer = require './display-buffer' Cursor = require './cursor' Selection = require './selection' -EventEmitter = require './event-emitter' -Subscriber = require './subscriber' +{EventEmitter} = require 'emissary' +{Subscriber} = require 'emissary' TextMateScopeSelector = require('first-mate').ScopeSelector # Public: The core model of Atom. diff --git a/src/event-emitter.coffee b/src/event-emitter.coffee deleted file mode 100644 index 0b6224707..000000000 --- a/src/event-emitter.coffee +++ /dev/null @@ -1,115 +0,0 @@ -_ = require './underscore-extensions' - -# Public: Provides a list of functions that can be used in Atom for event management. -# -# Each event can have more than one handler; that is, an event can trigger multiple functions. -module.exports = - # Associates an event name with a function to perform. - # - # This is called endlessly, until the event is turned {.off}. - # - # eventNames - A {String} containing one or more space-separated events. - # handler - A {Function} that's executed when the event is triggered. - on: (eventNames, handler) -> - for eventName in eventNames.split(/\s+/) when eventName isnt '' - [eventName, namespace] = eventName.split('.') - - @eventHandlersByEventName ?= {} - @eventHandlersByEventName[eventName] ?= [] - @eventHandlersByEventName[eventName].push(handler) - - if namespace - @eventHandlersByNamespace ?= {} - @eventHandlersByNamespace[namespace] ?= {} - @eventHandlersByNamespace[namespace][eventName] ?= [] - @eventHandlersByNamespace[namespace][eventName].push(handler) - - @afterSubscribe?() - - # Associates an event name with a function to perform only once. - # - # eventName - A {String} name identifying an event - # handler - A {Function} that's executed when the event is triggered - one: (eventName, handler) -> - oneShotHandler = (args...) => - @off(eventName, oneShotHandler) - handler(args...) - - @on eventName, oneShotHandler - - # Triggers a registered event. - # - # eventName - A {String} name identifying an event - # args - Any additional arguments to pass over to the event `handler` - trigger: (eventName, args...) -> - if @queuedEvents - @queuedEvents.push [eventName, args...] - else - [eventName, namespace] = eventName.split('.') - - if namespace - if handlers = @eventHandlersByNamespace?[namespace]?[eventName] - new Array(handlers...).forEach (handler) -> handler(args...) - else - if handlers = @eventHandlersByEventName?[eventName] - handlers.forEach (handler) -> handler(args...) - - # Stops executing handlers for a registered event. - # - # eventNames - A {String} containing one or more space-separated events. - # handler - The {Function} to remove from the event. If not provided, all handlers are removed. - off: (eventNames, handler) -> - if eventNames - for eventName in eventNames.split(/\s+/) when eventName isnt '' - [eventName, namespace] = eventName.split('.') - eventName = undefined if eventName == '' - - if namespace - if eventName - handlers = @eventHandlersByNamespace?[namespace]?[eventName] ? [] - for handler in new Array(handlers...) - _.remove(handlers, handler) - @off eventName, handler - else - for eventName, handlers of @eventHandlersByNamespace?[namespace] ? {} - for handler in new Array(handlers...) - _.remove(handlers, handler) - @off eventName, handler - else - subscriptionCountBefore = @subscriptionCount() - if handler - eventHandlers = @eventHandlersByEventName[eventName] - _.remove(eventHandlers, handler) if eventHandlers - else - delete @eventHandlersByEventName?[eventName] - @afterUnsubscribe?() if @subscriptionCount() < subscriptionCountBefore - else - subscriptionCountBefore = @subscriptionCount() - @eventHandlersByEventName = {} - @eventHandlersByNamespace = {} - @afterUnsubscribe?() if @subscriptionCount() < subscriptionCountBefore - - # When called, stops triggering any events. - pauseEvents: -> - @pauseCount ?= 0 - if @pauseCount++ == 0 - @queuedEvents ?= [] - - # When called, resumes triggering events. - resumeEvents: -> - if --@pauseCount == 0 - queuedEvents = @queuedEvents - @queuedEvents = null - @trigger(event...) for event in queuedEvents - - # Identifies how many events are registered. - # - # Returns a {Number}. - getSubscriptionCount: -> - count = 0 - for name, handlers of @eventHandlersByEventName - count += handlers.length - count - - # Deprecated - subscriptionCount: -> @getSubscriptionCount() diff --git a/src/file.coffee b/src/file.coffee index 02605b1ab..6e88a899e 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -1,5 +1,5 @@ Q = require 'q' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' path = require 'path' fsUtils = require './fs-utils' pathWatcher = require 'pathwatcher' diff --git a/src/git.coffee b/src/git.coffee index c10e50fb1..506afd48e 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -1,7 +1,7 @@ _ = require './underscore-extensions' fsUtils = require './fs-utils' -Subscriber = require './subscriber' -EventEmitter = require './event-emitter' +{Subscriber} = require 'emissary' +{EventEmitter} = require 'emissary' Task = require './task' GitUtils = require 'git-utils' diff --git a/src/keymap.coffee b/src/keymap.coffee index 45dae5d7a..68fc8c72c 100644 --- a/src/keymap.coffee +++ b/src/keymap.coffee @@ -4,7 +4,7 @@ fsUtils = require './fs-utils' path = require 'path' CSON = require 'season' BindingSet = require './binding-set' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' # Internal: Associates keymaps with actions. # diff --git a/src/language-mode.coffee b/src/language-mode.coffee index f6d1e4341..8574cd90c 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -1,8 +1,8 @@ {Range} = require 'telepath' _ = require './underscore-extensions' {OnigRegExp} = require 'oniguruma' -EventEmitter = require './event-emitter' -Subscriber = require './subscriber' +{EventEmitter} = require 'emissary' +{Subscriber} = require 'emissary' ### Internal ### diff --git a/src/less-compile-cache.coffee b/src/less-compile-cache.coffee index 9bfaadf6f..366c52925 100644 --- a/src/less-compile-cache.coffee +++ b/src/less-compile-cache.coffee @@ -2,10 +2,11 @@ path = require 'path' _ = require './underscore-extensions' LessCache = require 'less-cache' +{Subscriber} = require 'emissary' module.exports = class LessCompileCache - _.extend @prototype, require('./subscriber') + _.extend @prototype, Subscriber @cacheDir: '/tmp/atom-compile-cache/less' diff --git a/src/null-grammar.coffee b/src/null-grammar.coffee index c79ef633a..5346c9b42 100644 --- a/src/null-grammar.coffee +++ b/src/null-grammar.coffee @@ -1,5 +1,5 @@ Token = require './token' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' _ = require './underscore-extensions' ### Internal ### diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 25491d4d8..f291f8286 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -1,4 +1,4 @@ -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' fsUtils = require './fs-utils' _ = require './underscore-extensions' Package = require './package' diff --git a/src/project.coffee b/src/project.coffee index bd7b90a1e..b86e915a0 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -8,7 +8,7 @@ telepath = require 'telepath' {Range} = telepath TextBuffer = require './text-buffer' EditSession = require './edit-session' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' Directory = require './directory' Task = require './task' Git = require './git' diff --git a/src/selection.coffee b/src/selection.coffee index 7b184a64c..d5745d860 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -1,5 +1,5 @@ {Range} = require 'telepath' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' _ = require './underscore-extensions' # Public: Represents a selection in the {EditSession}. diff --git a/src/space-pen-extensions.coffee b/src/space-pen-extensions.coffee index a4d8f1047..96b22a2a2 100644 --- a/src/space-pen-extensions.coffee +++ b/src/space-pen-extensions.coffee @@ -2,7 +2,7 @@ _ = require './underscore-extensions' spacePen = require 'space-pen' jQuery = require './jquery-extensions' ConfigObserver = require './config-observer' -Subscriber = require './subscriber' +{Subscriber} = require 'emissary' _.extend spacePen.View.prototype, ConfigObserver _.extend spacePen.View.prototype, Subscriber diff --git a/src/subscriber.coffee b/src/subscriber.coffee deleted file mode 100644 index 83b09babd..000000000 --- a/src/subscriber.coffee +++ /dev/null @@ -1,39 +0,0 @@ -_ = require './underscore-extensions' - -# Public: Mixin for managing subscriptions of event listeners to different objects. -# -# Support unsubscribe from all register event listeners or just the listeners -# registered on a given object. -module.exports = - subscribeWith: (eventEmitter, methodName, args) -> - eventEmitter[methodName](args...) - - @subscriptions ?= [] - @subscriptionsByObject ?= new WeakMap - @subscriptionsByObject.set(eventEmitter, []) unless @subscriptionsByObject.has(eventEmitter) - - eventName = _.first(args) - callback = _.last(args) - subscription = cancel: -> - # node's EventEmitter doesn't have 'off' method. - removeListener = eventEmitter.off ? eventEmitter.removeListener - removeListener.call eventEmitter, eventName, callback - @subscriptions.push(subscription) - @subscriptionsByObject.get(eventEmitter).push(subscription) - - subscribe: (eventEmitter, args...) -> - @subscribeWith(eventEmitter, 'on', args) - - subscribeToCommand: (eventEmitter, args...) -> - @subscribeWith(eventEmitter, 'command', args) - - unsubscribe: (object) -> - if object? - for subscription in @subscriptionsByObject?.get(object) ? [] - subscription.cancel() - _.remove(@subscriptions, subscription) - @subscriptionsByObject?.delete(object) - else - subscription.cancel() for subscription in @subscriptions ? [] - @subscriptions = null - @subscriptionsByObject = null diff --git a/src/syntax.coffee b/src/syntax.coffee index 563468570..da44b7038 100644 --- a/src/syntax.coffee +++ b/src/syntax.coffee @@ -3,7 +3,7 @@ jQuery = require './jquery-extensions' Specificity = require '../vendor/specificity' {$$} = require './space-pen-extensions' fsUtils = require './fs-utils' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' NullGrammar = require './null-grammar' TextMateScopeSelector = require('first-mate').ScopeSelector diff --git a/src/task.coffee b/src/task.coffee index e3ea96a22..fd5b5e655 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -1,6 +1,6 @@ _ = require './underscore-extensions' child_process = require 'child_process' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' # Public: Run a node script in a separate process. # diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index a0828ccca..ba795bdd6 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -5,9 +5,9 @@ telepath = require 'telepath' _ = require './underscore-extensions' fsUtils = require './fs-utils' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' File = require './file' -Subscriber = require './subscriber' +{Subscriber} = require 'emissary' {Point, Range} = telepath diff --git a/src/text-mate-grammar.coffee b/src/text-mate-grammar.coffee index d9d362e68..ad37a2259 100644 --- a/src/text-mate-grammar.coffee +++ b/src/text-mate-grammar.coffee @@ -4,7 +4,7 @@ plist = require 'plist' Token = require './token' {OnigRegExp, OnigScanner} = require 'oniguruma' path = require 'path' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' {ScopeSelector} = require 'first-mate' pathSplitRegex = new RegExp("[#{path.sep}.]") diff --git a/src/theme-manager.coffee b/src/theme-manager.coffee index 3c4b71e48..eb1722f61 100644 --- a/src/theme-manager.coffee +++ b/src/theme-manager.coffee @@ -1,5 +1,5 @@ path = require 'path' -EventEmitter = require './event-emitter' +{EventEmitter} = require 'emissary' Package = require './package' AtomPackage = require './atom-package' diff --git a/src/tokenized-buffer.coffee b/src/tokenized-buffer.coffee index ce51f67ba..55aaa37eb 100644 --- a/src/tokenized-buffer.coffee +++ b/src/tokenized-buffer.coffee @@ -1,7 +1,7 @@ _ = require './underscore-extensions' TokenizedLine = require './tokenized-line' -EventEmitter = require './event-emitter' -Subscriber = require './subscriber' +{EventEmitter} = require 'emissary' +{Subscriber} = require 'emissary' Token = require './token' telepath = require 'telepath' {Point, Range} = telepath diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index dc8f3bee9..902cfb846 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -2,7 +2,7 @@ $ = require './jquery-extensions' _ = require './underscore-extensions' ipc = require 'ipc' shell = require 'shell' -Subscriber = require './subscriber' +{Subscriber} = require 'emissary' fsUtils = require './fs-utils' # Private: Handles low-level events related to the window. From a0486bc9b0533c077e7beeaf71b2173ab47886b0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 13:06:16 -0700 Subject: [PATCH 02/27] Use emit instead of trigger --- src/atom-package.coffee | 2 +- src/config.coffee | 4 ++-- src/cursor.coffee | 10 +++++----- src/directory.coffee | 2 +- src/display-buffer-marker.coffee | 7 +++---- src/display-buffer.coffee | 21 ++++++++++----------- src/edit-session.coffee | 29 ++++++++++++++--------------- src/file.coffee | 6 +++--- src/git.coffee | 7 +++---- src/keymap.coffee | 2 +- src/language-mode.coffee | 3 +-- src/package-manager.coffee | 2 +- src/project.coffee | 6 +++--- src/selection.coffee | 4 ++-- src/task.coffee | 2 +- src/text-buffer.coffee | 3 +-- src/text-mate-grammar.coffee | 2 +- src/tokenized-buffer.coffee | 11 +++++------ 18 files changed, 58 insertions(+), 65 deletions(-) diff --git a/src/atom-package.coffee b/src/atom-package.coffee index eb2958ba0..061f203d7 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -163,7 +163,7 @@ class AtomPackage extends Package @deactivateResources() @deactivateConfig() @mainModule?.deactivate?() if @mainActivated - @trigger('deactivated') + @emit('deactivated') deactivateConfig: -> @mainModule?.deactivateConfig?() diff --git a/src/config.coffee b/src/config.coffee index d886b6304..d82131de0 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -88,7 +88,7 @@ class Config userConfig = CSON.readFileSync(@configFilePath) _.extend(@settings, userConfig) @configFileHasErrors = false - @trigger 'updated' + @emit 'updated' catch e @configFileHasErrors = true console.error "Failed to load user config '#{@configFilePath}'", e.message @@ -219,7 +219,7 @@ class Config update: -> return if @configFileHasErrors @save() - @trigger 'updated' + @emit 'updated' # Private: save: -> diff --git a/src/cursor.coffee b/src/cursor.coffee index fc4fbb5a9..878816226 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -36,12 +36,12 @@ class Cursor newScreenPosition: newHeadScreenPosition textChanged: textChanged - @trigger 'moved', movedEvent - @editSession.trigger 'cursor-moved', movedEvent + @emit 'moved', movedEvent + @editSession.emit 'cursor-moved', movedEvent @marker.on 'destroyed', => @destroyed = true @editSession.removeCursor(this) - @trigger 'destroyed' + @emit 'destroyed' @needsAutoscroll = true # Private: @@ -54,7 +54,7 @@ class Cursor @clearSelection() @needsAutoscroll = options.autoscroll ? @isLastCursor() unless fn() - @trigger 'autoscrolled' if @needsAutoscroll + @emit 'autoscrolled' if @needsAutoscroll # Public: Moves a cursor to a given screen position. # @@ -97,7 +97,7 @@ class Cursor if @visible != visible @visible = visible @needsAutoscroll ?= true if @visible and @isLastCursor() - @trigger 'visibility-changed', @visible + @emit 'visibility-changed', @visible # Public: Returns the visibility of the cursor. isVisible: -> @visible diff --git a/src/directory.coffee b/src/directory.coffee index db099c951..491a0cdda 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -101,7 +101,7 @@ class Directory # Private: subscribeToNativeChangeEvents: -> @watchSubscription = pathWatcher.watch @path, (eventType) => - @trigger "contents-changed" if eventType is "change" + @emit "contents-changed" if eventType is "change" # Private: unsubscribeFromNativeChangeEvents: -> diff --git a/src/display-buffer-marker.coffee b/src/display-buffer-marker.coffee index 56a4db010..ca244759b 100644 --- a/src/display-buffer-marker.coffee +++ b/src/display-buffer-marker.coffee @@ -1,7 +1,6 @@ {Range} = require 'telepath' _ = require './underscore-extensions' -{EventEmitter} = require 'emissary' -{Subscriber} = require 'emissary' +{EventEmitter, Subscriber} = require 'emissary' # Private: module.exports = @@ -184,7 +183,7 @@ class DisplayBufferMarker destroyed: -> delete @displayBuffer.markers[@id] - @trigger 'destroyed' + @emit 'destroyed' notifyObservers: ({textChanged}) -> textChanged ?= false @@ -203,7 +202,7 @@ class DisplayBufferMarker changed = true unless _.isEqual(isValid, @wasValid) return unless changed - @trigger 'changed', { + @emit 'changed', { @oldHeadScreenPosition, newHeadScreenPosition, @oldTailScreenPosition, newTailScreenPosition, @oldHeadBufferPosition, newHeadBufferPosition, diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 0449fba48..606e64b41 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -1,14 +1,13 @@ _ = require './underscore-extensions' +{EventEmitter, Subscriber} = require 'emissary' guid = require 'guid' telepath = require 'telepath' {Point, Range} = telepath TokenizedBuffer = require './tokenized-buffer' RowMap = require './row-map' -{EventEmitter} = require 'emissary' Fold = require './fold' Token = require './token' DisplayBufferMarker = require './display-buffer-marker' -{Subscriber} = require 'emissary' ConfigObserver = require './config-observer' # Private: @@ -46,7 +45,7 @@ class DisplayBuffer @foldsByMarkerId = {} @updateAllScreenLines() @createFoldForMarker(marker) for marker in @buffer.findMarkers(@getFoldMarkerAttributes()) - @subscribe @tokenizedBuffer, 'grammar-changed', (grammar) => @trigger 'grammar-changed', grammar + @subscribe @tokenizedBuffer, 'grammar-changed', (grammar) => @emit 'grammar-changed', grammar @subscribe @tokenizedBuffer, 'changed', @handleTokenizedBufferChange @subscribe @buffer, 'markers-updated', @handleBufferMarkersUpdated @subscribe @buffer, 'marker-created', @handleBufferMarkerCreated @@ -54,7 +53,7 @@ class DisplayBuffer @subscribe @state, 'changed', ({key, newValue}) => switch key when 'softWrap' - @trigger 'soft-wrap-changed', newValue + @emit 'soft-wrap-changed', newValue @updateWrappedScreenLines() @observeConfig 'editor.preferredLineLength', callNow: false, => @@ -78,11 +77,11 @@ class DisplayBuffer @rowMap = new RowMap @updateScreenLines(0, @buffer.getLineCount(), null, suppressChangeEvent: true) - triggerChanged: (eventProperties, refreshMarkers=true) -> + emitChanged: (eventProperties, refreshMarkers=true) -> if refreshMarkers @pauseMarkerObservers() @refreshMarkerScreenPositions() - @trigger 'changed', eventProperties + @emit 'changed', eventProperties @resumeMarkerObservers() updateWrappedScreenLines: -> @@ -91,7 +90,7 @@ class DisplayBuffer @updateAllScreenLines() screenDelta = @getLastRow() - end bufferDelta = 0 - @triggerChanged({ start, end, screenDelta, bufferDelta }) + @emitChanged({ start, end, screenDelta, bufferDelta }) ### Public ### @@ -565,7 +564,7 @@ class DisplayBuffer resumeMarkerObservers: -> marker.resumeEvents() for marker in @getMarkers() - @trigger 'markers-updated' + @emit 'markers-updated' refreshMarkerScreenPositions: -> for marker in @getMarkers() @@ -620,7 +619,7 @@ class DisplayBuffer @pauseMarkerObservers() @pendingChangeEvent = changeEvent else - @triggerChanged(changeEvent, options.refreshMarkers) + @emitChanged(changeEvent, options.refreshMarkers) buildScreenLines: (startBufferRow, endBufferRow) -> newScreenLines = [] @@ -686,11 +685,11 @@ class DisplayBuffer handleBufferMarkersUpdated: => if event = @pendingChangeEvent @pendingChangeEvent = null - @triggerChanged(event, false) + @emitChanged(event, false) handleBufferMarkerCreated: (marker) => @createFoldForMarker(marker) if marker.matchesAttributes(@getFoldMarkerAttributes()) - @trigger 'marker-created', @getMarker(marker.id) + @emit 'marker-created', @getMarker(marker.id) createFoldForMarker: (marker) -> new Fold(this, marker) diff --git a/src/edit-session.coffee b/src/edit-session.coffee index 126a5b8a7..b8f07a830 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -8,8 +8,7 @@ LanguageMode = require './language-mode' DisplayBuffer = require './display-buffer' Cursor = require './cursor' Selection = require './selection' -{EventEmitter} = require 'emissary' -{Subscriber} = require 'emissary' +{EventEmitter, Subscriber} = require 'emissary' TextMateScopeSelector = require('first-mate').ScopeSelector # Public: The core model of Atom. @@ -104,9 +103,9 @@ class EditSession @subscribe @state, 'changed', ({key, newValue}) => switch key when 'scrollTop' - @trigger 'scroll-top-changed', newValue + @emit 'scroll-top-changed', newValue when 'scrollLeft' - @trigger 'scroll-left-changed', newValue + @emit 'scroll-left-changed', newValue project.addEditSession(this) if registerEditSession @@ -115,20 +114,20 @@ class EditSession @buffer.retain() @subscribe @buffer, "path-changed", => project.setPath(path.dirname(@getPath())) unless project.getPath()? - @trigger "title-changed" - @trigger "path-changed" - @subscribe @buffer, "contents-modified", => @trigger "contents-modified" - @subscribe @buffer, "contents-conflicted", => @trigger "contents-conflicted" - @subscribe @buffer, "modified-status-changed", => @trigger "modified-status-changed" + @emit "title-changed" + @emit "path-changed" + @subscribe @buffer, "contents-modified", => @emit "contents-modified" + @subscribe @buffer, "contents-conflicted", => @emit "contents-conflicted" + @subscribe @buffer, "modified-status-changed", => @emit "modified-status-changed" @preserveCursorPositionOnBufferReload() # Private: setDisplayBuffer: (@displayBuffer) -> @subscribe @displayBuffer, 'marker-created', @handleMarkerCreated - @subscribe @displayBuffer, "changed", (e) => @trigger 'screen-lines-changed', e + @subscribe @displayBuffer, "changed", (e) => @emit 'screen-lines-changed', e @subscribe @displayBuffer, "markers-updated", => @mergeIntersectingSelections() @subscribe @displayBuffer, 'grammar-changed', => @handleGrammarChange() - @subscribe @displayBuffer, 'soft-wrap-changed', (args...) => @trigger 'soft-wrap-changed', args... + @subscribe @displayBuffer, 'soft-wrap-changed', (args...) => @emit 'soft-wrap-changed', args... # Private: getViewClass: -> @@ -144,7 +143,7 @@ class EditSession @displayBuffer.destroy() @languageMode.destroy() project?.removeEditSession(this) - @trigger 'destroyed' + @emit 'destroyed' @off() # Private: @@ -871,7 +870,7 @@ class EditSession @cursors.push(cursor) else @remoteCursors.push(cursor) - @trigger 'cursor-added', cursor + @emit 'cursor-added', cursor cursor # Public: Removes and returns a cursor from the `EditSession`. @@ -904,7 +903,7 @@ class EditSession if selection.intersectsBufferRange(selectionBufferRange) return selection else - @trigger 'selection-added', selection + @emit 'selection-added', selection selection # Public: Given a buffer range, this adds a new selection for it. @@ -1424,7 +1423,7 @@ class EditSession # Private: handleGrammarChange: -> @unfoldAll() - @trigger 'grammar-changed' + @emit 'grammar-changed' # Private: handleMarkerCreated: (marker) => diff --git a/src/file.coffee b/src/file.coffee index 6e88a899e..c6078aa07 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -103,12 +103,12 @@ class File @detectResurrectionAfterDelay() else if eventType is "rename" @setPath(path) - @trigger "moved" + @emit "moved" else if eventType is "change" oldContents = @cachedContents newContents = @read(true) return if oldContents == newContents - @trigger 'contents-changed' + @emit 'contents-changed' # Private: detectResurrectionAfterDelay: -> @@ -121,7 +121,7 @@ class File @handleNativeChangeEvent("change", @getPath()) else @cachedContents = null - @trigger "removed" + @emit "removed" # Private: subscribeToNativeChangeEvents: -> diff --git a/src/git.coffee b/src/git.coffee index 506afd48e..1ab2ab59b 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -1,8 +1,7 @@ _ = require './underscore-extensions' fsUtils = require './fs-utils' -{Subscriber} = require 'emissary' -{EventEmitter} = require 'emissary' Task = require './task' +{EventEmitter, Subscriber} = require 'emissary' GitUtils = require 'git-utils' # Public: Represents the underlying git operations performed by Atom. @@ -125,7 +124,7 @@ class Git else delete @statuses[path] if currentPathStatus isnt pathStatus - @trigger 'status-changed', path, pathStatus + @emit 'status-changed', path, pathStatus pathStatus # Public: Determines if the given path is ignored. @@ -274,4 +273,4 @@ class Git @statuses = statuses @upstream = upstream @branch = branch - @trigger 'statuses-changed' unless statusesUnchanged + @emit 'statuses-changed' unless statusesUnchanged diff --git a/src/keymap.coffee b/src/keymap.coffee index 68fc8c72c..01080ca0d 100644 --- a/src/keymap.coffee +++ b/src/keymap.coffee @@ -34,7 +34,7 @@ class Keymap loadBundledKeymaps: -> @loadDirectory(config.bundledKeymapsDirPath) - @trigger('bundled-keymaps-loaded') + @emit('bundled-keymaps-loaded') loadUserKeymaps: -> @loadDirectory(path.join(config.configDirPath, 'keymaps')) diff --git a/src/language-mode.coffee b/src/language-mode.coffee index 8574cd90c..8aa445e68 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -1,8 +1,7 @@ {Range} = require 'telepath' _ = require './underscore-extensions' {OnigRegExp} = require 'oniguruma' -{EventEmitter} = require 'emissary' -{Subscriber} = require 'emissary' +{EventEmitter, Subscriber} = require 'emissary' ### Internal ### diff --git a/src/package-manager.coffee b/src/package-manager.coffee index f291f8286..703e8d945 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -58,7 +58,7 @@ class PackageManager require '../exports/atom' @loadPackage(name) for name in @getAvailablePackageNames() when not @isPackageDisabled(name) - @trigger 'loaded' + @emit 'loaded' loadPackage: (name, options) -> if @isPackageDisabled(name) diff --git a/src/project.coffee b/src/project.coffee index b86e915a0..475f31007 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -125,7 +125,7 @@ class Project if originUrl = @repo?.getOriginUrl() @state.set('repoUrl', originUrl) - @trigger "path-changed" + @emit "path-changed" # Public: Returns the name of the root directory. getRootDirectory: -> @@ -205,7 +205,7 @@ class Project # Public: Add the given {EditSession}. addEditSession: (editSession) -> @editSessions.push editSession - @trigger 'edit-session-created', editSession + @emit 'edit-session-created', editSession # Public: Return and removes the given {EditSession}. removeEditSession: (editSession) -> @@ -274,7 +274,7 @@ class Project addBufferAtIndex: (buffer, index, options={}) -> @buffers[index] = buffer @state.get('buffers').insert(index, buffer.getState()) if options.updateState ? true - @trigger 'buffer-created', buffer + @emit 'buffer-created', buffer # Private: Removes a {TextBuffer} association from the project. # diff --git a/src/selection.coffee b/src/selection.coffee index d5745d860..d68940361 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -22,7 +22,7 @@ class Selection @marker.on 'destroyed', => @destroyed = true @editSession.removeSelection(this) - @trigger 'destroyed' unless @editSession.destroyed + @emit 'destroyed' unless @editSession.destroyed # Private: destroy: -> @@ -607,4 +607,4 @@ class Selection # Private: screenRangeChanged: -> screenRange = @getScreenRange() - @trigger 'screen-range-changed', screenRange + @emit 'screen-range-changed', screenRange diff --git a/src/task.coffee b/src/task.coffee index fd5b5e655..55f27d90f 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -69,7 +69,7 @@ class Task handleEvents: -> @childProcess.removeAllListeners() @childProcess.on 'message', ({event, args}) => - @trigger(event, args...) + @emit(event, args...) # Public: Starts the task. # diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index ba795bdd6..fe8206343 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -1,3 +1,4 @@ +{EventEmitter, Subscriber} = require 'emissary' guid = require 'guid' Q = require 'q' {P} = require 'scandal' @@ -5,9 +6,7 @@ telepath = require 'telepath' _ = require './underscore-extensions' fsUtils = require './fs-utils' -{EventEmitter} = require 'emissary' File = require './file' -{Subscriber} = require 'emissary' {Point, Range} = telepath diff --git a/src/text-mate-grammar.coffee b/src/text-mate-grammar.coffee index ad37a2259..fdbc54e8a 100644 --- a/src/text-mate-grammar.coffee +++ b/src/text-mate-grammar.coffee @@ -70,7 +70,7 @@ class TextMateGrammar return false unless _.include(@includedGrammarScopes, scopeName) @clearRules() syntax.grammarUpdated(@scopeName) - @trigger 'grammar-updated' + @emit 'grammar-updated' true getScore: (filePath, contents) -> diff --git a/src/tokenized-buffer.coffee b/src/tokenized-buffer.coffee index 55aaa37eb..c552d655f 100644 --- a/src/tokenized-buffer.coffee +++ b/src/tokenized-buffer.coffee @@ -1,7 +1,6 @@ _ = require './underscore-extensions' TokenizedLine = require './tokenized-line' -{EventEmitter} = require 'emissary' -{Subscriber} = require 'emissary' +{EventEmitter, Subscriber} = require 'emissary' Token = require './token' telepath = require 'telepath' {Point, Range} = telepath @@ -62,7 +61,7 @@ class TokenizedBuffer @grammar = grammar @currentGrammarScore = score ? grammar.getScore(@buffer.getPath(), @buffer.getText()) @subscribe @grammar, 'grammar-updated', => @resetTokenizedLines() - @trigger 'grammar-changed', grammar + @emit 'grammar-changed', grammar reloadGrammar: -> if grammar = syntax.selectGrammar(@buffer.getPath(), @buffer.getText()) @@ -98,7 +97,7 @@ class TokenizedBuffer lastRow = @buffer.getLastRow() @tokenizedLines = @buildPlaceholderTokenizedLinesForRows(0, lastRow) @invalidateRow(0) - @trigger "changed", { start: 0, end: lastRow, delta: 0 } + @emit "changed", { start: 0, end: lastRow, delta: 0 } tokenizeInBackground: -> return if not @visible or @pendingChunk or @destroyed @@ -129,7 +128,7 @@ class TokenizedBuffer @validateRow(row) @invalidateRow(row + 1) unless filledRegion - @trigger "changed", { start: invalidRow, end: row, delta: 0 } + @emit "changed", { start: invalidRow, end: row, delta: 0 } @tokenizeInBackground() if @firstInvalidRow()? @@ -168,7 +167,7 @@ class TokenizedBuffer if newEndStack and not _.isEqual(newEndStack, previousEndStack) @invalidateRow(end + delta + 1) - @trigger "changed", { start, end, delta, bufferChange: e } + @emit "changed", { start, end, delta, bufferChange: e } buildTokenizedLinesForRows: (startRow, endRow, startingStack) -> ruleStack = startingStack From 0b0c3229d304ccf56b5898af84a45184888ab40d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 13:11:42 -0700 Subject: [PATCH 03/27] EventEmitter is exported as Emitter --- src/atom-package.coffee | 4 ++-- src/config.coffee | 4 ++-- src/cursor.coffee | 4 ++-- src/directory.coffee | 4 ++-- src/display-buffer-marker.coffee | 4 ++-- src/display-buffer.coffee | 4 ++-- src/edit-session.coffee | 4 ++-- src/file.coffee | 4 ++-- src/git.coffee | 4 ++-- src/keymap.coffee | 4 ++-- src/language-mode.coffee | 4 ++-- src/null-grammar.coffee | 4 ++-- src/package-manager.coffee | 4 ++-- src/project.coffee | 4 ++-- src/selection.coffee | 4 ++-- src/syntax.coffee | 4 ++-- src/task.coffee | 4 ++-- src/text-buffer.coffee | 4 ++-- src/text-mate-grammar.coffee | 4 ++-- src/theme-manager.coffee | 4 ++-- src/tokenized-buffer.coffee | 4 ++-- 21 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/atom-package.coffee b/src/atom-package.coffee index 061f203d7..9e7369cb8 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -5,13 +5,13 @@ path = require 'path' _ = require './underscore-extensions' $ = require './jquery-extensions' CSON = require 'season' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' ### Internal: Loads and resolves packages. ### module.exports = class AtomPackage extends Package - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter @stylesheetsDir: 'stylesheets' diff --git a/src/config.coffee b/src/config.coffee index d82131de0..62081057d 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -1,6 +1,6 @@ fsUtils = require './fs-utils' _ = require './underscore-extensions' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' CSON = require 'season' fs = require 'fs' path = require 'path' @@ -26,7 +26,7 @@ pathWatcher = require 'pathwatcher' # ``` module.exports = class Config - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter defaultSettings: null settings: null diff --git a/src/cursor.coffee b/src/cursor.coffee index 878816226..dabee907f 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -1,5 +1,5 @@ {Point, Range} = require 'telepath' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' _ = require './underscore-extensions' # Public: The `Cursor` class represents the little blinking line identifying @@ -9,7 +9,7 @@ _ = require './underscore-extensions' # of a {StringMarker}. module.exports = class Cursor - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter screenPosition: null bufferPosition: null diff --git a/src/directory.coffee b/src/directory.coffee index 491a0cdda..07441a34d 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -4,12 +4,12 @@ path = require 'path' fsUtils = require './fs-utils' pathWatcher = require 'pathwatcher' File = require './file' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' # Public: Represents a directory using {File}s module.exports = class Directory - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter path: null realPath: null diff --git a/src/display-buffer-marker.coffee b/src/display-buffer-marker.coffee index ca244759b..15eab584f 100644 --- a/src/display-buffer-marker.coffee +++ b/src/display-buffer-marker.coffee @@ -1,11 +1,11 @@ {Range} = require 'telepath' _ = require './underscore-extensions' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' # Private: module.exports = class DisplayBufferMarker - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber bufferMarkerSubscription: null diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index 606e64b41..eb3a87d53 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -1,5 +1,5 @@ _ = require './underscore-extensions' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' guid = require 'guid' telepath = require 'telepath' {Point, Range} = telepath @@ -13,7 +13,7 @@ ConfigObserver = require './config-observer' # Private: module.exports = class DisplayBuffer - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber _.extend @prototype, ConfigObserver diff --git a/src/edit-session.coffee b/src/edit-session.coffee index b8f07a830..9ae4f504f 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -8,7 +8,7 @@ LanguageMode = require './language-mode' DisplayBuffer = require './display-buffer' Cursor = require './cursor' Selection = require './selection' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' TextMateScopeSelector = require('first-mate').ScopeSelector # Public: The core model of Atom. @@ -38,7 +38,7 @@ TextMateScopeSelector = require('first-mate').ScopeSelector # why that is. module.exports = class EditSession - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber @acceptsDocuments: true diff --git a/src/file.coffee b/src/file.coffee index c6078aa07..6f4394409 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -1,5 +1,5 @@ Q = require 'q' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' path = require 'path' fsUtils = require './fs-utils' pathWatcher = require 'pathwatcher' @@ -11,7 +11,7 @@ _ = require './underscore-extensions' # {Directory} and access the {File} objects that it creates. module.exports = class File - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter path: null cachedContents: null diff --git a/src/git.coffee b/src/git.coffee index 1ab2ab59b..d50527bc5 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -1,7 +1,7 @@ _ = require './underscore-extensions' fsUtils = require './fs-utils' Task = require './task' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' GitUtils = require 'git-utils' # Public: Represents the underlying git operations performed by Atom. @@ -18,7 +18,7 @@ GitUtils = require 'git-utils' module.exports = class Git _.extend @prototype, Subscriber - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter # Private: Creates a new `Git` instance. # diff --git a/src/keymap.coffee b/src/keymap.coffee index 01080ca0d..f1ae51c98 100644 --- a/src/keymap.coffee +++ b/src/keymap.coffee @@ -4,7 +4,7 @@ fsUtils = require './fs-utils' path = require 'path' CSON = require 'season' BindingSet = require './binding-set' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' # Internal: Associates keymaps with actions. # @@ -21,7 +21,7 @@ BindingSet = require './binding-set' # key, you define one or more key:value pairs, associating keystrokes with a command to execute. module.exports = class Keymap - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter bindingSets: null nextBindingSetIndex: 0 diff --git a/src/language-mode.coffee b/src/language-mode.coffee index 8aa445e68..6d30cf875 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -1,13 +1,13 @@ {Range} = require 'telepath' _ = require './underscore-extensions' {OnigRegExp} = require 'oniguruma' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' ### Internal ### module.exports = class LanguageMode - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber buffer: null diff --git a/src/null-grammar.coffee b/src/null-grammar.coffee index 5346c9b42..6f49cc486 100644 --- a/src/null-grammar.coffee +++ b/src/null-grammar.coffee @@ -1,11 +1,11 @@ Token = require './token' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' _ = require './underscore-extensions' ### Internal ### module.exports = class NullGrammar - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter name: 'Null Grammar' scopeName: 'text.plain.null-grammar' diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 703e8d945..7db38b228 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -1,4 +1,4 @@ -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' fsUtils = require './fs-utils' _ = require './underscore-extensions' Package = require './package' @@ -6,7 +6,7 @@ path = require 'path' module.exports = class PackageManager - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter constructor: ({configDirPath, devMode, @resourcePath}) -> @packageDirPaths = [path.join(configDirPath, "packages")] diff --git a/src/project.coffee b/src/project.coffee index 475f31007..1cb2ef3ec 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -8,7 +8,7 @@ telepath = require 'telepath' {Range} = telepath TextBuffer = require './text-buffer' EditSession = require './edit-session' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' Directory = require './directory' Task = require './task' Git = require './git' @@ -19,7 +19,7 @@ Git = require './git' # of directories and files that you can operate on. module.exports = class Project - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter @acceptsDocuments: true @version: 1 diff --git a/src/selection.coffee b/src/selection.coffee index d68940361..57b258d1b 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -1,11 +1,11 @@ {Range} = require 'telepath' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' _ = require './underscore-extensions' # Public: Represents a selection in the {EditSession}. module.exports = class Selection - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter cursor: null marker: null diff --git a/src/syntax.coffee b/src/syntax.coffee index da44b7038..75dd7f739 100644 --- a/src/syntax.coffee +++ b/src/syntax.coffee @@ -3,7 +3,7 @@ jQuery = require './jquery-extensions' Specificity = require '../vendor/specificity' {$$} = require './space-pen-extensions' fsUtils = require './fs-utils' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' NullGrammar = require './null-grammar' TextMateScopeSelector = require('first-mate').ScopeSelector @@ -11,7 +11,7 @@ TextMateScopeSelector = require('first-mate').ScopeSelector module.exports = class Syntax - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter registerDeserializer(this) diff --git a/src/task.coffee b/src/task.coffee index 55f27d90f..a144d354a 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -1,6 +1,6 @@ _ = require './underscore-extensions' child_process = require 'child_process' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' # Public: Run a node script in a separate process. # @@ -14,7 +14,7 @@ child_process = require 'child_process' # * task:completed - Emitted when the task has succeeded or failed. module.exports = class Task - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter # Public: A helper method to easily launch and run a task once. # diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index fe8206343..0891c0d58 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -1,4 +1,4 @@ -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' guid = require 'guid' Q = require 'q' {P} = require 'scandal' @@ -16,7 +16,7 @@ File = require './file' # the case, as a `Buffer` could be an unsaved chunk of text. module.exports = class TextBuffer - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber @acceptsDocuments: true diff --git a/src/text-mate-grammar.coffee b/src/text-mate-grammar.coffee index fdbc54e8a..83b02b8a2 100644 --- a/src/text-mate-grammar.coffee +++ b/src/text-mate-grammar.coffee @@ -4,7 +4,7 @@ plist = require 'plist' Token = require './token' {OnigRegExp, OnigScanner} = require 'oniguruma' path = require 'path' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' {ScopeSelector} = require 'first-mate' pathSplitRegex = new RegExp("[#{path.sep}.]") @@ -13,7 +13,7 @@ pathSplitRegex = new RegExp("[#{path.sep}.]") module.exports = class TextMateGrammar - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter @load: (grammarPath, done) -> fsUtils.readObject grammarPath, (error, object) -> diff --git a/src/theme-manager.coffee b/src/theme-manager.coffee index eb1722f61..060d0ee19 100644 --- a/src/theme-manager.coffee +++ b/src/theme-manager.coffee @@ -1,5 +1,5 @@ path = require 'path' -{EventEmitter} = require 'emissary' +{Emitter} = require 'emissary' Package = require './package' AtomPackage = require './atom-package' @@ -10,7 +10,7 @@ fsUtils = require './fs-utils' # Private: Handles discovering and loading available themes. module.exports = class ThemeManager - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter constructor: -> @loadedThemes = [] diff --git a/src/tokenized-buffer.coffee b/src/tokenized-buffer.coffee index c552d655f..ec622b105 100644 --- a/src/tokenized-buffer.coffee +++ b/src/tokenized-buffer.coffee @@ -1,6 +1,6 @@ _ = require './underscore-extensions' TokenizedLine = require './tokenized-line' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' Token = require './token' telepath = require 'telepath' {Point, Range} = telepath @@ -9,7 +9,7 @@ telepath = require 'telepath' module.exports = class TokenizedBuffer - _.extend @prototype, EventEmitter + _.extend @prototype, Emitter _.extend @prototype, Subscriber grammar: null From e5ac73e0db249088464259c9305f14b79b2ae39f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 13:25:51 -0700 Subject: [PATCH 04/27] Use includeInto instead of _.extend --- src/atom-package.coffee | 2 +- src/config.coffee | 2 +- src/cursor.coffee | 2 +- src/directory.coffee | 3 +-- src/display-buffer-marker.coffee | 4 ++-- src/display-buffer.coffee | 4 ++-- src/edit-session.coffee | 4 ++-- src/file.coffee | 2 +- src/git.coffee | 4 ++-- src/keymap.coffee | 2 +- src/language-mode.coffee | 4 ++-- src/null-grammar.coffee | 3 +-- src/package-manager.coffee | 2 +- src/project.coffee | 2 +- src/selection.coffee | 3 +-- src/syntax.coffee | 2 +- src/task.coffee | 1 + src/text-buffer.coffee | 4 ++-- src/text-mate-grammar.coffee | 2 +- src/theme-manager.coffee | 2 +- src/tokenized-buffer.coffee | 4 ++-- 21 files changed, 28 insertions(+), 30 deletions(-) diff --git a/src/atom-package.coffee b/src/atom-package.coffee index 9e7369cb8..cacda0882 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -11,7 +11,7 @@ CSON = require 'season' module.exports = class AtomPackage extends Package - _.extend @prototype, Emitter + Emitter.includeInto(this) @stylesheetsDir: 'stylesheets' diff --git a/src/config.coffee b/src/config.coffee index 62081057d..15a30ce93 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -26,7 +26,7 @@ pathWatcher = require 'pathwatcher' # ``` module.exports = class Config - _.extend @prototype, Emitter + Emitter.includeInto(this) defaultSettings: null settings: null diff --git a/src/cursor.coffee b/src/cursor.coffee index dabee907f..9f2ffc860 100644 --- a/src/cursor.coffee +++ b/src/cursor.coffee @@ -9,7 +9,7 @@ _ = require './underscore-extensions' # of a {StringMarker}. module.exports = class Cursor - _.extend @prototype, Emitter + Emitter.includeInto(this) screenPosition: null bufferPosition: null diff --git a/src/directory.coffee b/src/directory.coffee index 07441a34d..0a06e7f8b 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -1,4 +1,3 @@ -_ = require './underscore-extensions' fs = require 'fs' path = require 'path' fsUtils = require './fs-utils' @@ -9,7 +8,7 @@ File = require './file' # Public: Represents a directory using {File}s module.exports = class Directory - _.extend @prototype, Emitter + Emitter.includeInto(this) path: null realPath: null diff --git a/src/display-buffer-marker.coffee b/src/display-buffer-marker.coffee index 15eab584f..d4360350a 100644 --- a/src/display-buffer-marker.coffee +++ b/src/display-buffer-marker.coffee @@ -5,8 +5,8 @@ _ = require './underscore-extensions' # Private: module.exports = class DisplayBufferMarker - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) bufferMarkerSubscription: null oldHeadBufferPosition: null diff --git a/src/display-buffer.coffee b/src/display-buffer.coffee index eb3a87d53..933c057e6 100644 --- a/src/display-buffer.coffee +++ b/src/display-buffer.coffee @@ -13,8 +13,8 @@ ConfigObserver = require './config-observer' # Private: module.exports = class DisplayBuffer - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) _.extend @prototype, ConfigObserver @acceptsDocuments: true diff --git a/src/edit-session.coffee b/src/edit-session.coffee index 9ae4f504f..69b903d11 100644 --- a/src/edit-session.coffee +++ b/src/edit-session.coffee @@ -38,8 +38,8 @@ TextMateScopeSelector = require('first-mate').ScopeSelector # why that is. module.exports = class EditSession - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) @acceptsDocuments: true diff --git a/src/file.coffee b/src/file.coffee index 6f4394409..3bb1b39f7 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -11,7 +11,7 @@ _ = require './underscore-extensions' # {Directory} and access the {File} objects that it creates. module.exports = class File - _.extend @prototype, Emitter + Emitter.includeInto(this) path: null cachedContents: null diff --git a/src/git.coffee b/src/git.coffee index d50527bc5..20f9d3745 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -17,8 +17,8 @@ GitUtils = require 'git-utils' # ``` module.exports = class Git - _.extend @prototype, Subscriber - _.extend @prototype, Emitter + Emitter.includeInto(this) + Subscriber.includeInto(this) # Private: Creates a new `Git` instance. # diff --git a/src/keymap.coffee b/src/keymap.coffee index f1ae51c98..46d4a3ae0 100644 --- a/src/keymap.coffee +++ b/src/keymap.coffee @@ -21,7 +21,7 @@ BindingSet = require './binding-set' # key, you define one or more key:value pairs, associating keystrokes with a command to execute. module.exports = class Keymap - _.extend @prototype, Emitter + Emitter.includeInto(this) bindingSets: null nextBindingSetIndex: 0 diff --git a/src/language-mode.coffee b/src/language-mode.coffee index 6d30cf875..aa8d4b88d 100644 --- a/src/language-mode.coffee +++ b/src/language-mode.coffee @@ -7,8 +7,8 @@ _ = require './underscore-extensions' module.exports = class LanguageMode - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) buffer: null grammar: null diff --git a/src/null-grammar.coffee b/src/null-grammar.coffee index 6f49cc486..9fa7b5c6e 100644 --- a/src/null-grammar.coffee +++ b/src/null-grammar.coffee @@ -1,11 +1,10 @@ Token = require './token' {Emitter} = require 'emissary' -_ = require './underscore-extensions' ### Internal ### module.exports = class NullGrammar - _.extend @prototype, Emitter + Emitter.includeInto(this) name: 'Null Grammar' scopeName: 'text.plain.null-grammar' diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 7db38b228..72cc94ea7 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -6,7 +6,7 @@ path = require 'path' module.exports = class PackageManager - _.extend @prototype, Emitter + Emitter.includeInto(this) constructor: ({configDirPath, devMode, @resourcePath}) -> @packageDirPaths = [path.join(configDirPath, "packages")] diff --git a/src/project.coffee b/src/project.coffee index 1cb2ef3ec..869b9c61d 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -19,7 +19,7 @@ Git = require './git' # of directories and files that you can operate on. module.exports = class Project - _.extend @prototype, Emitter + Emitter.includeInto(this) @acceptsDocuments: true @version: 1 diff --git a/src/selection.coffee b/src/selection.coffee index 57b258d1b..139ac9da0 100644 --- a/src/selection.coffee +++ b/src/selection.coffee @@ -1,11 +1,10 @@ {Range} = require 'telepath' {Emitter} = require 'emissary' -_ = require './underscore-extensions' # Public: Represents a selection in the {EditSession}. module.exports = class Selection - _.extend @prototype, Emitter + Emitter.includeInto(this) cursor: null marker: null diff --git a/src/syntax.coffee b/src/syntax.coffee index 75dd7f739..556e1c280 100644 --- a/src/syntax.coffee +++ b/src/syntax.coffee @@ -11,7 +11,7 @@ TextMateScopeSelector = require('first-mate').ScopeSelector module.exports = class Syntax - _.extend @prototype, Emitter + Emitter.includeInto(this) registerDeserializer(this) diff --git a/src/task.coffee b/src/task.coffee index a144d354a..152255710 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -14,6 +14,7 @@ child_process = require 'child_process' # * task:completed - Emitted when the task has succeeded or failed. module.exports = class Task + Emitter.includeInto(this) _.extend @prototype, Emitter # Public: A helper method to easily launch and run a task once. diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index 0891c0d58..92bc5c1b4 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -16,8 +16,8 @@ File = require './file' # the case, as a `Buffer` could be an unsaved chunk of text. module.exports = class TextBuffer - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) @acceptsDocuments: true @version: 2 diff --git a/src/text-mate-grammar.coffee b/src/text-mate-grammar.coffee index 83b02b8a2..f0d1e00c3 100644 --- a/src/text-mate-grammar.coffee +++ b/src/text-mate-grammar.coffee @@ -13,7 +13,7 @@ pathSplitRegex = new RegExp("[#{path.sep}.]") module.exports = class TextMateGrammar - _.extend @prototype, Emitter + Emitter.includeInto(this) @load: (grammarPath, done) -> fsUtils.readObject grammarPath, (error, object) -> diff --git a/src/theme-manager.coffee b/src/theme-manager.coffee index 060d0ee19..5350e425e 100644 --- a/src/theme-manager.coffee +++ b/src/theme-manager.coffee @@ -10,7 +10,7 @@ fsUtils = require './fs-utils' # Private: Handles discovering and loading available themes. module.exports = class ThemeManager - _.extend @prototype, Emitter + Emitter.includeInto(this) constructor: -> @loadedThemes = [] diff --git a/src/tokenized-buffer.coffee b/src/tokenized-buffer.coffee index ec622b105..1a952754b 100644 --- a/src/tokenized-buffer.coffee +++ b/src/tokenized-buffer.coffee @@ -9,8 +9,8 @@ telepath = require 'telepath' module.exports = class TokenizedBuffer - _.extend @prototype, Emitter - _.extend @prototype, Subscriber + Emitter.includeInto(this) + Subscriber.includeInto(this) grammar: null currentGrammarScore: null From 320b4a49b4507b4ef05a93d3b0d249ad1b90908b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 13:28:37 -0700 Subject: [PATCH 05/27] Use Subscriber.includeInto --- src/atom.coffee | 2 +- src/less-compile-cache.coffee | 4 +--- src/window-event-handler.coffee | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/atom.coffee b/src/atom.coffee index 50df8855c..af5994f07 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -18,7 +18,7 @@ DeserializerManager = require './deserializer-manager' # An instance of this class is always available as the `atom` global. module.exports = class Atom - _.extend @prototype, Subscriber + Subscriber.includeInto(this) constructor: -> @rootViewParentSelector = 'body' diff --git a/src/less-compile-cache.coffee b/src/less-compile-cache.coffee index 366c52925..8dfafa27e 100644 --- a/src/less-compile-cache.coffee +++ b/src/less-compile-cache.coffee @@ -1,12 +1,10 @@ path = require 'path' - -_ = require './underscore-extensions' LessCache = require 'less-cache' {Subscriber} = require 'emissary' module.exports = class LessCompileCache - _.extend @prototype, Subscriber + Subscriber.includeInto(this) @cacheDir: '/tmp/atom-compile-cache/less' diff --git a/src/window-event-handler.coffee b/src/window-event-handler.coffee index 902cfb846..7b6d2655e 100644 --- a/src/window-event-handler.coffee +++ b/src/window-event-handler.coffee @@ -8,7 +8,7 @@ fsUtils = require './fs-utils' # Private: Handles low-level events related to the window. module.exports = class WindowEventHandler - _.extend @prototype, Subscriber + Subscriber.includeInto(this) constructor: -> @reloadRequested = false From 9fe32954dc27254d546fe0abadd931092301d447 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 13:50:02 -0700 Subject: [PATCH 06/27] Update classes for emissary API --- src/space-pen-extensions.coffee | 2 +- src/syntax.coffee | 4 ++-- src/task.coffee | 2 +- src/text-buffer.coffee | 36 ++++++++++++++++----------------- src/theme-manager.coffee | 4 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/space-pen-extensions.coffee b/src/space-pen-extensions.coffee index 96b22a2a2..ce049a630 100644 --- a/src/space-pen-extensions.coffee +++ b/src/space-pen-extensions.coffee @@ -5,7 +5,7 @@ ConfigObserver = require './config-observer' {Subscriber} = require 'emissary' _.extend spacePen.View.prototype, ConfigObserver -_.extend spacePen.View.prototype, Subscriber +Subscriber.includeInto(spacePen.View) originalCleanData = jQuery.cleanData jQuery.cleanData = (elements) -> diff --git a/src/syntax.coffee b/src/syntax.coffee index 556e1c280..9a5ed8714 100644 --- a/src/syntax.coffee +++ b/src/syntax.coffee @@ -38,7 +38,7 @@ class Syntax @grammarsByScopeName[grammar.scopeName] = grammar @injectionGrammars.push(grammar) if grammar.injectionSelector? @grammarUpdated(grammar.scopeName) - @trigger 'grammar-added', grammar + @emit 'grammar-added', grammar removeGrammar: (grammar) -> _.remove(@grammars, grammar) @@ -48,7 +48,7 @@ class Syntax grammarUpdated: (scopeName) -> for grammar in @grammars when grammar.scopeName isnt scopeName - @trigger 'grammar-updated', grammar if grammar.grammarUpdated(scopeName) + @emit 'grammar-updated', grammar if grammar.grammarUpdated(scopeName) setGrammarOverrideForPath: (path, scopeName) -> @grammarOverridesByPath[path] = scopeName diff --git a/src/task.coffee b/src/task.coffee index 152255710..766ce9f90 100644 --- a/src/task.coffee +++ b/src/task.coffee @@ -26,7 +26,7 @@ class Task # The Array of arguments to pass to the exported function. @once: (taskPath, args...) -> task = new Task(taskPath) - task.one 'task:completed', -> task.terminate() + task.once 'task:completed', -> task.terminate() task.start(args...) task diff --git a/src/text-buffer.coffee b/src/text-buffer.coffee index 92bc5c1b4..100a2f3c4 100644 --- a/src/text-buffer.coffee +++ b/src/text-buffer.coffee @@ -60,8 +60,8 @@ class TextBuffer @loadFromDisk = not initialText @subscribe @text, 'changed', @handleTextChange - @subscribe @text, 'marker-created', (marker) => @trigger 'marker-created', marker - @subscribe @text, 'markers-updated', => @trigger 'markers-updated' + @subscribe @text, 'marker-created', (marker) => @emit 'marker-created', marker + @subscribe @text, 'markers-updated', => @emit 'markers-updated' @setPath(@project.resolve(filePath)) if @project @@ -82,7 +82,7 @@ class TextBuffer @cachedMemoryContents = null @conflict = false if @conflict and !@isModified() bufferChangeEvent = _.pick(event, 'oldRange', 'newRange', 'oldText', 'newText') - @trigger 'changed', bufferChangeEvent + @emit 'changed', bufferChangeEvent @scheduleModifiedEvents() destroy: -> @@ -91,7 +91,7 @@ class TextBuffer @unsubscribe() @destroyed = true @project?.removeBuffer(this) - @trigger 'destroyed' + @emit 'destroyed' isRetained: -> @refcount > 0 @@ -118,17 +118,17 @@ class TextBuffer @conflict = true if @isModified() @updateCachedDiskContentsAsync().done => if @conflict - @trigger "contents-conflicted" + @emit "contents-conflicted" else @reload() @file.on "removed", => @updateCachedDiskContentsAsync().done => - @triggerModifiedStatusChanged(@isModified()) + @emitModifiedStatusChanged(@isModified()) @file.on "moved", => @state.set('relativePath', @project.relativize(@getPath())) - @trigger "path-changed", this + @emit "path-changed", this ### Public ### @@ -143,10 +143,10 @@ class TextBuffer # # Sets the buffer's content to the cached disk contents reload: -> - @trigger 'will-reload' + @emit 'will-reload' @setText(@cachedDiskContents) - @triggerModifiedStatusChanged(false) - @trigger 'reloaded' + @emitModifiedStatusChanged(false) + @emit 'reloaded' # Private: Rereads the contents of the file, and stores them in the cache. updateCachedDiskContents: -> @@ -190,7 +190,7 @@ class TextBuffer @file = null @state.set('relativePath', @project.relativize(path)) - @trigger "path-changed", this + @emit "path-changed", this # Retrieves the current buffer's file extension. # @@ -398,12 +398,12 @@ class TextBuffer saveAs: (path) -> unless path then throw new Error("Can't save buffer with no file path") - @trigger 'will-be-saved' + @emit 'will-be-saved' @setPath(path) @cachedDiskContents = @getText() @file.write(@getText()) - @triggerModifiedStatusChanged(false) - @trigger 'saved' + @emitModifiedStatusChanged(false) + @emit 'saved' # Identifies if the buffer was modified. # @@ -652,14 +652,14 @@ class TextBuffer stoppedChangingCallback = => @stoppedChangingTimeout = null modifiedStatus = @isModified() - @trigger 'contents-modified', modifiedStatus - @triggerModifiedStatusChanged(modifiedStatus) + @emit 'contents-modified', modifiedStatus + @emitModifiedStatusChanged(modifiedStatus) @stoppedChangingTimeout = setTimeout(stoppedChangingCallback, @stoppedChangingDelay) - triggerModifiedStatusChanged: (modifiedStatus) -> + emitModifiedStatusChanged: (modifiedStatus) -> return if modifiedStatus is @previousModifiedStatus @previousModifiedStatus = modifiedStatus - @trigger 'modified-status-changed', modifiedStatus + @emit 'modified-status-changed', modifiedStatus logLines: (start=0, end=@getLastRow())-> for row in [start..end] diff --git a/src/theme-manager.coffee b/src/theme-manager.coffee index 5350e425e..79d4bf711 100644 --- a/src/theme-manager.coffee +++ b/src/theme-manager.coffee @@ -128,7 +128,7 @@ class ThemeManager @activateTheme(themeName) for themeName in themeNames @loadUserStylesheet() @reloadBaseStylesheets() - @trigger('reloaded') + @emit('reloaded') # Private: loadTheme: (name, options) -> @@ -167,7 +167,7 @@ class ThemeManager theme = @loadTheme(name) theme.activate() @activeThemes.push(theme) - @trigger('theme-activated', theme) + @emit('theme-activated', theme) catch error console.warn("Failed to load theme #{name}", error.stack ? error) From 6030edcf0a9e6c1358df29754ec08a0945ffcac0 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 15:22:47 -0700 Subject: [PATCH 07/27] Upgrade to emissary@0.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f94619807..98fc69c7d 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "bootstrap": "git://github.com/twbs/bootstrap.git#v3.0.0", "coffee-script": "1.6.2", "coffeestack": "0.6.0", - "emissary": "0.5.0", + "emissary": "0.6.0", "first-mate": "0.4.0", "git-utils": "0.26.0", "guid": "0.0.10", From c797995597313f877449d22bbbdba4aca589b420 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 15:44:17 -0700 Subject: [PATCH 08/27] Migrate path watching to new subscription added/removed events --- src/directory.coffee | 13 +++++-------- src/file.coffee | 29 ++++++++++++++++++----------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/directory.coffee b/src/directory.coffee index 0a06e7f8b..b242386ef 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -20,6 +20,11 @@ class Directory # + symlink: # A {Boolean} indicating if the path is a symlink constructor: (@path, @symlink=false) -> + @on 'first-contents-changed-subscription-will-be-added', => + @subscribeToNativeChangeEvents() + + @on 'last-contents-changed-subscription-removed', => + @unsubscribeFromNativeChangeEvents() # Public: Returns the basename of the directory. getBaseName: -> @@ -89,14 +94,6 @@ class Directory directories.concat(files) - # Private: - afterSubscribe: -> - @subscribeToNativeChangeEvents() if @subscriptionCount() == 1 - - # Private: - afterUnsubscribe: -> - @unsubscribeFromNativeChangeEvents() if @subscriptionCount() == 0 - # Private: subscribeToNativeChangeEvents: -> @watchSubscription = pathWatcher.watch @path, (eventType) => diff --git a/src/file.coffee b/src/file.coffee index 3bb1b39f7..88a91650b 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -25,6 +25,20 @@ class File constructor: (@path, @symlink=false) -> throw new Error("#{@path} is a directory") if fsUtils.isDirectorySync(@path) + @handleEventSubscriptions() + + handleEventSubscriptions: -> + eventNames = ['contents-changed', 'moved', 'removed'] + + subscriptionsAdded = eventNames.map (eventName) -> "first-#{eventName}-subscription-will-be-added" + @on subscriptionsAdded.join(' '), => + @subscribeToNativeChangeEvents() + + subscriptionsRemoved = eventNames.map (eventName) -> "last-#{eventName}-subscription-removed" + @on subscriptionsRemoved.join(' '), => + subscriptionsEmpty = _.every eventNames, (eventName) => @getSubscriptionCount(eventName) is 0 + @unsubscribeFromNativeChangeEvents() if subscriptionsEmpty + # Private: Sets the path for the file. setPath: (@path) -> @@ -88,14 +102,6 @@ class File exists: -> fsUtils.exists(@getPath()) - # Private: - afterSubscribe: -> - @subscribeToNativeChangeEvents() if @exists() and @subscriptionCount() == 1 - - # Private: - afterUnsubscribe: -> - @unsubscribeFromNativeChangeEvents() if @subscriptionCount() == 0 - # Private: handleNativeChangeEvent: (eventType, path) -> if eventType is "delete" @@ -125,11 +131,12 @@ class File # Private: subscribeToNativeChangeEvents: -> - @watchSubscription = pathWatcher.watch @path, (eventType, path) => - @handleNativeChangeEvent(eventType, path) + unless @watchSubscription? + @watchSubscription = pathWatcher.watch @path, (eventType, path) => + @handleNativeChangeEvent(eventType, path) # Private: unsubscribeFromNativeChangeEvents: -> - if @watchSubscription + if @watchSubscription? @watchSubscription.close() @watchSubscription = null From 7f1f2bccd503cf1759e55cfc587128e49dc5196e Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 15:52:40 -0700 Subject: [PATCH 09/27] Only subscribe when file exists --- src/file.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/file.coffee b/src/file.coffee index 88a91650b..492ed5efb 100644 --- a/src/file.coffee +++ b/src/file.coffee @@ -32,7 +32,7 @@ class File subscriptionsAdded = eventNames.map (eventName) -> "first-#{eventName}-subscription-will-be-added" @on subscriptionsAdded.join(' '), => - @subscribeToNativeChangeEvents() + @subscribeToNativeChangeEvents() if @exists() subscriptionsRemoved = eventNames.map (eventName) -> "last-#{eventName}-subscription-removed" @on subscriptionsRemoved.join(' '), => From 6318571fed7282655afbafcfc6dc17c65e47dc9f Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 15:54:34 -0700 Subject: [PATCH 10/27] Export Emitter instead of EventEmitter --- exports/atom.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exports/atom.coffee b/exports/atom.coffee index cbbb9bc48..b68c5bb5e 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -1,6 +1,6 @@ {View, $$, $$$} = require '../src/space-pen-extensions' {Document, Point, Range, Site} = require 'telepath' -{EventEmitter, Subscriber} = require 'emissary' +{Emitter, Subscriber} = require 'emissary' module.exports = _: require '../src/underscore-extensions' @@ -11,7 +11,7 @@ module.exports = BufferedProcess: require '../src/buffered-process' Directory: require '../src/directory' Document: Document - EventEmitter: EventEmitter + Emitter: Emitter File: require '../src/file' fs: require '../src/fs-utils' Git: require '../src/git' From 11dbcfecafaa524699bb1f7fe39c5750d02d58dd Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:10:57 -0700 Subject: [PATCH 11/27] Only watch path once --- src/directory.coffee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/directory.coffee b/src/directory.coffee index b242386ef..d579b9db2 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -96,8 +96,9 @@ class Directory # Private: subscribeToNativeChangeEvents: -> - @watchSubscription = pathWatcher.watch @path, (eventType) => - @emit "contents-changed" if eventType is "change" + if @watchSubscription? + @watchSubscription = pathWatcher.watch @path, (eventType) => + @emit "contents-changed" if eventType is "change" # Private: unsubscribeFromNativeChangeEvents: -> From ff30a8e14b9e1b2d5bef06427f35163926ec2926 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:14:05 -0700 Subject: [PATCH 12/27] Shim trigger to emit --- exports/atom.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/exports/atom.coffee b/exports/atom.coffee index b68c5bb5e..eba9bcda3 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -2,6 +2,9 @@ {Document, Point, Range, Site} = require 'telepath' {Emitter, Subscriber} = require 'emissary' +#FIXME remove once all packages have been updated +Emitter::trigger = (args...) => @emit(args...) + module.exports = _: require '../src/underscore-extensions' $: require '../src/jquery-extensions' From 667e0929b6e117093698d8d83fe86bccbdad8cdb Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:15:40 -0700 Subject: [PATCH 13/27] Shim subscriptionCount to getSubscriptionCount --- exports/atom.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/exports/atom.coffee b/exports/atom.coffee index eba9bcda3..0b59afbde 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -4,6 +4,7 @@ #FIXME remove once all packages have been updated Emitter::trigger = (args...) => @emit(args...) +Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) module.exports = _: require '../src/underscore-extensions' From 0db962b94fb7c3bdc299f6bf2ea2a2db9126e364 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:19:09 -0700 Subject: [PATCH 14/27] Add shims in bootstrap script --- exports/atom.coffee | 4 ---- src/window-bootstrap.coffee | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/exports/atom.coffee b/exports/atom.coffee index 0b59afbde..b68c5bb5e 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -2,10 +2,6 @@ {Document, Point, Range, Site} = require 'telepath' {Emitter, Subscriber} = require 'emissary' -#FIXME remove once all packages have been updated -Emitter::trigger = (args...) => @emit(args...) -Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) - module.exports = _: require '../src/underscore-extensions' $: require '../src/jquery-extensions' diff --git a/src/window-bootstrap.coffee b/src/window-bootstrap.coffee index 15da3237e..ec2d2395d 100644 --- a/src/window-bootstrap.coffee +++ b/src/window-bootstrap.coffee @@ -1,6 +1,11 @@ # Like sands through the hourglass, so are the days of our lives. startTime = new Date().getTime() +#FIXME remove once all packages have been updated +{Emitter} = require 'emissary' +Emitter::trigger = (args...) => @emit(args...) +Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) + require './window' Atom = require './atom' From d10bc2c06c48b11b1f509cbe396e7310583f57c2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:27:58 -0700 Subject: [PATCH 15/27] Upgrade to terminal@0.11.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 98fc69c7d..318104618 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "status-bar": "0.12.0", "symbols-view": "0.10.0", "tabs": "0.6.0", - "terminal": "0.10.0", + "terminal": "0.11.0", "timecop": "0.5.0", "to-the-hubs": "0.6.0", "toml": "0.3.0", From b8597ab384b0a85b5e85d01e49dc987ac1bb5694 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:32:11 -0700 Subject: [PATCH 16/27] Upgrade to snippets@0.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 318104618..4f8002342 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "package-generator": "0.10.0", "release-notes": "0.3.0", "settings-view": "0.27.0", - "snippets": "0.7.0", + "snippets": "0.8.0", "spell-check": "0.6.0", "status-bar": "0.12.0", "symbols-view": "0.10.0", From f47ad4f16b695c184bcc6eca0f72962d17f510fc Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:40:28 -0700 Subject: [PATCH 17/27] Upgrade to settings-view@0.28.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f8002342..69dce5c67 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "metrics": "0.8.0", "package-generator": "0.10.0", "release-notes": "0.3.0", - "settings-view": "0.27.0", + "settings-view": "0.28.0", "snippets": "0.8.0", "spell-check": "0.6.0", "status-bar": "0.12.0", From 672fb8ecaf4698a34690c4836f15496acfa95ae9 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:43:17 -0700 Subject: [PATCH 18/27] Shim Emitter at top of Atom class --- src/atom.coffee | 5 +++++ src/window-bootstrap.coffee | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/atom.coffee b/src/atom.coffee index af5994f07..8bf3ab33a 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -1,3 +1,8 @@ +#FIXME remove once all packages have been updated +{Emitter} = require 'emissary' +Emitter::trigger = (args...) => @emit(args...) +Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) + fsUtils = require './fs-utils' $ = require './jquery-extensions' _ = require './underscore-extensions' diff --git a/src/window-bootstrap.coffee b/src/window-bootstrap.coffee index ec2d2395d..15da3237e 100644 --- a/src/window-bootstrap.coffee +++ b/src/window-bootstrap.coffee @@ -1,11 +1,6 @@ # Like sands through the hourglass, so are the days of our lives. startTime = new Date().getTime() -#FIXME remove once all packages have been updated -{Emitter} = require 'emissary' -Emitter::trigger = (args...) => @emit(args...) -Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) - require './window' Atom = require './atom' From 07f370df2a1773f7ea147db9b9419ba808a22ac1 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:48:18 -0700 Subject: [PATCH 19/27] Shim one to once --- src/atom.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/src/atom.coffee b/src/atom.coffee index 8bf3ab33a..7a5bdf05d 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -1,5 +1,6 @@ #FIXME remove once all packages have been updated {Emitter} = require 'emissary' +Emitter::one = (args...) => @once(args...) Emitter::trigger = (args...) => @emit(args...) Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) From f05bba6a6f4deb7c1f2f064fa325602223887610 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 16:56:13 -0700 Subject: [PATCH 20/27] Upgrade to emissary@0.24.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 69dce5c67..30c643e09 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "autoflow": "0.3.0", "bookmarks": "0.6.0", "bracket-matcher": "0.6.0", - "collaboration": "0.23.0", + "collaboration": "0.24.0", "command-logger": "0.4.0", "command-palette": "0.4.0", "editor-stats": "0.3.0", From eaed08a5cc6d923193c05285f67a8082960994e7 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:01:09 -0700 Subject: [PATCH 21/27] Use skinny arrows in Emitter shims --- src/atom.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/atom.coffee b/src/atom.coffee index 7a5bdf05d..46d8e5561 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -1,8 +1,8 @@ #FIXME remove once all packages have been updated {Emitter} = require 'emissary' -Emitter::one = (args...) => @once(args...) -Emitter::trigger = (args...) => @emit(args...) -Emitter::subscriptionCount = (args...) => @getSubscriptionCount(args...) +Emitter::one = (args...) -> @once(args...) +Emitter::trigger = (args...) -> @emit(args...) +Emitter::subscriptionCount = (args...) -> @getSubscriptionCount(args...) fsUtils = require './fs-utils' $ = require './jquery-extensions' From 3d9bb68007185f34439a7b33ed0c3ec83a46ffb2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:03:30 -0700 Subject: [PATCH 22/27] Upgrade to find-and-replace@0.26.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 30c643e09..bbf19e019 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "command-palette": "0.4.0", "editor-stats": "0.3.0", "exception-reporting": "0.4.0", - "find-and-replace": "0.25.0", + "find-and-replace": "0.26.0", "fuzzy-finder": "0.12.0", "gfm": "0.5.0", "git-diff": "0.9.0", From bf1457e5575f2b242aabd98b7dcb41411eedf649 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:09:23 -0700 Subject: [PATCH 23/27] Upgrade to git-diff@0.10.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bbf19e019..5f5a55c6a 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "find-and-replace": "0.26.0", "fuzzy-finder": "0.12.0", "gfm": "0.5.0", - "git-diff": "0.9.0", + "git-diff": "0.10.0", "gists": "0.3.0", "github-sign-in": "0.7.0", "go-to-line": "0.5.0", From 6e313dc0e484cae1b22aa7751e0a638e28d90d94 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:11:05 -0700 Subject: [PATCH 24/27] Use unless instead of if for subscription check --- src/directory.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/directory.coffee b/src/directory.coffee index d579b9db2..41c0a9663 100644 --- a/src/directory.coffee +++ b/src/directory.coffee @@ -96,7 +96,7 @@ class Directory # Private: subscribeToNativeChangeEvents: -> - if @watchSubscription? + unless @watchSubscription? @watchSubscription = pathWatcher.watch @path, (eventType) => @emit "contents-changed" if eventType is "change" From 1c357f9b65bc87314af89b30664e6885156af4a3 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:14:31 -0700 Subject: [PATCH 25/27] Use TODO instead of FIXME for consistency --- src/atom.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/atom.coffee b/src/atom.coffee index 46d8e5561..d2eb54137 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -1,4 +1,4 @@ -#FIXME remove once all packages have been updated +#TODO remove once all packages have been updated {Emitter} = require 'emissary' Emitter::one = (args...) -> @once(args...) Emitter::trigger = (args...) -> @emit(args...) From 03964ff568275efb26740220db09ef357967fe94 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:23:53 -0700 Subject: [PATCH 26/27] Unsubscribe from buffer when destroyed --- src/git.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/src/git.coffee b/src/git.coffee index 20f9d3745..55519741a 100644 --- a/src/git.coffee +++ b/src/git.coffee @@ -80,6 +80,7 @@ class Git @getPathStatus(path) @subscribe buffer, 'saved', bufferStatusHandler @subscribe buffer, 'reloaded', bufferStatusHandler + @subscribe buffer, 'destroyed', => @unsubscribe(buffer) # Public: Destroy this `Git` object. This destroys any tasks and # subscriptions and releases the underlying libgit2 repository handle. From 2c8854ce8b81836f58cff54a15014c7a1f2e5c8d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 14 Oct 2013 17:45:01 -0700 Subject: [PATCH 27/27] Stop exporting Emitter and Subscriber --- exports/atom.coffee | 3 --- 1 file changed, 3 deletions(-) diff --git a/exports/atom.coffee b/exports/atom.coffee index b68c5bb5e..618f4b840 100644 --- a/exports/atom.coffee +++ b/exports/atom.coffee @@ -1,6 +1,5 @@ {View, $$, $$$} = require '../src/space-pen-extensions' {Document, Point, Range, Site} = require 'telepath' -{Emitter, Subscriber} = require 'emissary' module.exports = _: require '../src/underscore-extensions' @@ -11,7 +10,6 @@ module.exports = BufferedProcess: require '../src/buffered-process' Directory: require '../src/directory' Document: Document - Emitter: Emitter File: require '../src/file' fs: require '../src/fs-utils' Git: require '../src/git' @@ -20,7 +18,6 @@ module.exports = ScrollView: require '../src/scroll-view' Site: Site stringscore: require '../vendor/stringscore' - Subscriber: Subscriber View: View # The following classes can't be used from a Task handler and should therefore