From c34ecf1a4431a2953edf89d5a7ba2aa9f08edcbc Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 8 Jun 2020 03:12:30 -0500 Subject: [PATCH 1/4] decaffeinate lib/ui --- lib/ui.coffee | 42 ----------------------------------- lib/ui.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 42 deletions(-) delete mode 100644 lib/ui.coffee create mode 100644 lib/ui.js diff --git a/lib/ui.coffee b/lib/ui.coffee deleted file mode 100644 index caf613e8..00000000 --- a/lib/ui.coffee +++ /dev/null @@ -1,42 +0,0 @@ -{CompositeDisposable, Disposable} = require 'atom' - -module.exports = - notifications: require './ui/notifications' - selector: require './ui/selector' - views: require './ui/views' - progress: require './ui/progress' - layout: require './ui/layout' - docpane: require './ui/docs' - focusutils: require './ui/focusutils' - cellhighlighter: require './ui/cellhighlighter' - - activate: (@client) -> - @subs = new CompositeDisposable - - @notifications.activate() - @subs.add atom.config.observe 'julia-client.uiOptions.highlightCells', (val) => - if val - @cellhighlighter.activate() - else - @cellhighlighter.deactivate() - @subs.add new Disposable => - @cellhighlighter.deactivate() - - @subs.add @client.onAttached => - @notifications.show("Client Connected") - @subs.add @client.onDetached => - @ink?.Result.invalidateAll() - - deactivate: -> - @subs.dispose() - - consumeInk: (@ink) -> - @views.ink = @ink - @selector.activate(@ink) - @docpane.activate(@ink) - @progress.activate(@ink) - @focusutils.activate(@ink) - @subs.add(new Disposable(=> - @docpane.deactivate() - @progress.deactivate() - @focusutils.deactivate())) diff --git a/lib/ui.js b/lib/ui.js new file mode 100644 index 00000000..48dac395 --- /dev/null +++ b/lib/ui.js @@ -0,0 +1,61 @@ +'use babel' +import { CompositeDisposable, Disposable } from 'atom'; + +export default { + // TODO Fix all of these dynamic requires and circular dependencies + notifications: require('./ui/notifications'), + selector: require('./ui/selector'), + views: require('./ui/views'), + progress: require('./ui/progress'), + layout: require('./ui/layout'), + docpane: require('./ui/docs'), + focusutils: require('./ui/focusutils'), + cellhighlighter: require('./ui/cellhighlighter'), + + activate(client) { + this.client = client; + this.subs = new CompositeDisposable; + + this.notifications.activate(); + this.subs.add(atom.config.observe('julia-client.uiOptions.highlightCells', val => { + if (val) { + this.cellhighlighter.activate(); + } else { + this.cellhighlighter.deactivate(); + } + }) + ); + this.subs.add(new Disposable(() => { + this.cellhighlighter.deactivate(); + }) + ); + + this.subs.add(this.client.onAttached(() => { + this.notifications.show("Client Connected"); + }) + ); + this.subs.add(this.client.onDetached(() => { + // TODO do we need this optional chaining check? + this.ink && this.ink.Result && this.ink.Result.invalidateAll() + }) + ); + }, + + deactivate() { + this.subs.dispose(); + }, + + consumeInk(ink) { + this.ink = ink; + this.views.ink = this.ink; + this.selector.activate(this.ink); + this.docpane.activate(this.ink); + this.progress.activate(this.ink); + this.focusutils.activate(this.ink); + this.subs.add(new Disposable(() => { + this.docpane.deactivate(); + this.progress.deactivate(); + this.focusutils.deactivate(); + })); + } +}; From 283481ef85180906c11e54f5b9af68e14af281ce Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 8 Jun 2020 04:12:18 -0500 Subject: [PATCH 2/4] fix dynamic requires --- lib/ui.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/ui.js b/lib/ui.js index 48dac395..b64e3901 100644 --- a/lib/ui.js +++ b/lib/ui.js @@ -1,16 +1,27 @@ 'use babel' import { CompositeDisposable, Disposable } from 'atom'; +// TODO use babel to export ... from ... +import notifications from './ui/notifications' +import * as selector from './ui/selector' +import views from './ui/views' +import progress from './ui/progress' +import * as layout from './ui/layout' +import * as docpane from './ui/docs' +import * as focusutils from './ui/focusutils' +import * as cellhighlighter from './ui/cellhighlighter' + export default { - // TODO Fix all of these dynamic requires and circular dependencies - notifications: require('./ui/notifications'), - selector: require('./ui/selector'), - views: require('./ui/views'), - progress: require('./ui/progress'), - layout: require('./ui/layout'), - docpane: require('./ui/docs'), - focusutils: require('./ui/focusutils'), - cellhighlighter: require('./ui/cellhighlighter'), + // TODO remove these from the export default and export them directly (prevents expensive copy) + // TODO don't use this.message use message directly (prevents expensive copy) + notifications: notifications, + selector: selector, + views: views, + progress: progress, + layout: layout, + docpane: docpane, + focusutils: focusutils, + cellhighlighter: cellhighlighter, activate(client) { this.client = client; From c51638c9857d6936b8897ff7d4cc61e9e6a62d52 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 8 Jun 2020 06:46:10 -0500 Subject: [PATCH 3/4] use if for checking ink --- lib/ui.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/ui.js b/lib/ui.js index b64e3901..8dcb79f9 100644 --- a/lib/ui.js +++ b/lib/ui.js @@ -45,9 +45,10 @@ export default { this.notifications.show("Client Connected"); }) ); - this.subs.add(this.client.onDetached(() => { - // TODO do we need this optional chaining check? - this.ink && this.ink.Result && this.ink.Result.invalidateAll() + subs.add(client.onDetached(() => { + if (ink) { + ink.Result.invalidateAll() + } }) ); }, From 2d390ce5f0d0b00ca588c82dfd1d57d61e6a45f8 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 8 Jun 2020 06:52:37 -0500 Subject: [PATCH 4/4] named export ui I analyzed these: File ui.js Found usages (10 usages found) Unclassified usage (6 usages found) lib\runtime (6 usages found) console.js (1 usage found) 11 import { selector } from '../ui' debugger.js (1 usage found) 5 import { views } from '../ui' frontend.js (1 usage found) 4 import { selector, notifications } from '../ui' packages.js (1 usage found) 4 import { selector } from '../ui' plots.js (1 usage found) 4 import { views } from '../ui' urihandler.js (1 usage found) 4 import { docpane, views } from '../ui' Usage in string literals (4 usages found) lib (1 usage found) julia-client.coffee (1 usage found) 20 ui: require './ui' lib\runtime (2 usages found) evaluation.coffee (1 usage found) 6 {notifications, views, selector, docpane} = require '../ui' workspace.coffee (1 usage found) 4 {views} = require '../ui' lib\ui (1 usage found) layout.js (1 usage found) documentation (1 usage found) 10 return require('../ui').docpane --- lib/ui.js | 78 ++++++++++++++++++++++++------------------------ lib/ui/layout.js | 6 ++-- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/lib/ui.js b/lib/ui.js index 8dcb79f9..c8262261 100644 --- a/lib/ui.js +++ b/lib/ui.js @@ -11,38 +11,39 @@ import * as docpane from './ui/docs' import * as focusutils from './ui/focusutils' import * as cellhighlighter from './ui/cellhighlighter' -export default { - // TODO remove these from the export default and export them directly (prevents expensive copy) - // TODO don't use this.message use message directly (prevents expensive copy) - notifications: notifications, - selector: selector, - views: views, - progress: progress, - layout: layout, - docpane: docpane, - focusutils: focusutils, - cellhighlighter: cellhighlighter, +exports.notifications = notifications +exports.selector = selector +exports.views = views +exports.progress = progress +exports.layout = layout +exports.docpane = docpane +exports.focusutils = focusutils +exports.cellhighlighter = cellhighlighter - activate(client) { - this.client = client; - this.subs = new CompositeDisposable; +let client; +let subs; +let ink; - this.notifications.activate(); - this.subs.add(atom.config.observe('julia-client.uiOptions.highlightCells', val => { +export function activate(client_in) { + client = client_in; + subs = new CompositeDisposable; + + notifications.activate(); + subs.add(atom.config.observe('julia-client.uiOptions.highlightCells', val => { if (val) { - this.cellhighlighter.activate(); + cellhighlighter.activate(); } else { - this.cellhighlighter.deactivate(); + cellhighlighter.deactivate(); } }) ); - this.subs.add(new Disposable(() => { - this.cellhighlighter.deactivate(); + subs.add(new Disposable(() => { + cellhighlighter.deactivate(); }) ); - this.subs.add(this.client.onAttached(() => { - this.notifications.show("Client Connected"); + subs.add(client.onAttached(() => { + notifications.show("Client Connected"); }) ); subs.add(client.onDetached(() => { @@ -51,23 +52,22 @@ export default { } }) ); - }, +} - deactivate() { - this.subs.dispose(); - }, +export function deactivate() { + subs.dispose(); +} - consumeInk(ink) { - this.ink = ink; - this.views.ink = this.ink; - this.selector.activate(this.ink); - this.docpane.activate(this.ink); - this.progress.activate(this.ink); - this.focusutils.activate(this.ink); - this.subs.add(new Disposable(() => { - this.docpane.deactivate(); - this.progress.deactivate(); - this.focusutils.deactivate(); +export function consumeInk(ink_in) { + ink = ink_in; + views.ink = ink; + selector.activate(ink); + docpane.activate(ink); + progress.activate(ink); + focusutils.activate(ink); + subs.add(new Disposable(() => { + docpane.deactivate(); + progress.deactivate(); + focusutils.deactivate(); })); - } -}; +} diff --git a/lib/ui/layout.js b/lib/ui/layout.js index 0e4dadbc..f40551d7 100644 --- a/lib/ui/layout.js +++ b/lib/ui/layout.js @@ -6,9 +6,9 @@ const repl = () => { const workspace = () => { return require('../runtime').workspace } -const documentation = () => { - return require('../ui').docpane -} + +import {docpane as documentation} from '../ui' + const plotPane = () => { return require('../runtime').plots }