Roslyn: La plateforme de compilation
.NET
Kevin Avignon
AVANT DE COMMENCER LA PRÉSENTATION
Qui suis-je ?
 Étudiant en génie des technologies de l’information (ÉTS)
 Membre de MSDEVMTL depuis Oct. ‘14
 Contribut...
Plan de la présentation
1. Introduction sur Roslyn
2. Librairies utilisant Roslyn
3. Introduction sur Syntax & Symbol
4. C...
1. Introduction sur Roslyn
Les pré-requis
• Visual Studio 2015 Ultimate CTP 6 ou
Visual Studio 2015 RC
• .NET Compiler Platform SDK Templates
• .NET ...
Qu'est-ce que Roslyn ?
• Roslyn est le nom du projet Open source de Microsoft
• Beaucoup plus gros qu'un simple API
– Comp...
 Un CaaS n’est pas comme
IaaS ou Paas ou SaaS
Considéré comme un service Windows
 “Reengineering” du compilateur .NET
...
Une plateforme de compilation
• Ensemble d'APIS
– Bâtie au-dessus des compilateur C# &
VB.NET
– Permet l'inspection de cod...
◦ Ancienne manière dite “black box”
▫ Écriture du code
▫ Écriture de tests
▫ Génération d’assemblies, dlls, etc
▫ Refactor...
◦ Accès à la dite black box
 Information sémantique & syntaxique
◦ Les langages .NET sont en mesure de consommer et
génér...
Consommation de code (String)
Diagnostic Analyzer
• Analyse du code source
– Cible l'erreur indiquée
– Envoie un message à l'utilisateur
– Se concentre ...
2. Librairies utilisant Roslyn
◦ CC0001 - Always Use Var Analyzer +
refactoring
◦ CC0007 - If Return Always Analyzer +
refactoring
◦ CC0008 - Object Init...
AP1000 - Do not use async in Run method
Code analysis for Azure - Microsoft
 ConvertToConstant
 Variable locale -> const
 ConvertIfStatementToConditionalTernaryExpression
 (if -> ?:)
 ConvertIf...
3. Introduction sur Syntax & Symbol
◦ Représentation syntaxique du code (.NET)
 Produit par le compilateur
◦ Construit par divers éléments
 Syntax nodes
 S...
◦ Nodes (noeuds): Élements principaux de l’arbre
syntaxique
 Représente une multitude de construction syntaxique
ObjectC...
o Se définit avec un span de character
 TextSpan : [Début, Longueur]
 Ne prend pas en compte le trivia
o Un noeud a conn...
 Syntax Token
– Représente des petits fragments de code
– Keywords (int, lock, abstract)
– Identifiants (noms de variable...
ISymbol & ITypeSymbol
• ISymbol
– Représentation dans l'arbre syntaxique
• namespace, classe, struct
– Information sur les...
4. Comment employer le Syntax Visualizer
◦ Il faut beaucoup d’éléments pour
initialiser un objet
▫ VariableDeclarationSyntax
▫ LocalVariableDeclarationSyntax
▫ Equ...
Valider le type d’une syntaxe (démo)
5. Bâtir son premier analyzer en C#
o Node: SyntaxNode
 Noued (s) spécifié dans l’analyse
o Semantic Model: SemanticModel
 Garde en mémoire (cache) les symb...
Always Use Var Diagnostic Analyzer
(démo)
6. Qu'est-ce qu'un code fix provider ?
o Les raisons pour implémenter cet analyzer
 Améliore la lisibilité
 Rend le code plus uniforme
 Assez facile à impléme...
Code fix provider
Exploite le Diagnostic Analyzer
Refactor le “mauvais” code
Manière rapide de corriger une erreur
Don...
Always Use Var Code Fix Provider
(démo)
7. Les pièges à éviter en faisant de l’analyse
 Lorsqu’il s’agit d’une declaration
o GetDeclaredSymbol <- SemanticModel
 Classe
 Enum
 Variable (locale, champs, prop...
 Outil très puissant
 Valide rapidement ce qui faut
o Symbol
o SyntaxNode
o Trivia
o Token
Ne pas employer Syntax Visual...
◦ Préférable de développer en TDD
◦ Tenter de penser aux edge cases
▫ Les plus susceptibles de briser votre logique
◦ Rédu...
◦ À utiliser dans de rares circonstances
▫ MetadataName
▫ typeof
▫ Retrouver l'objet TypeInfo avec SemanticModel.GetTypeIn...
◦ Les patrons GoF peuvent procurer de
bonnes façons de refactorer le code
▫ Stratégie
▫ Template
▫ Visiteur
 Walker
Se re...
8. Q & A
1. https://github.com/dotnet/roslyn
2. http://www.infoworld.com/article/2621132/microsoft-net/microsoft-s-roslyn--reinvent...
Prochain SlideShare
Chargement dans…5
×

Kevin Avignon: Roslyn - La plateforme de compilation .NET

601 vues

Publié le

4 mai 2015
Groupe .NET/ASP.NET

Sujets: Roslyn - La plateforme de compilation .NET
Conférencier: Kevin Avignon

Roslyn est la nouvelle plateforme .NET de compilation créé par Microsoft. En exploitant Roslyn, il devient nettement plus facile de traverser un fichier source (.cs ou .vb) et instaurer de nouvelles règles d'affaires ou de validation comme il était fait avec FxCop. Un des nombreux bienfaits de Roslyn, c'est que les règles d'affaires développer en C# ou VB.NET fonctionnent autant dans un langage que dans l'autre.

Plan de la présentation:
- Qu'est-ce que Roslyn
- Quelles sont les librairies effectuant du code analysis ?
- Introduction sur le Syntax Tree et Syntax Nodes
- Comment utiliser le Syntax Visualizer
- Bâtir son premier analyzer en C#
- Qu'est-ce qu'un code fix
- Les pièges à éviter en faisant de l'analyse

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
601
Sur SlideShare
0
Issues des intégrations
0
Intégrations
14
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Kevin Avignon: Roslyn - La plateforme de compilation .NET

  1. 1. Roslyn: La plateforme de compilation .NET Kevin Avignon
  2. 2. AVANT DE COMMENCER LA PRÉSENTATION
  3. 3. Qui suis-je ?  Étudiant en génie des technologies de l’information (ÉTS)  Membre de MSDEVMTL depuis Oct. ‘14  Contributeur de la librairie Code Cracker (CC) sur Github  Bloggeur .NET sur le site www.diveintodotnet.com  Participant au Google Summer of Code 2015 avec Mono Project (Xamarin) et la librairie NRefactory  Rédacteur pour le Visual Studio Magazine
  4. 4. Plan de la présentation 1. Introduction sur Roslyn 2. Librairies utilisant Roslyn 3. Introduction sur Syntax & Symbol 4. Comment employer le Syntax Visualizer 5. Bâtir son premier analyzer en C# 6. Qu'est-ce qu'un code fix provider 7. Les pièges à éviter en faisant de l'analyse 8. Q&A
  5. 5. 1. Introduction sur Roslyn
  6. 6. Les pré-requis • Visual Studio 2015 Ultimate CTP 6 ou Visual Studio 2015 RC • .NET Compiler Platform SDK Templates • .NET Compiler Platform Syntax Visualizer • Soit en NuGet package ou VSIX
  7. 7. Qu'est-ce que Roslyn ? • Roslyn est le nom du projet Open source de Microsoft • Beaucoup plus gros qu'un simple API – Compilateur • Compiler as a Service – Scripts – Différentes stacks d'IDE – Analyse sémantique du code
  8. 8.  Un CaaS n’est pas comme IaaS ou Paas ou SaaS Considéré comme un service Windows  “Reengineering” du compilateur .NET  Expose differentes phase de la compilation du code Compiler as a Service
  9. 9. Une plateforme de compilation • Ensemble d'APIS – Bâtie au-dessus des compilateur C# & VB.NET – Permet l'inspection de code source – Permet la transformation de code source
  10. 10. ◦ Ancienne manière dite “black box” ▫ Écriture du code ▫ Écriture de tests ▫ Génération d’assemblies, dlls, etc ▫ Refactor le code selon les besoins du client La vie avant Roslyn
  11. 11. ◦ Accès à la dite black box  Information sémantique & syntaxique ◦ Les langages .NET sont en mesure de consommer et générer du code au runtime ◦ Accepter un arbre syntaxique ◦ Générer un arbre syntaxique Une nouvelle vie
  12. 12. Consommation de code (String)
  13. 13. Diagnostic Analyzer • Analyse du code source – Cible l'erreur indiquée – Envoie un message à l'utilisateur – Se concentre sur différents morceaux du fichier – Fonctionne en compilation-time
  14. 14. 2. Librairies utilisant Roslyn
  15. 15. ◦ CC0001 - Always Use Var Analyzer + refactoring ◦ CC0007 - If Return Always Analyzer + refactoring ◦ CC0008 - Object Initializer analyzer + refactoring Code Cracker (Github)
  16. 16. AP1000 - Do not use async in Run method Code analysis for Azure - Microsoft
  17. 17.  ConvertToConstant  Variable locale -> const  ConvertIfStatementToConditionalTernaryExpression  (if -> ?:)  ConvertIfStatementToNullCoalescingExpression  (if -> ??)  ForCanBeConvertedToForeach  (for -foreach) NRefactory - Mono Project
  18. 18. 3. Introduction sur Syntax & Symbol
  19. 19. ◦ Représentation syntaxique du code (.NET)  Produit par le compilateur ◦ Construit par divers éléments  Syntax nodes  Syntax tokens  Syntax trivia L’arbre syntaxique
  20. 20. ◦ Nodes (noeuds): Élements principaux de l’arbre syntaxique  Représente une multitude de construction syntaxique ObjectCreationExpressionSyntax, InvocationExpressionSyntax,etc  token et trivia dépendent du noeud courant  Ne dépendent pas d’un langage spécifique Syntax Node - I
  21. 21. o Se définit avec un span de character  TextSpan : [Début, Longueur]  Ne prend pas en compte le trivia o Un noeud a connaissance de ces enfants & descendants  IEnumerable<SyntaxNode> Syntax Node - II
  22. 22.  Syntax Token – Représente des petits fragments de code – Keywords (int, lock, abstract) – Identifiants (noms de variables • Syntax Trivia – Représente le trivia dans l'arbre syntaxique • End of line trivia • Whitespace trivia Syntax Tokens & Syntax Trivia
  23. 23. ISymbol & ITypeSymbol • ISymbol – Représentation dans l'arbre syntaxique • namespace, classe, struct – Information sur les noeuds exposée par le compilateur – Permet de valider le type d'un noeud • ITypeSymbol – Représentation de l'information d'implémentation – Accès aux bases type d'un noeud – Accès aux interfaces implémentées par un noeud
  24. 24. 4. Comment employer le Syntax Visualizer
  25. 25. ◦ Il faut beaucoup d’éléments pour initialiser un objet ▫ VariableDeclarationSyntax ▫ LocalVariableDeclarationSyntax ▫ EqualsClauseSyntax ▫ ObjectCreationExpressionSyntax ▫ Possiblement AnonymousExpressionSyntax L'initialisation d'un objet
  26. 26. Valider le type d’une syntaxe (démo)
  27. 27. 5. Bâtir son premier analyzer en C#
  28. 28. o Node: SyntaxNode  Noued (s) spécifié dans l’analyse o Semantic Model: SemanticModel  Garde en mémoire (cache) les symbols locaux  Résolver un symbol en runtime  Information sémantique concernant les noeuds dans l’arbre o ReportDiagnostic: Action<Diagnostic>  DiagnosticDescriptor  Rule  Location SyntaxNodeAnalysisContext struct
  29. 29. Always Use Var Diagnostic Analyzer (démo)
  30. 30. 6. Qu'est-ce qu'un code fix provider ?
  31. 31. o Les raisons pour implémenter cet analyzer  Améliore la lisibilité  Rend le code plus uniforme  Assez facile à implémenter o Fonctionnement 1. Rechercher tous les local variables 2. Valider celles de type “var” 3. Envoyer une erreur si jamais != var Always use var for local variables
  32. 32. Code fix provider Exploite le Diagnostic Analyzer Refactor le “mauvais” code Manière rapide de corriger une erreur Donne une bonne estimation de la marche à suivre Nécéssite de manipuler l’arbre syntaxique • Ajout d'un syntax node • Délétion d'un syntax node • modification d’un syntax node
  33. 33. Always Use Var Code Fix Provider (démo)
  34. 34. 7. Les pièges à éviter en faisant de l’analyse
  35. 35.  Lorsqu’il s’agit d’une declaration o GetDeclaredSymbol <- SemanticModel  Classe  Enum  Variable (locale, champs, propriété, anonyme)  Interface  Struct  Sinon  GetSymbolInfo <- SemanticModel Résolver un symbol
  36. 36.  Outil très puissant  Valide rapidement ce qui faut o Symbol o SyntaxNode o Trivia o Token Ne pas employer Syntax Visualizer
  37. 37. ◦ Préférable de développer en TDD ◦ Tenter de penser aux edge cases ▫ Les plus susceptibles de briser votre logique ◦ Réduction du temps en QA Ne pas faire de unit tests (TDD)
  38. 38. ◦ À utiliser dans de rares circonstances ▫ MetadataName ▫ typeof ▫ Retrouver l'objet TypeInfo avec SemanticModel.GetTypeInfo() ◦ Effet sur la performance de l’analyzer ▫ Retraverse l’arbre à chaque invocation pour créer un string ▫ Ne place aucune information en cache. Employer la méthode ToDisplayString()
  39. 39. ◦ Les patrons GoF peuvent procurer de bonnes façons de refactorer le code ▫ Stratégie ▫ Template ▫ Visiteur  Walker Se refamiliariser avec GoF
  40. 40. 8. Q & A
  41. 41. 1. https://github.com/dotnet/roslyn 2. http://www.infoworld.com/article/2621132/microsoft-net/microsoft-s-roslyn--reinventing-the-compiler-as-we- know-it.html 3. http://www.i-programmer.info/professional-programmer/i-programmer/7154-c-guru-an-interview-with-eric- lippert.html 4. http://davefancher.com/2014/11/12/i-can-analyze-code-and-so-can-you/ 5. http://www.dreamincode.net/forums/blog/217/entry-4754-wrote-my-first-roslyn-diagnostic-and-code-fix-today/ (VB.NET Analyzer + Code Fix) 6. http://blog.jetbrains.com/dotnet/2014/04/10/resharper-and-roslyn-qa/ 7. https://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2293 8. https://channel9.msdn.com/coding4fun/blog/The-future-of-NET-today-The-NET-Compiler-Platform 9. https://msdn.microsoft.com/en-us/magazine/dn904670.aspx Sources

×