Merge pull request #1750 from paulhfischer/warn_on_globs_instead_of_regex

extended warning if globs are used instead of regex to top level
This commit is contained in:
Anthony Sottile 2021-01-01 16:45:30 -08:00 committed by GitHub
commit b2c0fab3b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 4 deletions

View file

@ -132,7 +132,7 @@ class WarnMutableRev(cfgv.ConditionalOptional):
)
class OptionalSensibleRegex(cfgv.OptionalNoDefault):
class OptionalSensibleRegexAtHook(cfgv.OptionalNoDefault):
def check(self, dct: Dict[str, Any]) -> None:
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:
key = 'rev'
@ -259,8 +270,8 @@ CONFIG_HOOK_DICT = cfgv.Map(
for item in MANIFEST_HOOK_DICT.items
if item.key != 'id'
),
OptionalSensibleRegex('files', cfgv.check_string),
OptionalSensibleRegex('exclude', cfgv.check_string),
OptionalSensibleRegexAtHook('files', cfgv.check_string),
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
)
CONFIG_REPO_DICT = cfgv.Map(
'Repository', 'repo',
@ -329,6 +340,8 @@ CONFIG_SCHEMA = cfgv.Map(
),
warn_unknown_keys_root,
),
OptionalSensibleRegexAtTop('files', cfgv.check_string),
OptionalSensibleRegexAtTop('exclude', cfgv.check_string),
# do not warn about configuration for pre-commit.ci
cfgv.OptionalNoDefault('ci', cfgv.check_type(dict)),

View file

@ -244,7 +244,7 @@ def test_warn_mutable_rev_conditional():
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 = {
'id': 'flake8',
'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))
def test_mains_not_ok(tmpdir, fn):
not_yaml = tmpdir.join('f.notyaml')