Skip to main content

No project description provided

Project description

Craftier

  ___  ____   __   ____  ____  __  ____  ____ (pre-α)
 / __)(  _ \ / _\ (  __)(_  _)(  )(  __)(  _ \
( (__  )   //    \ ) _)   )(   )(  ) _)  )   /
 \___)(__\_)\_/\_/(__)   (__) (__)(____)(__\_)

      Your personal Python code reviewer

What is it?

Craftier is a framework to easily writing Python code refactors. In the near future it will also come with a set of predefined refactoring rules.

It is based on libcst and simplifies the use of its API by letting you write refactors just by writing Python code.

It also preserves relevant comments and ensures the modified code is correct, by adding required parentheses.

Getting started

After installing with pip install craftier, you can run the default rules with craftier refactor <python files>.

Configuration

By default we look for a .craftier.ini, if none is found a default configuration will be used.

You can also specify the config file with --config CONFIG_PATH

Config format

[craftier]
packages=craftier.refactors,
excluded=A,
         B

Writing your own rules

As simple as:

import craftier

class SquareTransformer(craftier.CraftierTransformer):
    def square_before(self, x):
        x * x

    def square_after(self, x):
        x ** 2


class IfTrueTransformer(craftier.CraftierTransformer):
    def if_true_before(self, x, y):
        x if True else y

    def if_true_after(self, x):
        x

TODO: write about custom matchers and type declarations

Roadmap and TODOs

  • Support multiple expressions in a transformer
  • Add support for statements
  • Complete set of refactorings
  • Add support for typing metadata
  • Generate RE2 filtering based on expressions. This could be used to prefilter the list of files and to test the patterns either in codebase search tools like https://grep.app
  • Extensive validation testing

Limitations

This is a work in progress, and some edges are rough.

Given that we match code based on actual Python code, some refactorings are not easily expressed or may not even be expressible at all.

History

TODO: write how I came up with the idea.

Name

Originally I wanted to name this package pythonista, but unfortunately someone squatted the name (along with several others) and the name was not released according to procedure. Furthermore, the issue was locked.

That gave me a chance of rethinking the name, so I started with anagrams of the word refactor, which was of course unsuccessful. So after some experimentation I replaced the letter o with an i, giving refactir, which is an anagram of the word craftier.

I like that name, because is like a "refactoring" of the word refactor, and craftier conveys the actual use case of the tool.

Bonus: the name sounds somewhat like my surname.

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

craftier-0.1.0.tar.gz (22.2 kB view details)

Uploaded Source

Built Distribution

craftier-0.1.0-py3-none-any.whl (25.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: craftier-0.1.0.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/2.7.16 Darwin/19.4.0

File hashes

Hashes for craftier-0.1.0.tar.gz
Algorithm Hash digest
SHA256 92f8f0086e5f1167637f761abaa855323da17c3279fc20ee0c815dc2c87af1fd
MD5 ddc36b763927674c181b41b94d112243
BLAKE2b-256 0c53baa158c1642d586a2191d6b7d3748c4ba729d8e1564254b19fbb135f083f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: craftier-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.0.10 CPython/2.7.16 Darwin/19.4.0

File hashes

Hashes for craftier-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d5c5c2941d102057754ed6f5f3a005dd75632d4eb2ae85bc85f2ed3109dc2959
MD5 0acc1fd55bfe76a4e2c913d595fa474e
BLAKE2b-256 a4de666f141db55608cb1acb65e834d3da421f11591395634b0a20608288e6b7

See more details on using hashes here.

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