2011-11-22 14 views
10

Eksperymentuję trochę z Roslyn-CTP.Uzyskaj TypeSyntax od ITypeSymbol

Obecnie próbuję zastąpić var konkretnym typem.

var i=1; 

powinny stać się:

int i=1; 

zastanawianie się wywnioskować typ jest łatwe. Ale ponieważ ta część dzieje się w semantycznym modelu otrzymuję ITypeSymbol. Zastąpienie odbywa się w modelu składni, więc potrzebuję TypeSyntax. Ponieważ nie chcę nadęty nazwa (global::System.Int32), konwersja zależy od kontekstu (using, typy zagnieżdżone itp.).

Wizualna wersja studyjna, która jest częścią Roslyn, ma już tę funkcję w swojej "Szybkiej łatce nazwy", ale patrząc na próbki, nie mogłem znaleźć łatwego sposobu na przeprowadzenie tej konwersji.


podstawie odpowiedzi Kevin Pilch-Bisson za Obecnie używam:

var location = document.GetSyntaxTree().GetLocation(node); 
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel()); 

miejscu, które ToMinimalDisplayString można otrzymać z CommonSyntaxTree.

Dodatkową komplikacją jest to, że ToMinimalDisplayString wymaga zajęcia Location i SemanticModel, natomiast document.GetSemanticModel() i CommonSyntaxTree.GetLocation zwrócić tylko interfejs.
Pracowałem, rzucając się na zajęcia, które na razie działają.

Hmm wygląda na to, że klasy są specyficzne dla C#, a interfejsy są niezależne od języka.


mam uploaded wersję roboczą na github: https://github.com/CodesInChaos/Roslyn

To nie działa na var w foreach, ale podejrzewam, że to ograniczenie bieżącej produkcji Roslyn.

+2

Re: ostatnie stwierdzenie: poprawne, nie otrzymaliśmy 'var' w pełni zaimplementowanego w' foreach' przed sfinalizowaniem kompilacji CTP, przepraszam –

Odpowiedz

12

Można uzyskać najkrótszy ciąg prawną do reprezentowania symbol w danym miejscu za pomocą metody ToMinimalDisplayString() przedłużacza, który dotyczy ISymbol (Uwaga: Można go znaleźć w `Roslyn.Compilers.CSharp.SymbolDisplay

Warunki użytkowania. I pracuję w Microsoft w zespole Roslyn

+10

BTW, nie potrzebujesz zrzeczenie się odpowiedzialności podczas odpowiadania na pytania _ o produkcie Twój produkt.Oświadczenia powinny być używane, jeśli polecasz swój produkt – SLaks

+0

Więc jak on to przedłużył? linia, nieszkodliwa promocja (odpowiedzi, a nie produktu)? – sq33G

+3

@ sq33G: Chyba że próbuje pokazać, że wie, o czym mówi, w ogóle nie potrzebuje tej linii. Jeśli tak, mógłby umieścić to w nawiasie. – SLaks