Skip to content

Commit 63083da

Browse files
committed
.dispose() all the disposables
- Reloading the package (e.g. with https://github.com/cakecatz/atom-hot-package-loader) would cause all of the commands to fire N times, once for each reload - This applies `CompositeDisposable` on all `.on*` and `.add*` calls to properly dispose all disposables and fix that leakage
1 parent 890c741 commit 63083da

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

lib/file-view.coffee

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{CompositeDisposable} = require 'atom'
12
{$$} = require 'atom-space-pen-views'
23
SymbolsView = require './symbols-view'
34

@@ -6,16 +7,16 @@ class FileView extends SymbolsView
67
initialize: ->
78
super
89

9-
@editorsSubscription = atom.workspace.observeTextEditors (editor) =>
10-
disposable = editor.onDidSave =>
10+
@disposables = new CompositeDisposable()
11+
12+
@disposables.add atom.workspace.observeTextEditors (editor) =>
13+
@disposables.add editor.onDidSave =>
1114
f = editor.getPath()
1215
return unless atom.project.contains(f)
1316
@ctagsCache.generateTags(f, true)
1417

15-
editor.onDidDestroy -> disposable.dispose()
16-
1718
destroy: ->
18-
@editorsSubscription.dispose()
19+
@disposables.dispose()
1920
super
2021

2122
viewForItem: ({lineNumber, name, file, pattern}) ->

lib/main.coffee

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ $ = null
33

44
MouseEventWhichDict = {"left click": 1, "middle click": 2, "right click": 3}
55
module.exports =
6-
disposable: null
6+
disposables: new CompositeDisposable()
77

88
config:
99
disableComplete:
@@ -50,26 +50,26 @@ module.exports =
5050
@ctagsCache.activate()
5151

5252
@ctagsCache.initTags(atom.project.getPaths(), atom.config.get('atom-ctags.autoBuildTagsWhenActive'))
53-
@disposable = atom.project.onDidChangePaths (paths)=>
53+
@disposables.add atom.project.onDidChangePaths (paths)=>
5454
@ctagsCache.initTags(paths, atom.config.get('atom-ctags.autoBuildTagsWhenActive'))
5555

56-
atom.commands.add 'atom-workspace', 'atom-ctags:rebuild', (e, cmdArgs)=>
56+
@disposables.add atom.commands.add 'atom-workspace', 'atom-ctags:rebuild', (e, cmdArgs)=>
5757
console.error "rebuild: ", e
5858
@ctagsCache.cmdArgs = cmdArgs if Array.isArray(cmdArgs)
5959
@createFileView().rebuild(true)
6060
if t
6161
clearTimeout(t)
6262
t = null
6363

64-
atom.commands.add 'atom-workspace', 'atom-ctags:toggle-project-symbols', =>
64+
@disposables.add atom.commands.add 'atom-workspace', 'atom-ctags:toggle-project-symbols', =>
6565
@createFileView().toggleAll()
6666

67-
atom.commands.add 'atom-text-editor',
67+
@disposables.add atom.commands.add 'atom-text-editor',
6868
'atom-ctags:toggle-file-symbols': => @createFileView().toggle()
6969
'atom-ctags:go-to-declaration': => @createFileView().goto()
7070
'atom-ctags:return-from-declaration': => @createGoBackView().toggle()
7171

72-
atom.workspace.observeTextEditors (editor) =>
72+
@disposables.add atom.workspace.observeTextEditors (editor) =>
7373
editorView = atom.views.getView(editor)
7474
{$} = require 'atom-space-pen-views' unless $
7575
$(editorView).on 'mousedown', (event) =>
@@ -85,22 +85,19 @@ module.exports =
8585
atom-ctags replaces and enhances the symbols-view package.
8686
Therefore, symbols-view has been disabled."
8787

88-
atom.config.observe 'atom-ctags.disableComplete', =>
88+
@disposables.add atom.config.observe 'atom-ctags.disableComplete', =>
8989
return unless @provider
9090
@provider.disabled = atom.config.get('atom-ctags.disableComplete')
9191

9292
initExtraTagsTime = null
93-
atom.config.observe 'atom-ctags.extraTagFiles', =>
93+
@disposables.add atom.config.observe 'atom-ctags.extraTagFiles', =>
9494
clearTimeout initExtraTagsTime if initExtraTagsTime
9595
initExtraTagsTime = setTimeout((=>
9696
@ctagsCache.initExtraTags(atom.config.get('atom-ctags.extraTagFiles').split(" "))
9797
initExtraTagsTime = null
9898
), 1000)
9999

100100
deactivate: ->
101-
if @disposable?
102-
@disposable.dispose()
103-
@disposable = null
104101

105102
if @fileView?
106103
@fileView.destroy()
@@ -119,6 +116,7 @@ module.exports =
119116
@goBackView = null
120117

121118
@ctagsCache.deactivate()
119+
@disposables.dispose()
122120

123121
createFileView: ->
124122
unless @fileView?

0 commit comments

Comments
 (0)