-
Notifications
You must be signed in to change notification settings - Fork 453
/
js-beautify.coffee
80 lines (75 loc) · 2.79 KB
/
js-beautify.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"use strict"
Beautifier = require('./beautifier')
module.exports = class JSBeautify extends Beautifier
name: "JS Beautify"
link: "https://github.com/beautify-web/js-beautify"
options: {
HTML: true
XML: true
Handlebars: true
Mustache: true
JavaScript: true
EJS: true
JSX: true
JSON: true
CSS:
indent_size: true
indent_char: true
selector_separator_newline: true
newline_between_rules: true
preserve_newlines: true
wrap_line_length: true
end_with_newline: true
}
beautify: (text, language, options) ->
@verbose("JS Beautify language #{language}")
@info("JS Beautify Options: #{JSON.stringify(options, null, 4)}")
#TODO reconsider handling of EOL once js-beautify adds EOL detection
#see https://github.com/beautify-web/js-beautify/issues/899
options.eol = getDefaultLineEnding() ? options.eol #fixes issue #707
return new @Promise((resolve, reject) =>
try
switch language
when "JSON", "JavaScript", "JSX"
beautifyJS = require("js-beautify")
text = beautifyJS(text, options)
resolve text
when "Handlebars", "Mustache"
# jshint ignore: start
options.indent_handlebars = true # Force jsbeautify to indent_handlebars
# jshint ignore: end
beautifyHTML = require("js-beautify").html
text = beautifyHTML(text, options)
resolve text
when "EJS", "HTML (Liquid)", "HTML", "XML", "Web Form/Control (C#)", "Web Handler (C#)"
beautifyHTML = require("js-beautify").html
text = beautifyHTML(text, options)
@debug("Beautified HTML: #{text}")
resolve text
when "CSS"
beautifyCSS = require("js-beautify").css
text = beautifyCSS(text, options)
resolve text
catch err
@error("JS Beautify error: #{err}")
reject(err)
)
# Retrieves the default line ending based upon the Atom configuration
# `line-ending-selector.defaultLineEnding`. If the Atom configuration
# indicates "OS Default", the `process.platform` is queried, returning
# CRLF for Windows systems and LF for all other systems.
# Code modified from atom/line-ending-selector
# returns: The correct line-ending character sequence based upon the Atom
# configuration, or `null` if the Atom line ending configuration was not
# recognized.
# see: https://github.com/atom/line-ending-selector/blob/master/lib/main.js
getDefaultLineEnding= ->
switch atom.config.get('line-ending-selector.defaultLineEnding')
when 'LF'
return '\n'
when 'CRLF'
return '\r\n'
when 'OS Default'
return if process.platform is 'win32' then '\r\n' else '\n'
else
return null