Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 7c1d744

Browse files
committed
feat: Add relationship-level filtering and enhance CLI options for edge exclusion
1 parent e8819a2 commit 7c1d744

File tree

1 file changed

+103
-82
lines changed

1 file changed

+103
-82
lines changed

README.md

Lines changed: 103 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -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
7432
classDiagram
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
10268
classDiagram
@@ -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
13298
classDiagram
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
142106
classDiagram
@@ -149,7 +113,7 @@ classDiagram
149113
SomeClassD <.. SomeClassA: dependency
150114
```
151115
152-
### Filter relationships
116+
#### Filter relationships
153117
You 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
171192
The MIT License (MIT). Please see [LICENSE](https://github.com/tasuku43/php-mermaid-class-diagram/blob/main/LICENSE) for more information.

0 commit comments

Comments
 (0)