juan manuel servera @jmservera technical evangelist.net conference 2015 introducción práctica a...

36
#dotNETSpain2015 Juan Manuel Servera @jmservera Technical Evangelist .NET Conference 2015 Introducción práctica a Roslyn Y A X B

Upload: tayler-moran

Post on 14-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Juan Manuel Servera@jmserveraTechnical Evangelist

.NET Conference 2015Introducción práctica a Roslyn Y

AX B

Page 2: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Page 3: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

¿Qué es Roslyn?Novedades en VS 2015Diagnósticos y Code Fixes¿Dónde se está usando?Q&A

Introducción práctica a Roslyn

Page 4: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

TakeawaysDespués de esta sesión, serás capaz de…

Crear analizadores que ayuden a mejorar la calidad del código

Ayudar a los desarrolladores a que usen mejor tus APIs

Page 5: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

¿Qué es Roslyn?

Page 6: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

El Proyecto RoslynAntes llamado compilador-como-servicio

Conocido formalmente como .Net Compiler Platform

¿Qué es?

El nuevo compilador de C# y VB y servicios de lenguaje, escrito en código manejado

APIs públicas de análisis de código para interactuar con el código fuente de C# y VB

Extensibilidad para los servicios de los lenguajes C# y VB

APIs de scripting

Read-Eval-Print-Loop (REPL)

¿Qué NO es?

Una herramienta para añadir nuevas características a C# y VB

Un framework para crear tu propio compilador

Una plataforma para crear tu propio editor

Page 7: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

Syntax Tree API

Symbol APIBinding and Flow

Analysis APIsEmit APIParser

Metadata Import

Binder IL EmitterSymbols

Lang

uag

e

Serv

ice

Com

pile

r A

PI

Com

pile

r Pi

pelin

e

Form

att

er

Colo

rize

r

Outl

inin

g

Navig

ate

To

Obje

ct

Bro

wse

rC

om

ple

tion

List

Find A

ll R

efe

rence

s

Renam

e

Quic

k In

fo

Sig

natu

re

Help

Extr

act

M

eth

od

Go T

o

Definit

ion

Edit

and

Conti

nue

Page 8: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

¿Por qué?

Inversión en el equipoLimpieza de la arquitectura que permita evolucionar

Inversión en los PartnersHerramientas y aplicaciones que entiendan el código en profundidad

Inversión en los DevelopersUna experiencia del IDE mucho más rica

OSS

1,000,000s

1,000s

10s

Page 9: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

¿Dónde está Roslyn?

cc Curtis Cron

Page 10: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

En Visual Studio 2015C# 6 y Visual Basic 14Nuevos servicios de lenguaje para Visual StudioAporta mejoras a ASP.Net 5

Open Source (Licencia Apache 2.0)

Dentro de pocoTodavía más código en OSSAPIs de Scripting y REPL

¿Dónde está Roslyn?

Page 11: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Demo

¿Dónde está Roslyn?

Page 12: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Novedades en VS 2015

Page 13: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

Renombrado inteligente de variables en vivo

Más refactoringsIntroduce localInline temporary variable¡Refactoring también en VB!

Lightbulbs para arreglar el código rápidamente

Otras pequeñas mejoras

Experiencia rica del IDE

Page 14: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

DemoVisual Studio 2015

Page 15: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Diagnósticos y Code Fixes

Page 16: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

Detección temprana de problemas en

el código

Ejecución en el IDE en vivo

Se pueden adjuntar correciones

rápidas

Ejecución como parte de la línea de

comando Distribuidos mediante NuGet

Diagnósticos personalizados

Page 17: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015#dotNETSpain2015

SímbolosOperaciones fuera del cuerpo del métodoAgnóstico al lenguajePara comprobar fácilmente accesibilidad, atributos y otros aspectos a nivel de firma

SintaxisCuando estás operando dentro del cuerpo del métodoEspecífico al lenguajeAcceso al código alta fidelidad

Símbolos vs. Sintaxis

Page 18: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

DemoDiagnósticos

Page 19: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesSyntax Nodes

class C{ void M() { }}// C▫

CompilationUnit

TypeDeclaration

MethodDeclaration

ParameterList Block

SyntaxTree

GetRoot

Page 20: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesSyntax Tokens

class C{ void M() { }}// C▫

CompilationUnit

TypeDeclaration

MethodDeclaration

ParameterList Block

SyntaxTree

GetRoot

EOF

class C { }

void M

( ) { }

EOF

class C { }

) { }(

EOF

class C { }

) { }

Page 21: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesSyntax Tokens

EOF

class C

{

}

void M ( )

{

}

class∙C{∙∙∙∙void∙M()∙∙∙∙{∙∙∙∙}}// C▫

Page 22: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesSyntax “Trivia”

EOF

class C

{

}

void M ( )

{

}

SP EOL

EOL

EOL

EOL

EOL

EOL

class∙C{∙∙∙∙void∙M()∙∙∙∙{∙∙∙∙}}// C▫

// C

SPx4

SPx4

SPx4

SP

class C

{

}

void

{

}

Page 23: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

DemoCodeFix

Page 24: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Syntax Tree API

CompilationUnit

ClassDeclaration

class C {MethodDeclaratio

n}

EOF

void MParameterLi

stBlock

( ) { }

class C{ void M(int x) { }}// C▫

var oldList = method.ParameterList;var newList = oldList.WithParameters(     parameters: SyntaxFactory.ParseParameterList("(int x)").Parameters);

var newRoot = tree.GetRoot().ReplaceNode(oldList, newList);

Page 25: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Syntax Tree API

class C{ void M(int x) { }}// C▫

CompilationUnit

ClassDeclaration

class C {MethodDeclaratio

n}

EOF

void MParameterLi

stBlock

( ) { }Parameter

int

xPredefinedTyp

e

var oldList = method.ParameterList;var newList = oldList.WithParameters(     parameters: SyntaxFactory.ParseParameterList("(int x)").Parameters);

var newRoot = tree.GetRoot().ReplaceNode(oldList, newList);

Page 26: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Syntax Tree API

class C{ void M(int x) { }}// C▫

CompilationUnit

ClassDeclaration

class C {MethodDeclaratio

n}

EOF

void MParameterLi

stBlock

( ) { }Parameter

int

xPredefinedTyp

e

var oldList = method.ParameterList;var newList = oldList.WithParameters(     parameters: SyntaxFactory.ParseParameterList("(int x)").Parameters);

var newRoot = tree.GetRoot().ReplaceNode(oldList, newList);

Page 27: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

SyntaxTre

es

Reference

s

Compilation• Symb

ols• Diagn

ostics• Emit

Elementos principalesCompilación, Referencias y Símbolos

Page 28: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesSemántica

Compilation

SemanticModel• Binding Information• Conversion

Classification• Flow Analysis• Etc.

GetSemanticModel(tree)

Page 29: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Elementos principalesWorkspace, Solutions, Projects y Documents

Host Environment

Workspace

Solution

Project Project

Document

Document

Solution2 Solutionn

Apply

Edit Edit

SyntaxTree

Compilation

Events (e.g. key presses)

Page 30: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Tipos de diagnóstico

RegisterSyntaxNodeAction Triggered when a particular kind of syntax node has been parsed

RegisterSymbolAction Triggered when a particular kind of symbol has been analyzed

RegisterSyntaxTreeAction Triggered when the file’s whole syntax tree has been parsed

RegisterSemanticModelAction Triggered when a semantic model is available for the whole file

RegisterCodeBlock(Start|End)Action Triggered before/after analysis of a method body or other code block

RegisterCompilation(Start|End)Action

Triggered before/after analysis of the entire project

Page 31: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

¿Dónde se está usando?

Page 32: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

Reference Source

Page 33: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

FxCop

Page 34: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

QuickVB

Page 35: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Preguntas

Y

AX B

Page 36: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB

#dotNETSpain2015

Juan Manuel ServeraTechnical Evangelist@jmservera

¡¡¡Si te ha gustado no olvides rellenar la encuesta!!!Thanks

Y

AX B