summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/development_guide/contribute.rst3
-rw-r--r--pylint/extensions/__init__.py17
-rw-r--r--script/get_unused_message_id_category.py33
3 files changed, 53 insertions, 0 deletions
diff --git a/doc/development_guide/contribute.rst b/doc/development_guide/contribute.rst
index d846805ac..86cd352fd 100644
--- a/doc/development_guide/contribute.rst
+++ b/doc/development_guide/contribute.rst
@@ -194,6 +194,9 @@ Tips for Getting Started with Pylint Development
message to find where the warning is raised,
and therefore where the logic for that code exists.
+* When adding a new checker class you can use the :file:`get_unused_message_id_category.py`
+ script in :file:`./scripts` to get a message id that is not used by
+ any of the other checkers.
Building the documentation
----------------------------
diff --git a/pylint/extensions/__init__.py b/pylint/extensions/__init__.py
index e69de29bb..96568077c 100644
--- a/pylint/extensions/__init__.py
+++ b/pylint/extensions/__init__.py
@@ -0,0 +1,17 @@
+# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
+
+from typing import TYPE_CHECKING
+
+from pylint.utils import register_plugins
+
+if TYPE_CHECKING:
+ from pylint.lint import PyLinter
+
+
+def initialize(linter: "PyLinter") -> None:
+ """Initialize linter with checkers in the extensions directory"""
+ register_plugins(linter, __path__[0]) # type: ignore # Fixed in https://github.com/python/mypy/pull/9454
+
+
+__all__ = ["initialize"]
diff --git a/script/get_unused_message_id_category.py b/script/get_unused_message_id_category.py
new file mode 100644
index 000000000..5ddcd0b3c
--- /dev/null
+++ b/script/get_unused_message_id_category.py
@@ -0,0 +1,33 @@
+"""Small script to get a new unused message id category"""
+# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
+
+from typing import List
+
+from pylint.checkers import initialize as initialize_checkers
+from pylint.extensions import initialize as initialize_extensions
+from pylint.lint.pylinter import PyLinter
+
+
+def register_all_checkers_and_plugins(linter: "PyLinter") -> None:
+ """Registers all checkers and plugins"""
+ linter.cmdline_parser.set_conflict_handler("resolve")
+ initialize_checkers(linter)
+ initialize_extensions(linter)
+
+
+def get_next_code_category(message_ids: List[str]) -> int:
+ categories = sorted({int(i[:2]) for i in message_ids})
+ for i in categories:
+ if i + 1 not in categories:
+ return i + 1
+ return categories[-1] + 1
+
+
+if __name__ == "__main__":
+ pylinter = PyLinter()
+ register_all_checkers_and_plugins(pylinter)
+ messages = sorted(i.msgid[1:] for i in pylinter.msgs_store.messages)
+ next_category = get_next_code_category(messages)
+ print(f"Next free message id category is {next_category:02}")
+ print(f"Please use {next_category:02}01 for the first message of the new checker")