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

14
Robin Sedlaczek | Chief Technical Officer Fairmas GmbH Roslyn Refactorings, Analyzer und Code Fixes selbst gebaut robinsedlaczek robinsedlaczek.wordpress.com

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

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

Robin Sedlaczek | Chief Technical Officer Fairmas GmbH

RoslynRefactorings, Analyzer und Code Fixes selbst gebaut

robinsedlaczek

robinsedlaczek.wordpress.com

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

Ü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

[email protected]

TheBerlinMicrosoftConnection

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

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

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

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

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

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

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

Aufbau eines CompilersZerlegen 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

PreprocessorCode

GeneratorCodeGen

Postprocessor

Lexikalische Analyse

Syntaktische Analyse

Semantische Analyse

Synthese-Phase

robinsedlaczek robinsedlaczek.wordpress.com

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

APIs – Compiler Services robinsedlaczek robinsedlaczek.wordpress.com

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

APIs - Workspaces robinsedlaczek robinsedlaczek.wordpress.com

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

Syntaxanalyse

var tree = CSharpSyntaxTree.ParseText(sourceCode);

var node = tree.GetRoot();

SyntaxTree ist abstrakt Parsing über sprachspezifische

Ableitung SyntaxTree ist immutable

robinsedlaczek robinsedlaczek.wordpress.com

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

Syntaxanalyse

node.ChildNodes()node.ChildTokens()

node.GetLeadingTrivia()node.GetTrailingTrivia()

node.DescendantNodes()node.DescendantTokens()node.DescendantTrivia()

token.LeadingTriviatoken.TrailingTrivia

trivia.GetStructure()trivia.GetStructure()

Traversierung des Syntaxbaums

robinsedlaczek robinsedlaczek.wordpress.com

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

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 – MethodDeclarationSyntax2 – ParameterListSyntax3 – VariableDeclarationSyntax4 – IfStatementSyntax

robinsedlaczek robinsedlaczek.wordpress.com

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

Semantische Versionierung

v1v2v3v4

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

semver.org

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

Click to edit Master subtitle styleRoslyn Refactorings, Analyzer und Code Fixes selbst

gebaut

RobinSedlaczek RobinSedlaczek.wordpress.com

Vielen Dank für Eure Aufmerksamkeit!