@appguru/luafmt
v1.5.0
Published
A small Lua formatter / pretty printer
Downloads
31
Maintainers
Readme
Luafmt
A small Lua formatter / pretty printer. Designed for 5.1, may support newer versions.
About
Luafmt is licensed under the MIT license and written by Lars Mueller alias appgurueu.
Features
- Fixes spacing & indentation
- Neat literal formatting
- Converts
({})
and('')
/("")
/([[]])
calls to short forms - Moves comments to reasonable scopes (blocks or table constructors)
- Table & function inlining
- Extra newlines around function declarations
API
Installation
Install the NPM package luafmt:
npm install @appguru/luafmt
And import it like this:
const { ast, formatChunk, formatter } = require("@appguru/luafmt")
ast
Abstract syntax tree methods.
fixRanges
Makes luaparse ranges be from if
to end
and not from if
to then
for all IfClauses of the AST.
insertComments(chunk)
Inserts comments into the top-level abstract syntax tree provided by luaparse.
formatter(conf)
Provides a formatter which returns a function format(ast, [indent])
taking a luaparse AST & optionally the base indentation as number.
Note that you have to call [fixRanges
] and [insertComments
] on the AST yourself before using it:
const { ast } = require("@appguru/luafmt")
const { parse } = require("luaparse")
const srcAST = parse(`-- hello world
if true then print'hello world!'
else _ = _ end`)
const formatter = ast.formatter()
ast.fixRanges(srcAST)
ast.insertComments(srcAST)
console.log(formatter(srcAST))
formatChunk(text)
Takes a Lua chunk (think file / function body) as string and returns a formatted version, also as string.
formatter(conf)
const configuredFormatChunk = formatter({
// string
indent: "\t",
// string
newline: "\n",
// boolean
extra_newlines: true,
// object
inline: {
// object or false
block: {
max_exp_length // number, in characters
},
// object or false
table: {
max_field_count // number
max_field_length // number, in characters
}
}
})
Versions
v1.0.0
- The initial release
v1.0.7
- Lots of fixes
v1.0.8
- Empty blocks are now just a single space, no space after
#
- Fixed dependency constraints
- Empty blocks are now just a single space, no space after
v1.0.9
- Fixed operator precedence
v1.0.10
- Fixed table index operators (adding parens around base)
v1.1.0
- Fixed double minus (
- -x
) - Added inline tables & blocks
- Fixed double minus (
v1.1.1
- Fixed if statement formatting
v1.1.2
- Fixed local declarations without initializers (
local name
) - Tweaked table inlining
- Fixed local declarations without initializers (
v1.2.0
- Added extra newlines around function declarations feature
v1.2.1
- Fixed table constructors containing comments
v1.2.2
- Fixed repeat-until statement formatting
- Bumped
luon
version tov1.2.6
v1.2.3
- Fixed extra newlines
- Improved tests
v1.2.4
- Fixed extra newlines
v1.3.0
,v1.4.0
- Added configuration
v1.4.1
- Fixed Readme
v1.4.2
- Fixed (removed) trailing commas after fields followed by comments
- Fixed (removed) obsolete (possibly invalid) bracketing (precedencies)
v1.4.3
- Tweaked: Obsolete brackets are omitted in the case of concatenation, but not for exponentation
v1.5.0
- Exposed AST-functions
fixRanges
&insertComments
as well as lower-level AST formatter
- Exposed AST-functions