mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
extended warning if globs are used instead of regex to top level
This commit is contained in:
parent
7432acc215
commit
b1a9209f9f
2 changed files with 34 additions and 4 deletions
|
|
@ -132,7 +132,7 @@ class WarnMutableRev(cfgv.ConditionalOptional):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class OptionalSensibleRegex(cfgv.OptionalNoDefault):
|
class OptionalSensibleRegexAtHook(cfgv.OptionalNoDefault):
|
||||||
def check(self, dct: Dict[str, Any]) -> None:
|
def check(self, dct: Dict[str, Any]) -> None:
|
||||||
super().check(dct)
|
super().check(dct)
|
||||||
|
|
||||||
|
|
@ -144,6 +144,17 @@ class OptionalSensibleRegex(cfgv.OptionalNoDefault):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class OptionalSensibleRegexAtTop(cfgv.OptionalNoDefault):
|
||||||
|
def check(self, dct: Dict[str, Any]) -> None:
|
||||||
|
super().check(dct)
|
||||||
|
|
||||||
|
if '/*' in dct.get(self.key, ''):
|
||||||
|
logger.warning(
|
||||||
|
f'The top-level {self.key!r} field is a regex, not a glob -- '
|
||||||
|
f"matching '/*' probably isn't what you want here",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MigrateShaToRev:
|
class MigrateShaToRev:
|
||||||
key = 'rev'
|
key = 'rev'
|
||||||
|
|
||||||
|
|
@ -259,8 +270,8 @@ CONFIG_HOOK_DICT = cfgv.Map(
|
||||||
for item in MANIFEST_HOOK_DICT.items
|
for item in MANIFEST_HOOK_DICT.items
|
||||||
if item.key != 'id'
|
if item.key != 'id'
|
||||||
),
|
),
|
||||||
OptionalSensibleRegex('files', cfgv.check_string),
|
OptionalSensibleRegexAtHook('files', cfgv.check_string),
|
||||||
OptionalSensibleRegex('exclude', cfgv.check_string),
|
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
|
||||||
)
|
)
|
||||||
CONFIG_REPO_DICT = cfgv.Map(
|
CONFIG_REPO_DICT = cfgv.Map(
|
||||||
'Repository', 'repo',
|
'Repository', 'repo',
|
||||||
|
|
@ -329,6 +340,8 @@ CONFIG_SCHEMA = cfgv.Map(
|
||||||
),
|
),
|
||||||
warn_unknown_keys_root,
|
warn_unknown_keys_root,
|
||||||
),
|
),
|
||||||
|
OptionalSensibleRegexAtTop('files', cfgv.check_string),
|
||||||
|
OptionalSensibleRegexAtTop('exclude', cfgv.check_string),
|
||||||
|
|
||||||
# do not warn about configuration for pre-commit.ci
|
# do not warn about configuration for pre-commit.ci
|
||||||
cfgv.OptionalNoDefault('ci', cfgv.check_type(dict)),
|
cfgv.OptionalNoDefault('ci', cfgv.check_type(dict)),
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,7 @@ def test_warn_mutable_rev_conditional():
|
||||||
cfgv.validate(config_obj, CONFIG_REPO_DICT)
|
cfgv.validate(config_obj, CONFIG_REPO_DICT)
|
||||||
|
|
||||||
|
|
||||||
def test_validate_optional_sensible_regex(caplog):
|
def test_validate_optional_sensible_regex_at_hook_level(caplog):
|
||||||
config_obj = {
|
config_obj = {
|
||||||
'id': 'flake8',
|
'id': 'flake8',
|
||||||
'files': 'dir/*.py',
|
'files': 'dir/*.py',
|
||||||
|
|
@ -261,6 +261,23 @@ def test_validate_optional_sensible_regex(caplog):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_validate_optional_sensible_regex_at_top_level(caplog):
|
||||||
|
config_obj = {
|
||||||
|
'files': 'dir/*.py',
|
||||||
|
'repos': [],
|
||||||
|
}
|
||||||
|
cfgv.validate(config_obj, CONFIG_SCHEMA)
|
||||||
|
|
||||||
|
assert caplog.record_tuples == [
|
||||||
|
(
|
||||||
|
'pre_commit',
|
||||||
|
logging.WARNING,
|
||||||
|
"The top-level 'files' field is a regex, not a glob -- matching "
|
||||||
|
"'/*' probably isn't what you want here",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('fn', (validate_config_main, validate_manifest_main))
|
@pytest.mark.parametrize('fn', (validate_config_main, validate_manifest_main))
|
||||||
def test_mains_not_ok(tmpdir, fn):
|
def test_mains_not_ok(tmpdir, fn):
|
||||||
not_yaml = tmpdir.join('f.notyaml')
|
not_yaml = tmpdir.join('f.notyaml')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue