Skip to main content

Vyper formatter

Project description

image

Mamushi

image Build Status codecov License: MIT Code style: black

Mamushi is a fork of the popular Black formatter adapted to the Vyper programming language. Mamushi reformats your Vyper contracts in a readable and consistent way.

Installation

pip install mamushi

Usage

Search all *.vy files and overwrite them after formatting:

mamushi

Specify a list of *.vy files or directories and output to console after formatting:

mamushi [SRC]

Output the result to console instead of overwriting:

mamushi --in-place False

pre-commit

Add to your .pre-commit-config.yaml:

repos:
  - repo: https://github.com/benber86/mamushi
    rev: main
    hooks:
      - id: mamushi
        args: [ --line-length=100 ]

Notes

Line length

The default line length is 80. Line length can be adjusted by using the --line-length option.

AST Safety

By default, mamushi will compare the AST of your reformatted code with that of the original to ensure that the changes applied remain strictly formal. The option can be disabled with --safe False to speed things up.

Trailing commas

When handling expressions split by commas, mamushi follows Black's default behavior.

Mamushi also uses Black's magic trailing comma to give user the option to collapse a comma-separated expression into one line if possible. If a trailing comma is added, mamushi will always explode the expression. This can have important consequences for the commenting of your code. Consider the following two examples:

This code snippet:

self.b(0, # amount to send
       msg.sender, # sender
       True, # refund ?
        )

formats to the following with a trailing comma after the last argument (True):

self.b(
    0,  # amount to send
    msg.sender,  # sender
    True,  # refund ?
)

Disabling formatting

Mamushi supports # fmt: off and # fmt: on tags to disable formatting for specific regions of code:

x: uint256 = 1

# fmt: off
y:    uint256     =     2    # preserve this spacing
z:uint256=3
# fmt: on

a: uint256 = 4  # this will be formatted normally

The code between # fmt: off and # fmt: on will be preserved exactly as written, including all spacing and line breaks. These tags can be nested, and unclosed # fmt: off regions will extend to the end of the file.

You can also use # nosplit on individual lines to prevent line splitting while still applying spacing normalization:

assert not self.user[receiver][msg.sender], "Error message"  # nosplit

Note: # fmt: skip is not currently supported.

but if the trailing comma is removed, the line will be collapsed to:

self.b(0, msg.sender, True)  # amount to send  # sender  # refund ?

Future developments

  • Multiprocessing when processing multiple files
  • Configuration files
  • Improve Windows compatibility
  • Handle versioning of Vyper/lark grammar
  • Refactoring comment handling in the parser
  • Add .gitignore / exclude / include support

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

mamushi-0.1.0.tar.gz (47.2 kB view details)

Uploaded Source

Built Distribution

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

mamushi-0.1.0-py3-none-any.whl (49.6 kB view details)

Uploaded Python 3

File details

Details for the file mamushi-0.1.0.tar.gz.

File metadata

  • Download URL: mamushi-0.1.0.tar.gz
  • Upload date:
  • Size: 47.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mamushi-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2762ccd85d53ab16806604b957fe8d205b43995343149fc5bd1dd58cf30ec65a
MD5 4eb46618bc19f0bcbc0a4ce856f5df46
BLAKE2b-256 500cffc9868dd8e644044cb67be9f51f49c1c904ab17d079d6b5775b372c5224

See more details on using hashes here.

Provenance

The following attestation bundles were made for mamushi-0.1.0.tar.gz:

Publisher: publish-pypi.yml on benber86/mamushi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mamushi-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mamushi-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 49.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mamushi-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6add1da3678ce36b39e28f098bf4a6cbb0d05f7de112f6766cd56958bec41083
MD5 c5592058bc5789f4a571eb2f442ef94a
BLAKE2b-256 2757d12e24abfcbd3de4773025278b68070d6243505e814b6cf7c5203fdbeb55

See more details on using hashes here.

Provenance

The following attestation bundles were made for mamushi-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on benber86/mamushi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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