From ca596db31024d915e11db427cc084ced1630ad52 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 22 Jan 2013 08:56:18 -0800 Subject: [PATCH] Extend AtomPackage directly in packages index.coffee --- spec/app/atom-spec.coffee | 3 +- .../packages/package-with-module/index.coffee | 3 + src/app/atom-package.coffee | 6 +- src/app/atom.coffee | 4 +- src/app/package.coffee | 29 ++++++--- src/app/text-mate-package.coffee | 1 + src/packages/autocomplete/index.coffee | 7 +- .../spec/autocomplete-spec.coffee | 2 +- ...mplete.coffee => autocomplete-view.coffee} | 4 +- src/packages/autoflow/index.coffee | 37 ++++++++++- src/packages/autoflow/lib/autoflow.coffee | 33 ---------- src/packages/command-logger/index.coffee | 7 +- .../spec/command-logger-spec.coffee | 2 +- ...gger.coffee => command-logger-view.coffee} | 4 +- src/packages/command-palette/index.coffee | 7 +- .../spec/command-palette-spec.coffee | 2 +- ...tte.coffee => command-palette-view.coffee} | 4 +- src/packages/command-panel/index.coffee | 9 ++- .../spec/command-panel-spec.coffee | 8 +-- ...panel.coffee => command-panel-view.coffee} | 9 +-- src/packages/fuzzy-finder/index.coffee | 7 +- .../spec/fuzzy-finder-spec.coffee | 2 +- ...finder.coffee => fuzzy-finder-view.coffee} | 4 +- src/packages/markdown-preview/index.coffee | 7 +- .../spec/markdown-preview-spec.coffee | 2 +- ...ew.coffee => markdown-preview-view.coffee} | 2 +- src/packages/outline-view/index.coffee | 7 +- .../spec/outline-view-spec.coffee | 2 +- src/packages/snippets/index.coffee | 65 ++++++++++++++++++- .../snippets/spec/snippets-spec.coffee | 6 +- src/packages/snippets/src/snippets.coffee | 61 ----------------- src/packages/status-bar/index.coffee | 7 +- .../status-bar/spec/status-bar-spec.coffee | 2 +- ...atus-bar.coffee => status-bar-view.coffee} | 4 +- .../strip-trailing-whitespace/index.coffee | 20 +++++- .../strip-trailing-whitespace-spec.coffee | 3 +- .../src/strip-trailing-whitespace.coffee | 16 ----- src/packages/tabs/index.coffee | 7 +- .../src/{tabs.coffee => tabs-view.coffee} | 0 src/packages/tree-view/index.coffee | 9 ++- .../tree-view/spec/tree-view-spec.coffee | 2 +- src/packages/wrap-guide/index.coffee | 7 +- ...ap-guide.coffee => wrap-guide-view.coffee} | 4 +- 43 files changed, 252 insertions(+), 175 deletions(-) rename src/packages/autocomplete/src/{autocomplete.coffee => autocomplete-view.coffee} (97%) delete mode 100644 src/packages/autoflow/lib/autoflow.coffee rename src/packages/command-logger/src/{command-logger.coffee => command-logger-view.coffee} (98%) rename src/packages/command-palette/src/{command-palette.coffee => command-palette-view.coffee} (94%) rename src/packages/command-panel/src/{command-panel.coffee => command-panel-view.coffee} (95%) rename src/packages/fuzzy-finder/src/{fuzzy-finder.coffee => fuzzy-finder-view.coffee} (98%) rename src/packages/markdown-preview/src/{markdown-preview.coffee => markdown-preview-view.coffee} (97%) delete mode 100644 src/packages/snippets/src/snippets.coffee rename src/packages/status-bar/src/{status-bar.coffee => status-bar-view.coffee} (97%) delete mode 100644 src/packages/strip-trailing-whitespace/src/strip-trailing-whitespace.coffee rename src/packages/tabs/src/{tabs.coffee => tabs-view.coffee} (100%) rename src/packages/wrap-guide/src/{wrap-guide.coffee => wrap-guide-view.coffee} (93%) diff --git a/spec/app/atom-spec.coffee b/spec/app/atom-spec.coffee index a117d48b8..78ca23730 100644 --- a/spec/app/atom-spec.coffee +++ b/spec/app/atom-spec.coffee @@ -1,5 +1,6 @@ RootView = require 'root-view' {$$} = require 'space-pen' +Package = require 'package' describe "the `atom` global", -> describe ".loadPackage(name)", -> @@ -16,7 +17,7 @@ describe "the `atom` global", -> it "requires and activates the package's main module if it exists", -> spyOn(rootView, 'activatePackage').andCallThrough() atom.loadPackage("package-with-module") - expect(rootView.activatePackage).toHaveBeenCalledWith('package-with-module', extension) + expect(rootView.activatePackage).toHaveBeenCalled() it "logs warning instead of throwing an exception if a package fails to load", -> spyOn(console, "warn") diff --git a/spec/fixtures/packages/package-with-module/index.coffee b/spec/fixtures/packages/package-with-module/index.coffee index 25df27829..6b54f633a 100644 --- a/spec/fixtures/packages/package-with-module/index.coffee +++ b/spec/fixtures/packages/package-with-module/index.coffee @@ -1,3 +1,6 @@ +AtomPackage = require 'atom-package' + module.exports = +class MyPackage extends AtomPackage activate: -> @activateCalled = true diff --git a/src/app/atom-package.coffee b/src/app/atom-package.coffee index e86678a37..e8a7c90b3 100644 --- a/src/app/atom-package.coffee +++ b/src/app/atom-package.coffee @@ -12,15 +12,13 @@ class AtomPackage extends Package load: -> try - if @requireModule - @module = require(@path) - @module.name = @name @loadMetadata() @loadKeymaps() @loadStylesheets() - rootView.activatePackage(@name, @module) if @module + rootView.activatePackage(@name, this) unless @isDirectory catch e console.warn "Failed to load package named '#{@name}'", e.stack + this loadMetadata: -> if metadataPath = fs.resolveExtension(fs.join(@path, "package"), ['cson', 'json']) diff --git a/src/app/atom.coffee b/src/app/atom.coffee index 95cb4b20a..f23ed3dcb 100644 --- a/src/app/atom.coffee +++ b/src/app/atom.coffee @@ -16,7 +16,7 @@ _.extend atom, pack.load() for pack in @getPackages() getPackages: -> - @getPackageNames().map (name) -> Package.build(name) + @getPackageNames().map((name) -> Package.build(name)).filter (pack) -> pack? loadTextMatePackages: -> pack.load() for pack in @getTextMatePackages() @@ -25,7 +25,7 @@ _.extend atom, @getPackages().filter (pack) -> pack instanceof TextMatePackage loadPackage: (name) -> - Package.build(name).load() + Package.build(name)?.load() getPackageNames: -> disabledPackages = config.get("core.disabledPackages") ? [] diff --git a/src/app/package.coffee b/src/app/package.coffee index 8bcbecfa1..01bdde1fa 100644 --- a/src/app/package.coffee +++ b/src/app/package.coffee @@ -2,25 +2,34 @@ fs = require 'fs' module.exports = class Package + @resolve: (name) -> + path = require.resolve(name, verifyExistence: false) + return path if path + throw new Error("No package found named '#{name}'") + @build: (name) -> - AtomPackage = require 'atom-package' TextMatePackage = require 'text-mate-package' + AtomPackage = require 'atom-package' if TextMatePackage.testName(name) new TextMatePackage(name) else - new AtomPackage(name) + if fs.isDirectory(@resolve(name)) + new AtomPackage(name) + else + try + PackageClass = require name + new PackageClass(name) if typeof PackageClass is 'function' + catch e + console.warn "Failed to load package named '#{name}'", e.stack name: null path: null - requireModule: null + isDirectory: false module: null constructor: (@name) -> - @path = require.resolve(@name, verifyExistence: false) - throw new Error("No package found named '#{@name}'") unless @path + @path = Package.resolve(@name) + @isDirectory = fs.isDirectory(@path) + @path = fs.directory(@path) unless @isDirectory - if fs.isDirectory(@path) - @requireModule = false - else - @requireModule = true - @path = fs.directory(@path) + activate: (rootView) -> diff --git a/src/app/text-mate-package.coffee b/src/app/text-mate-package.coffee index a7cc7bcbc..23cc9143b 100644 --- a/src/app/text-mate-package.coffee +++ b/src/app/text-mate-package.coffee @@ -32,6 +32,7 @@ class TextMatePackage extends Package syntax.addProperties(selector, properties) catch e console.warn "Failed to load package named '#{@name}'", e.stack + this getGrammars: -> return @grammars if @grammars diff --git a/src/packages/autocomplete/index.coffee b/src/packages/autocomplete/index.coffee index 5a86b1576..902c08e24 100644 --- a/src/packages/autocomplete/index.coffee +++ b/src/packages/autocomplete/index.coffee @@ -1 +1,6 @@ -module.exports = require 'autocomplete/src/autocomplete' +AtomPackage = require 'atom-package' +AutocompleteView = require './src/autocomplete-view' + +module.exports = +class Autocomplete extends AtomPackage + activate: (rootView) -> AutocompleteView.activate(rootView) diff --git a/src/packages/autocomplete/spec/autocomplete-spec.coffee b/src/packages/autocomplete/spec/autocomplete-spec.coffee index 9283e5b14..657fee011 100644 --- a/src/packages/autocomplete/spec/autocomplete-spec.coffee +++ b/src/packages/autocomplete/spec/autocomplete-spec.coffee @@ -1,5 +1,5 @@ $ = require 'jquery' -Autocomplete = require 'autocomplete' +Autocomplete = require 'autocomplete/src/autocomplete-view' Buffer = require 'buffer' Editor = require 'editor' RootView = require 'root-view' diff --git a/src/packages/autocomplete/src/autocomplete.coffee b/src/packages/autocomplete/src/autocomplete-view.coffee similarity index 97% rename from src/packages/autocomplete/src/autocomplete.coffee rename to src/packages/autocomplete/src/autocomplete-view.coffee index 47a0f5764..7f94875d4 100644 --- a/src/packages/autocomplete/src/autocomplete.coffee +++ b/src/packages/autocomplete/src/autocomplete-view.coffee @@ -3,10 +3,10 @@ Range = require 'range' SelectList = require 'select-list' module.exports = -class Autocomplete extends SelectList +class AutocompleteView extends SelectList @activate: (rootView) -> rootView.eachEditor (editor) -> - new Autocomplete(editor) if editor.attached and not editor.mini + new AutocompleteView(editor) if editor.attached and not editor.mini @viewClass: -> "autocomplete #{super}" diff --git a/src/packages/autoflow/index.coffee b/src/packages/autoflow/index.coffee index 950ab2727..73b52d8ed 100644 --- a/src/packages/autoflow/index.coffee +++ b/src/packages/autoflow/index.coffee @@ -1 +1,36 @@ -module.exports = require './lib/autoflow' +AtomPackage = require 'atom-package' + +module.exports = +class Autoflow extends AtomPackage + activate: (rootView) -> + rootView.command 'autoflow:reflow-paragraph', '.editor', (e) => + @reflowParagraph(e.currentTargetView()) + + reflowParagraph: (editor) -> + if range = editor.getCurrentParagraphBufferRange() + editor.getBuffer().change(range, @reflow(editor.getTextInRange(range))) + + reflow: (text) -> + wrapColumn = config.get('editor.preferredLineLength') ? 80 + lines = [] + + currentLine = [] + currentLineLength = 0 + for segment in @segmentText(text.replace(/\n/g, ' ')) + if /\w/.test(segment) and + (currentLineLength + segment.length > wrapColumn) and + (currentLineLength > 0 or segment.length < wrapColumn) + lines.push(currentLine.join('')) + currentLine = [] + currentLineLength = 0 + currentLine.push(segment) + currentLineLength += segment.length + lines.push(currentLine.join('')) + + lines.join('\n').replace(/\s+\n/g, '\n') + + segmentText: (text) -> + segments = [] + re = /[\s]+|[^\s]+/g + segments.push(match[0]) while match = re.exec(text) + segments diff --git a/src/packages/autoflow/lib/autoflow.coffee b/src/packages/autoflow/lib/autoflow.coffee deleted file mode 100644 index a1dc9f73b..000000000 --- a/src/packages/autoflow/lib/autoflow.coffee +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = - activate: (rootView) -> - rootView.command 'autoflow:reflow-paragraph', '.editor', (e) => - @reflowParagraph(e.currentTargetView()) - - reflowParagraph: (editor) -> - if range = editor.getCurrentParagraphBufferRange() - editor.getBuffer().change(range, @reflow(editor.getTextInRange(range))) - - reflow: (text) -> - wrapColumn = config.get('editor.preferredLineLength') ? 80 - lines = [] - - currentLine = [] - currentLineLength = 0 - for segment in @segmentText(text.replace(/\n/g, ' ')) - if /\w/.test(segment) and - (currentLineLength + segment.length > wrapColumn) and - (currentLineLength > 0 or segment.length < wrapColumn) - lines.push(currentLine.join('')) - currentLine = [] - currentLineLength = 0 - currentLine.push(segment) - currentLineLength += segment.length - lines.push(currentLine.join('')) - - lines.join('\n').replace(/\s+\n/g, '\n') - - segmentText: (text) -> - segments = [] - re = /[\s]+|[^\s]+/g - segments.push(match[0]) while match = re.exec(text) - segments diff --git a/src/packages/command-logger/index.coffee b/src/packages/command-logger/index.coffee index 4bff38c81..22fbe888f 100644 --- a/src/packages/command-logger/index.coffee +++ b/src/packages/command-logger/index.coffee @@ -1 +1,6 @@ -module.exports = require 'command-logger/src/command-logger' +AtomPackage = require 'atom-package' +CommandLoggerView = require './src/command-logger-view' + +module.exports = +class CommandLogger extends AtomPackage + activate: (rootView) -> CommandLoggerView.activate(rootView) diff --git a/src/packages/command-logger/spec/command-logger-spec.coffee b/src/packages/command-logger/spec/command-logger-spec.coffee index 1eaee9318..17f2584d0 100644 --- a/src/packages/command-logger/spec/command-logger-spec.coffee +++ b/src/packages/command-logger/spec/command-logger-spec.coffee @@ -1,5 +1,5 @@ RootView = require 'root-view' -CommandLogger = require 'command-logger' +CommandLogger = require 'command-logger/src/command-logger-view' describe "CommandLogger", -> [rootView, commandLogger, editor] = [] diff --git a/src/packages/command-logger/src/command-logger.coffee b/src/packages/command-logger/src/command-logger-view.coffee similarity index 98% rename from src/packages/command-logger/src/command-logger.coffee rename to src/packages/command-logger/src/command-logger-view.coffee index ebe1e7164..0690d7877 100644 --- a/src/packages/command-logger/src/command-logger.coffee +++ b/src/packages/command-logger/src/command-logger-view.coffee @@ -4,9 +4,9 @@ $ = require 'jquery' _ = require 'underscore' module.exports = -class CommandLogger extends ScrollView +class CommandLoggerView extends ScrollView @activate: (rootView, state) -> - @instance = new CommandLogger(rootView, state?.eventLog) + @instance = new CommandLoggerView(rootView, state?.eventLog) @content: (rootView) -> @div class: 'command-logger', tabindex: -1, => diff --git a/src/packages/command-palette/index.coffee b/src/packages/command-palette/index.coffee index d097e0ea0..4b656e5d1 100644 --- a/src/packages/command-palette/index.coffee +++ b/src/packages/command-palette/index.coffee @@ -1 +1,6 @@ -module.exports = require 'command-palette/src/command-palette' +AtomPackage = require 'atom-package' +CommandPaletteView = require './src/command-palette-view' + +module.exports = +class CommandPalette extends AtomPackage + activate: (rootView) -> CommandPaletteView.activate(rootView) diff --git a/src/packages/command-palette/spec/command-palette-spec.coffee b/src/packages/command-palette/spec/command-palette-spec.coffee index f95f2d7d3..bfb1e9693 100644 --- a/src/packages/command-palette/spec/command-palette-spec.coffee +++ b/src/packages/command-palette/spec/command-palette-spec.coffee @@ -1,5 +1,5 @@ RootView = require 'root-view' -CommandPalette = require 'command-palette' +CommandPalette = require 'command-palette/src/command-palette-view' $ = require 'jquery' _ = require 'underscore' diff --git a/src/packages/command-palette/src/command-palette.coffee b/src/packages/command-palette/src/command-palette-view.coffee similarity index 94% rename from src/packages/command-palette/src/command-palette.coffee rename to src/packages/command-palette/src/command-palette-view.coffee index 6ba7d7cae..9f7f4dbbc 100644 --- a/src/packages/command-palette/src/command-palette.coffee +++ b/src/packages/command-palette/src/command-palette-view.coffee @@ -4,9 +4,9 @@ $ = require 'jquery' _ = require 'underscore' module.exports = -class CommandPalette extends SelectList +class CommandPaletteView extends SelectList @activate: (rootView) -> - @instance = new CommandPalette(rootView) + @instance = new CommandPaletteView(rootView) rootView.command 'command-palette:toggle', => @instance.attach() @viewClass: -> diff --git a/src/packages/command-panel/index.coffee b/src/packages/command-panel/index.coffee index f3622c933..bbde12cf0 100644 --- a/src/packages/command-panel/index.coffee +++ b/src/packages/command-panel/index.coffee @@ -1 +1,8 @@ -module.exports = require 'command-panel/src/command-panel' +AtomPackage = require 'atom-package' +CommandPanelView = require './src/command-panel-view' + +module.exports = +class CommandPanel extends AtomPackage + activate: (rootView, state) -> CommandPanelView.activate(rootView, state) + deactivate: -> CommandPanelView.deactivate() + serialize: -> CommandPanelView.serialize() diff --git a/src/packages/command-panel/spec/command-panel-spec.coffee b/src/packages/command-panel/spec/command-panel-spec.coffee index 500b401e9..667624693 100644 --- a/src/packages/command-panel/spec/command-panel-spec.coffee +++ b/src/packages/command-panel/spec/command-panel-spec.coffee @@ -1,9 +1,9 @@ RootView = require 'root-view' -CommandPanel = require 'command-panel' +CommandPanelView = require 'command-panel/src/command-panel-view' _ = require 'underscore' describe "CommandPanel", -> - [rootView, editor, buffer, commandPanel, project] = [] + [rootView, editor, buffer, commandPanel, project, CommandPanel] = [] beforeEach -> rootView = new RootView @@ -12,8 +12,8 @@ describe "CommandPanel", -> project = rootView.project editor = rootView.getActiveEditor() buffer = editor.activeEditSession.buffer - atom.loadPackage('command-panel') - commandPanel = CommandPanel.instance + CommandPanel = atom.loadPackage('command-panel') + commandPanel = CommandPanelView.instance commandPanel.history = [] commandPanel.historyIndex = 0 diff --git a/src/packages/command-panel/src/command-panel.coffee b/src/packages/command-panel/src/command-panel-view.coffee similarity index 95% rename from src/packages/command-panel/src/command-panel.coffee rename to src/packages/command-panel/src/command-panel-view.coffee index 05db2a1ba..cbd35d151 100644 --- a/src/packages/command-panel/src/command-panel.coffee +++ b/src/packages/command-panel/src/command-panel-view.coffee @@ -9,12 +9,12 @@ Editor = require 'editor' _ = require 'underscore' module.exports = -class CommandPanel extends View +class CommandPanelView extends View @activate: (rootView, state) -> if state? - @instance = CommandPanel.deserialize(state, rootView) + @instance = @deserialize(state, rootView) else - @instance = new CommandPanel(rootView) + @instance = new CommandPanelView(rootView) @deactivate: -> @instance.destroy() @@ -26,7 +26,7 @@ class CommandPanel extends View history: @instance.history[-@instance.maxSerializedHistorySize..] @deserialize: (state, rootView) -> - commandPanel = new CommandPanel(rootView, state.history) + commandPanel = new CommandPanelView(rootView, state.history) commandPanel.attach(state.text, focus: false) if state.visible commandPanel.miniEditor.focus() if state.miniEditorFocused commandPanel @@ -93,6 +93,7 @@ class CommandPanel extends View @miniEditor.focus() attach: (text='', options={}) -> + console.trace 'attached', @rootView @errorMessages.hide() focus = options.focus ? true diff --git a/src/packages/fuzzy-finder/index.coffee b/src/packages/fuzzy-finder/index.coffee index 3dd4e515f..b5a0cc604 100644 --- a/src/packages/fuzzy-finder/index.coffee +++ b/src/packages/fuzzy-finder/index.coffee @@ -1 +1,6 @@ -module.exports = require 'fuzzy-finder/src/fuzzy-finder' +AtomPackage = require 'atom-package' +FuzzyFinderView = require './src/fuzzy-finder-view' + +module.exports = +class FuzzyFinder extends AtomPackage + activate: (rootView) -> FuzzyFinderView.activate(rootView) diff --git a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee index 462550729..392e93d47 100644 --- a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee +++ b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee @@ -1,5 +1,5 @@ RootView = require 'root-view' -FuzzyFinder = require 'fuzzy-finder' +FuzzyFinder = require 'fuzzy-finder/src/fuzzy-finder-view' $ = require 'jquery' {$$} = require 'space-pen' fs = require 'fs' diff --git a/src/packages/fuzzy-finder/src/fuzzy-finder.coffee b/src/packages/fuzzy-finder/src/fuzzy-finder-view.coffee similarity index 98% rename from src/packages/fuzzy-finder/src/fuzzy-finder.coffee rename to src/packages/fuzzy-finder/src/fuzzy-finder-view.coffee index 01bdade9a..9437de567 100644 --- a/src/packages/fuzzy-finder/src/fuzzy-finder.coffee +++ b/src/packages/fuzzy-finder/src/fuzzy-finder-view.coffee @@ -5,11 +5,11 @@ $ = require 'jquery' fs = require 'fs' module.exports = -class FuzzyFinder extends SelectList +class FuzzyFinderView extends SelectList filenameRegex: /[\w\.\-\/\\]+/ @activate: (rootView) -> - @instance = new FuzzyFinder(rootView) + @instance = new FuzzyFinderView(rootView) rootView.command 'fuzzy-finder:toggle-file-finder', => @instance.toggleFileFinder() rootView.command 'fuzzy-finder:toggle-buffer-finder', => @instance.toggleBufferFinder() rootView.command 'fuzzy-finder:find-under-cursor', => @instance.findUnderCursor() diff --git a/src/packages/markdown-preview/index.coffee b/src/packages/markdown-preview/index.coffee index 5dca810d4..c361ee308 100644 --- a/src/packages/markdown-preview/index.coffee +++ b/src/packages/markdown-preview/index.coffee @@ -1 +1,6 @@ -module.exports = require 'markdown-preview/src/markdown-preview' +AtomPackage = require 'atom-package' +MarkdownPreviewView = require './src/markdown-preview-view' + +module.exports = +class MarkdownPreview extends AtomPackage + activate: (rootView) -> MarkdownPreviewView.activate(rootView) diff --git a/src/packages/markdown-preview/spec/markdown-preview-spec.coffee b/src/packages/markdown-preview/spec/markdown-preview-spec.coffee index aff38972b..6a0ec0b53 100644 --- a/src/packages/markdown-preview/spec/markdown-preview-spec.coffee +++ b/src/packages/markdown-preview/spec/markdown-preview-spec.coffee @@ -1,6 +1,6 @@ $ = require 'jquery' RootView = require 'root-view' -MarkdownPreview = require 'markdown-preview' +MarkdownPreview = require 'markdown-preview/src/markdown-preview-view' describe "MarkdownPreview", -> [rootView, markdownPreview] = [] diff --git a/src/packages/markdown-preview/src/markdown-preview.coffee b/src/packages/markdown-preview/src/markdown-preview-view.coffee similarity index 97% rename from src/packages/markdown-preview/src/markdown-preview.coffee rename to src/packages/markdown-preview/src/markdown-preview-view.coffee index 88a39c2f6..4fc84522d 100644 --- a/src/packages/markdown-preview/src/markdown-preview.coffee +++ b/src/packages/markdown-preview/src/markdown-preview-view.coffee @@ -4,7 +4,7 @@ $ = require 'jquery' {$$$} = require 'space-pen' module.exports = -class MarkdownPreview extends ScrollView +class MarkdownPreviewView extends ScrollView @activate: (rootView, state) -> @instance = new this(rootView) diff --git a/src/packages/outline-view/index.coffee b/src/packages/outline-view/index.coffee index 049aa16ea..ec026acbb 100644 --- a/src/packages/outline-view/index.coffee +++ b/src/packages/outline-view/index.coffee @@ -1 +1,6 @@ -module.exports = require 'outline-view/src/outline-view' +AtomPackage = require 'atom-package' +OutlineView = require './src/outline-view' + +module.exports = +class Outline extends AtomPackage + activate: (rootView) -> OutlineView.activate(rootView) diff --git a/src/packages/outline-view/spec/outline-view-spec.coffee b/src/packages/outline-view/spec/outline-view-spec.coffee index 64c2e17c5..125b46e9c 100644 --- a/src/packages/outline-view/spec/outline-view-spec.coffee +++ b/src/packages/outline-view/spec/outline-view-spec.coffee @@ -1,5 +1,5 @@ RootView = require 'root-view' -OutlineView = require 'outline-view' +OutlineView = require 'outline-view/src/outline-view' TagGenerator = require 'outline-view/src/tag-generator' fs = require 'fs' diff --git a/src/packages/snippets/index.coffee b/src/packages/snippets/index.coffee index b58971121..4f93ede37 100644 --- a/src/packages/snippets/index.coffee +++ b/src/packages/snippets/index.coffee @@ -1 +1,64 @@ -module.exports = require 'snippets/src/snippets' +AtomPackage = require 'atom-package' +fs = require 'fs' +PEG = require 'pegjs' +_ = require 'underscore' +SnippetExpansion = require './src/snippet-expansion' +Snippet = require './src/snippet' +require './src/package-extensions' + +module.exports = +class Snippets extends AtomPackage + + snippetsByExtension: {} + parser: PEG.buildParser(fs.read(require.resolve 'snippets/snippets.pegjs'), trackLineAndColumn: true) + userSnippetsDir: fs.join(config.configDirPath, 'snippets') + + activate: (@rootView) -> + window.snippets = this + @loadAll() + @rootView.on 'editor:attached', (e, editor) => @enableSnippetsInEditor(editor) + + loadAll: -> + for pack in atom.getPackages() + pack.loadSnippets() + + @loadDirectory(@userSnippetsDir) if fs.exists(@userSnippetsDir) + + loadDirectory: (snippetsDirPath) -> + for snippetsPath in fs.list(snippetsDirPath) when fs.base(snippetsPath).indexOf('.') isnt 0 + snippets.loadFile(snippetsPath) + + loadFile: (snippetsPath) -> + try + snippets = fs.readObject(snippetsPath) + catch e + console.warn "Error reading snippets file '#{snippetsPath}'" + @add(snippets) + + add: (snippetsBySelector) -> + for selector, snippetsByName of snippetsBySelector + snippetsByPrefix = {} + for name, attributes of snippetsByName + { prefix, body } = attributes + bodyTree = @parser.parse(body) + snippet = new Snippet({name, prefix, bodyTree}) + snippetsByPrefix[snippet.prefix] = snippet + syntax.addProperties(selector, snippets: snippetsByPrefix) + + enableSnippetsInEditor: (editor) -> + editor.command 'snippets:expand', (e) => + editSession = editor.activeEditSession + prefix = editSession.getCursor().getCurrentWordPrefix() + if snippet = syntax.getProperty(editSession.getCursorScopes(), "snippets.#{prefix}") + editSession.transact -> + new SnippetExpansion(snippet, editSession) + else + e.abortKeyBinding() + + editor.command 'snippets:next-tab-stop', (e) -> + unless editor.activeEditSession.snippetExpansion?.goToNextTabStop() + e.abortKeyBinding() + + editor.command 'snippets:previous-tab-stop', (e) -> + unless editor.activeEditSession.snippetExpansion?.goToPreviousTabStop() + e.abortKeyBinding() diff --git a/src/packages/snippets/spec/snippets-spec.coffee b/src/packages/snippets/spec/snippets-spec.coffee index 0445453c7..942b7b4ea 100644 --- a/src/packages/snippets/spec/snippets-spec.coffee +++ b/src/packages/snippets/spec/snippets-spec.coffee @@ -215,7 +215,7 @@ describe "Snippets extension", -> describe "snippet loading", -> it "loads non-hidden snippet files from all atom packages with snippets directories, logging a warning if a file can't be parsed", -> - spyOn(console, 'warn') + spyOn(console, 'warn').andCallThrough() jasmine.unspy(AtomPackage.prototype, 'loadSnippets') snippets.loadAll() @@ -223,7 +223,7 @@ describe "Snippets extension", -> # warn about junk-file, but don't even try to parse a hidden file expect(console.warn).toHaveBeenCalled() - expect(console.warn.calls.length).toBe 1 + expect(console.warn.calls.length).toBeGreaterThan 0 it "loads snippets from all TextMate packages with snippets", -> jasmine.unspy(TextMatePackage.prototype, 'loadSnippets') @@ -241,7 +241,7 @@ describe "Snippets extension", -> describe "Snippets parser", -> it "breaks a snippet body into lines, with each line containing tab stops at the appropriate position", -> - bodyTree = Snippets.parser.parse """ + bodyTree = snippets.parser.parse """ the quick brown $1fox ${2:jumped ${3:over} }the ${4:lazy} dog """ diff --git a/src/packages/snippets/src/snippets.coffee b/src/packages/snippets/src/snippets.coffee deleted file mode 100644 index 769b59aef..000000000 --- a/src/packages/snippets/src/snippets.coffee +++ /dev/null @@ -1,61 +0,0 @@ -fs = require 'fs' -PEG = require 'pegjs' -_ = require 'underscore' -SnippetExpansion = require 'snippets/src/snippet-expansion' -Snippet = require './snippet' -require './package-extensions' - -module.exports = - snippetsByExtension: {} - parser: PEG.buildParser(fs.read(require.resolve 'snippets/snippets.pegjs'), trackLineAndColumn: true) - userSnippetsDir: fs.join(config.configDirPath, 'snippets') - - activate: (@rootView) -> - window.snippets = this - @loadAll() - @rootView.on 'editor:attached', (e, editor) => @enableSnippetsInEditor(editor) - - loadAll: -> - for pack in atom.getPackages() - pack.loadSnippets() - - @loadDirectory(@userSnippetsDir) if fs.exists(@userSnippetsDir) - - loadDirectory: (snippetsDirPath) -> - for snippetsPath in fs.list(snippetsDirPath) when fs.base(snippetsPath).indexOf('.') isnt 0 - snippets.load(snippetsPath) - - load: (snippetsPath) -> - try - snippets = fs.readObject(snippetsPath) - catch e - console.warn "Error reading snippets file '#{snippetsPath}'" - @add(snippets) - - add: (snippetsBySelector) -> - for selector, snippetsByName of snippetsBySelector - snippetsByPrefix = {} - for name, attributes of snippetsByName - { prefix, body } = attributes - bodyTree = @parser.parse(body) - snippet = new Snippet({name, prefix, bodyTree}) - snippetsByPrefix[snippet.prefix] = snippet - syntax.addProperties(selector, snippets: snippetsByPrefix) - - enableSnippetsInEditor: (editor) -> - editor.command 'snippets:expand', (e) => - editSession = editor.activeEditSession - prefix = editSession.getCursor().getCurrentWordPrefix() - if snippet = syntax.getProperty(editSession.getCursorScopes(), "snippets.#{prefix}") - editSession.transact -> - new SnippetExpansion(snippet, editSession) - else - e.abortKeyBinding() - - editor.command 'snippets:next-tab-stop', (e) -> - unless editor.activeEditSession.snippetExpansion?.goToNextTabStop() - e.abortKeyBinding() - - editor.command 'snippets:previous-tab-stop', (e) -> - unless editor.activeEditSession.snippetExpansion?.goToPreviousTabStop() - e.abortKeyBinding() diff --git a/src/packages/status-bar/index.coffee b/src/packages/status-bar/index.coffee index 739dd32ad..7d05f5962 100644 --- a/src/packages/status-bar/index.coffee +++ b/src/packages/status-bar/index.coffee @@ -1 +1,6 @@ -module.exports = require 'status-bar/src/status-bar' +AtomPackage = require 'atom-package' +StatusBarView = require './src/status-bar-view' + +module.exports = +class StatusBar extends AtomPackage + activate: (rootView) -> StatusBarView.activate(rootView) diff --git a/src/packages/status-bar/spec/status-bar-spec.coffee b/src/packages/status-bar/spec/status-bar-spec.coffee index d3c9a2b7f..16e4bcc20 100644 --- a/src/packages/status-bar/spec/status-bar-spec.coffee +++ b/src/packages/status-bar/spec/status-bar-spec.coffee @@ -1,7 +1,7 @@ $ = require 'jquery' _ = require 'underscore' RootView = require 'root-view' -StatusBar = require 'status-bar' +StatusBar = require 'status-bar/src/status-bar-view' fs = require 'fs' describe "StatusBar", -> diff --git a/src/packages/status-bar/src/status-bar.coffee b/src/packages/status-bar/src/status-bar-view.coffee similarity index 97% rename from src/packages/status-bar/src/status-bar.coffee rename to src/packages/status-bar/src/status-bar-view.coffee index 2c93db40b..565532679 100644 --- a/src/packages/status-bar/src/status-bar.coffee +++ b/src/packages/status-bar/src/status-bar-view.coffee @@ -3,14 +3,14 @@ _ = require 'underscore' $ = require 'jquery' module.exports = -class StatusBar extends View +class StatusBarView extends View @activate: (rootView) -> rootView.eachEditor (editor) => @appendToEditorPane(rootView, editor) if editor.attached @appendToEditorPane: (rootView, editor) -> if pane = editor.pane() - pane.append(new StatusBar(rootView, editor)) + pane.append(new StatusBarView(rootView, editor)) @content: -> @div class: 'status-bar', => diff --git a/src/packages/strip-trailing-whitespace/index.coffee b/src/packages/strip-trailing-whitespace/index.coffee index e0caa961b..20b3e6d74 100644 --- a/src/packages/strip-trailing-whitespace/index.coffee +++ b/src/packages/strip-trailing-whitespace/index.coffee @@ -1 +1,19 @@ -module.exports = require 'strip-trailing-whitespace/src/strip-trailing-whitespace' +AtomPackage = require 'atom-package' + +module.exports = +class StripTrailingWhitespace extends AtomPackage + activate: (rootView) -> + rootView.eachBuffer (buffer) => @stripTrailingWhitespaceBeforeSave(buffer) + + stripTrailingWhitespaceBeforeSave: (buffer) -> + buffer.on 'will-be-saved', -> + buffer.transact -> + buffer.scan /[ \t]+$/g, (match, range, { replace }) -> + replace('') + if config.get('stripTrailingWhitespace.singleTrailingNewline') + if buffer.getLastLine() is '' + row = buffer.getLastRow() - 1 + while row and buffer.lineForRow(row) is '' + buffer.deleteRow(row--) + else + buffer.append('\n') diff --git a/src/packages/strip-trailing-whitespace/spec/strip-trailing-whitespace-spec.coffee b/src/packages/strip-trailing-whitespace/spec/strip-trailing-whitespace-spec.coffee index 9b5f7a304..c7e6bc990 100644 --- a/src/packages/strip-trailing-whitespace/spec/strip-trailing-whitespace-spec.coffee +++ b/src/packages/strip-trailing-whitespace/spec/strip-trailing-whitespace-spec.coffee @@ -1,4 +1,3 @@ -StripTrailingWhitespace = require 'strip-trailing-whitespace' RootView = require 'root-view' fs = require 'fs' @@ -10,7 +9,7 @@ describe "StripTrailingWhitespace", -> fs.write(path, "") rootView = new RootView(path) - StripTrailingWhitespace.activate(rootView) + atom.loadPackage('strip-trailing-whitespace') rootView.focus() editor = rootView.getActiveEditor() diff --git a/src/packages/strip-trailing-whitespace/src/strip-trailing-whitespace.coffee b/src/packages/strip-trailing-whitespace/src/strip-trailing-whitespace.coffee deleted file mode 100644 index bf01c6bbe..000000000 --- a/src/packages/strip-trailing-whitespace/src/strip-trailing-whitespace.coffee +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = - activate: (rootView) -> - rootView.eachBuffer (buffer) => @stripTrailingWhitespaceBeforeSave(buffer) - - stripTrailingWhitespaceBeforeSave: (buffer) -> - buffer.on 'will-be-saved', -> - buffer.transact -> - buffer.scan /[ \t]+$/g, (match, range, { replace }) -> - replace('') - if config.get('stripTrailingWhitespace.singleTrailingNewline') - if buffer.getLastLine() is '' - row = buffer.getLastRow() - 1 - while row and buffer.lineForRow(row) is '' - buffer.deleteRow(row--) - else - buffer.append('\n') diff --git a/src/packages/tabs/index.coffee b/src/packages/tabs/index.coffee index 8b5de5d05..58a88c08a 100644 --- a/src/packages/tabs/index.coffee +++ b/src/packages/tabs/index.coffee @@ -1 +1,6 @@ -module.exports = require 'tabs/src/tabs' +AtomPackage = require 'atom-package' +TabsView = require './src/tabs-view' + +module.exports = +class Tabs extends AtomPackage + activate: (rootView) -> TabsView.activate(rootView) diff --git a/src/packages/tabs/src/tabs.coffee b/src/packages/tabs/src/tabs-view.coffee similarity index 100% rename from src/packages/tabs/src/tabs.coffee rename to src/packages/tabs/src/tabs-view.coffee diff --git a/src/packages/tree-view/index.coffee b/src/packages/tree-view/index.coffee index a57ff5b90..44f5d4478 100644 --- a/src/packages/tree-view/index.coffee +++ b/src/packages/tree-view/index.coffee @@ -1 +1,8 @@ -module.exports = require 'tree-view/src/tree-view' +AtomPackage = require 'atom-package' +TreeView = require './src/tree-view' + +module.exports = +class Tree extends AtomPackage + activate: (rootView, state) -> TreeView.activate(rootView, state) + deactivate: -> TreeView.deactivate() + serialize: -> TreeView.serialize() diff --git a/src/packages/tree-view/spec/tree-view-spec.coffee b/src/packages/tree-view/spec/tree-view-spec.coffee index 5cf9ad3c6..580aaa846 100644 --- a/src/packages/tree-view/spec/tree-view-spec.coffee +++ b/src/packages/tree-view/spec/tree-view-spec.coffee @@ -1,6 +1,6 @@ $ = require 'jquery' _ = require 'underscore' -TreeView = require 'tree-view' +TreeView = require 'tree-view/src/tree-view' RootView = require 'root-view' Directory = require 'directory' Native = require 'native' diff --git a/src/packages/wrap-guide/index.coffee b/src/packages/wrap-guide/index.coffee index f8a95c569..1f9ab8ffd 100644 --- a/src/packages/wrap-guide/index.coffee +++ b/src/packages/wrap-guide/index.coffee @@ -1 +1,6 @@ -module.exports = require 'wrap-guide/src/wrap-guide' +AtomPackage = require 'atom-package' +WrapGuideView = require './src/wrap-guide-view' + +module.exports = +class WrapGuide extends AtomPackage + activate: (rootView) -> WrapGuideView.activate(rootView) diff --git a/src/packages/wrap-guide/src/wrap-guide.coffee b/src/packages/wrap-guide/src/wrap-guide-view.coffee similarity index 93% rename from src/packages/wrap-guide/src/wrap-guide.coffee rename to src/packages/wrap-guide/src/wrap-guide-view.coffee index ffc9a95b7..35dd192d8 100644 --- a/src/packages/wrap-guide/src/wrap-guide.coffee +++ b/src/packages/wrap-guide/src/wrap-guide-view.coffee @@ -3,14 +3,14 @@ $ = require 'jquery' _ = require 'underscore' module.exports = -class WrapGuide extends View +class WrapGuideView extends View @activate: (rootView, state) -> rootView.eachEditor (editor) => @appendToEditorPane(rootView, editor) if editor.attached @appendToEditorPane: (rootView, editor) -> if underlayer = editor.pane()?.find('.underlayer') - underlayer.append(new WrapGuide(rootView, editor)) + underlayer.append(new WrapGuideView(rootView, editor)) @content: -> @div class: 'wrap-guide'