Skip to content

Commit 0940122

Browse files
authored
Merge pull request #2 from SVilgelm/ignore-empty-files
Ignoring empty files
2 parents a35c450 + 80fc4f5 commit 0940122

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Generate a `.pylintrc` file by executing `pylint --generate-rcfile`.
2020
Then add `pylintfileheader` to the plugins to load and set the `file-header` option to the [regular expression](https://docs.python.org/3/library/re.html#regular-expression-syntax) that the file header should match.
2121
When the `file-header` setting is omitted, pylint will pass.
2222

23+
* `file-header-ignore-empty-files` turns on the mode of ignoring the empty files, like `__init__.py`. The default value is `False`.
24+
2325
## Example
2426

2527
### Setup

pylintfileheader/file_header_checker.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,28 @@ class FileHeaderChecker(BaseChecker):
3636
'help': 'The file header that should be on top of a file.',
3737
}
3838
),
39+
(
40+
'file-header-ignore-empty-files',
41+
{
42+
'default': False,
43+
'type': 'yn',
44+
'metavar': 'y_or_n',
45+
'help': 'Ignoring the empty files.',
46+
}
47+
),
3948
)
4049

4150
def process_module(self, node):
4251
"""Process the astroid node stream."""
4352
if self.config.file_header:
53+
content = None
54+
with node.stream() as stream:
55+
# Explicit decoding required by python 3
56+
content = stream.read().decode('utf-8')
57+
58+
if self.config.file_header_ignore_empty_files and not content:
59+
return
60+
4461
if sys.version_info[0] < 3:
4562
pattern = re.compile(
4663
r'\A' + self.config.file_header, re.LOCALE | re.MULTILINE)
@@ -49,11 +66,6 @@ def process_module(self, node):
4966
pattern = re.compile(
5067
r'\A' + self.config.file_header, re.MULTILINE)
5168

52-
content = None
53-
with node.stream() as stream:
54-
# Explicit decoding required by python 3
55-
content = stream.read().decode('utf-8')
56-
5769
matches = pattern.findall(content)
5870

5971
if len(matches) != 1:

pylintfileheadertest/file_header_checker_test.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,23 @@ def test_config_empty_no_message_added(self):
5151
node_mock.stream.return_value.__enter__.return_value.read.return_value.decode.return_value = '# Invalid\n# Header'
5252
with self.assertNoMessages():
5353
self.checker.process_module(node_mock)
54+
55+
def test_ignore_empty_files(self):
56+
"""When the `file-header-ignore-empty-files` option is set to True."""
57+
58+
self.checker.config.file_header_ignore_empty_files = True
59+
node_mock = MagicMock()
60+
node_mock.stream.return_value.__enter__.return_value.read.return_value.decode.return_value = ''
61+
with self.assertNoMessages():
62+
self.checker.process_module(node_mock)
63+
64+
def test_do_not_ignore_empty_files(self):
65+
"""When the `file-header-ignore-empty-files` option is set to False (default value)."""
66+
67+
node_mock = MagicMock()
68+
node_mock.stream.return_value.__enter__.return_value.read.return_value.decode.return_value = ''
69+
with self.assertAddsMessages(pylint.testutils.Message(
70+
msg_id='invalid-file-header',
71+
line=1,
72+
args='# Valid\n# Header')):
73+
self.checker.process_module(node_mock)

requirements-dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ pytest-cov
1111
setuptools>=38.6.0
1212
twine>=1.11.0
1313
wheel>=0.31.0
14+
# The last compitible version with python3.4, it is needed for twine
15+
readme-renderer==24.0; python_version == '3.4'

0 commit comments

Comments
 (0)