Skip to main content

format thrift file

Project description

thrift-fmt

Thrift Formatter

Github Actions PyPI codecov Downloads pdm-managed

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

Usage

Install

pip install thrift-fmt

Format files

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

Feature

  1. keep and align all comments
  2. patch list separator
  3. patch missed field's required flag
  4. align by the field's assign (like go)
  5. align by each field's part
  6. 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 as sdk

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"'

TODO

  1. better code
  2. support function default add new line
  3. support indent for /* */ multi line comment
  4. support tight map/list define ?
  5. any other feature ?

Dev

pdm install

pdm run pytest

pdm build

pdm run thrift-fmt --help

LICENSE

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thrift-fmt-fork-0.3.1a0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

thrift_fmt_fork-0.3.1a0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

Details for the file thrift-fmt-fork-0.3.1a0.tar.gz.

File metadata

  • Download URL: thrift-fmt-fork-0.3.1a0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.23.1 CPython/3.13.2 Darwin/23.0.0

File hashes

Hashes for thrift-fmt-fork-0.3.1a0.tar.gz
Algorithm Hash digest
SHA256 c48f897db9a8dbe096140e6241a7572dce914e1c256302e5b69401460251fe00
MD5 786d05b9db223aaf51d3e8cfdb92f87e
BLAKE2b-256 febb64bf6c9e47fa6ba64df758c09d702f2620bc4836e17add66610d3798ec42

See more details on using hashes here.

File details

Details for the file thrift_fmt_fork-0.3.1a0-py3-none-any.whl.

File metadata

  • Download URL: thrift_fmt_fork-0.3.1a0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.23.1 CPython/3.13.2 Darwin/23.0.0

File hashes

Hashes for thrift_fmt_fork-0.3.1a0-py3-none-any.whl
Algorithm Hash digest
SHA256 d6013cf20a61749159e4a482a1b689c4df8613987fde288893d40028beedad2a
MD5 b9eb5a2bfd6663efbc60423b561d11b8
BLAKE2b-256 fba15b9d71620f5812e65d34b7c26e67da22f3576bd128b814436d54bcb16138

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page