Skip to content

Commit 685e493

Browse files
authored
Merge pull request #552 from microsoft/corranrogue9/enumnaming
Add guidance for naming flags vs non-flags enums and cases where they should be defined side-by-side
2 parents 9c93e8c + 978d847 commit 685e493

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

graph/GuidelinesGraph.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ Following is a short summary of the most often used conventions.
9999
| :no_entry: **MUST NOT** use redundant words in names. | - **Right:** /places/{id}/**displayName** or /phones/{id}/**number** <BR> - **Wrong:** /places/{id}/**placeName** or /phones/{id}/**phoneNumber** |
100100
| :warning: **SHOULD NOT** use brand names in type or property names. | - **Right:** chat <BR> - **Wrong:** teamsChat <BR> - **NOTE:** there is an exception for resources that *only* exist under the `/admin` root segment and the `/users/{userId}/settings` path. |
101101
| :warning: **SHOULD NOT** use acronyms or abbreviations unless they are broadly understood. | - **Right:** url or htmlSignature <BR> - **Wrong:** msodsUrl or dlp |
102-
| :heavy_check_mark: **MUST** use singular nouns for type names. | - **Right:** address <BR> - **Wrong:** addresses |
102+
| :heavy_check_mark: **MUST** use singular nouns for non-enum type names. | - **Right:** address <BR> - **Wrong:** addresses |
103+
| :heavy_check_mark: **MUST** use singular nouns for non-flags enum type names. | - **Right:** color <BR> - **Wrong:** colors |
104+
| :heavy_check_mark: **MUST** use plural nouns for flags enum type names. | - **Right:** diplayMethods <BR> - **Wrong:** displayMethod |
103105
| :heavy_check_mark: **MUST** use plural nouns for collections (for listing type or collection properties). | - **Right:** addresses <BR> - **Wrong:** address |
104106
| :ballot_box_with_check: **SHOULD** pluralize the noun even when followed by an adjective (a *postpositive*).| - **Right:** passersby or mothersInLaw <BR> - **Wrong:** notaryPublics or motherInLaws |
105107
| **CASING** | |

graph/patterns/enums.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,13 @@ With such enum, customers can select multiple values in a single field:
131131
`displayMethod = tip | alert`
132132

133133
In cases where two properties want to use the same *conceptual* `EnumType`, but one property is a collection while the other is single-values, the model should define *two* separate `EnumType`s, one being a non-flags enum with a singular name and the other marked as a flags enum with its name being the plural form of the non-flags enum.
134+
135+
#### Flag enum + non-flag enum
136+
137+
There are occasions where one API will want to use a non-flag enum, but another API will want a flags enum.
138+
For example, the `displayMethod` example above may have one API that is configuring which display methods to use, and another API which is configuring that particular display method.
139+
In this case, the first API will want a flags enum, but the second API will want to only allow configuring one display method at a time, and will therefore prefer a non-flags enum.
140+
141+
Two enum types should be defined, one as a flags enum and the other as a non-flags enum.
142+
The flags enum should be named such that it is plural, and the non-flags enum should be named such that it is singular.
143+
The two types should be kept in sync with each other.

0 commit comments

Comments
 (0)