summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2022-05-16 10:40:07 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2022-05-16 12:21:17 +0200
commit64989b2601ff19926e43611c987e651e9211fe42 (patch)
treeff843fc71c043aab9c912e053744d44fc137a364
parent252a0e0ab82d344def8f7bfb447a00ff9e423db5 (diff)
downloadpylint-git-64989b2601ff19926e43611c987e651e9211fe42.tar.gz
[doc] Lazily write files for repeated doc builds
-rw-r--r--doc/exts/pylint_messages.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/doc/exts/pylint_messages.py b/doc/exts/pylint_messages.py
index 99dba0451..4388985d9 100644
--- a/doc/exts/pylint_messages.py
+++ b/doc/exts/pylint_messages.py
@@ -170,13 +170,35 @@ def _get_all_messages(
return messages_dict, old_messages
+def _message_needs_update(message_data: MessageData, category: str) -> bool:
+ """Do we need to regenerate this message .rst ?"""
+ message_path = _get_message_path(category, message_data)
+ if not message_path.exists():
+ return True
+ message_path_stats = message_path.stat().st_mtime
+ checker_path_stats = Path(message_data.checker_module_path).stat().st_mtime
+ return checker_path_stats > message_path_stats
+
+
+def _get_category_directory(category: str) -> Path:
+ return PYLINT_MESSAGES_PATH / category
+
+
+def _get_message_path(category: str, message: MessageData) -> Path:
+ category_dir = _get_category_directory(category)
+ return category_dir / f"{message.name}.rst"
+
+
def _write_message_page(messages_dict: MessagesDict) -> None:
"""Create or overwrite the file for each message."""
for category, messages in messages_dict.items():
- category_dir = PYLINT_MESSAGES_PATH / category
+ category_dir = _get_category_directory(category)
if not category_dir.exists():
category_dir.mkdir(parents=True, exist_ok=True)
for message in messages:
+ if not _message_needs_update(message, category):
+ print(f"{message.name} is up to date.", end="\r")
+ continue
_write_single_message_page(category_dir, message)