atom-beautify/lib/langs/cli-beautify.coffee

112 lines
3.7 KiB
CoffeeScript

###
Requires http://pear.php.net/package/PHP_Beautifier
###
"use strict"
fs = require("fs")
temp = require("temp").track()
exec = require("child_process").exec
module.exports = (getCmd, isStdout) ->
(text, options, callback) ->
# Create temp input file
temp.open "input", (err, info) ->
unless err
# Save current text to input file
fs.write info.fd, text or "", ->
fs.close info.fd, (err) ->
unless err
# Create temp output file
outputPath = temp.path()
deleteOutputFile = ->
temp.cleanup()
# Delete the output path
fs.unlink outputPath, (err) ->
# console.log "Deleting output file", err if err
return
return
# Process the command
processCmd = (cmd, optCallback) ->
if optCallback? and typeof optCallback is "function"
# console.log('Optional Callback found')
cb = callback # Save callback for later
callback = (output) -> # Wrap callback (cb) with optCallback
# console.log('Callback called!', output)
optCallback(output, cb)
if typeof cmd is "string"
config = env: process.env
isWin = /^win/.test(process.platform)
unless isWin
# We need the $PATH to be correct when executing the command.
# This should normalize the $PATH
# by calling the external files that would usually
# change the $PATH variable on user login.
$path = "[ -f ~/.bash_profile ] && source ~/.bash_profile > /dev/null 2>&1;"
$path += "[ -f ~/.bashrc ] && source ~/.bashrc > /dev/null 2>&1;"
# See http://stackoverflow.com/a/638980/2578205
# for checking if file exists in Bash
cmd = $path + cmd
# Execute and beautify!
exec cmd, config, (err, stdout, stderr) ->
# console.log(stderr);
unless err
# Beautification has completed
if isStdout
# Execute callback with resulting output text
callback stdout
deleteOutputFile()
else
# Read contents of output file
fs.readFile outputPath, "utf8", (err, newText) ->
# Execute callback with resulting output text
callback newText
deleteOutputFile()
return
else
console.error "Beautifcation Error: ", err
callback err
deleteOutputFile()
return
# Check if there's an error
else if cmd instanceof Error
return callback(cmd)
else
console.error "CLI Beautifier command not valid."
return callback(new Error("CLI Beautifier command not valid."+
" Invalid command '#{cmd}'."))
# Get the command
try
cmd = getCmd(info.path, outputPath, options, processCmd) # jshint ignore: line
catch e
return callback(e)
if typeof cmd is "string"
processCmd cmd
# Check if there's an error
else if cmd instanceof Error
return callback(cmd)
return
return
return
return