Skip to content

Commit

Permalink
Closes #78. Improve startup performance.
Browse files Browse the repository at this point in the history
@Glavin001 stats:
- Before: 226ms
- After: 60ms
  • Loading branch information
Glavin001 committed Sep 7, 2014
1 parent 528c7dc commit 9c1965d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 28 deletions.
16 changes: 12 additions & 4 deletions lib/beautify.coffee
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
# global atom

"use strict"
# Dependencies
plugin = module.exports
fs = require("fs")
path = require("path")
_ = require("lodash")
strip = require("strip-json-comments")
yaml = require("js-yaml")
beautifier = require("./language-options")
languages = beautifier.languages
defaultLanguageOptions = beautifier.defaultLanguageOptions
# Lazy loaded dependencies
fs = null
path = null
strip = null
yaml = null
#MessageView = require "./message-view"
findFileResults = {}

Expand Down Expand Up @@ -42,6 +44,7 @@ setCursors = (editor, posArray) ->
return

verifyExists = (fullPath) ->
fs ?= require("fs")
(if fs.existsSync(fullPath) then fullPath else null)

# Storage for memoized results from find file
Expand All @@ -60,6 +63,7 @@ current working directory)
@returns {string} normalized filename
###
findFile = (name, dir) ->
path ?= require("path")
dir = dir or process.cwd()
filename = path.normalize(path.join(dir, name))
return findFileResults[filename] if findFileResults[filename] isnt `undefined`
Expand All @@ -82,6 +86,7 @@ or in the home directory. Configuration files are named
@returns {string} a path to the config file
###
findConfig = (config, file) ->
path ?= require("path")
dir = path.dirname(path.resolve(file))
envs = getUserHome()
home = path.normalize(path.join(envs, config))
Expand Down Expand Up @@ -121,19 +126,22 @@ beautify = ->
configPath = findConfig(".jsbeautifyrc", startPath)
externalOptions = undefined
if configPath
fs ?= require("fs")
contents = fs.readFileSync(configPath,
encoding: "utf8"
)
unless contents
externalOptions = {}
else
try
strip ?= require("strip-json-comments")
externalOptions = JSON.parse(strip(contents))
catch e
console.log "Failed parsing config as JSON: " + configPath

# Attempt as YAML
try
yaml ?= require("js-yaml")
externalOptions = yaml.safeLoad(contents)
catch e
console.log "Failed parsing config as YAML: " + configPath
Expand Down
56 changes: 32 additions & 24 deletions lib/language-options.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
Language Support and default options.
###
"use strict"
_ = require("lodash")
extend = require("extend")

# Lazy loaded dependencies
_ = null
extend = null
# Language Beautifiers
beautifyJS = require("js-beautify")
beautifyHTML = require("js-beautify").html
beautifyCSS = require("js-beautify").css
beautifySQL = require("./langs/sql-beautify")
beautifyPHP = require("./langs/php-beautify")
beautifyPython = require("./langs/python-beautify")
beautifyRuby = require("./langs/ruby-beautify")
beautifyLESS = require("./langs/less-beautify")
beautifyCoffeeScript = require("./langs/coffeescript-beautify")
uncrustifyBeautifier = require("./langs/uncrustify/")
beautifyJS = null
beautifyHTML = null
beautifyCSS = null
beautifySQL = null
beautifyPHP = null
beautifyPython = null
beautifyRuby = null
beautifyLESS = null
beautifyCoffeeScript = null
uncrustifyBeautifier = null

# Misc
Analytics = require("analytics-node")
Expand Down Expand Up @@ -128,72 +128,85 @@ module.exports =
# Process each language
beautify: (text, grammar, allOptions, beautifyCompleted) ->
self = this

# Beautify!
unsupportedGrammar = false
options = undefined
switch grammar

# Treat JSON as JavaScript, because it will support comments.
# And Glavin001 has tested JSON beauifying with beautifyJS.
when "JSON", "JavaScript"
beautifyJS ?= require("js-beautify")
text = beautifyJS(text, self.getOptions("js", allOptions))
beautifyCompleted text
when "CoffeeScript"
beautifyCoffeeScript ?= require("./langs/coffeescript-beautify")
beautifyCoffeeScript text, self.getOptions("js", allOptions), beautifyCompleted
when "Handlebars"

# jshint ignore: start
allOptions.push indent_handlebars: true # Force jsbeautify to indent_handlebars

# jshint ignore: end
when "HTML (Liquid)", "HTML", "XML"
beautifyHTML ?= require("js-beautify").html
text = beautifyHTML(text, self.getOptions("html", allOptions))
beautifyCompleted text
when "CSS"
beautifyCSS ?= require("js-beautify").css
text = beautifyCSS(text, self.getOptions("css", allOptions))
beautifyCompleted text
when "Sass", "SCSS", "LESS"
beautifyLESS ?= require("./langs/less-beautify")
beautifyLESS text, self.getOptions("css", allOptions), beautifyCompleted
when "SQL (Rails)", "SQL"
beautifySQL ?= require("./langs/sql-beautify")
beautifySQL text, self.getOptions("sql", allOptions), beautifyCompleted
when "PHP"
beautifyPHP ?= require("./langs/php-beautify")
beautifyPHP text, self.getOptions("php", allOptions), beautifyCompleted
when "Python"
beautifyPython ?= require("./langs/python-beautify")
beautifyPython text, self.getOptions("python", allOptions), beautifyCompleted
when "Ruby"
beautifyRuby ?= require("./langs/ruby-beautify")
beautifyRuby text, self.getOptions("ruby", allOptions), beautifyCompleted
when "C"
options = self.getOptions("c", allOptions)
options.languageOverride = "C"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "C++"
options = self.getOptions("cpp", allOptions)
options.languageOverride = "CPP"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "C#"
options = self.getOptions("cs", allOptions)
options.languageOverride = "CS"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "Objective-C", "Objective-C++"
options = self.getOptions("objectivec", allOptions)
options.languageOverride = "OC+"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "D"
options = self.getOptions("d", allOptions)
options.languageOverride = "D"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "Pawn"
options = self.getOptions("pawn", allOptions)
options.languageOverride = "PAWN"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "Vala"
options = self.getOptions("vala", allOptions)
options.languageOverride = "VALA"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
when "Java"
options = self.getOptions("java", allOptions)
options.languageOverride = "JAVA"
uncrustifyBeautifier ?= require("./langs/uncrustify/")
uncrustifyBeautifier text, options, beautifyCompleted
else
unsupportedGrammar = true
Expand Down Expand Up @@ -225,36 +238,31 @@ module.exports =

getOptions: (selection, allOptions) ->
self = this

_ ?= require("lodash")
extend ?= require("extend")
# console.log(selection, allOptions);

# Reduce all options into correctly merged options.
options = _.reduce(allOptions, (result, currOptions) ->
containsNested = false
collectedConfig = {}
key = undefined

# Check to see if config file uses nested object format to split up js/css/html options
for key of currOptions
# Check if is supported language
if _.indexOf(self.languages, key) >= 0 and typeof currOptions[key] is "object" # Check if nested object (more options in value)
containsNested = true
break # Found, break out of loop, no need to continue

# console.log(containsNested, currOptions);

# Create a flat object of config options if nested format was used
unless containsNested
_.merge collectedConfig, currOptions
else

# Merge with selected options
# where `selection` could be `html`, `js`, 'css', etc
# console.log(selection, currOptions[selection]);
_.merge collectedConfig, currOptions[selection]
extend result, collectedConfig
, {})

# TODO: Clean.
# There is a bug in nopt
# See https://github.com/npm/nopt/issues/38#issuecomment-45971505
Expand Down

0 comments on commit 9c1965d

Please sign in to comment.