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.3.0a1.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

thrift_fmt-0.3.0a1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file thrift-fmt-0.3.0a1.tar.gz.

File metadata

  • Download URL: thrift-fmt-0.3.0a1.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.4.8 CPython/3.10.6

File hashes

Hashes for thrift-fmt-0.3.0a1.tar.gz
Algorithm Hash digest
SHA256 13889e2fb10bc46e0dc6ac543d31de4c7d73187c5f736cabd4f5c24747377e9a
MD5 fefe2505d508df1d100dd29698382bd7
BLAKE2b-256 edcaeafeaf8a20fd933e3adac3de49ea0694f082393e60f371f6d4c7128b7d6f

See more details on using hashes here.

Provenance

File details

Details for the file thrift_fmt-0.3.0a1-py3-none-any.whl.

File metadata

File hashes

Hashes for thrift_fmt-0.3.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 f4f9100981682baa0a4a44bbb61a758a933d1760eefa2bf1c2177df21cbee710
MD5 12f160e686669c3ef57bada21227f334
BLAKE2b-256 cec5b92fa35d7e12522e2797d5456a84754809bc776b2e1edb19d50424918871

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