templating icon indicating copy to clipboard operation
templating copied to clipboard

Allow share template name for different languages

Open kant2002 opened this issue 3 years ago • 11 comments

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

I writing templates for F* language which provide exporting to F#. I want make consuming F* programs in .NET ecosystem to be as easy as possible. So I create template https://github.com/kant2002/fstarmsbuildsdk and by mistake do not change short template for template, but do change

  1. Package identity
  2. Language

Currently when I run dotnet new console --lang F* I receive following error message

Unable to resolve the template, the following installed templates are conflicting:
Identity                  Template Name  Short Name  Language  Author         Package

------------------------  -------------  ----------  --------  -------------  --------------------------------------------
FStarLang.Common.Console  Console App    console     F*        Andrii Kur...  FStarLang.DotNet.Common.ProjectTemplates.1.0
Microsoft.Common.Console  Console App    console     C#,F#,VB  Microsoft


Uninstall the template packages containing the templates to keep only one template from the list or add the template options which differentiate the template to run.

Describe the solution you'd like

Would be good that package resolution would take into account switch --lang here and resolve template not only on short name, but on short name + language.

Additional context

Other languages which may benefit from this

  • C compiler for .NET https://github.com/fornever/cesium
  • Zig probably https://github.com/vezel-dev/zig-sdk
  • IronXXX family.
  • Pascal.ABC http://pascalabc.net/en/

kant2002 avatar Aug 16 '22 15:08 kant2002

I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label.

@marcpopMSFT is there something which external contributor can do to solve that? Or at least what stance SDK team has on this issue?

kant2002 avatar Sep 19 '22 07:09 kant2002

This is on the templating side so routing to them. @dotnet/templating-engine-maintainers do you want templating issues still routed to the templating repo or leave them here since templating code is now in the repo?

marcpopMSFT avatar Sep 20 '22 20:09 marcpopMSFT

For discussion:

  • https://github.com/dotnet/templating/issues/4135
  • support disambiguation via --language (this issue)
  • by default launch SDK templates

vlada-shubina avatar Sep 26 '22 07:09 vlada-shubina

@vlada-shubina should I jump to linked issue for discussion? From what I see --group and --identity is for disabmuguation of the templates within same language, or even narrower, withing same technology stack. Language is slightly stronger differentiator, so some concerns raised in dotnet/sdk#4135 seems to be not applicable. So I fear that I will only distract discussion in the linked issue.

kant2002 avatar Sep 26 '22 07:09 kant2002

Moving the issue to dotnet/templating for the planning purposes.

Short time solution - workaround It is already possible to achieve the desired behavior, though a bit odd. The solution is to use the same groupIdentity as Microsoft template: here Microsoft.Common.Console. It makes the template appear in the same line/group in dotnet new. You can check https://www.nuget.org/packages/Peachpie.Templates - they are already doing that. @phenning please let us know if there are any concerns for Visual Studio here.

Medium time solution

  • Implement https://github.com/dotnet/templating/issues/4135 so the conflicts can be resolved by user.
  • Allow disambiguation via --language (this issue)
  • For the languages available from SDK, use SDK templates by default
  • Update documentation on group identity: https://github.com/dotnet/templating/issues/2384

Long time solution

  • https://github.com/dotnet/templating/issues/5357 - rename group identities so they are associated with DotNet and not Microsoft. This is not an easy task due to backward compatibilities.

vlada-shubina avatar Oct 03 '22 08:10 vlada-shubina

@vlada-shubina The issue though there is already an F# console template. If this new template were to have the same group identity, I believe it could hide the built in SDK template depending on the precedence value. Visual Studio would end up using one or the other, not both.

phenning avatar Oct 03 '22 14:10 phenning

@phenning this new template would be for F-Star, a proof language that is distinct from F# :)

baronfel avatar Oct 03 '22 14:10 baronfel

Are Visual Studio taking language into account when displaying template ? Because I clearly see F* as separate language in VS UI.

kant2002 avatar Oct 03 '22 14:10 kant2002

OK, my aging eyes just noticed it was * and not #. Apologies ;)

I just did some testing on a mock template. You do need to define the "Framework" symbol just like the console template does due to the a bug in the current logic we have that groups the templates together. The bug results in the template being shown, but uncreatable from Visual Studio. There is currently, a bug where we don't handle the case with some language templates within a group have a Framework symbol and others not.

Also, I'm assuming there is a project system that knows how to handle whatever .*proj file is output by the template. There may be further refinements that may need to happen to the templates metadata to hide if the requisite components are not present.

phenning avatar Oct 03 '22 14:10 phenning

(Opened AzDO 1637898 to track the mentioned bug above)

phenning avatar Oct 03 '22 15:10 phenning