diff options
author | Alvaro Frias <alvaro.frias@eclypsium.com> | 2022-11-27 12:18:43 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-27 16:18:43 +0100 |
commit | b950567b872c7177f976066e9b8982f08e62eb6c (patch) | |
tree | ee0a1c30ded4eb4ce2267adcc52b9dcfb9865039 /pylint/pyreverse/diagrams.py | |
parent | 978d1ab95603fa337e686aac8956366556c23080 (diff) | |
download | pylint-git-b950567b872c7177f976066e9b8982f08e62eb6c.tar.gz |
Feature: distinct Composition and Aggregation arrows (#7836)
* Update Linker to add aggregations_type and associations_type to nodes
Update logic of nodes to check what kind of relationship does nodes have (association, aggregation)
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update ClassDiagram's extrac_relationship method to add aggregations links
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update DiagramWriter to generate AGGREGATION edges
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update printers to show aggregations
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update tests with changes on aggregations
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update Linker to add aggregations_type and associations_type to nodes
Update logic of nodes to check what kind of relationship does nodes have (association, aggregation)
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update ClassDiagram's extrac_relationship method to add aggregations links
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update DiagramWriter to generate AGGREGATION edges
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update tests with changes on aggregations
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Apply pylint pre-commit correction
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Apply mypy corrections
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Add towrncrier fragment
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update towncrier fragment
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update towncrier fragment
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update doc/whatsnew/fragments/6543.feature
Co-authored-by: Andreas Finkler <3929834+DudeNr33@users.noreply.github.com>
* Add documentation
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* fix typo
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Add type hints
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* Update pylint/pyreverse/diagrams.py
Co-authored-by: Daniël van Noord <13665637+DanielNoord@users.noreply.github.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Update type hints
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Update fragment
* Update fragment
Signed-off-by: Alvaro Frias Garay <alvaro.frias@eclypsium.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Andreas Finkler <3929834+DudeNr33@users.noreply.github.com>
Co-authored-by: Daniël van Noord <13665637+DanielNoord@users.noreply.github.com>
Diffstat (limited to 'pylint/pyreverse/diagrams.py')
-rw-r--r-- | pylint/pyreverse/diagrams.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/pylint/pyreverse/diagrams.py b/pylint/pyreverse/diagrams.py index a9dcd1c5e..382d76bf7 100644 --- a/pylint/pyreverse/diagrams.py +++ b/pylint/pyreverse/diagrams.py @@ -214,20 +214,35 @@ class ClassDiagram(Figure, FilterMixIn): self.add_relationship(obj, impl_obj, "implements") except KeyError: continue - # associations link - for name, values in list(node.instance_attrs_type.items()) + list( + + # associations & aggregations links + for name, values in list(node.aggregations_type.items()): + for value in values: + self.assign_association_relationship( + value, obj, name, "aggregation" + ) + + for name, values in list(node.associations_type.items()) + list( node.locals_type.items() ): + for value in values: - if value is astroid.Uninferable: - continue - if isinstance(value, astroid.Instance): - value = value._proxied - try: - associated_obj = self.object_from_node(value) - self.add_relationship(associated_obj, obj, "association", name) - except KeyError: - continue + self.assign_association_relationship( + value, obj, name, "association" + ) + + def assign_association_relationship( + self, value: astroid.NodeNG, obj: ClassEntity, name: str, type_relationship: str + ) -> None: + if value is astroid.Uninferable: + return + if isinstance(value, astroid.Instance): + value = value._proxied + try: + associated_obj = self.object_from_node(value) + self.add_relationship(associated_obj, obj, type_relationship, name) + except KeyError: + return class PackageDiagram(ClassDiagram): |