Omówienie modelu zestawu SDK platformy kompilatora platformy .NET
Kompilatory przetwarzają kod, który piszesz zgodnie z regułami ustrukturyzowanymi, które często różnią się od sposobu odczytywania i interpretowania kodu przez ludzi. Podstawowa wiedza na temat modelu używanego przez kompilatory jest niezbędna do zrozumienia interfejsów API używanych podczas tworzenia narzędzi opartych na platformie Roslyn.
Obszary funkcjonalne potoku kompilatora
Zestaw SDK platformy kompilatora .NET uwidacznia analizę kodu kompilatorów języka C# i Visual Basic jako użytkownika, zapewniając warstwę interfejsu API, która odzwierciedla tradycyjny potok kompilatora.
Każda faza tego potoku jest oddzielnym składnikiem. Najpierw faza analizowania tokenizuje i analizuje tekst źródłowy w składni, która jest zgodna z gramatyką języka. Po drugie, faza deklaracji analizuje źródło i zaimportowane metadane w celu utworzenia nazwanych symboli. Następnie faza powiązania dopasuje identyfikatory w kodzie do symboli. Na koniec faza emisji emituje zestaw ze wszystkimi informacjami utworzonymi przez kompilator.
Odpowiadający każdej z tych faz zestaw SDK platformy kompilatora .NET uwidacznia model obiektów, który umożliwia dostęp do informacji w tej fazie. Faza analizowania uwidacznia drzewo składni, faza deklaracji uwidacznia tabelę symboli hierarchicznych, faza powiązania uwidacznia wynik semantycznej analizy kompilatora, a faza emisji jest interfejsem API, który generuje kody bajtów IL.
Każdy kompilator łączy te składniki razem jako całościową całość.
Te interfejsy API są tymi samymi, które są używane przez program Visual Studio. Na przykład funkcje tworzenia i formatowania kodu używają drzew składni, przeglądarki obiektów i funkcji nawigacji używają tabeli symboli, refaktoryzacji i języka Przejdź do definicji przy użyciu modelu semantycznego, a funkcja Edytuj i kontynuuj używa wszystkich tych funkcji, w tym interfejsu API emitowania.
Warstwy interfejsu API
Zestaw SDK kompilatora platformy .NET składa się z kilku warstw interfejsów API: interfejsów API kompilatora, interfejsów API diagnostycznych, interfejsów API skryptów i interfejsów API obszarów roboczych.
Interfejsy API kompilatora
Warstwa kompilatora zawiera modele obiektów, które odpowiadają informacjom udostępnianym w każdej fazie potoku kompilatora, zarówno składniowego, jak i semantycznego. Warstwa kompilatora zawiera również niezmienną migawkę pojedynczego wywołania kompilatora, w tym odwołania do zestawów, opcje kompilatora i pliki kodu źródłowego. Istnieją dwa odrębne interfejsy API reprezentujące język C# i język Visual Basic. Dwa interfejsy API są podobne w kształcie, ale dostosowane do wysokiej wierności dla każdego języka. Ta warstwa nie ma zależności od składników programu Visual Studio.
Interfejsy API diagnostyczne
W ramach analizy kompilator może utworzyć zestaw diagnostyki obejmujący wszystko, od składni, semantyki i określonych błędów przypisania do różnych ostrzeżeń i diagnostyki informacyjnej. Warstwa interfejsu API kompilatora uwidacznia diagnostykę za pośrednictwem rozszerzalnego interfejsu API, który umożliwia podłączanie analizatorów zdefiniowanych przez użytkownika do procesu kompilacji. Umożliwia ona tworzenie diagnostyki zdefiniowanej przez użytkownika, takiej jak te generowane przez narzędzia, takie jak StyleCop, wraz z diagnostyką zdefiniowaną przez kompilator. Tworzenie diagnostyki w ten sposób ma zaletę integracji naturalnie z narzędziami, takimi jak MSBuild i Visual Studio, które zależą od diagnostyki środowisk, takich jak zatrzymanie kompilacji na podstawie zasad i wyświetlanie dynamicznych zygzaków w edytorze i sugerowanie poprawek kodu.
Interfejsy API skryptów
Interfejsy API hostingu i skryptów są oparte na warstwie kompilatora. Za pomocą interfejsów API skryptów można uruchamiać fragmenty kodu i gromadzić kontekst wykonywania środowiska uruchomieniowego. Interaktywna pętla REPL języka C# (Read-Evaluate-Print Loop) używa tych interfejsów API. Funkcja REPL umożliwia używanie języka C# jako języka skryptowego, uruchamiając kod interaktywnie podczas jego pisania.
Interfejsy API obszarów roboczych
Warstwa Obszary robocze zawiera interfejs API obszaru roboczego, który jest punktem wyjścia do wykonywania analizy kodu i refaktoryzacji w ramach całych rozwiązań. Ułatwia ona organizowanie wszystkich informacji o projektach w rozwiązaniu w ramach pojedynczego modelu obiektów, oferując bezpośredni dostęp do modeli obiektów warstwy kompilatora bez konieczności analizowania plików, konfigurowania opcji lub zarządzania zależnościami między projektami.
Ponadto warstwa Obszary robocze przedstawia zestaw interfejsów API używanych podczas implementowania analizy kodu i refaktoryzacji narzędzi, które działają w środowisku hosta, takim jak środowisko IDE programu Visual Studio. Przykłady obejmują interfejsy API znajdowania wszystkich odwołań, formatowania i generowania kodu.
Ta warstwa nie ma zależności od składników programu Visual Studio.