Skip to content

rednafi/rubric

Repository files navigation

Rubric

>> Linter Config Initializer for Python <<

 

logo

Preface

Rubric initializes the configuration files of a few Python linters and formatters. Also, it adds a README.md boilerplate and a simple Makefile with the commands to apply the tools. This helps you maintain an isomorphic workflow across multiple projects. It assumes that, in all of your Python projects, you'll use—

  • Black as the primary code formatter.
  • EditorConfig to enforce consistent style across different editors.
  • Ruff to ensure style guide conformance and sort the imports.
  • Mypy to check the type hints.
  • Pip-tools to manage the dependencies.
  • Hatch to generate build artifacts for reusable libraries.
  • Pre-commit for managing and maintaining the pre-commit hooks.

Following is a list of config files that Rubric is going to add to your target directory:

root
├── .editorconfig           # Config file for Editorconfig
├── .gitignore              # Python specific .gitignore file
├── .pre-commit-config.yaml # Config to manage pre-commit hooks.
├── Makefile                # Makefile containing the commands to lint your code
├── pyproject.toml          # Toml file to with the configs for black, ruff, and mypy
├── README.md               # A readme boilerplate
├── requirements-dev.txt    # File to specify the dev requirements
└── requirements.txt        # File to specify the pinned app requirements

The files will contain minimal but sensible default configurations for the respective tools. You're free to change them as you like.

Installation

  • Rubric requires Python 3.8 and up.

  • Make a virtual environment in your project's root directory.

  • Activate the environment and run:

    pip install rubric
    

Usage

  • To inspect all the CLI options, run:

    rubric --help
    

    You should see the following output:

    $ rubric --help
                   >> Config Initializer for Python Projects <<
    
    Usage: rubric [OPTIONS]
    
    Options:
    -h, --help                      Display help message.
    -v, --version                   Display the version number.
    -s, --show                      Show the contents of the config files.
    -a, --append                    Append to existing config files.
    -o, --overwrite                 Overwrite existing config files.
    -c, --create                    Create the config files in the current
                                    directory.
    -f, --filename [.editorconfig|.gitignore|.pre-commit-config.yaml|README.md|
            Makefile|pyproject.toml|requirements-dev.in|requirements-dev.txt|
            requirements.in|requirements.txt]
                                    Target file names.
    -d, --dirname PATH              Target directory name.
    -l, --list                      List the config files that are about to be
                                    generated.
    
    
  • Display a list of config files that are going to be created:

    rubric --list
    
    Config files that are about to be generated:
    
    => .editorconfig
    => .gitignore
    => .pre-commit-config.yaml
    => README.md
    => Makefile
    => pyproject.toml
    => requirements-dev.txt
    => requirements.txt
    
  • Take a peek into the content of any config file(s):

    rubric --show -f requirements.txt -f .editorconfig

    This will print:

    ============================ requirements.txt ============================
    
    #
    # This file is autogenerated by pip-compile with python 3.11
    # To update, run:
    #
    #    pip-compile --output-file=requirements.txt requirements.in
    #
    
    ============================ .editorconfig ============================
    
    # https://editorconfig.org
    
    root = true
    
    [*]
    indent_style = space
    indent_size = 2
    trim_trailing_whitespace = true
    insert_final_newline = true
    charset = utf-8
    end_of_line = lf
    
    [*.{py,md}]
    indent_size = 4
    
    [Makefile]
    indent_size = 4
    indent_style = tab
  • Initialize a project with the following command:

    rubric --create

    This will run the tool in a non-destructive way—that means it won't overwrite any of the configuration files that you might already have in the directory.

  • If you only want to create a selected list of config files, then run:

    rubric --create -f requirements.txt -f requirements-dev.txt
  • If you want to overwrite any of the existing config files that you might have in the directory, then run:

    rubric --overwrite -f filename1 -f filename2
  • If you want to append the configs to an existing file, then run:

    rubric --append -f filename1 -f filename2
  • You can also point Rubric to a directory.

    rubric --create --directory "some/custom/directory"
  • If you want to check and update the configs across multiple repositories in a single sweep, use the following command:

    s="dir1 dir2 dir3"; echo $s | xargs -n 1 -P $(echo $s | wc -w) rubric -c -d

    This command will spawn 3 processes to create the config files in dir1, dir2, and dir3 in parallel.

  • You can run the entire linter suite with this command:

    make lint
    
✨ 🍰 ✨