SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Robin Sedlaczek | Chief Technical Officer Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
Über mich
 CTO der Fairmas GmbH in Berlin
 Community Leader DNUG Berlin
 Blogger / .NET Code Geek
 Sprecher
 MSDN Moderator
 Freier Autor
(Entwickler.de, Autor)
 Open Source
(SharpGL, Roslyn, FxCopAnalyzers)RobinSedlaczek
RobinSedlaczek.wordpress.com
Robin Sedlaczek
RobinSedlaczek@live.de
TheBerlinMicrosoftConnection
Was ist Roslyn
 Aufbrechen der klassischen Blackbox
 Bereitstellung einer API-Schicht über dem Compiler
 Bereitstellung der Compiler-Ergebnisse über Objektmodelle
Phase 1 Phase 2 Phase 3 Phase 4
Blackbox wird zur Plattform:
.NET Compiler Platform
robinsedlaczek
robinsedlaczek.wordpress.com
Open Source
 Roslyn ist Open Source!
https://github.com/dotnet/roslyn
 Verwaltet von der .NET Foundation
http://www.dotnetfoundation.org/projects
 Erlaubt Einblicke und Debugging des Codes
 Mitwirkung bei Entwicklung durch Community
 Repository kann geforkt werden
robinsedlaczek
robinsedlaczek.wordpress.com
Visual Studio
 Auf Roslyn basierte C#/VB-Sprachfeatures und IDE-Features ab Visual
Studio 2015 enthalten
 Projektvorlagen: .NET Compiler Platform SDK
 Bibliotheken: NuGet Roslyn compiler package
 Syntax Visualizer: Syntax Visualizer VSIX package
robinsedlaczek
robinsedlaczek.wordpress.com
Aufbau eines Compilers
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegeben ist (AST)
Typdeklarationen aus
Code und Metadaten
zu benannten
Symbolen
(Symboltabelle)
Identifier in Code
abstimmen/verbinden
mit benannten
Symbolen
Plattformunabhängige
Optimierungen
Plattformabhängige
Optimierungen
All gesammelten
Informationen werden in
Binary/Assembly
ausgegeben
Tokenizer/
Lexer
Parser Symbols Binder
CodeGen
Preprocessor
Code Generator
CodeGen
Postprocessor
Lexikalische
Analyse
Syntaktische
Analyse
Semantische
Analyse
Synthese-
Phase
robinsedlaczek
robinsedlaczek.wordpress.com
APIs – Compiler Services robinsedlaczek
robinsedlaczek.wordpress.com
APIs - Workspaces robinsedlaczek
robinsedlaczek.wordpress.com
Syntaxanalyse
var tree = CSharpSyntaxTree.ParseText(sourceCode);
var node = tree.GetRoot();
 SyntaxTree ist abstrakt
 Parsing über sprachspezifische Ableitung
 SyntaxTree ist immutable
robinsedlaczek
robinsedlaczek.wordpress.com
Syntaxanalyse
node.ChildNodes()
node.ChildTokens()
node.GetLeadingTrivia()
node.GetTrailingTrivia()
node.DescendantNodes()
node.DescendantTokens()
node.DescendantTrivia()
token.LeadingTrivia
token.TrailingTrivia
trivia.GetStructure()
trivia.GetStructure()
Traversierung des Syntaxbaums
robinsedlaczek
robinsedlaczek.wordpress.com
Syntax Types
 Syntaxtypen für alle Syntaxelemente (sprachspezifisch)
 Namespace: Microsoft.CodeAnalysis.CSharp.Syntax (214 Klassen)
 Namespace: Microsoft.CodeAnalysis.VisualBasic.Syntax (275 Klassen)
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........DontDo();.
}.
2
3
1
4
1 – MethodDeclarationSyntax
2 – ParameterListSyntax
3 – VariableDeclarationSyntax
4 – IfStatementSyntax
robinsedlaczek
robinsedlaczek.wordpress.com
Semantische Versionierung
v1
v2
v3
v4
semver.org
Roslyn Refactorings, Analyzer und Code Fixes selbst gebaut
RobinSedlaczek
RobinSedlaczek.wordpress.com
Vielen Dank für Eure
Aufmerksamkeit!

Weitere ähnliche Inhalte

Ähnlich wie BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut

BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkRobin Sedlaczek
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsRobin Sedlaczek
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardRobin Sedlaczek
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...Robin Sedlaczek
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)Robin Sedlaczek
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...Robin Sedlaczek
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!Robin Sedlaczek
 
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassRobin Sedlaczek
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellRobin Sedlaczek
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Robin Sedlaczek
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User InterfacesRobin Sedlaczek
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...Robin Sedlaczek
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET StandardRobin Sedlaczek
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Robin Sedlaczek
 
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetRobin Sedlaczek
 

Ähnlich wie BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut (20)

BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio Extensions
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net Standard
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
 
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-Anwendungen
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
 
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der Realitaet
 
WWruhr2018
WWruhr2018WWruhr2018
WWruhr2018
 

BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut

  • 1. Robin Sedlaczek | Chief Technical Officer Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  • 2. Über mich  CTO der Fairmas GmbH in Berlin  Community Leader DNUG Berlin  Blogger / .NET Code Geek  Sprecher  MSDN Moderator  Freier Autor (Entwickler.de, Autor)  Open Source (SharpGL, Roslyn, FxCopAnalyzers)RobinSedlaczek RobinSedlaczek.wordpress.com Robin Sedlaczek RobinSedlaczek@live.de TheBerlinMicrosoftConnection
  • 3. Was ist Roslyn  Aufbrechen der klassischen Blackbox  Bereitstellung einer API-Schicht über dem Compiler  Bereitstellung der Compiler-Ergebnisse über Objektmodelle Phase 1 Phase 2 Phase 3 Phase 4 Blackbox wird zur Plattform: .NET Compiler Platform robinsedlaczek robinsedlaczek.wordpress.com
  • 4. Open Source  Roslyn ist Open Source! https://github.com/dotnet/roslyn  Verwaltet von der .NET Foundation http://www.dotnetfoundation.org/projects  Erlaubt Einblicke und Debugging des Codes  Mitwirkung bei Entwicklung durch Community  Repository kann geforkt werden robinsedlaczek robinsedlaczek.wordpress.com
  • 5. Visual Studio  Auf Roslyn basierte C#/VB-Sprachfeatures und IDE-Features ab Visual Studio 2015 enthalten  Projektvorlagen: .NET Compiler Platform SDK  Bibliotheken: NuGet Roslyn compiler package  Syntax Visualizer: Syntax Visualizer VSIX package robinsedlaczek robinsedlaczek.wordpress.com
  • 6. Aufbau eines Compilers Zerlegen des Quelltextes in Tokens Parsen der Tokens in die Syntax, die von der Grammatik vorgegeben ist (AST) Typdeklarationen aus Code und Metadaten zu benannten Symbolen (Symboltabelle) Identifier in Code abstimmen/verbinden mit benannten Symbolen Plattformunabhängige Optimierungen Plattformabhängige Optimierungen All gesammelten Informationen werden in Binary/Assembly ausgegeben Tokenizer/ Lexer Parser Symbols Binder CodeGen Preprocessor Code Generator CodeGen Postprocessor Lexikalische Analyse Syntaktische Analyse Semantische Analyse Synthese- Phase robinsedlaczek robinsedlaczek.wordpress.com
  • 7. APIs – Compiler Services robinsedlaczek robinsedlaczek.wordpress.com
  • 8. APIs - Workspaces robinsedlaczek robinsedlaczek.wordpress.com
  • 9. Syntaxanalyse var tree = CSharpSyntaxTree.ParseText(sourceCode); var node = tree.GetRoot();  SyntaxTree ist abstrakt  Parsing über sprachspezifische Ableitung  SyntaxTree ist immutable robinsedlaczek robinsedlaczek.wordpress.com
  • 11. Syntax Types  Syntaxtypen für alle Syntaxelemente (sprachspezifisch)  Namespace: Microsoft.CodeAnalysis.CSharp.Syntax (214 Klassen)  Namespace: Microsoft.CodeAnalysis.VisualBasic.Syntax (275 Klassen) public.void.Do(string.what). {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what). ........DontDo();. }. 2 3 1 4 1 – MethodDeclarationSyntax 2 – ParameterListSyntax 3 – VariableDeclarationSyntax 4 – IfStatementSyntax robinsedlaczek robinsedlaczek.wordpress.com
  • 14. Roslyn Refactorings, Analyzer und Code Fixes selbst gebaut RobinSedlaczek RobinSedlaczek.wordpress.com Vielen Dank für Eure Aufmerksamkeit!

Hinweis der Redaktion

  1. 1
  2. 14