Giter Site home page Giter Site logo

ciocheck's Introduction

Ciocheck

Build Status

Build Status Build status CircleCI Coverage Status Code Issues Scrutinizer Code Quality

Description

Continuum Analytics linter, formatter and test suite helper.

How does ciocheck work?

It leverages on the different available linting, formatting and testing tools availbale for Python (but other languages could also be added), including:

Linters

Formatters

  • autopep8 (Code formatter)
  • yapf (Code formatter)
  • isort (Import statements formatter)

Test and coverage

Plus some extra goodies, like:

  • Single file configuration for all the tools (still working on eliminating redundancy)
  • Auto addition of __init__.py files for folders containing python files
  • Auto addition of custom encoding and copyright header for python files
  • Run the tools for staged/unstaged or committed diffs only (git support only)
  • Run the tools for modified lines, modified files or all files.

Why ciocheck?

There are many post commit tools out there for testing code quality, but the idea of ciocheck is to perform checks and autoformating before a commit-push, and to use it as part of the CI system, so that if any of the enforced checks does not comply, CI will fail.

Example config file

Configuration is saved in a single file named .ciocheck

# -----------------------------------------------------------------------------
# ciocheck
# https://github.com/ContinuumIO/ciocheck
# -----------------------------------------------------------------------------
[ciocheck]
inherit_config = .ciocheck
branch = origin/master
diff_mode = commited
file_mode = lines
check = pep8,pydocstyle,flake8,pylint,pyformat,isort,autopep8,yapf,coverage,pytest
enforce = pep8,pydocstyle,flake8,pylint,pyformat,isort,autopep8,yapf,coverage,pytest

# Python (pyformat)
header = # -*- coding: utf-8 -*-
copyright_file = .ciocopyright
add_copyright = true
add_header = true
add_init = true

# -----------------------------------------------------------------------------
# pep8
# https://pep8.readthedocs.io/en/release-1.7.x/intro.html#configuration
# -----------------------------------------------------------------------------
[pep8]
exclude = */tests/*
ignore = E126,
max-line-length = 79

# -----------------------------------------------------------------------------
# pydocstyle
# http://www.pydocstyle.org/en/latest/usage.html#example
# -----------------------------------------------------------------------------
[pydocstyle]
add-ignore = D203,
inherit = false

# -----------------------------------------------------------------------------
# Flake 8
# https://flake8.readthedocs.io/en/latest/user/configuration.html
# -----------------------------------------------------------------------------
[flake8]
exclude = */tests/*
ignore = E126,
max-line-length = 79
max-complexity = 64

# -----------------------------------------------------------------------------
# pylint
# https://pylint.readthedocs.io/en/latest/
# -----------------------------------------------------------------------------
#[pylint:messages]

# -----------------------------------------------------------------------------
# isort
# https://github.com/timothycrosley/isort/wiki/isort-Settings
# -----------------------------------------------------------------------------
[isort]
from_first = true
import_heading_stdlib = Standard library imports
import_heading_firstparty = Local imports
import_heading_thirdparty = Third party imports
indent = '    '
known_first_party = ciocheck
known_third_party = six,pytest,autopep8,yapf,pylint
line_length = 79
sections = FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER

# -----------------------------------------------------------------------------
# YAPF
# https://github.com/google/yapf#formatting-style
# -----------------------------------------------------------------------------
[yapf:style]
based_on_style = pep8
column_limit = 79
spaces_before_comment = 2

# -----------------------------------------------------------------------------
# autopep8
# https://pep8.readthedocs.io/en/latest/intro.html#configuration
# -----------------------------------------------------------------------------
[autopep8]
exclude = */tests/*
ignore = E126,
max-line-length = 99
aggressive = 0

# -----------------------------------------------------------------------------
# Coverage
# https://coverage.readthedocs.io/en/latest/config.html
# -----------------------------------------------------------------------------
[coverage:run]
omit =
    */tests/*

[coverage:report]
fail_under = 0
show_missing = true
skip_covered = true
exclude_lines =
    pragma: no cover
    def test():
    if __name__ == .__main__.:

# -----------------------------------------------------------------------------
# pytest
# http://doc.pytest.org/en/latest/usage.html
# -----------------------------------------------------------------------------
[pytest]
addopts = -rfew --durations=10
python_functions = test_*

Usage

usage: ciocheck [-h] [--disable-formatters] [--disable-linters]
                [--disable-tests] [--file-mode {lines,files,all}]
                [--diff-mode {commited,staged,unstaged}] [--branch BRANCH]
                [--check {pep8,pydocstyle,flake8,pylint,pyformat,isort,yapf,autopep8,coverage,pytest}
                [--enforce {pep8,pydocstyle,flake8,pylint,pyformat,isort,yapf,autopep8,coverage,pytest}
                [--config CONFIG_FILE]
                folders [folders ...]

Run Continuum Analytics test suite.

positional arguments:
  folder                     Folder to analize. Use from repo root.'

optional arguments:
  --help, -h                 Show this help message and exit

  --disable-formatters, -df  Skip all configured formatters

  --disable-linters, -dl     Skip all configured linters

  --disable-tests, -dt       Skip running tests

  --file-mode, -fm           {lines,files,all}
                             Define if the tool should run on modified lines of
                             files (default), modified files or all files

  --diff-mode, -dm           {commited,staged,unstaged}
                             Define diff mode. Default mode is commited.

  --branch, -b BRANCH        Define branch to compare to. Default branch is
                             "origin/master"

  --check, -c                {pep8,pydocstyle,flake8,pylint,pyformat,isort,yapf,autopep8,coverage,pytest}
                             Select tools to run. Default is "pep8"

  --enforce, -e              {pep8,pydocstyle,flake8,pylint,pyformat,isort,yapf,autopep8,coverage,pytest}
                             Select tools to enforce. Enforced tools will fail if a
                             result is obtained. Default is none.

  --config, -cf CONFIG_FILE  Select a config file to use. Default is none.

Check format of imports only in some_module.

Use ciocheck from the root of the git repo (for now...).

$ ciocheck some_module/

Installation

$ conda install ciocheck -c conda-forge

For development

$ conda install ciocheck -c conda-forge
$ python setup.py develop

ciocheck's People

Contributors

goanpeca avatar havocp avatar rlaverde 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.