Skip to content

Commit

Permalink
Merge pull request #1031 from ericfrederich/check-illegal-windows-names
Browse files Browse the repository at this point in the history
Add check for illegal Widnows names
  • Loading branch information
asottile committed Apr 14, 2024
2 parents b73acb1 + 8654097 commit 0d20f18
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .pre-commit-hooks.yaml
Expand Up @@ -40,6 +40,11 @@
language: python
types: [text, executable]
stages: [commit, push, manual]
- id: check-illegal-windows-names
name: check illegal windows names
entry: Illegal windows filenames detected
language: fail
files: '(?i)(^|/)(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(\.|/|$)'
- id: check-json
name: check json
description: checks json files for parseable syntax.
Expand Down
3 changes: 3 additions & 0 deletions README.md
Expand Up @@ -51,6 +51,9 @@ Checks for a common error of placing code before the docstring.
#### `check-executables-have-shebangs`
Checks that non-binary executables have a proper shebang.

#### `check-illegal-windows-names`
Check for files that cannot be created on Windows.

#### `check-json`
Attempts to load all json files to verify syntax.

Expand Down
46 changes: 46 additions & 0 deletions tests/check_illegal_windows_names_test.py
@@ -0,0 +1,46 @@
from __future__ import annotations

import os.path
import re

import pytest

from pre_commit_hooks.check_yaml import yaml


@pytest.fixture(scope='module')
def hook_re():
here = os.path.dirname(__file__)
with open(os.path.join(here, '..', '.pre-commit-hooks.yaml')) as f:
hook_defs = yaml.load(f)
hook, = (
hook
for hook in hook_defs
if hook['id'] == 'check-illegal-windows-names'
)
yield re.compile(hook['files'])


@pytest.mark.parametrize(
's',
(
pytest.param('aux.txt', id='with ext'),
pytest.param('aux', id='without ext'),
pytest.param('AuX.tXt', id='capitals'),
pytest.param('com7.dat', id='com with digit'),
),
)
def test_check_illegal_windows_names_matches(hook_re, s):
assert hook_re.search(s)


@pytest.mark.parametrize(
's',
(
pytest.param('README.md', id='standard file'),
pytest.param('foo.aux', id='as ext'),
pytest.param('com.dat', id='com without digit'),
),
)
def test_check_illegal_windows_names_does_not_match(hook_re, s):
assert hook_re.search(s) is None

0 comments on commit 0d20f18

Please sign in to comment.