-
Notifications
You must be signed in to change notification settings - Fork 120
Assign default or invalid values for unmapped fields. #7
Comments
Just to be clear, I want the analyzer to give me errors when there are new properties that are not in the mapping, because of newly added properties for example. And if some properties are voluntary left unset, we just have to comment these properties out to suppress the errors. |
Sounds exactly like the mentioned https://github.com/angularsen/roslyn-analyzers#sample project. I'm not gonna duplicate this functionality (besides I think it's out of the scope of this project). Use mentioned project to keep tracking changes in properties set. You can generate mapping with MappingGenerator and add this magical comment to enable tracking changes. If I misunderstood you, please correct me. |
I just wanted to add that while the mentioned project does mark these properties it is not possible to abstract this magic comment so that your team members will remember it. I haven't found a sufficient solution for this problem yet. |
I found another project that does something similar but is not as easily dismissable as a comment: |
@p3t3rix please forgive me, but is's hard for me to understand what's your problem and your expectation against the solution. Can you elaborate a little bit more and provide examples? I'm currently working on the mechanism to generate mapping implementation during the build - maybe this is what you actually need. You can track the progress here #79 |
I have nothing against the solution, i just wanted to list alternatives for people like me that think that an annotation is a cleaner way to express that a method is a mapping method (instead of a comment). At the moment we use the MappingGenerator and the mentioned manual mapping guard together and it works for us. |
Instead of setting up default value MappingGenerator should generate a comment with information about unmapped properties. |
@cezarypiatek when doing "add parameter" refactoring using Rider/ReSharper, TODO "variable" is used for a new parameter. It leads to compilation error and brings attention to places which require fix. Does it make sense to follow this approach in MappingGenerator? For example: public class TestMapper
{
public static AccountDTO Map(AccountEntity entity)
{
return new AccountDTO()
{
BankName = entity.BankName,
Number = entity.Number,
Unmapped = TODO
};
}
}
public class AccountDTO
{
public string BankName { get; set; }
public string Number { get; set; }
public string Unmapped { get; set; }
}
public class AccountEntity
{
public string BankName { get; set; }
public string Number { get; set; }
} UPD: I've tried to hack in this behavior quickly and can see a number of tests failing because of missing properties now produce this TODO code. Is this intentional or just a result copy-paste in test data? |
Hi @vanashimko, Adding |
Thanks for quick response, @cezarypiatek! Sorry, I'm a bit confused on what is this issue about. I thought that TODO fits ok in "assign invalid values". And now I see your comment "MappingGenerator should generate a comment with information about unmapped properties". So are you about a comment which does not break code and make it non-compilable (as TODO variable does) and works as a default behavior in existing code fix? Something like: public class TestMapper
{
public static AccountDTO Map(AccountEntity entity)
{
return new AccountDTO()
{
BankName = entity.BankName,
Number = entity.Number,
// TODO: Unmapped = ?
};
}
}
public class AccountDTO
{
public string BankName { get; set; }
public string Number { get; set; }
public string Unmapped { get; set; }
}
public class AccountEntity
{
public string BankName { get; set; }
public string Number { get; set; }
} |
@vanashimko yes, the approach with comments is the preferred one in the default behavior. |
@cezarypiatek, since it's the preferred approach, is it going to be implemented? public class TestMapper
{
public static AccountDTO Map(AccountEntity entity)
{
return new AccountDTO
{
BankName = entity.BankName,
Number = entity.Number,
// TODO: Unmapped = ?,
// TODO: ? = Unmapped2
};
}
}
public class AccountDTO
{
public string BankName { get; set; }
public string Number { get; set; }
public string Unmapped { get; set; }
}
public class AccountEntity
{
public string BankName { get; set; }
public string Number { get; set; }
public string Unmapped2 { get; set; }
} Also, the brackets on the AccountDto constructor could be removed (and should be, according to my analyzer). Thanks for the great work, even though I haven't had the opportunity to try yet because I need all properties to be processed, beit in a TODO comment. 😃 |
In spite of appearances, it's a difficult feature to implement. I've made a few attempts but I failed because there are some edge cases that I don't know how to cover. |
For validation in design time, if all members of the target object are assigned, you can use my another extension which is described here Immutable types in C# with Roslyn - this can be solved with [InitRequire] attribute or with /FullInitRequired/ marker. |
OK, I'll have a look. Thanks. 😊
…________________________________
De : Cezary Piątek <[email protected]>
Envoyé : samedi 22 août 2020 09:00
À : cezarypiatek/MappingGenerator
Cc : guillaume; Comment
Objet : Re: [cezarypiatek/MappingGenerator] Assign default or invalid values for unmapped fields. (#7)
For validation in design time, if all members of the target object are assigned, you can use my another extension which is described here Immutable types in C# with Roslyn<https://cezarypiatek.github.io/post/immutable-types-with-roslyn/> - this can be solved with [InitRequire] attribute or with /FullInitRequired/ marker.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub<#7 (comment)>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/ACJGQSHAGGQAWUPW5XTLHR3SB5UI3ANCNFSM4EVM3EXA>.
|
@LaBetonneuse Empty constructor brackets have been removed in 1.17.435 |
The new version of MappingGenerator have a nice UI configure which allows to control how unmapped target fields are handled. Please update your MappingGenerator extension. If you have further suggestion please report them via the new issue tracker https://github.com/cezarypiatek/MappingGeneratorIssueTracker |
Something like that https://github.com/angularsen/roslyn-analyzers#sample
The text was updated successfully, but these errors were encountered: