Thrift Formatter
can be used as command line tool thrift-fmt
and python sdk thrift_fmt
use thrift-parser https://github.com/thrift-labs/thrift-parser as parser
pip install thrift-fmt
format single file and print to stdout
thrift-fmt mythrift.thrift
format and overwrite the origin file
thrift-fmt -w mythrift.thrift
format a directory, this will overwrite the origin file, please keep in track
thrift-fmt -r ./thrift_files
- keep and align all comments
- patch list separator
- patch missed field's
required
flag - align by the field's assign (like go)
- align by each field's part
- Format only part of the parsed thrift
example
struct Work {
1: required i32 number_a = 0, // hello
2: optional i32 num2 = 1, // xyz
}
align by each field's part
struct Work {
1: required i32 number_a = 0 , // hello
2: required i32 num2 = 1 , // xyz
3: required list<i32> num3 = [ 1, 2, 3 ] , // num3
11: required string str_b = "hello-world",
}
use thrift_parser.ThriftData
to parse from file or str
use ThriftFormatter
or PureThriftFormatter
format the parsed thrift data.
from thrift_fmt import ThriftFormatter, PureThriftFormatter
from thrift_parser import ThriftData
origin = '''
include "shared.thrift" // a
// work info
struct Work {
1: i32 num1 = 0,
2: required i32 num2, // num2 for
3: Operation op, // op is Operation
4: optional string comment,
5: map<string,list<string>> tags, //hello
}
'''
thrift = ThriftData.from_str(data)
out = ThriftFormatter(thrift).format()
assert out == '''
include "shared.thrift" // a
// work info
struct Work {
1: required i32 num1 = 0,
2: required i32 num2, // num2 for
3: required Operation op, // op is Operation
4: optional string comment,
5: required map<string, list<string>> tags, //hello
}
'''.strip()
# or only a single node
header = PureThriftFormatter().format_node(thrift.document.children[0])
assert header == 'include "shared.thrift"'
- better code
- support function default add new line
- support indent for /* */ multi line comment
- support tight map/list define ?
- any other feature ?
pdm install
pdm run pytest
pdm build
pdm run thrift-fmt --help
some thrift files in fixtures thrift was copy from https://github.com/apache/thrift/blob/master/tutorial/ , The Apache LICENSE
the Thrift.g4 in thrift-parser package was copy from https://github.com/antlr/grammars-v4