juan manuel servera @jmservera technical evangelist.net conference 2015 introducción práctica a...
TRANSCRIPT
![Page 1: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/1.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/2.jpg)
#dotNETSpain2015
![Page 3: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/3.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/4.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/5.jpg)
#dotNETSpain2015
¿Qué es Roslyn?
![Page 6: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/6.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/7.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/8.jpg)
#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 10: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/10.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/11.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/12.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/13.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/14.jpg)
#dotNETSpain2015
DemoVisual Studio 2015
![Page 15: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/15.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/16.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/17.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/18.jpg)
#dotNETSpain2015
DemoDiagnósticos
![Page 19: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/19.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/20.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/21.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/22.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/23.jpg)
#dotNETSpain2015
DemoCodeFix
![Page 24: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/24.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/25.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/26.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/27.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/28.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/29.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/30.jpg)
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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/31.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/32.jpg)
Reference Source
![Page 33: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/33.jpg)
FxCop
![Page 34: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/34.jpg)
QuickVB
![Page 35: Juan Manuel Servera @jmservera Technical Evangelist.NET Conference 2015 Introducción práctica a Roslyn Y A XB](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/35.jpg)
#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](https://reader037.vdocuments.site/reader037/viewer/2022110319/56649c775503460f9492c27d/html5/thumbnails/36.jpg)
#dotNETSpain2015
Juan Manuel ServeraTechnical Evangelist@jmservera
¡¡¡Si te ha gustado no olvides rellenar la encuesta!!!Thanks
Y
AX B