Upload
tayler-moran
View
212
Download
0
Tags:
Embed Size (px)
Citation preview
#dotNETSpain2015
Juan Manuel Servera@jmserveraTechnical Evangelist
.NET Conference 2015Introducción práctica a Roslyn Y
AX B
#dotNETSpain2015
#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
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
#dotNETSpain2015
¿Qué es Roslyn?
#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
#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
#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
#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?
#dotNETSpain2015
Demo
¿Dónde está Roslyn?
#dotNETSpain2015
Novedades en VS 2015
#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
#dotNETSpain2015
DemoVisual Studio 2015
#dotNETSpain2015
Diagnósticos y Code Fixes
#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
#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
#dotNETSpain2015
DemoDiagnósticos
Elementos principalesSyntax Nodes
class C{ void M() { }}// C▫
CompilationUnit
TypeDeclaration
MethodDeclaration
ParameterList Block
SyntaxTree
GetRoot
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 { }
) { }
Elementos principalesSyntax Tokens
EOF
class C
{
}
void M ( )
{
}
class∙C{∙∙∙∙void∙M()∙∙∙∙{∙∙∙∙}}// C▫
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
{
}
#dotNETSpain2015
DemoCodeFix
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);
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);
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);
SyntaxTre
es
Reference
s
Compilation• Symb
ols• Diagn
ostics• Emit
Elementos principalesCompilación, Referencias y Símbolos
Elementos principalesSemántica
Compilation
SemanticModel• Binding Information• Conversion
Classification• Flow Analysis• Etc.
GetSemanticModel(tree)
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)
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
#dotNETSpain2015
¿Dónde se está usando?
Reference Source
FxCop
QuickVB
#dotNETSpain2015
Preguntas
Y
AX B
#dotNETSpain2015
Juan Manuel ServeraTechnical Evangelist@jmservera
¡¡¡Si te ha gustado no olvides rellenar la encuesta!!!Thanks
Y
AX B