From c1f09e4f8b441044af40352d67e714a4d5bae8fc Mon Sep 17 00:00:00 2001 From: Glavin Wiechert Date: Thu, 11 Jun 2015 22:57:03 -0300 Subject: [PATCH] Beautify all src/ files to pass linting with Coffeelint --- coffeelint.json | 15 +- src/beautifiers/autopep8.coffee | 4 +- src/beautifiers/beautifier.coffee | 18 +- src/beautifiers/gofmt.coffee | 2 +- src/beautifiers/index.coffee | 20 +- src/beautifiers/perltidy.coffee | 2 +- src/beautifiers/ruby-beautify.coffee | 2 +- src/beautifiers/rustfmt.coffee | 8 +- src/beautifiers/sqlformat.coffee | 4 +- src/beautifiers/uncrustify/index.coffee | 4 +- src/beautify.coffee | 680 ++++++++++++------------ src/config.coffee | 52 +- src/languages/index.coffee | 14 +- src/logger.coffee | 132 ++--- src/views/message-view.coffee | 2 +- 15 files changed, 479 insertions(+), 480 deletions(-) diff --git a/coffeelint.json b/coffeelint.json index 43b8c39..79ff8ec 100644 --- a/coffeelint.json +++ b/coffeelint.json @@ -1,10 +1,13 @@ { - "indentation" : { - "level" : "error", - "value" : 2 + "indentation": { + "level": "error", + "value": 2 }, - "line_endings" : { - "value" : "unix", - "level" : "error" + "line_endings": { + "value": "unix", + "level": "error" + }, + "max_line_length": { + "value": false } } \ No newline at end of file diff --git a/src/beautifiers/autopep8.coffee b/src/beautifiers/autopep8.coffee index 37310d8..384ef8f 100644 --- a/src/beautifiers/autopep8.coffee +++ b/src/beautifiers/autopep8.coffee @@ -5,7 +5,7 @@ Requires https://github.com/hhatto/autopep8 "use strict" Beautifier = require('./beautifier') -module.exports = class autopep8 extends Beautifier +module.exports = class Autopep8 extends Beautifier name: "autopep8" @@ -21,5 +21,5 @@ module.exports = class autopep8 extends Beautifier ["--indent-size","#{options.indent_size}"] if options.indent_size? ["--ignore","#{options.ignore.join(',')}"] if options.ignore? ], help: { - link: "https://github.com/hhatto/autopep8" + link: "https://github.com/hhatto/autopep8" }) diff --git a/src/beautifiers/beautifier.coffee b/src/beautifiers/beautifier.coffee index d9bfaaf..26b797f 100644 --- a/src/beautifiers/beautifier.coffee +++ b/src/beautifiers/beautifier.coffee @@ -21,27 +21,27 @@ module.exports = class Beautifier ### Supported Options - + Enable options for supported languages. - : - :: - :: - :: - :: - + ### options: {} ### Supported languages by this Beautifier - + Extracted from the keys of the `options` field. ### languages: null ### Beautify text - + Override this method in subclasses ### beautify: null @@ -61,9 +61,9 @@ module.exports = class Beautifier temp.open(name, (err, info) => @debug('tempFile', name, err, info) return reject(err) if err - fs.write(info.fd, contents, (err) => + fs.write(info.fd, contents, (err) -> return reject(err) if err - fs.close(info.fd, (err) => + fs.close(info.fd, (err) -> return reject(err) if err resolve(info.path) ) @@ -88,7 +88,7 @@ module.exports = class Beautifier ### Get Shell Environment variables - + Special thank you to @ioquatix See https://github.com/ioquatix/script-runner/blob/v1.5.0/lib/script-runner.coffee#L45-L63 ### @@ -140,7 +140,7 @@ module.exports = class Beautifier ### Like the unix which utility. - + Finds the first instance of a specified executable in the PATH environment variable. Does not cache the results, so hash -r is not needed when the PATH changes. @@ -161,7 +161,7 @@ module.exports = class Beautifier ### Add help to error.description - + Note: error.description is not officially used in JavaScript, however it is used internally for Atom Beautify when displaying errors. ### diff --git a/src/beautifiers/gofmt.coffee b/src/beautifiers/gofmt.coffee index b74240f..a2aeef5 100644 --- a/src/beautifiers/gofmt.coffee +++ b/src/beautifiers/gofmt.coffee @@ -5,7 +5,7 @@ Requires http://golang.org/cmd/gofmt/ "use strict" Beautifier = require('./beautifier') -module.exports = class gofmt extends Beautifier +module.exports = class Gofmt extends Beautifier name: "gofmt" options: { diff --git a/src/beautifiers/index.coffee b/src/beautifiers/index.coffee index 49e02b5..5d1219a 100644 --- a/src/beautifiers/index.coffee +++ b/src/beautifiers/index.coffee @@ -29,7 +29,7 @@ Register all supported beautifiers module.exports = class Beautifiers extends EventEmitter ### List of beautifier names - + To register a beautifier add its name here ### beautifierNames : [ @@ -55,14 +55,14 @@ module.exports = class Beautifiers extends EventEmitter ### List of loaded beautifiers - + Autogenerated in `constructor` from `beautifierNames` ### beautifiers : null ### All beautifier options - + Autogenerated in `constructor` ### options : null @@ -527,12 +527,12 @@ module.exports = class Beautifiers extends EventEmitter Searches for a file with a specified name starting with 'dir' and going all the way up either until it finds the file or hits the root. - + @param {string} name filename to search for (e.g. .jshintrc) @param {string} dir directory to start search from (default: current working directory) @param {boolean} upwards should recurse upwards on failure? (default: true) - + @returns {string} normalized filename ### findFile : (name, dir, upwards = true) -> @@ -557,11 +557,11 @@ module.exports = class Beautifiers extends EventEmitter Tries to find a configuration file in either project directory or in the home directory. Configuration files are named '.jsbeautifyrc'. - + @param {string} config name of the configuration file @param {string} file path to the file to be linted @param {boolean} upwards should recurse upwards on failure? (default: true) - + @returns {string} a path to the config file ### findConfig : (config, file, upwards = true) -> @@ -673,7 +673,7 @@ module.exports = class Beautifiers extends EventEmitter # http://editorconfig.org/ editorconfig ?= require('editorconfig') editorConfigOptions = editorconfig.parse(editedFilePath) - .then((editorConfigOptions) => + .then((editorConfigOptions) -> logger.verbose('editorConfigOptions', editorConfigOptions) @@ -788,9 +788,9 @@ module.exports = class Beautifiers extends EventEmitter # where `selection` could be `html`, `js`, 'css', etc for selection in selections # Merge current options on top of fallback options - logger.verbose('options', selection, currOptions[selection]); + logger.verbose('options', selection, currOptions[selection]) _.merge collectedConfig, currOptions[selection] - logger.verbose('options', selection, collectedConfig); + logger.verbose('options', selection, collectedConfig) extend result, collectedConfig , {}) diff --git a/src/beautifiers/perltidy.coffee b/src/beautifiers/perltidy.coffee index 5821d38..77f7a01 100644 --- a/src/beautifiers/perltidy.coffee +++ b/src/beautifiers/perltidy.coffee @@ -26,5 +26,5 @@ module.exports = class PerlTidy extends Beautifier "--profile=#{options.perltidy_profile}" if options.perltidy_profile? @tempFile("input", text) ], help: { - link: "http://perltidy.sourceforge.net/" + link: "http://perltidy.sourceforge.net/" }) diff --git a/src/beautifiers/ruby-beautify.coffee b/src/beautifiers/ruby-beautify.coffee index be27af6..c65ec11 100644 --- a/src/beautifiers/ruby-beautify.coffee +++ b/src/beautifiers/ruby-beautify.coffee @@ -20,5 +20,5 @@ module.exports = class RubyBeautify extends Beautifier "--indent_count", options.indent_count @tempFile("input", text) ], help: { - link: "https://github.com/erniebrodeur/ruby-beautify" + link: "https://github.com/erniebrodeur/ruby-beautify" }) diff --git a/src/beautifiers/rustfmt.coffee b/src/beautifiers/rustfmt.coffee index 273b2e1..a393e69 100644 --- a/src/beautifiers/rustfmt.coffee +++ b/src/beautifiers/rustfmt.coffee @@ -5,7 +5,7 @@ Requires https://github.com/nrc/rustfmt "use strict" Beautifier = require('./beautifier') -module.exports = class rustfmt extends Beautifier +module.exports = class Rustfmt extends Beautifier name: "rustfmt" @@ -18,9 +18,9 @@ module.exports = class rustfmt extends Beautifier @run(program, [ tmpFile = @tempFile("tmp", text) ], help: { - link: "https://github.com/nrc/rustfmt" - program: "rustfmt" - pathOption: "Rust - Rustfmt Path" + link: "https://github.com/nrc/rustfmt" + program: "rustfmt" + pathOption: "Rust - Rustfmt Path" }) .then(=> @readFile(tmpFile) diff --git a/src/beautifiers/sqlformat.coffee b/src/beautifiers/sqlformat.coffee index e7a3905..3b643a3 100644 --- a/src/beautifiers/sqlformat.coffee +++ b/src/beautifiers/sqlformat.coffee @@ -5,7 +5,7 @@ Requires https://github.com/andialbrecht/sqlparse "use strict" Beautifier = require('./beautifier') -module.exports = class sqlformat extends Beautifier +module.exports = class Sqlformat extends Beautifier name: "sqlformat" options: { @@ -20,5 +20,5 @@ module.exports = class sqlformat extends Beautifier "--keywords=#{options.keywords}" if options.keywords? "--identifiers=#{options.identifiers}" if options.identifiers? ], help: { - link: "https://github.com/andialbrecht/sqlparse" + link: "https://github.com/andialbrecht/sqlparse" }) diff --git a/src/beautifiers/uncrustify/index.coffee b/src/beautifiers/uncrustify/index.coffee index 3f359da..ddc6339 100644 --- a/src/beautifiers/uncrustify/index.coffee +++ b/src/beautifiers/uncrustify/index.coffee @@ -23,7 +23,7 @@ module.exports = class Uncrustify extends Beautifier beautify: (text, language, options) -> # console.log('uncrustify.beautify', language, options) - return new @Promise((resolve, reject) => + return new @Promise((resolve, reject) -> configPath = options.configPath unless configPath # No custom config path @@ -76,7 +76,7 @@ module.exports = class Uncrustify extends Beautifier "-l" lang ], help: { - link: "http://sourceforge.net/projects/uncrustify/" + link: "http://sourceforge.net/projects/uncrustify/" }) .then(=> @readFile(outputFile) diff --git a/src/beautify.coffee b/src/beautify.coffee index 26165f2..eeb69d6 100644 --- a/src/beautify.coffee +++ b/src/beautify.coffee @@ -27,417 +27,413 @@ $ = null # return data; # } getCursors = (editor) -> - cursors = editor.getCursors() - posArray = [] - for cursor in cursors - bufferPosition = cursor.getBufferPosition() - posArray.push [ - bufferPosition.row - bufferPosition.column - ] - posArray + cursors = editor.getCursors() + posArray = [] + for cursor in cursors + bufferPosition = cursor.getBufferPosition() + posArray.push [ + bufferPosition.row + bufferPosition.column + ] + posArray setCursors = (editor, posArray) -> - # console.log "setCursors: - for bufferPosition, i in posArray - if i is 0 - editor.setCursorBufferPosition bufferPosition - continue - editor.addCursorAtBufferPosition bufferPosition - return + # console.log "setCursors: + for bufferPosition, i in posArray + if i is 0 + editor.setCursorBufferPosition bufferPosition + continue + editor.addCursorAtBufferPosition bufferPosition + return # Show beautification progress/loading view beautifier.on('beautify::start', -> - LoadingView ?= require "./views/loading-view" - loadingView ?= new LoadingView() - loadingView.show() + LoadingView ?= require "./views/loading-view" + loadingView ?= new LoadingView() + loadingView.show() ) beautifier.on('beautify::end', -> - loadingView?.hide() + loadingView?.hide() ) # Show error -showError = (error) => - if not atom.config.get("atom-beautify.muteAllErrors") - - # console.log(e) - stack = error.stack - detail = error.description or error.message - atom.notifications?.addError(error.message, { - stack, detail, dismissable : true}) +showError = (error) -> + if not atom.config.get("atom-beautify.muteAllErrors") + # console.log(e) + stack = error.stack + detail = error.description or error.message + atom.notifications?.addError(error.message, { + stack, detail, dismissable : true}) beautify = ({onSave}) -> - # Deprecation warning for beautify on save - if atom.config.get("atom-beautify.beautifyOnSave") is true - detail = """See issue https://github.com/Glavin001/atom-beautify/issues/308 + # Deprecation warning for beautify on save + if atom.config.get("atom-beautify.beautifyOnSave") is true + detail = """See issue https://github.com/Glavin001/atom-beautify/issues/308 - To stop seeing this message: - - Uncheck (disable) the deprecated \"Beautify On Save\" option + To stop seeing this message: + - Uncheck (disable) the deprecated \"Beautify On Save\" option - To enable Beautify on Save for a particular language: - - Go to Atom Beautify's package settings - - Find option for \"Language Config - - Beautify On Save\" - - Check (enable) Beautify On Save option for that particular language + To enable Beautify on Save for a particular language: + - Go to Atom Beautify's package settings + - Find option for \"Language Config - - Beautify On Save\" + - Check (enable) Beautify On Save option for that particular language - """ + """ - atom?.notifications.addWarning("The option \"atom-beautify.beautifyOnSave\" has been deprecated", {detail, dismissable : true}) + atom?.notifications.addWarning("The option \"atom-beautify.beautifyOnSave\" has been deprecated", {detail, dismissable : true}) - # Continue beautifying - path ?= require("path") - forceEntireFile = onSave and atom.config.get("atom-beautify.beautifyEntireFileOnSave") + # Continue beautifying + path ?= require("path") + forceEntireFile = onSave and atom.config.get("atom-beautify.beautifyEntireFileOnSave") - # Get the path to the config file - # All of the options - # Listed in order from default (base) to the one with the highest priority - # Left = Default, Right = Will override the left. - # Atom Editor - # - # User's Home path - # Project path - # Asynchronously and callback-style - beautifyCompleted = (text)=> + # Get the path to the config file + # All of the options + # Listed in order from default (base) to the one with the highest priority + # Left = Default, Right = Will override the left. + # Atom Editor + # + # User's Home path + # Project path + # Asynchronously and callback-style + beautifyCompleted = (text) -> - # console.log 'beautifyCompleted' - if not text? + if not text? + # Do nothing, is undefined + # console.log 'beautifyCompleted' + else if text instanceof Error + showError(text) + else if typeof text is "string" + if oldText isnt text + # console.log "Replacing current editor's text with new text" + posArray = getCursors(editor) - # Do nothing, is undefined - else if text instanceof Error - showError(text) - else if typeof text is "string" - if oldText isnt text + # console.log "posArray: + origScrollTop = editor.getScrollTop() - # console.log "Replacing current editor's text with new text" - posArray = getCursors(editor) + # console.log "origScrollTop: + if not forceEntireFile and isSelection + selectedBufferRange = editor.getSelectedBufferRange() - - # console.log "posArray: - origScrollTop = editor.getScrollTop() - - - # console.log "origScrollTop: - if not forceEntireFile and isSelection - selectedBufferRange = editor.getSelectedBufferRange() - - - # console.log "selectedBufferRange: - editor.setTextInBufferRange selectedBufferRange, text - else - - # console.log "setText" - editor.setText text - - # console.log "setCursors" - setCursors editor, posArray - - - # console.log "Done setCursors" - # Let the scrollTop setting run after all the save related stuff is run, - # otherwise setScrollTop is not working, probably because the cursor - # addition happens asynchronously - setTimeout ( -> - - # console.log "setScrollTop" - editor.setScrollTop origScrollTop - return - ), 0 + # console.log "selectedBufferRange: + editor.setTextInBufferRange selectedBufferRange, text else - showError( new Error("Unsupported beautification result '#{text}'.")) - # else - # console.log "Already Beautiful!" - return + # console.log "setText" + editor.setText text - # console.log 'Beautify time!' - # - # Get current editor - editor = atom.workspace.getActiveTextEditor() + # console.log "setCursors" + setCursors editor, posArray + # console.log "Done setCursors" + # Let the scrollTop setting run after all the save related stuff is run, + # otherwise setScrollTop is not working, probably because the cursor + # addition happens asynchronously + setTimeout ( -> - # Check if there is an active editor - if not editor? - return showError( new Error("Active Editor not found. " - "Please select a Text Editor first to beautify.")) - isSelection = !!editor.getSelectedText() - - - # Get editor path and configurations for paths - editedFilePath = editor.getPath() - - - # Get all options - allOptions = beautifier.getOptionsForPath(editedFilePath, editor) - - - # Get current editor's text - text = undefined - if not forceEntireFile and isSelection - text = editor.getSelectedText() + # console.log "setScrollTop" + editor.setScrollTop origScrollTop + return + ), 0 else - text = editor.getText() - oldText = text + showError( new Error("Unsupported beautification result '#{text}'.")) - - # Get Grammar - grammarName = editor.getGrammar().name - - - # Finally, beautify! - try - beautifier.beautify(text, allOptions, grammarName, editedFilePath, onSave : onSave) - .then(beautifyCompleted) - .catch(beautifyCompleted) - catch e - showError(e) + # else + # console.log "Already Beautiful!" return + + # console.log 'Beautify time!' + # + # Get current editor + editor = atom.workspace.getActiveTextEditor() + + + # Check if there is an active editor + if not editor? + return showError( new Error("Active Editor not found. " + "Please select a Text Editor first to beautify.")) + isSelection = !!editor.getSelectedText() + + + # Get editor path and configurations for paths + editedFilePath = editor.getPath() + + + # Get all options + allOptions = beautifier.getOptionsForPath(editedFilePath, editor) + + + # Get current editor's text + text = undefined + if not forceEntireFile and isSelection + text = editor.getSelectedText() + else + text = editor.getText() + oldText = text + + + # Get Grammar + grammarName = editor.getGrammar().name + + + # Finally, beautify! + try + beautifier.beautify(text, allOptions, grammarName, editedFilePath, onSave : onSave) + .then(beautifyCompleted) + .catch(beautifyCompleted) + catch e + showError(e) + return + beautifyFilePath = (filePath, callback) -> - # Show in progress indicate on file's tree-view entry - $ ?= require("atom-space-pen-views").$ + # Show in progress indicate on file's tree-view entry + $ ?= require("atom-space-pen-views").$ + $el = $(".icon-file-text[data-path=\"#{filePath}\"]") + $el.addClass('beautifying') + + # Cleanup and return callback function + cb = (err, result) -> $el = $(".icon-file-text[data-path=\"#{filePath}\"]") - $el.addClass('beautifying') + $el.removeClass('beautifying') + return callback(err, result) - # Cleanup and return callback function - cb = (err, result) -> - $el = $(".icon-file-text[data-path=\"#{filePath}\"]") - $el.removeClass('beautifying') - return callback(err, result) + # Get contents of file + fs ?= require "fs" + fs.readFile(filePath, (err, data) -> + return cb(err) if err + input = data?.toString() + grammar = atom.grammars.selectGrammar(filePath, input) + grammarName = grammar.name - # Get contents of file - fs ?= require "fs" - fs.readFile(filePath, (err, data) -> - return cb(err) if err - input = data?.toString() - grammar = atom.grammars.selectGrammar(filePath, input) - grammarName = grammar.name + # Get the options + allOptions = beautifier.getOptionsForPath(filePath) - # Get the options - allOptions = beautifier.getOptionsForPath(filePath) - - # Beautify File - completionFun = (output) -> - if output instanceof Error - return cb(output, null ) # output == Error - else if typeof output is "string" - # do not allow empty string - return cb(null, output) if output is '' - # save to file - fs.writeFile(filePath, output, (err) -> - return cb(err) if err - return cb( null , output) - ) - else - return cb( new Error("Unknown beautification result #{output}."), output) - try - beautifier.beautify(input, allOptions, grammarName, filePath) - .then(completionFun) - .catch(completionFun) - catch e - return cb(e) + # Beautify File + completionFun = (output) -> + if output instanceof Error + return cb(output, null ) # output == Error + else if typeof output is "string" + # do not allow empty string + return cb(null, output) if output is '' + # save to file + fs.writeFile(filePath, output, (err) -> + return cb(err) if err + return cb( null , output) ) -beautifyFile = ({target}) -> - filePath = target.dataset.path - return unless filePath - beautifyFilePath(filePath, (err, result) -> - return showError(err) if err - # console.log("Beautify File + else + return cb( new Error("Unknown beautification result #{output}."), output) + try + beautifier.beautify(input, allOptions, grammarName, filePath) + .then(completionFun) + .catch(completionFun) + catch e + return cb(e) ) - return -beautifyDirectory = ({target}) -> - dirPath = target.dataset.path - return unless dirPath - return if atom?.confirm( - message: "This will beautify all of the files found \ +beautifyFile = ({target}) -> + filePath = target.dataset.path + return unless filePath + beautifyFilePath(filePath, (err, result) -> + return showError(err) if err + # console.log("Beautify File + ) + return + +beautifyDirectory = ({target}) -> + dirPath = target.dataset.path + return unless dirPath + + return if atom?.confirm( + message: "This will beautify all of the files found \ recursively in this directory, '#{dirPath}'. \ Do you want to continue?", - buttons: ['Yes, continue!','No, cancel!']) isnt 0 + buttons: ['Yes, continue!','No, cancel!']) isnt 0 - # Show in progress indicate on directory's tree-view entry - $ ?= require("atom-space-pen-views").$ - $el = $(".icon-file-directory[data-path=\"#{dirPath}\"]") - $el.addClass('beautifying') + # Show in progress indicate on directory's tree-view entry + $ ?= require("atom-space-pen-views").$ + $el = $(".icon-file-directory[data-path=\"#{dirPath}\"]") + $el.addClass('beautifying') - # Process Directory - dir ?= require "node-dir" - async ?= require "async" - dir.files(dirPath, (err, files) -> - return showError(err) if err + # Process Directory + dir ?= require "node-dir" + async ?= require "async" + dir.files(dirPath, (err, files) -> + return showError(err) if err - async.each(files, (filePath, callback) -> - # Ignore errors - beautifyFilePath(filePath, -> callback()) - , (err) -> - $el = $(".icon-file-directory[data-path=\"#{dirPath}\"]") - $el.removeClass('beautifying') - # console.log('Completed beautifying directory!', dirPath) - ) + async.each(files, (filePath, callback) -> + # Ignore errors + beautifyFilePath(filePath, -> callback()) + , (err) -> + $el = $(".icon-file-directory[data-path=\"#{dirPath}\"]") + $el.removeClass('beautifying') + # console.log('Completed beautifying directory!', dirPath) ) - return + ) + return + debug = () -> - # Get current editor - editor = atom.workspace.getActiveTextEditor() + # Get current editor + editor = atom.workspace.getActiveTextEditor() + + # Check if there is an active editor + if not editor? + return confirm("Active Editor not found.\n" + + "Please select a Text Editor first to beautify.") + return unless confirm('Are you ready to debug Atom Beautify?\n\n' + + 'Warning: This will change your current clipboard contents.') + debugInfo = "" + addInfo = (key, val) -> + debugInfo += "**#{key}**: #{val}\n\n" + addHeader = (level, title) -> + debugInfo += "#{Array(level+1).join('#')} #{title}\n\n" + addHeader(1, "Atom Beautify - Debugging information") + debugInfo += "The following debugging information was " + + "generated by `Atom Beautify` on `#{new Date()}`." + + "\n\n---\n\n" + + # Platform + addInfo('Platform', process.platform) + addHeader(2, "Versions") - # Check if there is an active editor - if not editor? - return confirm("Active Editor not found.\n" + - "Please select a Text Editor first to beautify.") - return unless confirm('Are you ready to debug Atom Beautify?\n\n' + - 'Warning: This will change your current clipboard contents.') - debugInfo = "" - addInfo = (key, val) -> - debugInfo += "**#{key}**: #{val}\n\n" - addHeader = (level, title) -> - debugInfo += "#{Array(level+1).join('#')} #{title}\n\n" - addHeader(1, "Atom Beautify - Debugging information") - debugInfo += "The following debugging information was " + - "generated by `Atom Beautify` on `#{new Date()}`." + - "\n\n---\n\n" - - # Platform - addInfo('Platform', process.platform) - addHeader(2, "Versions") + # Atom Version + addInfo('Atom Version', atom.appVersion) - # Atom Version - addInfo('Atom Version', atom.appVersion) + # Atom Beautify Version + addInfo('Atom Beautify Version', pkg.version) + addHeader(2, "Original file to be beautified") - # Atom Beautify Version - addInfo('Atom Beautify Version', pkg.version) - addHeader(2, "Original file to be beautified") + # Original file + # + # Get editor path and configurations for paths + filePath = editor.getPath() - # Original file - # - # Get editor path and configurations for paths - filePath = editor.getPath() + # Path + addInfo('Original File Path', "`#{filePath}`") - # Path - addInfo('Original File Path', "`#{filePath}`") + # Get Grammar + grammarName = editor.getGrammar().name - # Get Grammar - grammarName = editor.getGrammar().name + # Grammar + addInfo('Original File Grammar', grammarName) - # Grammar - addInfo('Original File Grammar', grammarName) + # Get current editor's text + text = editor.getText() - # Get current editor's text - text = editor.getText() + # Contents + codeBlockSyntax = grammarName.toLowerCase().split(' ')[0] + addInfo('Original File Contents', "\n```#{codeBlockSyntax}\n#{text}\n```") + addHeader(2, "Beautification options") - # Contents - codeBlockSyntax = grammarName.toLowerCase().split(' ')[0] - addInfo('Original File Contents', "\n```#{codeBlockSyntax}\n#{text}\n```") - addHeader(2, "Beautification options") + # Beautification Options + # Get all options + allOptions = beautifier.getOptionsForPath(filePath, editor) + # Resolve options with promises + Promise.all(allOptions) + .then((allOptions) -> + # Extract options + [ + editorOptions + configOptions + homeOptions + editorConfigOptions + ] = allOptions + projectOptions = allOptions[4..] - - # Beautification Options - # Get all options - allOptions = beautifier.getOptionsForPath(filePath, editor) - # Resolve options with promises - Promise.all(allOptions) - .then((allOptions) => - # Extract options - [ - editorOptions - configOptions - homeOptions - editorConfigOptions - ] = allOptions - projectOptions = allOptions[4..] - - # Show options - addInfo('Editor Options', "\n" + - "Options from Atom Editor settings\n" + - "```json\n#{JSON.stringify(editorOptions, undefined, 4)}\n```") - addInfo('Config Options', "\n" + - "Options from Atom Beautify package settings\n" + - "```json\n#{JSON.stringify(configOptions, undefined, 4)}\n```") - addInfo('Home Options', "\n" + - "Options from `#{path.resolve(beautifier.getUserHome(), '.jsbeautifyrc')}`\n" + - "```json\n#{JSON.stringify(homeOptions, undefined, 4)}\n```") - addInfo('EditorConfig Options', "\n" + - "Options from [EditorConfig](http://editorconfig.org/) file\n" + - "```json\n#{JSON.stringify(editorConfigOptions, undefined, 4)}\n```") - addInfo('Project Options', "\n" + - "Options from `.jsbeautifyrc` files starting from directory `#{path.dirname(filePath)}` and going up to root\n" + - "```json\n#{JSON.stringify(projectOptions, undefined, 4)}\n```") - logs = "" - subscription = logger.onLogging((msg) -> - - # console.log('logging', msg) - logs += msg - ) - cb = (result) -> - subscription.dispose() - addHeader(2, "Results") - - # Logs - addInfo('Beautified File Contents', "\n```#{codeBlockSyntax}\n#{result}\n```") - addInfo('Logs', "\n```\n#{logs}\n```") - - # Save to clipboard - atom.clipboard.write(debugInfo) - confirm('Atom Beautify debugging information is now in your clipboard.\n' + - 'You can now paste this into an Issue you are reporting here\n' + - 'https://github.com/Glavin001/atom-beautify/issues/ \n\n' + - 'Warning: Be sure to look over the debug info before you send it, - to ensure you are not sharing undesirable private information.' - ) - try - beautifier.beautify(text, allOptions, grammarName, filePath) - .then(cb) - .catch(cb) - catch e - return cb(e) + # Show options + addInfo('Editor Options', "\n" + + "Options from Atom Editor settings\n" + + "```json\n#{JSON.stringify(editorOptions, undefined, 4)}\n```") + addInfo('Config Options', "\n" + + "Options from Atom Beautify package settings\n" + + "```json\n#{JSON.stringify(configOptions, undefined, 4)}\n```") + addInfo('Home Options', "\n" + + "Options from `#{path.resolve(beautifier.getUserHome(), '.jsbeautifyrc')}`\n" + + "```json\n#{JSON.stringify(homeOptions, undefined, 4)}\n```") + addInfo('EditorConfig Options', "\n" + + "Options from [EditorConfig](http://editorconfig.org/) file\n" + + "```json\n#{JSON.stringify(editorConfigOptions, undefined, 4)}\n```") + addInfo('Project Options', "\n" + + "Options from `.jsbeautifyrc` files starting from directory `#{path.dirname(filePath)}` and going up to root\n" + + "```json\n#{JSON.stringify(projectOptions, undefined, 4)}\n```") + logs = "" + subscription = logger.onLogging((msg) -> + # console.log('logging', msg) + logs += msg ) + cb = (result) -> + subscription.dispose() + addHeader(2, "Results") -handleSaveEvent = => - atom.workspace.observeTextEditors (editor) => - buffer = editor.getBuffer() - disposable = buffer.onDidSave(({path : filePath}) => - path ?= require('path') - # Get Grammar - grammar = editor.getGrammar().name - # Get file extension - fileExtension = path.extname(filePath) - # Remove prefix "." (period) in fileExtension - fileExtension = fileExtension.substr(1) - # Get language - languages = beautifier.languages.getLanguages({grammar, extension: fileExtension}) - if languages.length < 1 - return - # TODO: select appropriate language - language = languages[0] - # Get language config - key = "atom-beautify.language_#{language.namespace}_beautify_on_save" - beautifyOnSave = atom.config.get(key) - logger.verbose('save editor positions', key, beautifyOnSave) - if beautifyOnSave - posArray = getCursors(editor) - origScrollTop = editor.getScrollTop() - beautifyFilePath(filePath, -> - buffer.reload() - logger.verbose('restore editor positions', posArray,origScrollTop) - setCursors(editor, posArray) - editor.setScrollTop(origScrollTop) - ) - ) - plugin.subscribe disposable + # Logs + addInfo('Beautified File Contents', "\n```#{codeBlockSyntax}\n#{result}\n```") + addInfo('Logs', "\n```\n#{logs}\n```") + + # Save to clipboard + atom.clipboard.write(debugInfo) + confirm('Atom Beautify debugging information is now in your clipboard.\n' + + 'You can now paste this into an Issue you are reporting here\n' + + 'https://github.com/Glavin001/atom-beautify/issues/ \n\n' + + 'Warning: Be sure to look over the debug info before you send it, + to ensure you are not sharing undesirable private information.' + ) + try + beautifier.beautify(text, allOptions, grammarName, filePath) + .then(cb) + .catch(cb) + catch e + return cb(e) + ) + +handleSaveEvent = -> + atom.workspace.observeTextEditors (editor) -> + buffer = editor.getBuffer() + disposable = buffer.onDidSave(({path : filePath}) -> + path ?= require('path') + # Get Grammar + grammar = editor.getGrammar().name + # Get file extension + fileExtension = path.extname(filePath) + # Remove prefix "." (period) in fileExtension + fileExtension = fileExtension.substr(1) + # Get language + languages = beautifier.languages.getLanguages({grammar, extension: fileExtension}) + if languages.length < 1 + return + # TODO: select appropriate language + language = languages[0] + # Get language config + key = "atom-beautify.language_#{language.namespace}_beautify_on_save" + beautifyOnSave = atom.config.get(key) + logger.verbose('save editor positions', key, beautifyOnSave) + if beautifyOnSave + posArray = getCursors(editor) + origScrollTop = editor.getScrollTop() + beautifyFilePath(filePath, -> + buffer.reload() + logger.verbose('restore editor positions', posArray,origScrollTop) + setCursors(editor, posArray) + editor.setScrollTop(origScrollTop) + ) + ) + plugin.subscribe disposable {Subscriber} = require path.join(atom.packages.resourcePath, 'node_modules', 'emissary') Subscriber.extend plugin plugin.config = _.merge(require('./config.coffee'), defaultLanguageOptions) plugin.activate = -> - handleSaveEvent() - plugin.subscribe atom.config.observe("atom-beautify.beautifyOnSave", handleSaveEvent) - atom.commands.add "atom-workspace", "atom-beautify:beautify-editor", beautify - atom.commands.add "atom-workspace", "atom-beautify:help-debug-editor", debug - atom.commands.add ".tree-view .file .name", "atom-beautify:beautify-file", beautifyFile - atom.commands.add ".tree-view .directory .name", "atom-beautify:beautify-directory", beautifyDirectory + handleSaveEvent() + plugin.subscribe atom.config.observe("atom-beautify.beautifyOnSave", handleSaveEvent) + atom.commands.add "atom-workspace", "atom-beautify:beautify-editor", beautify + atom.commands.add "atom-workspace", "atom-beautify:help-debug-editor", debug + atom.commands.add ".tree-view .file .name", "atom-beautify:beautify-file", beautifyFile + atom.commands.add ".tree-view .directory .name", "atom-beautify:beautify-directory", beautifyDirectory + diff --git a/src/config.coffee b/src/config.coffee index 85bb0cf..2c3e18a 100644 --- a/src/config.coffee +++ b/src/config.coffee @@ -1,31 +1,31 @@ module.exports = { - analytics : - type : 'boolean' - default : true - description : "There is [Segment.io](https://segment.io/) which forwards data to [Google + analytics : + type : 'boolean' + default : true + description : "There is [Segment.io](https://segment.io/) which forwards data to [Google Analytics](http://www.google.com/analytics/) to track what languages are being used the most, as well as other stats. Everything is anonymized and no personal information, such as source code, is sent. See https://github.com/Glavin001/atom-beautify/issues/47 for more details." - _analyticsUserId : - type : 'string' - default : "" - description : "Unique identifier for this user for tracking usage analytics" - _loggerLevel : - type : 'string' - default : 'warn' - description : 'Set the level for the logger' - enum : ['verbose', 'debug', 'info', 'warn', 'error'] - beautifyEntireFileOnSave : - type : 'boolean' - default : true - description : "When beautifying on save, use the entire file, even if there is selected text in the editor" - muteUnsupportedLanguageErrors : - type : 'boolean' - default : false - description : "Do not show \"Unsupported Language\" errors when they occur" - muteAllErrors : - type : 'boolean' - default : false - description : "Do not show any/all errors when they occur" -} \ No newline at end of file + _analyticsUserId : + type : 'string' + default : "" + description : "Unique identifier for this user for tracking usage analytics" + _loggerLevel : + type : 'string' + default : 'warn' + description : 'Set the level for the logger' + enum : ['verbose', 'debug', 'info', 'warn', 'error'] + beautifyEntireFileOnSave : + type : 'boolean' + default : true + description : "When beautifying on save, use the entire file, even if there is selected text in the editor" + muteUnsupportedLanguageErrors : + type : 'boolean' + default : false + description : "Do not show \"Unsupported Language\" errors when they occur" + muteAllErrors : + type : 'boolean' + default : false + description : "Do not show any/all errors when they occur" +} diff --git a/src/languages/index.coffee b/src/languages/index.coffee index 86e8595..d3ffb0c 100644 --- a/src/languages/index.coffee +++ b/src/languages/index.coffee @@ -76,10 +76,10 @@ module.exports = class Languages Get language for grammar and extension ### getLanguages: ({name, namespace, grammar, extension}) -> - # console.log('getLanguages', name, namespace, grammar, extension, @languages) - _.union( - _.filter(@languages, (language) -> _.isEqual(language.name, name)) - _.filter(@languages, (language) -> _.isEqual(language.namespace, namespace)) - _.filter(@languages, (language) -> _.contains(language.grammars, grammar)) - _.filter(@languages, (language) -> _.contains(language.extensions, extension)) - ) + # console.log('getLanguages', name, namespace, grammar, extension, @languages) + _.union( + _.filter(@languages, (language) -> _.isEqual(language.name, name)) + _.filter(@languages, (language) -> _.isEqual(language.namespace, namespace)) + _.filter(@languages, (language) -> _.contains(language.grammars, grammar)) + _.filter(@languages, (language) -> _.contains(language.extensions, extension)) + ) diff --git a/src/logger.coffee b/src/logger.coffee index 26f868e..b4a3a35 100644 --- a/src/logger.coffee +++ b/src/logger.coffee @@ -2,73 +2,73 @@ Global Logger ### module.exports = do -> - # Create Event Emitter - {Emitter} = require 'event-kit' - emitter = new Emitter() - # Create Transport with Writable Stream - # See http://stackoverflow.com/a/21583831/2578205 - winston = require('winston') - stream = require('stream') - writable = new stream.Writable() - writable._write = (chunk, encoding, next) -> - msg = chunk.toString() - # console.log(msg) - emitter.emit('logging', msg) - next() + # Create Event Emitter + {Emitter} = require 'event-kit' + emitter = new Emitter() + # Create Transport with Writable Stream + # See http://stackoverflow.com/a/21583831/2578205 + winston = require('winston') + stream = require('stream') + writable = new stream.Writable() + writable._write = (chunk, encoding, next) -> + msg = chunk.toString() + # console.log(msg) + emitter.emit('logging', msg) + next() - levels = { - silly: 0, - input: 1, - verbose: 2, - prompt: 3, - debug: 4, - info: 5, - data: 6, - help: 7, - warn: 8, - error: 9 - } + levels = { + silly: 0, + input: 1, + verbose: 2, + prompt: 3, + debug: 4, + info: 5, + data: 6, + help: 7, + warn: 8, + error: 9 + } - return (label) -> - transport = new (winston.transports.File)({ - label: label - level: 'debug' - timestamp: true - # prettyPrint: true - # colorize: true - stream: writable - json: false - }) - # Initialize logger - wlogger = new (winston.Logger)({ - # Configure transports - transports: [ - transport - ] - }) - wlogger.on('logging', (transport, level, msg, meta)-> - loggerLevel = atom?.config.get(\ - 'atom-beautify._loggerLevel') ? "warn" - # console.log('logging', loggerLevel, arguments) - loggerLevelNum = levels[loggerLevel] - levelNum = levels[level] - if loggerLevelNum <= levelNum - path = require('path') - label = "#{path.dirname(transport.label)\ + return (label) -> + transport = new (winston.transports.File)({ + label: label + level: 'debug' + timestamp: true + # prettyPrint: true + # colorize: true + stream: writable + json: false + }) + # Initialize logger + wlogger = new (winston.Logger)({ + # Configure transports + transports: [ + transport + ] + }) + wlogger.on('logging', (transport, level, msg, meta)-> + loggerLevel = atom?.config.get(\ + 'atom-beautify._loggerLevel') ? "warn" + # console.log('logging', loggerLevel, arguments) + loggerLevelNum = levels[loggerLevel] + levelNum = levels[level] + if loggerLevelNum <= levelNum + path = require('path') + label = "#{path.dirname(transport.label)\ .split(path.sep).reverse()[0]}\ #{path.sep}#{path.basename(transport.label)}" - console.log("#{label} [#{level}]: #{msg}", meta) - ) - # Export logger methods - loggerMethods = ['silly','debug','verbose','info','warn','error'] - logger = {} - for method in loggerMethods - logger[method] = wlogger[method] - # Add logger listener - logger.onLogging = (handler) -> - # console.log('onLogging', handler) - subscription = emitter.on('logging', handler) - # console.log('emitter', emitter.handlersByEventName, subscription) - return subscription - # Return simplified logger - return logger + console.log("#{label} [#{level}]: #{msg}", meta) + ) + # Export logger methods + loggerMethods = ['silly','debug','verbose','info','warn','error'] + logger = {} + for method in loggerMethods + logger[method] = wlogger[method] + # Add logger listener + logger.onLogging = (handler) -> + # console.log('onLogging', handler) + subscription = emitter.on('logging', handler) + # console.log('emitter', emitter.handlersByEventName, subscription) + return subscription + # Return simplified logger + return logger diff --git a/src/views/message-view.coffee b/src/views/message-view.coffee index 2879d0f..3a10184 100644 --- a/src/views/message-view.coffee +++ b/src/views/message-view.coffee @@ -59,7 +59,7 @@ class MessageView extends View destroy: -> addMessage: (message) => - @messages.push(message); + @messages.push(message) @refresh() clearMessages: =>