Thanks to Llewellyn Falco for his ongoing support and insight. He is encouraging my frequent releases of RoslynDom, and to get a preliminary release of CodeFirstMetadata to NuGet as well as GitHub real soon.
You can get the bits here and the download the NuGet package through Visual Studio package manager or another NuGet client.
These are experimental releases, and as such are not signed.
For the work I am doing, I am more interested in the intent of the code than the details of it. There are a number of ways different code can result in identical behavior including ordering of members, attribute syntax details, namespace nesting, and use of named parameters. The first version of the SameIntent methods are fairly conservative – not all code with identical results will be found, just the big, common issues.
Cloning as Copy methods
I added a feature to clone RoslynDom items. This is a precursor to adding mutability, but mutability is not yet available. This involved changing a number of items from direct access to the underlying trees to retrieving this information into local fields. All tests pass, but if you find a missing feature or anything funny, let me know.
PublicAnnotationList replaces IEnumerable<PublicAnnotation>
Previously RDomBase managed a list of PublicAnnotation. This was a bad refactoring of concerns, so I added a PublicAnnotationList class. This cleaned up the code in RDomBase and will make it easier to evolve the PublicAnnotationList.
Removed RDomSyntaxNodeBase from hierarchy
At one point this class seemed appropriate in the hierarchy. It wasn’t doing anything and was removed.
NonEmptyNamespaces renamed to NonemptyNamespaces
Cleanup issue found by FxCop.
Improved code analysis (FxCop) and test coverage
I may separately blog about how positive the code analysis exercise was – in spite of my deep dread of what I would find. The recommended rules had only one issue – which I thought was pretty cool. Switching to All Microsoft Rules for the non-testing libraries resulted in about 100 issues. I dropped this to under 25 and almost all the changes were things I was really happy to find – insufficient checks for nulls on method entry, a couple of naming fixes.