commit
0263976b07
|
@ -106,8 +106,9 @@ See [examples/nested-jsbeautifyrc/.jsbeautifyrc](https://github.com/donaldpipowi
|
|||
|
||||
[See all contributors on GitHub](https://github.com/donaldpipowitch/atom-beautify/graphs/contributors).
|
||||
|
||||
Please update the [CHANGELOG.md](https://github.com/donaldpipowitch/atom-beautify/blob/master/CHANGELOG.md)
|
||||
file and submit a [Pull Request on GitHub](https://help.github.com/articles/using-pull-requests).
|
||||
Please update the [CHANGELOG.md](https://github.com/donaldpipowitch/atom-beautify/blob/master/CHANGELOG.md),
|
||||
add yourself as a contributor to the [package.json](https://github.com/donaldpipowitch/atom-beautify/blob/master/package.json),
|
||||
and submit a [Pull Request on GitHub](https://help.github.com/articles/using-pull-requests).
|
||||
|
||||
## License
|
||||
|
||||
|
|
|
@ -1,31 +1,32 @@
|
|||
{
|
||||
"html": {
|
||||
"brace_style": "collapse",
|
||||
"indent_char": " ",
|
||||
"indent_scripts": "normal",
|
||||
"indent_size": 6,
|
||||
"max_preserve_newlines": 1,
|
||||
"preserve_newlines": true,
|
||||
"unformatted": ["a", "sub", "sup", "b", "i", "u"],
|
||||
"wrap_line_length": 0
|
||||
},
|
||||
"css": {
|
||||
"indent_char": " ",
|
||||
"indent_size": 4
|
||||
},
|
||||
"js": {
|
||||
"indent_size": 2,
|
||||
"indent_char": " ",
|
||||
"indent_level": 0,
|
||||
"indent_with_tabs": false,
|
||||
"preserve_newlines": true,
|
||||
"max_preserve_newlines": 2,
|
||||
"jslint_happy": true
|
||||
},
|
||||
"sql": {
|
||||
"indent_size": 4,
|
||||
"indent_char": " ",
|
||||
"indent_level": 0,
|
||||
"indent_with_tabs": false
|
||||
}
|
||||
}
|
||||
---
|
||||
html:
|
||||
brace_style: "collapse"
|
||||
indent_char: " "
|
||||
indent_scripts: "normal"
|
||||
indent_size: 6
|
||||
max_preserve_newlines: 1
|
||||
preserve_newlines: true
|
||||
unformatted:
|
||||
- "a"
|
||||
- "sub"
|
||||
- "sup"
|
||||
- "b"
|
||||
- "i"
|
||||
- "u"
|
||||
wrap_line_length: 0
|
||||
css:
|
||||
indent_char: " "
|
||||
indent_size: 4
|
||||
js:
|
||||
indent_size: 2
|
||||
indent_char: " "
|
||||
indent_level: 0
|
||||
indent_with_tabs: false
|
||||
preserve_newlines: true
|
||||
max_preserve_newlines: 2
|
||||
jslint_happy: true
|
||||
sql:
|
||||
indent_size: 4
|
||||
indent_char: " "
|
||||
indent_level: 0
|
||||
indent_with_tabs: false
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"html": {
|
||||
"brace_style": "collapse",
|
||||
"indent_char": " ",
|
||||
"indent_scripts": "normal",
|
||||
"indent_size": 6,
|
||||
"max_preserve_newlines": 1,
|
||||
"preserve_newlines": true,
|
||||
"unformatted": ["a", "sub", "sup", "b", "i", "u"],
|
||||
"wrap_line_length": 0
|
||||
},
|
||||
"css": {
|
||||
"indent_char": " ",
|
||||
"indent_size": 4
|
||||
},
|
||||
"js": {
|
||||
"indent_size": 2,
|
||||
"indent_char": " ",
|
||||
"indent_level": 0,
|
||||
"indent_with_tabs": false,
|
||||
"preserve_newlines": true,
|
||||
"max_preserve_newlines": 2,
|
||||
"jslint_happy": true
|
||||
},
|
||||
"sql": {
|
||||
"indent_size": 4,
|
||||
"indent_char": " ",
|
||||
"indent_level": 0,
|
||||
"indent_with_tabs": false
|
||||
}
|
||||
}
|
|
@ -2,14 +2,14 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test Page</title>
|
||||
<title>Test Page</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Hello</h1>
|
||||
<p>
|
||||
World!
|
||||
</p>
|
||||
<h1>Hello</h1>
|
||||
<p>
|
||||
World!
|
||||
</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
function hell() {
|
||||
console.log('world');
|
||||
console.log('world');
|
||||
}
|
||||
|
|
|
@ -7,5 +7,6 @@
|
|||
"preserve_newlines": true,
|
||||
"max_preserve_newlines": 2,
|
||||
"jslint_happy": true,
|
||||
"indent_handlebars": true
|
||||
"indent_handlebars": true,
|
||||
"object": {}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
<title>Test Page</title>
|
||||
<title>Test Page</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>Hello</h1>
|
||||
<p>
|
||||
World!
|
||||
</p>
|
||||
<h1>Hello</h1>
|
||||
<p>
|
||||
World!
|
||||
</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -11,6 +11,8 @@ var path = require('path');
|
|||
var nopt = require('nopt');
|
||||
var extend = require('extend');
|
||||
var _ = require('lodash');
|
||||
var strip = require('strip-json-comments');
|
||||
var yaml = require('js-yaml');
|
||||
|
||||
// TODO: Copied from jsbeautify, please update it from time to time
|
||||
var knownOpts = {
|
||||
|
@ -151,39 +153,119 @@ function findConfig(config, file) {
|
|||
return null;
|
||||
}
|
||||
|
||||
function beautify() {
|
||||
// Supported unique configuration keys
|
||||
// Used for detecting nested configurations in .jsbeautifyrc
|
||||
var languages = ['js', 'html', 'css', 'sql'];
|
||||
|
||||
var defaultLanguageOptions = {
|
||||
/* jshint ignore: start */
|
||||
// JavaScript
|
||||
js_indent_size: 2,
|
||||
js_indent_char: ' ',
|
||||
js_indent_level: 0,
|
||||
js_indent_with_tabs: false,
|
||||
js_preserve_newlines: true,
|
||||
js_max_preserve_newlines: 10,
|
||||
js_jslint_happy: false,
|
||||
js_brace_style: 'collapse',
|
||||
js_keep_array_indentation: false,
|
||||
js_keep_function_indentation: false,
|
||||
js_space_before_conditional: true,
|
||||
js_break_chained_methods: false,
|
||||
js_eval_code: false,
|
||||
js_unescape_strings: false,
|
||||
js_wrap_line_length: 0,
|
||||
// CSS
|
||||
css_indent_size: 2,
|
||||
css_indent_Char: ' ',
|
||||
// HTML
|
||||
html_indent_inner_html: false,
|
||||
html_indent_size: 2,
|
||||
html_indent_char: ' ',
|
||||
html_brace_style: 'collapse',
|
||||
html_indent_scripts: 'normal',
|
||||
html_wrap_line_length: 250,
|
||||
// SQL
|
||||
sql_indent_size: 2,
|
||||
sql_indent_char: ' '
|
||||
/* jshint ignore: end */
|
||||
};
|
||||
|
||||
function getConfigOptionsFromSettings(langs) {
|
||||
var config = atom.config.getSettings()['atom-beautify'];
|
||||
var options = {};
|
||||
// console.log(langs, config);
|
||||
|
||||
// Iterate over keys of the settings
|
||||
_.every(_.keys(config), function (k) {
|
||||
// Check if keys start with a language
|
||||
var p = k.split('_')[0];
|
||||
var idx = _.indexOf(langs, p);
|
||||
// console.log(k, p, idx);
|
||||
if (idx >= 0) {
|
||||
// Remove the language prefix and nest in options
|
||||
var lang = langs[idx];
|
||||
var opt = k.replace(new RegExp('^' + lang + '_'), '');
|
||||
options[lang] = options[lang] || {};
|
||||
options[lang][opt] = config[k];
|
||||
// console.log(lang, opt);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
// console.log(options);
|
||||
return options;
|
||||
}
|
||||
|
||||
function beautify() {
|
||||
var text;
|
||||
var editor = atom.workspace.getActiveEditor();
|
||||
var isSelection = !!editor.getSelectedText();
|
||||
|
||||
var softTabs = editor.softTabs;
|
||||
var tabLength = editor.getTabLength();
|
||||
|
||||
var defaultOptions = {
|
||||
var editorOptions = {
|
||||
'indent_size': softTabs ? tabLength : 1,
|
||||
'indent_char': softTabs ? ' ' : '\t',
|
||||
'indent_with_tabs': !softTabs
|
||||
};
|
||||
var configOptions = getConfigOptionsFromSettings(languages);
|
||||
|
||||
// Look for .jsbeautifierrc in file and home path, check env variables
|
||||
var editedFilePath = editor.getPath();
|
||||
|
||||
function getConfig(startPath) {
|
||||
// Verify that startPath is a string
|
||||
startPath = (typeof startPath === 'string') ? startPath : __dirname || '';
|
||||
startPath = (typeof startPath === 'string') ? startPath : '';
|
||||
|
||||
if (!startPath) {
|
||||
return {};
|
||||
}
|
||||
|
||||
// Get the path to the config file
|
||||
var configPath = findConfig('.jsbeautifyrc', startPath);
|
||||
|
||||
var externalOptions;
|
||||
if (configPath) {
|
||||
var strip = require('strip-json-comments');
|
||||
try {
|
||||
externalOptions = JSON.parse(strip(fs.readFileSync(configPath, {
|
||||
var contents = fs.readFileSync(configPath, {
|
||||
encoding: 'utf8'
|
||||
})));
|
||||
} catch (e) {
|
||||
console.log('Failed parsing config JSON at '+configPath);
|
||||
});
|
||||
if (!contents) {
|
||||
externalOptions = {};
|
||||
} else {
|
||||
try {
|
||||
externalOptions = JSON.parse(strip(contents));
|
||||
} catch (e) {
|
||||
console.log('Failed parsing config as JSON: ' + configPath);
|
||||
|
||||
// Attempt as YAML
|
||||
try {
|
||||
externalOptions = yaml.safeLoad(contents);
|
||||
} catch (e) {
|
||||
console.log('Failed parsing config as YAML: ' + configPath);
|
||||
externalOptions = {};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
externalOptions = {};
|
||||
|
@ -205,9 +287,15 @@ function beautify() {
|
|||
// All of the options
|
||||
// Listed in order from default (base) to the one with the highest priority
|
||||
// Left = Default, Right = Will override the left.
|
||||
var allOptions = [defaultOptions, homeOptions, projectOptions];
|
||||
var allOptions = [
|
||||
editorOptions, // Atom Editor
|
||||
configOptions, //
|
||||
homeOptions, // User's Home path
|
||||
projectOptions // Project path
|
||||
];
|
||||
|
||||
function getOptions(selection, allOptions) {
|
||||
console.log(selection, allOptions);
|
||||
|
||||
// Reduce all options into correctly merged options.
|
||||
var options = _.reduce(allOptions, function (result, currOptions) {
|
||||
|
@ -218,18 +306,22 @@ function beautify() {
|
|||
|
||||
// Check to see if config file uses nested object format to split up js/css/html options
|
||||
for (key in currOptions) {
|
||||
if (typeof currOptions[key] === 'object') {
|
||||
if (_.indexOf(languages, key) >= 0 && // Check if is supported language
|
||||
typeof currOptions[key] === '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
|
||||
if (!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]);
|
||||
}
|
||||
|
||||
|
@ -240,7 +332,7 @@ function beautify() {
|
|||
// TODO: Clean.
|
||||
// There is a bug in nopt
|
||||
// See https://github.com/npm/nopt/issues/38#issuecomment-45971505
|
||||
//console.log('pre-clean', JSON.stringify(options));
|
||||
console.log('pre-clean', JSON.stringify(options));
|
||||
//options = cleanOptions(options, knownOpts);
|
||||
//console.log('post-clean', JSON.stringify(options));
|
||||
|
||||
|
@ -307,9 +399,9 @@ function handleSaveEvent() {
|
|||
});
|
||||
}
|
||||
|
||||
plugin.configDefaults = {
|
||||
plugin.configDefaults = _.merge({
|
||||
beautifyOnSave: false
|
||||
};
|
||||
}, defaultLanguageOptions);
|
||||
|
||||
plugin.activate = function () {
|
||||
handleSaveEvent();
|
||||
|
|
53
package.json
53
package.json
|
@ -4,13 +4,61 @@
|
|||
"version": "0.3.1",
|
||||
"private": true,
|
||||
"description": "Beautify HTML, CSS and Javascript in Atom",
|
||||
"repository": "https://github.com/donaldpipowitch/atom-beautify",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/donaldpipowitch/atom-beautify"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/donaldpipowitch/atom-beautify/issues"
|
||||
},
|
||||
"license": "MIT",
|
||||
"author": {
|
||||
"name": "Donald Pipowitch",
|
||||
"email": "pipo@senaeh.de",
|
||||
"url": "https://github.com/donaldpipowitch"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "László Károlyi",
|
||||
"url": "https://github.com/karolyi"
|
||||
},
|
||||
{
|
||||
"name": "Glavin Wiechert",
|
||||
"email": "glavin.wiechert@gmail.com",
|
||||
"url": "https://github.com/Glavin001"
|
||||
},
|
||||
{
|
||||
"name": "Marco Tanzi",
|
||||
"url": "https://github.com/mtanzi"
|
||||
},
|
||||
{
|
||||
"name": "gvn lazar suntop",
|
||||
"url": "https://github.com/gvn"
|
||||
},
|
||||
{
|
||||
"name": "Vadim K.",
|
||||
"url": "https://github.com/vadirn"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"atom",
|
||||
"beautify",
|
||||
"beautifier",
|
||||
"js-beautify",
|
||||
"format",
|
||||
"pretty",
|
||||
"html",
|
||||
"handlebars",
|
||||
"xml",
|
||||
"css",
|
||||
"javascript",
|
||||
"json",
|
||||
"css",
|
||||
"sass",
|
||||
"scss",
|
||||
"less",
|
||||
"sql"
|
||||
],
|
||||
"engines": {
|
||||
"atom": ">0.50.0"
|
||||
},
|
||||
|
@ -20,6 +68,7 @@
|
|||
"js-beautify": "~1.5.1",
|
||||
"nopt": "^3.0.0",
|
||||
"lodash": "2.4.1",
|
||||
"strip-json-comments": "^0.1.3"
|
||||
"strip-json-comments": "^0.1.3",
|
||||
"js-yaml": "^3.0.2"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue