From 236d22e364fe14c92b4407954332b3231b8a2b5f Mon Sep 17 00:00:00 2001 From: Trygve Aaberge Date: Sun, 2 Oct 2022 19:16:00 +0200 Subject: python: Include constant values in python stub This is useful for two reasons: 1. When running unit tests for a script weechat needs to be mocked. By having the constant values available in the stub file, they can be loaded from that, instead of having to define the constants manually for the mock. 2. If you log a constant value you have to look up what it means. This makes it easier, in the same vein as PR #1824. --- doc/python_stub.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/python_stub.py b/doc/python_stub.py index 7778d9753..ba5f730c4 100755 --- a/doc/python_stub.py +++ b/doc/python_stub.py @@ -28,6 +28,7 @@ from pathlib import Path import re DOC_DIR = Path(__file__).resolve().parent / "en" +SRC_DIR = Path(__file__).resolve().parent.parent / "src" STUB_HEADER = """\ # @@ -56,11 +57,19 @@ def print_stub_constants() -> None: "string": "str", } constant_pattern = re.compile(CONSTANT_RE) - with open(DOC_DIR / "weechat_scripting.en.adoc", - encoding="utf-8") as scripting_file: + with open( + DOC_DIR / "weechat_scripting.en.adoc", encoding="utf-8" + ) as scripting_file, open( + SRC_DIR / "plugins" / "weechat-plugin.h", encoding="utf-8" + ) as plugin_header_file: scripting = scripting_file.read() + plugin_header = plugin_header_file.read() for match in constant_pattern.finditer(scripting): - print(f'{match["constant"]}: {types[match["type"]]}') + value_re = rf'^#define {match["constant"]} +(?P[\w"-]+)$' + value_match = re.search(value_re, plugin_header, re.MULTILINE) + value = f' = {value_match["value"]}' if value_match else "" + + print(f'{match["constant"]}: {types[match["type"]]}{value}') def print_stub_functions() -> None: -- cgit v1.2.3