dotnet / dotnet/vblang

[Proposal] Grouped Const.

Open
#28 17 comments 0 reactions 0 assignees View on GitHub
Discussion
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.