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

Post on 14-Apr-2017

505 views 0 download

Transcript of 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

Ü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 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

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

robinsedlaczek robinsedlaczek.wordpress.com

Semantische Versionierung

v1v2v3v4

semver.org

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

gebaut

RobinSedlaczek RobinSedlaczek.wordpress.com

Vielen Dank für Eure Aufmerksamkeit!