Lua beautifier
Simple perl script beautifier for lua, by @pkulchenko
This commit is contained in:
parent
aae09ea463
commit
7096ceb195
|
@ -42,7 +42,7 @@ matrix:
|
|||
|
||||
env:
|
||||
global:
|
||||
- APM_TEST_PACKAGES="language-marko language-html-swig language-svg language-d mavensmate-atom"
|
||||
- APM_TEST_PACKAGES="language-marko language-html-swig language-svg language-d mavensmate-atom language-lua"
|
||||
- PATH="/home/travis/gopath/bin:$HOME/.linuxbrew/bin:$PATH"
|
||||
|
||||
addons:
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# dev
|
||||
- Add beautifier for the Lua language.
|
||||
- Add [ocp-indent](https://github.com/OCamlPro/ocp-indent) beautifier for the OCaml language.
|
||||
- Add [elm-format](https://github.com/avh4/elm-format) beautifier for the Elm language.
|
||||
- Add [clang-format](http://clang.llvm.org/docs/ClangFormat.html) beautifier for C/C++/Obj-C languages.
|
||||
|
|
|
@ -74,6 +74,7 @@ Or Settings/Preferences ➔ Packages ➔ Search for `atom-beautify`
|
|||
- [x] [Erlang](https://github.com/Glavin001/atom-beautify/pull/683)
|
||||
- Requires erlang syntax_tools to be installed
|
||||
- [x] [Crystal](https://github.com/Glavin001/atom-beautify/pull/900)
|
||||
- [x] [Lua](https://github.com/Glavin001/atom-beautify/pull/973)
|
||||
|
||||
## Usage
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ build_script:
|
|||
|
||||
- cd %APPVEYOR_BUILD_FOLDER%
|
||||
# Install languages to Atom
|
||||
- apm install language-marko language-html-swig language-svg language-elm language-d mavensmate-atom
|
||||
- apm install language-marko language-html-swig language-svg language-elm language-d mavensmate-atom language-lua
|
||||
# Show current PATH
|
||||
- echo %PATH%
|
||||
# Run tests on package
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
-- Ensure that that the element at i is in the right position,
|
||||
-- and return a closure which can be used for continuing the sort.
|
||||
function quicksorter(i, vec, low, high)
|
||||
if low >= high then
|
||||
return quicksorter
|
||||
else -- low < high
|
||||
-- partition the vector and initialize the child closures
|
||||
local middle = partition(vec, low, high)
|
||||
local left, right = quicksorter
|
||||
|
||||
-- Create the promise
|
||||
local function self(i, vec, low, high)
|
||||
if i < middle then
|
||||
left = left(i, vec, low, middle-1)
|
||||
return self
|
||||
elseif i > middle then
|
||||
right = right(i, vec, middle+1, high)
|
||||
return self
|
||||
end
|
||||
end
|
||||
|
||||
-- Force the promise until i is in the right position
|
||||
return self(i, vec, low, high)
|
||||
end
|
||||
end
|
||||
|
||||
function lazysort(vec, low, high)
|
||||
local sorter = quicksorter
|
||||
return function(i)
|
||||
sorter = sorter(i, vec, low, high)
|
||||
return vec[i]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
-- Ensure that that the element at i is in the right position,
|
||||
-- and return a closure which can be used for continuing the sort.
|
||||
function quicksorter(i, vec, low, high)
|
||||
if low >= high then
|
||||
return quicksorter
|
||||
else -- low < high
|
||||
-- partition the vector and initialize the child closures
|
||||
local middle = partition(vec, low, high)
|
||||
local left, right = quicksorter
|
||||
|
||||
-- Create the promise
|
||||
local function self(i, vec, low, high)
|
||||
if i < middle then
|
||||
left = left(i, vec, low, middle-1)
|
||||
return self
|
||||
elseif i > middle then
|
||||
right = right(i, vec, middle+1, high)
|
||||
return self
|
||||
end
|
||||
end
|
||||
|
||||
-- Force the promise until i is in the right position
|
||||
return self(i, vec, low, high)
|
||||
end
|
||||
end
|
||||
|
||||
function lazysort(vec, low, high)
|
||||
local sorter = quicksorter
|
||||
return function(i)
|
||||
sorter = sorter(i, vec, low, high)
|
||||
return vec[i]
|
||||
end
|
||||
end
|
|
@ -86,6 +86,10 @@
|
|||
{
|
||||
"name": "Patrick Steele-Idem",
|
||||
"url": "https://github.com/psteeleidem"
|
||||
},
|
||||
{
|
||||
"name": "Joost van Doorn",
|
||||
"url": "https://github.com/JoostvDoorn"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
|
@ -192,7 +196,8 @@
|
|||
"go",
|
||||
"golang",
|
||||
"svg",
|
||||
"elm"
|
||||
"elm",
|
||||
"lua"
|
||||
],
|
||||
"devDependencies": {
|
||||
"coffeelint": "^1.10.1",
|
||||
|
|
|
@ -26,7 +26,7 @@ describe "BeautifyLanguages", ->
|
|||
"mustache", "objective-c", "perl", "php",
|
||||
"python", "ruby", "sass", "sql", "svg",
|
||||
"xml", "csharp", "gfm", "marko",
|
||||
"go", "html-swig"
|
||||
"go", "html-swig", "lua"
|
||||
]
|
||||
# All Atom packages that Atom Beautify is dependent on
|
||||
dependentPackages = [
|
||||
|
|
|
@ -49,6 +49,7 @@ module.exports = class Beautifiers extends EventEmitter
|
|||
'fortran-beautifier'
|
||||
'js-beautify'
|
||||
'jscs'
|
||||
'lua-beautifier'
|
||||
'ocp-indent'
|
||||
'perltidy'
|
||||
'php-cs-fixer'
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Copyright 2011 Paul Kulchenko
|
||||
# Credits: http://notebook.kulchenko.com/programming/lua-beautifier-in-55-lines-of-perl
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use constant INDENT => ' ';
|
||||
my($currIndent, $nextIndent, $prevLength) = (0, 0, 0);
|
||||
|
||||
while (<>) {
|
||||
chomp;
|
||||
s/^\s+|\s+$//g; # remote all spaces on both ends
|
||||
s/\s+/ /g; # replace all whitespaces inside the string with one space
|
||||
|
||||
my $orig = $_;
|
||||
|
||||
s/(['"])[^\1]*?\1//g; # remove all quoted fragments for proper bracket processing
|
||||
s/\s*--.+//; # remove all comments; this ignores long bracket style comments
|
||||
|
||||
# open a level; increase next indentation; don't change current one
|
||||
if (/^((local )?function|repeat|while)\b/ && !/\bend\s*[\),;]*$/
|
||||
|| /\b(then|do)$/ && !/^elseif\b/ # only open on 'then' if there is no 'elseif'
|
||||
|| /^if\b/ && /\bthen\b/ && !/\bend$/ # only open on 'if' if there is no 'end' at the end
|
||||
|| /\bfunction\s*\([^\)]*\)$/) {
|
||||
$nextIndent = $currIndent + 1;
|
||||
}
|
||||
# close the level; change both current and next indentation
|
||||
elsif (/^until\b/
|
||||
|| /^end\s*[\),;]*$/
|
||||
|| /^end\s*\)\s*\.\./ # this is a special case of 'end).."some string"'
|
||||
|| /^else(if)?\b/ && /\bend$/) {
|
||||
$nextIndent = $currIndent = $currIndent - 1;
|
||||
}
|
||||
# keep the level; decrease the current indentation; keep the next one
|
||||
elsif (/^else\b/
|
||||
|| /^elseif\b/) {
|
||||
($nextIndent, $currIndent) = ($currIndent, $currIndent-1);
|
||||
}
|
||||
|
||||
my $brackets = y/(// - y/)//; # capture unbalanced brackets
|
||||
my $curly = y/{// - y/}//; # capture unbalanced curly brackets
|
||||
|
||||
# close (curly) brackets if needed
|
||||
$currIndent += $curly if $curly < 0 && /^\}/;
|
||||
$currIndent += $brackets if $brackets < 0 && /^\)/;
|
||||
|
||||
warn "WARNING: negative indentation at line $.: $orig\n" if $currIndent < 0;
|
||||
|
||||
print((length($orig) ? (INDENT x $currIndent) : ''), $orig, "\n")
|
||||
if $prevLength > 0 || length($orig) > 0; # this is to collapse empty lines
|
||||
|
||||
$nextIndent += $brackets + $curly;
|
||||
|
||||
$currIndent = $nextIndent;
|
||||
$prevLength = length($orig);
|
||||
}
|
||||
|
||||
warn "WARNING: positive indentation at the end\n" if $nextIndent > 0;
|
|
@ -0,0 +1,21 @@
|
|||
###
|
||||
###
|
||||
path = require("path")
|
||||
|
||||
"use strict"
|
||||
Beautifier = require('../beautifier')
|
||||
|
||||
module.exports = class Lua extends Beautifier
|
||||
name: "lua"
|
||||
|
||||
options: {
|
||||
Lua: true
|
||||
}
|
||||
|
||||
beautify: (text, language, options) ->
|
||||
lua_beautifier = path.resolve(__dirname, "beautifier.pl")
|
||||
@run("perl", [
|
||||
lua_beautifier,
|
||||
'<',
|
||||
@tempFile("input", text)
|
||||
])
|
|
@ -40,6 +40,7 @@ module.exports = class Languages
|
|||
"jsx"
|
||||
"latex"
|
||||
"less"
|
||||
"lua"
|
||||
"markdown"
|
||||
'marko'
|
||||
"mustache"
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
module.exports = {
|
||||
|
||||
name: "Lua"
|
||||
namespace: "lua"
|
||||
|
||||
###
|
||||
Supported Grammars
|
||||
###
|
||||
grammars: [
|
||||
"Lua"
|
||||
]
|
||||
|
||||
###
|
||||
Supported extensions
|
||||
###
|
||||
extensions: [
|
||||
'lua'
|
||||
]
|
||||
|
||||
defaultBeautifier: "lua"
|
||||
|
||||
}
|
Loading…
Reference in New Issue