Code Monkey home page Code Monkey logo

docstrfmt's Introduction

docstrfmt: a formatter for Sphinx flavored reStructuredText

Latest docstrfmt Version Supported Python Versions PyPI - Downloads - Monthly Coveralls Coverage Github Actions Coverage Contributor Covenant

Strongly inspired by rstfmt and rustfmt.

This is considered to be in beta however it is mostly stable.

Description

docstrfmt is a tool for automatically formatting reStructuredText in files and Python docstrings in a consistent way.

Like Black and rstfmt, the motivation is to provide a format that is reasonable and minimally configurable to prevent teams from wasting time on style discussions (or individuals on manually doing formatting, for that matter).

Currently, docstrfmt is in an early stage of development. The most common reST constructs are covered but there are some that are not. If there is a construct missing and would like to add it, feel free to open a PR to add it or open an issue and I'll see what I can do.

To get a feel for the output of docstrfmt, see the sample file.

Differences between docstrfmt and rstfmt

The main difference between rstfmt and docstrfmt is the ability to format Python docstrings. I am open to merging this project with rstfmt, however, there as several differences in formatting conventions between the two (hence the separate fork).

Usage

# Install.
pip install docstrfmt

# Install the development version.
pip install https://github.com/LilSpazJoekp/docstrfmt/archive/master.zip

# Read a file from stdin and write the formatted version to stdout.
docstrfmt

# Format the given file(s) in place.
docstrfmt <file>...

# Format the given files, printing all output to stdout.
docstrfmt -o <file>...

# Wrap paragraphs to the given line length where possible (default 88).
docstrfmt -l <length>

Like Black's blackd, there is also a daemon that provides formatting via HTTP requests to avoid the cost of starting and importing everything on every run.

# Install.
pip install "docstrfmt[d]"

# Install the development version.
pip install "https://github.com/LilSpazJoekp/docstrfmt/archive/master.zip#egg=docstrfmt[d]"

# Start the daemon (binds to localhost:5219 by default).
docstrfmtd --bind-host=<host> --bind-port=<port>

# Print the formatted version of a file.
curl http://locahost:5219 --data-binary @<file>

# Specify the line length (default 88).
curl -H 'X-Line-Length: 72' http://locahost:5219 --data-binary @<file>

# Mimic the standalone tool: read from stdin, write to stdout, exit with
# a nonzero status code if there are errors.
curl -fsS http://locahost:5219 --data-binary @/dev/stdin

With editors

PyCharm

Instructions derived from black documentation

  1. Install.

    pip install "docstrfmt[d]"
  2. Locate where docstrfmt is installed.

    • On macOS / Linux / BSD:

      which docstrfmt
      # /usr/local/bin/docstrfmt  # possible location
    • On Windows:

      where docstrfmt
      # C:\Program Files\Python39\Scripts\docstrfmt.exe

Note

Note that if you are using a virtual environment detected by PyCharm, this is an unneeded step. In this case the path to docstrfmt is $PyInterpreterDirectory$/docstrfmt.

  1. Open External tools in PyCharm.

    • On macOS:

      PyCharm -> Preferences -> Tools -> External Tools

    • On Windows / Linux / BSD:

      File -> Settings -> Tools -> External Tools

  2. Click the + icon to add a new external tool with the following values:

    • Name: docstrfmt
    • Description:
    • Program: <install_location_from_step_2>
    • Arguments: "$FilePath$"
  3. Format the currently opened file by selecting Tools -> External Tools -> docstrfmt.

    • Alternatively, you can set a keyboard shortcut by navigating to Preferences or Settings -> Keymap -> External Tools -> External Tools - docstrfmt.
  4. Optionally, run docstrfmt on every file save:

    1. Make sure you have the File Watchers plugin installed.
    2. Go to Preferences or Settings -> Tools -> File Watchers and click + to add a new watcher:
      • Name: docstrfmt
      • File type: Python
      • Scope: Project Files
      • Program: <install_location_from_step_2>
      • Arguments: $FilePath$
      • Output paths to refresh: $FilePath$
      • Working directory: $ProjectFileDir$
    3. Uncheck "Auto-save edited files to trigger the watcher" in Advanced Options

With pre-commit

repos:
  - repo: https://github.com/LilSpazJoekp/docstrfmt
    rev: stable # Replace by any tag/version: https://github.com/LilSpazJoekp/docstrfmt/tags
    hooks:
      - id: docstrfmt
        language_version: python3
        types_or: [python, rst, txt] # only needed if you want to include txt files.

docstrfmt's People

Contributors

lilspazjoekp avatar dzhu avatar cam-gerlach avatar pythoncoderas avatar tkoyama010 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.