@@ -10,93 +10,59 @@ composer require --dev tasuku43/mermaid-class-diagram
1010```
1111
1212## Usage
13- Here is an example run on a sample project
14- ``` shell
15- $ tree
16- .
17- ├── composer.json
18- ├── composer.lock
19- ├── src
20- │ ├── SomeAbstractClass.php
21- │ ├── SomeClassA.php
22- │ ├── SomeClassB.php
23- │ ├── SomeClassC.php
24- │ ├── SomeClassD.php
25- │ ├── SomeClassE.php
26- │ └── SomeInterface.php
27- └── vendor
28- ```
29- ``` php
30- class SomeClassA extends SomeAbstractClass
31- {
32- private SomeClassB $someClassB;
33-
34- public function __construct(private SomeClassC $someClassC, SomeClassD $someClassD, private int $int)
35- {
36- }
37- }
38-
39- class SomeClassB
40- {
41- }
42-
43- class SomeClassC
44- {
45- }
46-
47- class SomeClassD
48- {
49- }
50-
51- class SomeClassE
52- {
53- public function __construct(private SomeClassA $a)
54- {
55- $b = new SomeClassB;
56- }
57-
58- public function dependAandC(SomeClassA $a): SomeClassC
59- {
60- }
61- }
6213
63- abstract class SomeAbstractClass implements SomeInterface
64- {
65- }
66-
67- interface SomeInterface
68- {
69- }
70- ```
71- ### Execute command by specifying a directory
14+ ### Command
15+ - ` vendor/bin/mermaid-class-diagram generate --path <path> [options] `
16+
17+ ### Options
18+ - ` --path <string> ` : Required. Directory (recursively scanned) or single PHP file.
19+ - ` --exclude-relationships <csv> ` : Hide edge types; case-insensitive; aliases supported.
20+ - ` dependency|dependencies|dep|deps `
21+ - ` composition|compositions|comp `
22+ - ` inheritance|inheritances|extends `
23+ - ` realization|realizations|implements `
24+ - ` --trait-mode <mode> ` : Trait rendering mode. Default: ` flatten ` .
25+ - ` with-traits ` (aliases: ` with_traits ` , ` with ` ): show trait nodes and ` use ` edges; suppress class-level comp/dep duplicates provided by traits.
26+ - ` flatten ` (aliases: ` flat ` ): hide trait nodes and ` use ` edges; reassign trait-origin comp/dep to using classes; supports trait→trait→class chains; deduplicates.
27+
28+ ### Examples
29+ #### Execute command by specifying a directory (sample project)
7230``` shell
73- $ vendor/bin/mermaid-class-diagram generate --path src
31+ $ vendor/bin/mermaid-class-diagram generate --path tests/data/Project
7432classDiagram
75- class SomeAbstractClass {
33+ class AbstractController {
7634 << abstract>>
7735 }
78- class SomeClassA {
36+ class AuditLogger {
7937 }
80- class SomeClassB {
38+ class AuditTarget {
8139 }
82- class SomeClassC {
40+ class User {
8341 }
84- class SomeClassD {
42+ class UserController {
8543 }
86- class SomeClassE {
44+ class UserRepository {
8745 }
88- class SomeInterface {
46+ class UserRepositoryInterface {
8947 <<interface>>
9048 }
49+ class UserService {
50+ }
51+ class UserStatus {
52+ <<enum>>
53+ }
9154
92- SomeInterface <|.. SomeAbstractClass: realization
93- SomeAbstractClass <|-- SomeClassA: inheritance
94- SomeClassA *-- SomeClassB: composition
95- SomeClassA *-- SomeClassC: composition
96- SomeClassA ..> SomeClassD: dependency
97- SomeClassE *-- SomeClassA: composition
98- SomeClassE ..> SomeClassB: dependency
99- SomeClassE ..> SomeClassC: dependency
55+ User *-- UserStatus: composition
56+ AbstractController <|-- UserController: inheritance
57+ UserController *-- UserService: composition
58+ UserRepository ..> User: dependency
59+ UserRepositoryInterface <|.. UserRepository: realization
60+ UserRepositoryInterface ..> User: dependency
61+ UserService *-- AuditLogger: composition
62+ UserService ..> AuditTarget: dependency
63+ UserService ..> InvalidArgumentException: dependency
64+ UserService ..> User: dependency
65+ UserService *-- UserRepositoryInterface: composition
10066` ` `
10167` ` ` mermaid
10268classDiagram
@@ -126,17 +92,15 @@ classDiagram
12692 SomeClassE ..> SomeClassB: dependency
12793 SomeClassE ..> SomeClassC: dependency
12894` ` `
129- # ## Execute command by specifying a file
95+ # ### Execute command by specifying a file (sample file)
13096` ` ` shell
131- $ vendor/bin/mermaid-class-diagram generate --path src/SomeClassA .php
97+ $ vendor/bin/mermaid-class-diagram generate --path tests/data/Project/Controller/UserController .php
13298classDiagram
133- class SomeClassA {
99+ class UserController {
134100 }
135101
136- SomeAbstractClass <|-- SomeClassA: inheritance
137- SomeClassA *-- SomeClassB: composition
138- SomeClassA *-- SomeClassC: composition
139- SomeClassD <.. SomeClassA: dependency
102+ AbstractController <|-- UserController: inheritance
103+ UserController *-- UserService: composition
140104` ` `
141105` ` ` mermaid
142106classDiagram
@@ -149,7 +113,7 @@ classDiagram
149113 SomeClassD <.. SomeClassA: dependency
150114` ` `
151115
152- # ## Filter relationships
116+ # ### Filter relationships
153117You can hide specific relationship types via CSV with ` --exclude-relationships` .
154118
155119- Allowed values (case-insensitive, aliases supported):
@@ -167,5 +131,62 @@ $ vendor/bin/mermaid-class-diagram generate --path src --exclude-relationships d
167131$ vendor/bin/mermaid-class-diagram generate --path src --exclude-relationships dependency
168132` ` `
169133
134+ # ### Traits
135+ There are two render modes for traits (the CLI uses Flatten by default):
136+
137+ - Flatten (default)
138+ - Hides trait nodes and ` use` edges.
139+ - Reassigns trait-origin composition/dependency edges to the using classes.
140+ - Supports transitive trait chains (TraitA uses TraitB); edges are reassigned to the final class users.
141+ - WithTraits
142+ - Shows trait nodes and ` use` edges.
143+ - Keeps trait-origin composition/dependency edges on the trait.
144+ - Suppresses duplicate class-level composition/dependency when already provided by a used trait.
145+
146+ Example
147+ ` ` ` php
148+ trait HasUserDeps {
149+ private UserRepository $repo ;
150+ public function findById(UserId $id ): ?User {}
151+ }
152+
153+ class UserController {
154+ use HasUserDeps;
155+ }
156+ ` ` `
157+ Output examples (order simplified):
158+
159+ Flatten (default)
160+ ` ` ` mermaid
161+ classDiagram
162+ class UserController {
163+ }
164+ class UserRepository {
165+ }
166+ class UserId {
167+ }
168+
169+ UserController *-- UserRepository: composition
170+ UserController ..> UserId: dependency
171+ ` ` `
172+
173+ WithTraits
174+ ` ` ` mermaid
175+ classDiagram
176+ class UserController {
177+ }
178+ class HasUserDeps {
179+ <<trait>>
180+ }
181+ class UserRepository {
182+ }
183+ class UserId {
184+ }
185+
186+ UserController --> HasUserDeps: use
187+ HasUserDeps *-- UserRepository: composition
188+ HasUserDeps ..> UserId: dependency
189+ ` ` `
190+
170191# # License
171192The MIT License (MIT). Please see [LICENSE](https://github.com/tasuku43/php-mermaid-class-diagram/blob/main/LICENSE) for more information.
0 commit comments