[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: [ANN] lua code formatter (lcf)
- From: Martin <eden_martin_fuhrspam@...>
- Date: Mon, 30 Jan 2017 09:53:47 -0800
Hello list!
I'm glad to announce lua code formatter. I've represent it's code
as lualocks package "lcf". It comes for lua 5.1 and 5.3 versions.
It installs shell script "lua.reformat" with <f_in> <f_out> parameters.
I'm willing to get responses on its usage, probably syntax
constructions it cannot parse correctly.
I've tested it on a 100MiB bunch of World of Warcraft addons as
example of badly written and formatted code where one-style
reformatting really helps to understand logic.
Further plans is to use "lua-parser" package to speed-up parsing
phase for production use.
--[[ readme.txt ]]
Description
Formats any valid lua 5.3 code.
Main advantage is that it wraps code lines to maintain readability.
Efforts are made to represent code in more easy to understand form,
not the shortest one.
Requirements
Sole requirement is lua v5.3. Earlier versions will not work.
(I've made a backport for lua v5.1. See "5.1" branch.)
Installation
sudo luarocks install lcf
Usage
From command-line
lua.reformat <fIn> <fOut>
From lua interpreter
Suppose you have a string with lua code and wish to get another
string with formatted code.
do
local lua_code_str = 'do return end' -- < fill it
require('lcf.workshop.base')
local get_formatted_ast = request('lcf.workshop.load_from.lua')
local get_formatted_code = request('lcf.workshop.save_to.lua')
return get_formatted_code(get_formatted_ast(lua_code_str))
end
Passing formatting parameters
You may override default parameters by passing a table with
new values of changed parameters:
get_formatted_code(
get_formatted_ast(lua_code_str),
{
indent_chunk = ' ',
right_margin = 100,
max_text_width = 65,
}
)
<indent_chunk> is a string using for building one indent.
You may try '|..' to see it's effect.
<right_margin> limits length of line with indent. Setting it
makes sense for printring.
<max_text_width> limits length of line without indent, i.e.
length of text in line. Setting it makes sense for windowed
viewing in editor.
--
* Built on my own general strings parser,
which uses my own lua syntax representation,
produces AST (annotated syntax tree),
which is further structured for code formatter,
which gets this structured AST and produce code layout,
trying all possible variants to fit code in 70-symbol lines
and maintain indentation.
* Currently comments are stripped from code. I'll add support
for them someday (or will not and explain why).
* It uses local copy of my "workshop" code hive.
Current version: https://github.com/martin-eden/workshop
* See also https://github.com/martin-eden/contents
-- Martin
Attachment:
0xB91B958F.asc
Description: application/pgp-keys