Testura / Testura.Code

Testura.Code is a wrapper around the Roslyn API and used for generation, saving and compiling C# code. It provides methods and helpers to generate classes, methods, statements and expressions.
MIT License
297 stars 30 forks source link

Attributes - is it possible to generate [AttributeName(ArgumentName = true)] #76

Open jeffward01 opened 2 years ago

jeffward01 commented 2 years ago

Hello!

Again, thank you for such an awesome library! It is my favorite!

I am writing some code to generate some classes which have some class properties with attributes from Sieve.

The attributes look like this:

public int Id { get; set; }

[Sieve(CanFilter = true, CanSort = true)]
public string Title { get; set; }

[Sieve(CanFilter = true, CanSort = true)]
public int LikeCount { get; set; }

[Sieve(CanFilter = true, CanSort = true)]
public int CommentCount { get; set; }

[Sieve(CanFilter = true, CanSort = true, Name = "created")]
public DateTimeOffset DateCreated { get; set; } = DateTimeOffset.UtcNow;

More specifically:


// This is how it looks in sieve
[Sieve(CanFilter = true, CanSort = true)]
public string Title { get; set; }

// This is what it would look like with the Testura.Code naming convention
[AttributeName(AttributeArgument = true)]
public string MyExample{ get; set; }

I know that this is possible with Testura.Code:


// This is implemented with the ValueArgument
[AttributeName(AttributeArgument: true)]
public string MyExample{ get; set; }

Note the ':' semi-colon sign. I am struggling to discover how to implement an '=' statement. It would be great to use this Expression Statement generator as an IArgument, but I do not think it is possible due to:


Currently I am writing it with an ':', then later using a mystring.Replace(':', '='); in order to accomplish this. Is there a cleaner way of doing this?

Thanks so much!

I plan to add much to the Wiki! I have been compiling some notes and topics. Thanks!

MilleBo commented 2 years ago

Hello,

This is a missing case and I have added a new argument for this (AssignArgument). Example:

To generate this:

[Test(with=1,value=true)]

You just write:

AttributeGenerator.Create(new Attribute("Test", new List<IArgument> { new AssignArgument("with", 1), new AssignArgument("value", true) }))

I will probably update the nuget later this weekend (are gonna try to finish record/namespace first).

jeffward01 commented 2 years ago

You are a lightening fast super-hero Jedi!!! This is very awesome, can't wait to check it out!

MilleBo commented 2 years ago

No problems! I have just released the nuget (1.2.0) so try and see if it okay or if we should add something more.

jeffward01 commented 2 years ago

No problems! I have just released the nuget (1.2.0) so try and see if it okay or if we should add something more.

Very cool!! I will give it a go tonight or tomorrow and let you know how it handles!


Quick question for you - related

Something like this:

image

This is from the TV show Silicon Valley, very funny programmer humor if you have never seen it!

MilleBo commented 2 years ago

Very cool!! I will give it a go tonight or tomorrow and let you know how it handles!

Great! I forgot to add that you also have a new RecordBuilder and you can also send in NamespaceType in every builder (if you want file scoped namespace)

I do not know if GitHub offers this feature, but do you have a 'ToDo list' for Testura.Code, i forget if I asked this akread

I'm not super good with GitHub either but I tried to add you as collaborator and created a new board that we could work with. So try and see if you can access it and create new notes: https://github.com/Testura/Testura.Code/projects/1

This is from the TV show Silicon Valley, very funny programmer humor if you have never seen it!

Of course! Silicon Valley is really awesome ;-)