From 70465d79724cd3d86ace9b96de9aef7cf5f37895 Mon Sep 17 00:00:00 2001 From: DudeNr33 <3929834+DudeNr33@users.noreply.github.com> Date: Sun, 2 Mar 2025 12:52:12 +0100 Subject: [PATCH 1/2] feat(pyreverse): add support for colorized output when using output formats mmd and html --- doc/whatsnew/fragments/10242.feature.rst | 3 ++ pylint/pyreverse/mermaidjs_printer.py | 3 ++ .../colorized_output/colorized.mmd | 46 +++++++++++++++++++ .../colorized_output/colorized.rc | 2 +- 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 doc/whatsnew/fragments/10242.feature.rst create mode 100644 tests/pyreverse/functional/class_diagrams/colorized_output/colorized.mmd diff --git a/doc/whatsnew/fragments/10242.feature.rst b/doc/whatsnew/fragments/10242.feature.rst new file mode 100644 index 0000000000..9be0bd25c7 --- /dev/null +++ b/doc/whatsnew/fragments/10242.feature.rst @@ -0,0 +1,3 @@ +`pyreverse`: add support for colorized output when using output format `mmd` (MermaidJS) and `html`. + +Closes #10242 diff --git a/pylint/pyreverse/mermaidjs_printer.py b/pylint/pyreverse/mermaidjs_printer.py index 24fa927761..22a8f768b1 100644 --- a/pylint/pyreverse/mermaidjs_printer.py +++ b/pylint/pyreverse/mermaidjs_printer.py @@ -64,6 +64,9 @@ def emit_node( self.emit(line) self._dec_indent() self.emit("}") + # apply style for colored output + if properties.color and properties.color != self.DEFAULT_COLOR: + self.emit(f"style {name} fill:{properties.color}") def emit_edge( self, diff --git a/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.mmd b/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.mmd new file mode 100644 index 0000000000..bf90bd708d --- /dev/null +++ b/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.mmd @@ -0,0 +1,46 @@ +classDiagram + class CheckerCollector { + checker1 + checker2 + checker3 + } + style CheckerCollector fill:#77AADD + class ElseifUsedChecker { + msgs : dict + name : str + leave_module(_: nodes.Module) None + process_tokens(tokens: list[TokenInfo]) None + visit_if(node: nodes.If) None + } + style ElseifUsedChecker fill:#99DDFF + class ExceptionsChecker { + msgs : dict + name : str + options : tuple + open() None + visit_binop(node: nodes.BinOp) None + visit_compare(node: nodes.Compare) None + visit_raise(node: nodes.Raise) None + visit_try(node: nodes.Try) None + visit_trystar(node: nodes.TryStar) None + } + style ExceptionsChecker fill:#44BB99 + class StdlibChecker { + msgs : dict[str, MessageDefinitionTuple] + name : str + deprecated_arguments(method: str) tuple[tuple[int | None, str], ...] + deprecated_attributes() Iterable[str] + deprecated_classes(module: str) Iterable[str] + deprecated_decorators() Iterable[str] + deprecated_methods() set[str] + visit_boolop(node: nodes.BoolOp) None + visit_call(node: nodes.Call) None + visit_functiondef(node: nodes.FunctionDef) None + visit_if(node: nodes.If) None + visit_ifexp(node: nodes.IfExp) None + visit_unaryop(node: nodes.UnaryOp) None + } + style StdlibChecker fill:#44BB99 + ExceptionsChecker --* CheckerCollector : checker1 + StdlibChecker --* CheckerCollector : checker3 + ElseifUsedChecker --* CheckerCollector : checker2 diff --git a/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.rc b/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.rc index 1d0560a4d2..0796a1b611 100644 --- a/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.rc +++ b/tests/pyreverse/functional/class_diagrams/colorized_output/colorized.rc @@ -1,3 +1,3 @@ [testoptions] -output_formats=puml +output_formats=puml,mmd command_line_args=-S --colorized --max-color-depth=2 From b0dd454ea2d86c52dbf3168d8f8a1cc32e3487c2 Mon Sep 17 00:00:00 2001 From: DudeNr33 <3929834+DudeNr33@users.noreply.github.com> Date: Sun, 2 Mar 2025 12:58:45 +0100 Subject: [PATCH 2/2] remove newsframgent file suffix --- doc/whatsnew/fragments/{10242.feature.rst => 10242.feature} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/whatsnew/fragments/{10242.feature.rst => 10242.feature} (100%) diff --git a/doc/whatsnew/fragments/10242.feature.rst b/doc/whatsnew/fragments/10242.feature similarity index 100% rename from doc/whatsnew/fragments/10242.feature.rst rename to doc/whatsnew/fragments/10242.feature