Get TypeSyntax de ITypeSymbol
Estou experimentando um pouco com o Roslyn-CT
Atualmente estou tentando substituirvar
com o tipo de concreto.
var i=1;
Deve se tornar
int i=1;
Configurar o tipo inferido é fácil. Mas como essa parte acontece no modelo semântico, recebo umITypeSymbol
. A substituição acontece no modelo de sintaxe, então eu preciso de umTypeSyntax
. Como não quero um nome inchado global::System.Int32
), a conversão depende do contexto using
, tipos aninhados etc.
A versão do Visual Studio que faz parte do Roslyn já possui essa funcionalidade em sua correção rápida "Simplify type name", mas, olhando os exemplos, não consegui encontrar uma maneira fácil de fazer essa conversã
Com base na resposta de Kevin Pilch-Bisson, agora estou usando:
var location = document.GetSyntaxTree().GetLocation(node);
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel());
Um local queToMinimalDisplayString
pode ser obtido em umCommonSyntaxTree
.
Uma complicação adicional é queToMinimalDisplayString
requer as classesLocation
eSemanticModel
, enquanto quedocument.GetSemanticModel()
eCommonSyntaxTree.GetLocation
retorna apenas uma interfac
Eu trabalhei simplesmente transmitindo para as aulas, o que parece funcionar por enquanto.
Hmm, parece que as classes são específicas de C # e a linguagem das interfaces é independent
Eu carreguei uma versão de trabalho no github:https: //github.com/CodesInChaos/Rosly
Não funciona paravar
em umforeach
, mas suspeito que isso seja uma limitação da versão atual do Rosly