Skip to content

Add StringSyntax formats throughout source code #44535

Open
@JamesNK

Description

@JamesNK

Is there an existing issue for this?

  • I have searched the existing issues

Is your feature request related to a problem? Please describe the problem.

StringSyntaxAttribute is placed on strings to tell tooling what format the string will take. For example, regex, JSON, XML, date format string, etc. This is then used to provide helpful features such as completion of date format strings, regex/JSON/XML highlighting, analyzers, etc.

We should ensure all the ASP.NET Core strings have this attribute where appropriate, so ASP.NET Core APIs get tooling enhancements.

Describe the solution you'd like

Audit dotnet/aspnetcore source and add StringSyntax attribute with format strings as needed:

  • CompositeFormat - The syntax identifier for strings containing composite formats for string formatting.
    DateOnlyFormat - The syntax identifier for strings containing date format specifiers.
    DateTimeFormat - The syntax identifier for strings containing date and time format specifiers.
    EnumFormat - The syntax identifier for strings containing enum format specifiers.
    GuidFormat - The syntax identifier for strings containing GUID format specifiers.
    Json - The syntax identifier for strings containing JavaScript Object Notation (JSON).
    NumericFormat - The syntax identifier for strings containing numeric format specifiers.
    Regex - The syntax identifier for strings containing regular expressions. feat : Add StringSyntax for regex parameters #40589
    TimeOnlyFormat - The syntax identifier for strings containing time format specifiers.
    TimeSpanFormat - The syntax identifier for strings containing TimeSpan format specifiers.
    Uri - The syntax identifier for strings containing URIs.
    Xml - The syntax identifier for strings containing XML.

This list is from https://github.com/dotnet/runtime/blob/664d7c68d53f2465b79de25fdd6827007216239f/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/StringSyntaxAttribute.cs#L38-L72

I expect many of these won't have any usage - e.g. the format strings (except CompositeFormat) - but we should have Regex, Uri, Json and Xml.

Additional context

No response

Activity

danmoseley

danmoseley commented on Oct 14, 2022

@danmoseley
Member

Example of this kind of thing done previously in runtime
dotnet/runtime#67621

added
help wantedUp for grabs. We would accept a PR to help resolve this issue
on Oct 14, 2022
blouflashdb

blouflashdb commented on Oct 14, 2022

@blouflashdb
Contributor

I would love to help here.

danmoseley

danmoseley commented on Oct 14, 2022

@danmoseley
Member

I have assigned to you @blouflashdb

blouflashdb

blouflashdb commented on Oct 14, 2022

@blouflashdb
Contributor

#44555 PR for CompositeFormat

more will follow soon.

blouflashdb

blouflashdb commented on Oct 15, 2022

@blouflashdb
Contributor

@JamesNK I have a question about StringSyntaxAttribute.Uri.

There are some places where a RelativeIUri is passed as an parameter. I saw that optinal arguments can be added to StringSyntaxAttribute for example uriKind. How should the StringSyntaxAttribute look like for relative uri?

There is also one place in the code where a relative or absolute url can be passed to the methode. For Example WebViewManager.Navigate . How to handle this case?

JamesNK

JamesNK commented on Oct 15, 2022

@JamesNK
MemberAuthor

Good question. Thanks for thinking about this.

I think StringSyntaxAttribute.Uri should be used for both relative and absolute URLs. For UriKind, an example of it is on the Uri ctor, and it looks like it the parameter named is passed as an argument on the attribute - https://github.com/dotnet/runtime/blob/9bcbf50d9ebe60cd83ed724179a5a503cbf03702/src/libraries/System.Private.Uri/src/System/Uri.cs#L405-L414

@stephentoub I see you added Uri throughout dotnet/runtime in dotnet/runtime#67621. Any extra input on these StringSyntaxAttribute usages?

danmoseley

danmoseley commented on Oct 15, 2022

@danmoseley
Member

btw @CyrusNajmabadi just curious what the status of tooling support for these is? Do you expect them to all have an experience like regex has?

blouflashdb

blouflashdb commented on Oct 15, 2022

@blouflashdb
Contributor

Does StringSyntaxAttribute also works on parameters like this? params string[] urls ?

JamesNK

JamesNK commented on Oct 15, 2022

@JamesNK
MemberAuthor

I tested it, and yes it does:

image

However, looks like there is a bug in Roslyn where it only applies it to the first string. New Roslyn issue: dotnet/roslyn#64756

CyrusNajmabadi

CyrusNajmabadi commented on Oct 15, 2022

@CyrusNajmabadi
Member

Do you expect them to all have an experience like regex has?

We can add support if the language provides a suitable parser we can depend on.

46 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area-minimalIncludes minimal APIs, endpoint filters, parameter binding, request delegate generator etcarea-mvcIncludes: MVC, Actions and Controllers, Localization, CORS, most templatesgood first issueGood for newcomers.help candidateIndicates that the issues may be a good fit for community to help with. Requires work from eng. teamhelp wantedUp for grabs. We would accept a PR to help resolve this issue

Type

No type

Projects

Relationships

None yet

    Development

    Participants

    @adityamandaleeka@JamesNK@captainsafia@stephentoub@CyrusNajmabadi

    Issue actions

      Add StringSyntax formats throughout source code · Issue #44535 · dotnet/aspnetcore