Skip to main content

formart thrift file

Project description

thrift-fmt

thrift formatter

the parser is https://github.com/alingse/thrift-parser

Usage

thrift-fmt mythrift.thrift
thrift-fmt --help

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 -d ./thrift_files

Use in Code

use ThriftData parse from file / stdin / 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"'

Feature

  1. suppoort keep and align the comment
  2. auto patch list separator and field's required flag
  3. align the field's assign
  4. support format part of the thrift parsed result

example

struct Work {
    1: required i32 number_a = 0, // hello
    2: optional i32 num2     = 1, // xyz
}

TODO

  1. support function blank line count
  2. fix //a comment
  3. better code
  4. other language ?
  5. support function default add new line, function remove list sep
  6. support indent for /* */ multi line comment
  7. support tight map/list define ?
  8. any other featur ?

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-0.2.9.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

thrift_fmt-0.2.9-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file thrift-fmt-0.2.9.tar.gz.

File metadata

  • Download URL: thrift-fmt-0.2.9.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.2.1 CPython/3.10.6

File hashes

Hashes for thrift-fmt-0.2.9.tar.gz
Algorithm Hash digest
SHA256 69ffa2d2e0ae68687ac9040b42ffc3c7d25cb04d6568d98fd5ee8ddbdaf7b064
MD5 cb9e944a6447b46ba8c5bd15617875d3
BLAKE2b-256 33dd9c8af70c9b74909a8a99c5a32ef45cfa39ecfc55dd7d7bac65e1e604493d

See more details on using hashes here.

Provenance

File details

Details for the file thrift_fmt-0.2.9-py3-none-any.whl.

File metadata

  • Download URL: thrift_fmt-0.2.9-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.2.1 CPython/3.10.6

File hashes

Hashes for thrift_fmt-0.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 1d5f0f96a6d6d0451ced8f2cc801e8fab6788ebb3c35e17c949aa3da1296a0c9
MD5 0ec744d423f04bbe397808df74bdc39d
BLAKE2b-256 ab8d8cbd5c429f1e57a3cdb2b30963c877bf0f342416cd6c7c42c804e5003cc4

See more details on using hashes here.

Provenance

Supported by

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