[Proposal] Grouped Const.
- Dominant language
- No language data
- Stars
- 328
- Forks
- 71
- PR merge metrics
- No merged PRs in 30d
Description
[(Ported from Roslyn Repo)](https://github.com/dotnet/roslyn/issues/11165)
## Grouped Const
In the big open-source projects (I've seen) using C# or VB.net, tend to contain a lot of constants.
Eg [Roslyn Project System](https://github.com/dotnet/roslyn-project-system/blob/master/src/Common/IVsSqm.vb)
``` vb.net
Public Const Undefined As UInt32 = 0
Public Const DATAID_SQM_ACTIVATEDOCWINDOW As UInt32 = 1 ' (Stream)
Public Const DATAID_SQM_UICONTEXTCHANGED As UInt32 = 2 ' (Stream)
Public Const DATAID_SQM_PERFMEMORY As UInt32 = 3
Public Const DATAID_SQM_STARTUPOS As UInt32 = 4
Public Const DATAID_SQM_STARTUPOSVERSION As UInt32 = 5
Public Const DATAID_SQM_STARTUPOSBUILD As UInt32 = 6
Public Const DATAID_SQM_STARTUPOSSERVICEPACK As UInt32 = 7
Public Const DATAID_SQM_STARTUPAPPID As UInt32 = 8
Public Const DATAID_SQM_STARTUPAPPBUILDTYPE As UInt32 = 9
Public Const DATAID_SQM_STARTUPAPPVERSION As UInt32 = 10
```
I think it would help if there was an alternative syntax for writing them. In c# and VB.net we have a nice syntax for writing `Enums` values. Why not have a similar syntax for constants.
## Proposed Syntaxes
**VB.net**
``` vb.net
Public Const UInt32
Undefined = 0,
DATAID_SQM_ACTIVATEDOCWINDOW = 1, ' (Stream)
DATAID_SQM_UICONTEXTCHANGED = 2, ' (Stream)
DATAID_SQM_PERFMEMORY = 3,
DATAID_SQM_STARTUPOS = 4,
DATAID_SQM_STARTUPOSVERSION = 5,
DATAID_SQM_STARTUPOSBUILD = 6,
DATAID_SQM_STARTUPOSSERVICEPACK = 7,
DATAID_SQM_STARTUPAPPID = 8,
DATAID_SQM_STARTUPAPPBUILDTYPE = 9,
DATAID_SQM_STARTUPAPPVERSION = 10
End Const
```
The compiler would consider this to be equivalently to as if it was the first.
**C#**
``` c#
public const uint32
{
Undefined = 0,
DATAID_SQM_ACTIVATEDOCWINDOW = 1, // (Stream)
DATAID_SQM_UICONTEXTCHANGED = 2, // (Stream)
DATAID_SQM_PERFMEMORY = 3,
DATAID_SQM_STARTUPOS = 4,
DATAID_SQM_STARTUPOSVERSION = 5,
DATAID_SQM_STARTUPOSBUILD = 6,
DATAID_SQM_STARTUPOSSERVICEPACK = 7,
DATAID_SQM_STARTUPAPPID = 8,
DATAID_SQM_STARTUPAPPBUILDTYPE = 9,
DATAID_SQM_STARTUPAPPVERSION = 10
}
```
**Caveats**
- All of the constants defined within a **grouped const** have the same type
- In this example `UInt32`
- All of the constants defined within a **grouped const** have the same visibility.
- In this example: `Public`
- You can not change the type / visibility of an entry within a **grouped const**
- eg `Private DATAID_SQM_STARTUPOSSERVICEPACK = 7,` **error**
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.