X Tutup
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ exclude_lines =
^\s*return NotImplemented\b
^\s*raise$

# Ignore typing-related things
^if (False|TYPE_CHECKING):
: \.\.\.$

# Don't complain if non-runnable code isn't run:
^if __name__ == ['"]__main__['"]:$

Expand Down
16 changes: 5 additions & 11 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
*.egg-info
*.iml
*.py[co]
.*.sw[a-z]
.coverage
.idea
.project
.pydevproject
.tox
.venv.touch
/.coverage
/.mypy_cache
/.pytest_cache
/.tox
/dist
/venv*
coverage-html
dist
.pytest_cache
27 changes: 19 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.1.0
rev: v2.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand All @@ -12,30 +12,41 @@ repos:
- id: requirements-txt-fixer
- id: double-quote-string-fixer
- repo: https://gitlab.com/pycqa/flake8
rev: 3.7.7
rev: 3.7.9
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.4.3
rev: v1.4.4
hooks:
- id: autopep8
- repo: https://github.com/pre-commit/pre-commit
rev: v1.14.4
rev: v1.21.0
hooks:
- id: validate_manifest
- repo: https://github.com/asottile/pyupgrade
rev: v1.12.0
rev: v1.25.3
hooks:
- id: pyupgrade
args: [--py36-plus]
- repo: https://github.com/asottile/reorder_python_imports
rev: v1.4.0
rev: v1.9.0
hooks:
- id: reorder-python-imports
language_version: python3
args: [--py3-plus]
- repo: https://github.com/asottile/add-trailing-comma
rev: v1.0.0
rev: v1.5.0
hooks:
- id: add-trailing-comma
args: [--py36-plus]
- repo: https://github.com/asottile/setup-cfg-fmt
rev: v1.6.0
hooks:
- id: setup-cfg-fmt
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.761
hooks:
- id: mypy
exclude: ^testing/resources/
- repo: meta
hooks:
- id: check-hooks-apply
Expand Down
7 changes: 3 additions & 4 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,17 @@ resources:
type: github
endpoint: github
name: asottile/azure-pipeline-templates
ref: refs/tags/v0.0.15
ref: refs/tags/v1.0.0

jobs:
- template: job--pre-commit.yml@asottile
- template: job--python-tox.yml@asottile
parameters:
toxenvs: [py27, py37]
toxenvs: [py37]
os: windows
additional_variables:
COVERAGE_IGNORE_WINDOWS: '# pragma: windows no cover'
TOX_TESTENV_PASSENV: COVERAGE_IGNORE_WINDOWS
TEMP: C:\Temp # remove when dropping python2
pre_test:
- powershell: Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
displayName: Add conda to PATH
Expand All @@ -39,7 +38,7 @@ jobs:
displayName: install swift
- template: job--python-tox.yml@asottile
parameters:
toxenvs: [pypy, pypy3, py27, py36, py37, py38]
toxenvs: [pypy3, py36, py37, py38]
os: linux
pre_test:
- task: UseRubyVersion@0
Expand Down
2 changes: 0 additions & 2 deletions pre_commit/__main__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
from __future__ import absolute_import

from pre_commit.main import main


Expand Down
47 changes: 28 additions & 19 deletions pre_commit/clientlib.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from __future__ import absolute_import
from __future__ import unicode_literals

import argparse
import functools
import logging
import pipes
import sys
from typing import Any
from typing import Dict
from typing import Optional
from typing import Sequence

import cfgv
from aspy.yaml import ordered_load
Expand All @@ -21,15 +22,15 @@
check_string_regex = cfgv.check_and(cfgv.check_string, cfgv.check_regex)


def check_type_tag(tag):
def check_type_tag(tag: str) -> None:
if tag not in ALL_TAGS:
raise cfgv.ValidationError(
'Type tag {!r} is not recognized. '
'Try upgrading identify and pre-commit?'.format(tag),
)


def check_min_version(version):
def check_min_version(version: str) -> None:
if parse_version(version) > parse_version(C.VERSION):
raise cfgv.ValidationError(
'pre-commit version {} is required but version {} is installed. '
Expand All @@ -39,7 +40,7 @@ def check_min_version(version):
)


def _make_argparser(filenames_help):
def _make_argparser(filenames_help: str) -> argparse.ArgumentParser:
parser = argparse.ArgumentParser()
parser.add_argument('filenames', nargs='*', help=filenames_help)
parser.add_argument('-V', '--version', action='version', version=C.VERSION)
Expand Down Expand Up @@ -89,7 +90,7 @@ class InvalidManifestError(FatalError):
)


def validate_manifest_main(argv=None):
def validate_manifest_main(argv: Optional[Sequence[str]] = None) -> int:
parser = _make_argparser('Manifest filenames.')
args = parser.parse_args(argv)
ret = 0
Expand All @@ -106,19 +107,19 @@ def validate_manifest_main(argv=None):
META = 'meta'


class MigrateShaToRev(object):
class MigrateShaToRev:
key = 'rev'

@staticmethod
def _cond(key):
def _cond(key: str) -> cfgv.Conditional:
return cfgv.Conditional(
key, cfgv.check_string,
condition_key='repo',
condition_value=cfgv.NotIn(LOCAL, META),
ensure_absent=True,
)

def check(self, dct):
def check(self, dct: Dict[str, Any]) -> None:
if dct.get('repo') in {LOCAL, META}:
self._cond('rev').check(dct)
self._cond('sha').check(dct)
Expand All @@ -129,14 +130,14 @@ def check(self, dct):
else:
self._cond('rev').check(dct)

def apply_default(self, dct):
def apply_default(self, dct: Dict[str, Any]) -> None:
if 'sha' in dct:
dct['rev'] = dct.pop('sha')

remove_default = cfgv.Required.remove_default


def _entry(modname):
def _entry(modname: str) -> str:
"""the hook `entry` is passed through `shlex.split()` by the command
runner, so to prevent issues with spaces and backslashes (on Windows)
it must be quoted here.
Expand All @@ -146,13 +147,21 @@ def _entry(modname):
)


def warn_unknown_keys_root(extra, orig_keys, dct):
def warn_unknown_keys_root(
extra: Sequence[str],
orig_keys: Sequence[str],
dct: Dict[str, str],
) -> None:
logger.warning(
'Unexpected key(s) present at root: {}'.format(', '.join(extra)),
)


def warn_unknown_keys_repo(extra, orig_keys, dct):
def warn_unknown_keys_repo(
extra: Sequence[str],
orig_keys: Sequence[str],
dct: Dict[str, str],
) -> None:
logger.warning(
'Unexpected key(s) present on {}: {}'.format(
dct['repo'], ', '.join(extra),
Expand Down Expand Up @@ -202,7 +211,7 @@ def warn_unknown_keys_repo(extra, orig_keys, dct):
if item.key in {'name', 'language', 'entry'} else
item
for item in MANIFEST_HOOK_DICT.items
])
]),
)
CONFIG_HOOK_DICT = cfgv.Map(
'Hook', 'id',
Expand All @@ -217,7 +226,7 @@ def warn_unknown_keys_repo(extra, orig_keys, dct):
cfgv.OptionalNoDefault(item.key, item.check_fn)
for item in MANIFEST_HOOK_DICT.items
if item.key != 'id'
]
],
)
CONFIG_REPO_DICT = cfgv.Map(
'Repository', 'repo',
Expand All @@ -243,7 +252,7 @@ def warn_unknown_keys_repo(extra, orig_keys, dct):
DEFAULT_LANGUAGE_VERSION = cfgv.Map(
'DefaultLanguageVersion', None,
cfgv.NoAdditionalKeys(all_languages),
*[cfgv.Optional(x, cfgv.check_string, C.DEFAULT) for x in all_languages]
*[cfgv.Optional(x, cfgv.check_string, C.DEFAULT) for x in all_languages],
)
CONFIG_SCHEMA = cfgv.Map(
'Config', None,
Expand Down Expand Up @@ -284,7 +293,7 @@ class InvalidConfigError(FatalError):
pass


def ordered_load_normalize_legacy_config(contents):
def ordered_load_normalize_legacy_config(contents: str) -> Dict[str, Any]:
data = ordered_load(contents)
if isinstance(data, list):
# TODO: Once happy, issue a deprecation warning and instructions
Expand All @@ -301,7 +310,7 @@ def ordered_load_normalize_legacy_config(contents):
)


def validate_config_main(argv=None):
def validate_config_main(argv: Optional[Sequence[str]] = None) -> int:
parser = _make_argparser('Config filenames.')
args = parser.parse_args(argv)
ret = 0
Expand Down
12 changes: 5 additions & 7 deletions pre_commit/color.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
from __future__ import unicode_literals

import os
import sys

terminal_supports_color = True
if os.name == 'nt': # pragma: no cover (windows)
if sys.platform == 'win32': # pragma: no cover (windows)
from pre_commit.color_windows import enable_virtual_terminal_processing
try:
enable_virtual_terminal_processing()
except WindowsError:
except OSError:
terminal_supports_color = False

RED = '\033[41m'
Expand All @@ -23,7 +21,7 @@ class InvalidColorSetting(ValueError):
pass


def format_color(text, color, use_color_setting):
def format_color(text: str, color: str, use_color_setting: bool) -> str:
"""Format text with color.

Args:
Expand All @@ -34,13 +32,13 @@ def format_color(text, color, use_color_setting):
if not use_color_setting:
return text
else:
return '{}{}{}'.format(color, text, NORMAL)
return f'{color}{text}{NORMAL}'


COLOR_CHOICES = ('auto', 'always', 'never')


def use_color(setting):
def use_color(setting: str) -> bool:
"""Choose whether to use color based on the command argument.

Args:
Expand Down
21 changes: 11 additions & 10 deletions pre_commit/color_windows.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from __future__ import absolute_import
from __future__ import unicode_literals

from ctypes import POINTER
from ctypes import windll
from ctypes import WinError
from ctypes import WINFUNCTYPE
from ctypes.wintypes import BOOL
from ctypes.wintypes import DWORD
from ctypes.wintypes import HANDLE
import sys
assert sys.platform == 'win32'

from ctypes import POINTER # noqa: E402
from ctypes import windll # noqa: E402
from ctypes import WinError # noqa: E402
from ctypes import WINFUNCTYPE # noqa: E402
from ctypes.wintypes import BOOL # noqa: E402
from ctypes.wintypes import DWORD # noqa: E402
from ctypes.wintypes import HANDLE # noqa: E402


STD_OUTPUT_HANDLE = -11
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4
Expand Down
Loading
X Tutup