From 6547c8990ed17264799d15d246ce9875dcaa0a0a Mon Sep 17 00:00:00 2001 From: Taneli Hukkinen <3275109+hukkin@users.noreply.github.com> Date: Fri, 15 Apr 2022 15:32:46 +0300 Subject: [PATCH] __slots__ for dataclasses --- markdown_it/_compat.py | 10 ++++++++++ markdown_it/ruler.py | 4 +++- markdown_it/rules_inline/state_inline.py | 3 ++- markdown_it/token.py | 4 +++- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 markdown_it/_compat.py diff --git a/markdown_it/_compat.py b/markdown_it/_compat.py new file mode 100644 index 00000000..12df1aa6 --- /dev/null +++ b/markdown_it/_compat.py @@ -0,0 +1,10 @@ +from __future__ import annotations + +from collections.abc import Mapping +import sys +from typing import Any + +if sys.version_info >= (3, 10): + DATACLASS_KWARGS: Mapping[str, Any] = {"slots": True} +else: + DATACLASS_KWARGS: Mapping[str, Any] = {} diff --git a/markdown_it/ruler.py b/markdown_it/ruler.py index b46bac69..11b937a0 100644 --- a/markdown_it/ruler.py +++ b/markdown_it/ruler.py @@ -21,6 +21,8 @@ class Ruler from dataclasses import dataclass, field from typing import TYPE_CHECKING +from markdown_it._compat import DATACLASS_KWARGS + if TYPE_CHECKING: from markdown_it import MarkdownIt @@ -50,7 +52,7 @@ def src(self, value: str) -> None: RuleFunc = Callable -@dataclass() +@dataclass(**DATACLASS_KWARGS) class Rule: name: str enabled: bool diff --git a/markdown_it/rules_inline/state_inline.py b/markdown_it/rules_inline/state_inline.py index 442dac81..283532cc 100644 --- a/markdown_it/rules_inline/state_inline.py +++ b/markdown_it/rules_inline/state_inline.py @@ -5,6 +5,7 @@ from dataclasses import dataclass from typing import TYPE_CHECKING +from .._compat import DATACLASS_KWARGS from ..common.utils import isMdAsciiPunct, isPunctChar, isWhiteSpace from ..ruler import StateBase from ..token import Token @@ -13,7 +14,7 @@ from markdown_it import MarkdownIt -@dataclass() +@dataclass(**DATACLASS_KWARGS) class Delimiter: # Char code of the starting marker (number). marker: int diff --git a/markdown_it/token.py b/markdown_it/token.py index b3c24728..b20875b6 100644 --- a/markdown_it/token.py +++ b/markdown_it/token.py @@ -5,6 +5,8 @@ from typing import Any import warnings +from markdown_it._compat import DATACLASS_KWARGS + def convert_attrs(value: Any) -> Any: """Convert Token.attrs set as ``None`` or ``[[key, value], ...]`` to a dict. @@ -18,7 +20,7 @@ def convert_attrs(value: Any) -> Any: return value -@dc.dataclass() +@dc.dataclass(**DATACLASS_KWARGS) class Token: type: str